From 0f15a2e7020c461dbc4931de74d5fa481586cf04 Mon Sep 17 00:00:00 2001 From: jaeyeol lee Date: Fri, 16 May 2014 17:25:49 +0900 Subject: [PATCH] DATABIND: Add a setTarget Dialog Change-Id: Ie88e701ac2a270c91af7b09e5a5037c6ed3e5947 Signed-off-by: jaeyeol lee --- .../gef/policies/DesignerXYLayoutEditPolicy.java | 39 +-- .../views/databinding/DataBindingDnDManager.java | 39 +-- .../ui/views/databinding/DataBindingPage.java | 54 +++- .../databinding/DataBindingTooltipParser.java | 92 ++++++- .../views/databinding/actions/GetSourceAction.java | 205 +++------------ .../views/databinding/actions/SetTargetAction.java | 192 +++----------- .../ui/views/databinding/dialog/SetTargetPage.java | 288 +++++++++++++++++++++ .../ui/views/databinding/model/BindingInfo.java | 28 ++ 8 files changed, 520 insertions(+), 417 deletions(-) create mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/dialog/SetTargetPage.java create mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/model/BindingInfo.java diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/policies/DesignerXYLayoutEditPolicy.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/policies/DesignerXYLayoutEditPolicy.java index 6fc6f0b..ff449c0 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/policies/DesignerXYLayoutEditPolicy.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/policies/DesignerXYLayoutEditPolicy.java @@ -182,7 +182,7 @@ public class DesignerXYLayoutEditPolicy extends HoverViewerXYLayoutEditPolicy { final String value = list.get(i).getValue(); final String displayName = list.get(i).getDisplayName(); if ((displayName != null) && (!displayName.isEmpty())) { - item.setText(displayName); + item.setText(value + "[" + displayName + "]"); } else { item.setText(value); } @@ -190,7 +190,7 @@ public class DesignerXYLayoutEditPolicy extends HoverViewerXYLayoutEditPolicy { item.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { String str = targetPart.getProperty(BuilderConstants.ATTRIBUTE_DATA_BIND).getValue(); - final String info = makeInfoString(targetPart, property2, displayName, value, str); + final String info = DataBindingTooltipParser.makeInfoString(targetPart, property2.getValue(), displayName, value, str); command = new SetPartPropertyCommand(targetPart, BuilderConstants.ATTRIBUTE_DATA_BIND, info); @@ -216,41 +216,6 @@ public class DesignerXYLayoutEditPolicy extends HoverViewerXYLayoutEditPolicy { return command; } - - private String makeInfoString(Part targetPart, PartProperty property2, String displayName, String value, String str) { - String string = ""; - - if ((str != null) && (!str.isEmpty())) { - Map bindingInfos = DataBindingTooltipParser.parseToMap(str); - - if (bindingInfos.containsKey(value)) { - bindingInfos.remove(value); - } else if (bindingInfos.containsKey("attr-"+displayName)) { - bindingInfos.remove("attr-"+displayName); - } - - if ((displayName != null) && (!displayName.isEmpty())) { - bindingInfos.put("attr-"+displayName, property2.getValue()); - } else { - bindingInfos.put(value, property2.getValue()); - } - - string = DataBindingTooltipParser.makeStringFromMap(bindingInfos); - } else { - if ((displayName != null) && (!displayName.isEmpty())) { - string = value + ": { " + displayName + ": " + property2.getValue() + " }"; - } else { - if (targetPart.getDescriptorId().equals("tizen.listitem")) { - string = value + ": " + property2.getValue() + BuilderConstants.DATABINDING_ARRAYITEM_VALUE_SUFFIX; - } else { - string = value + ": " + property2.getValue(); - } - } - } - - return string; - } - private boolean hasProperty(EditPart editPart, String name) { if (editPart == null) { return false; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingDnDManager.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingDnDManager.java index 0e41498..a377be2 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingDnDManager.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingDnDManager.java @@ -96,26 +96,7 @@ public class DataBindingDnDManager { }); } - /** - * Creates a view model information. - * - * @param treeItem - * @return view model information - */ - private static String makeViewModelInfo(TreeItem treeItem) { - String str = ""; - while ((treeItem.getParentItem() != null)) { - if (str.isEmpty()) { - str = treeItem.getText(); - } else { - str = treeItem.getText() + "." + str; - } - treeItem = treeItem.getParentItem(); - } - TreeItemData treeItemData = (TreeItemData) treeItem.getData("TREEITEMDATA"); - str = treeItemData.getOriginModelName() + "." + str; - return str; - } + /** * Adds a drag and drop listener to the view model tree. @@ -152,7 +133,6 @@ public class DataBindingDnDManager { event.doit = true; dragSourceItem[0] = selection[0]; // TODO multiselect TreeItemData treeItemData = (TreeItemData) selection[0].getData("TREEITEMDATA"); - String viewModelInfo; String dataType = null; if ((treeItemData != null) && (treeItemData.getObjectType() != null) @@ -160,16 +140,8 @@ public class DataBindingDnDManager { dataType = treeItemData.getObjectType(); } - if ((selection[0].getParentItem() != null) - && (selection[0].getParentItem().getData("TREEITEMDATA") != null) - && (((TreeItemData) selection[0].getParentItem() - .getData("TREEITEMDATA")).getObjectType() != null) - && (((TreeItemData) selection[0].getParentItem() - .getData("TREEITEMDATA")).getObjectType().equals("Array"))) { - viewModelInfo = BuilderConstants.DATABINDING_ARRAYITEM_VALUE_PREFIX + selection[0].getText(); - } else { - viewModelInfo = makeViewModelInfo(selection[0]); - } + String viewModelInfo = DataBindingTooltipParser.makeViewModelInfo(selection[0]); + // FIXME "id" DataBindingTemplate dataBindingTemplate = new DataBindingTemplate("id", viewModelInfo, dataType); @@ -193,11 +165,6 @@ public class DataBindingDnDManager { dragSourceItem[0].dispose(); } - DataBindingPage dataBindingPage = getDataBindingPage(dataBindingView); - if (dataBindingPage != null) { - dataBindingPage.refresh(); - } - dragSourceItem[0] = null; TemplateTransfer.getInstance().setTemplate(null); } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingPage.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingPage.java index 961864f..9c8345c 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingPage.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingPage.java @@ -141,9 +141,9 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { private List pageList = new ArrayList(); private IAction undoHandler; private IAction redoHandler; - + private Part selectedPart = null; private boolean showBindInfo = false; - + // private List itemPath; public DataBindingPage(DataBindingView dataBindingView) { @@ -312,12 +312,12 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { if (modelValue.startsWith(BuilderConstants.DATABINDING_ARRAYITEM_VALUE_PREFIX)) { String parentPropertyValue = getParentPropertyValue(part, modelValue); if (parentPropertyValue != null) { - addInfoTableItem(part, parentPropertyValue, part.getIdPropertyValue(), + addInfoTableItem(part, parentPropertyValue, part.getOwnerPage().getIdPropertyValue() + "." + part.getIdPropertyValue(), key); break; } } else { - addInfoTableItem(part, modelValue, part.getIdPropertyValue(), key); + addInfoTableItem(part, modelValue, part.getOwnerPage().getIdPropertyValue() + "." + part.getIdPropertyValue(), key); } } } @@ -765,6 +765,14 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { getCommandStackFromPageDesigner().execute(command); } } + + public void setBindingInfoToPart(Part targetPart, String viewModelInfo, String infoDisplayName, + String infoValue) { + String str = targetPart.getProperty(BuilderConstants.ATTRIBUTE_DATA_BIND).getValue(); + final String info = DataBindingTooltipParser.makeInfoString(targetPart, viewModelInfo, infoDisplayName, infoValue, str); + getCommandStackFromPageDesigner().execute(new SetPartPropertyCommand(targetPart, BuilderConstants.ATTRIBUTE_DATA_BIND, info)); + + } /** * Check the duplicated binding information. @@ -1445,6 +1453,16 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { return projectManager; } + + /** + * Gets a page designer + * + * @return page designer + */ + public PageDesigner getPageDesigner() { + return pageDesigner; + + } private CommandStack getCommandStackFromPageDesigner() { // if (dataBindingView.getSite().getPage().getActiveEditor() instanceof PageDesigner) { @@ -1476,8 +1494,23 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { getActionRegistryFromPageDesigner().getAction(ActionFactory.REDO.getId()); } - pageDesigner.getAppManager().getBindingDataSet().addBindingDataListener(this); - + if (pageDesigner != null) { + pageDesigner.getAppManager().getBindingDataSet().addBindingDataListener(this); + + //TODO addListener only current page + List pageData = pageDesigner.getAppManager().getPages(); + for (int i = 0; i < pageData.size(); i++) { + List childParts = pageData.get(i).getRootPart().getChildren(); + for (Part childPart : childParts) { + if (childPart.getOwnerPage() != null) { + if (!pageList.contains(childPart.getOwnerPage())) { + pageList.add(childPart.getOwnerPage()); + addListeners(childPart.getOwnerPage()); + } + } + } + } + } } public PageDesigner getInput() { @@ -1500,6 +1533,7 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { if (editPart.getModel() instanceof Part) { Part model = (Part) editPart.getModel(); selModels.add(model); + setSelectedPart(model); } } } @@ -1513,6 +1547,14 @@ public class DataBindingPage extends Page implements IBindingDataSetListener { } } } + + public Part getSelectedPart() { + return selectedPart; + } + + public void setSelectedPart(Part selectedPart) { + this.selectedPart = selectedPart; + } public void updateDataSourceMenus() { if (removeDataSourceAction != null) { diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingTooltipParser.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingTooltipParser.java index 2e17d65..22c9b31 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingTooltipParser.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/DataBindingTooltipParser.java @@ -7,9 +7,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.activation.CommandInfo; - +import org.eclipse.swt.widgets.TreeItem; +import org.tizen.webuibuilder.BuilderConstants; +import org.tizen.webuibuilder.model.Part; import org.tizen.webuibuilder.ui.views.databinding.model.DataBindingTooltipData; +import org.tizen.webuibuilder.ui.views.databinding.model.TreeItemData; public class DataBindingTooltipParser { @@ -137,14 +139,14 @@ public class DataBindingTooltipParser { } private static void put(Map bindingInfos, String string) { - String[] infos = string.split(": "); - if (infos.length == 2) { - if ((infos[0] != null) && (!infos[0].isEmpty())) { - if ((infos[1] != null) && (!infos[1].isEmpty())) { - bindingInfos.put(infos[0], infos[1]); - } - } - } + String[] infos = string.split(": "); + if (infos.length == 2) { + if ((infos[0] != null) && (!infos[0].isEmpty())) { + if ((infos[1] != null) && (!infos[1].isEmpty())) { + bindingInfos.put(infos[0], infos[1]); + } + } + } } public static String makeStringFromMap(Map bindingInfos) { @@ -174,4 +176,74 @@ public class DataBindingTooltipParser { return string; } + + public static String makeInfoString(Part targetPart, String viewModelInfo, String displayName, String value, String str) { + String string = ""; + + if ((str != null) && (!str.isEmpty())) { + Map bindingInfos = DataBindingTooltipParser.parseToMap(str); + + if (bindingInfos.containsKey(value)) { + bindingInfos.remove(value); + } else if (bindingInfos.containsKey("attr-"+displayName)) { + bindingInfos.remove("attr-"+displayName); + } + + if ((displayName != null) && (!displayName.isEmpty())) { + bindingInfos.put("attr-"+displayName, viewModelInfo); + } else { + bindingInfos.put(value, viewModelInfo); + } + + string = DataBindingTooltipParser.makeStringFromMap(bindingInfos); + } else { + if ((displayName != null) && (!displayName.isEmpty())) { + string = value + ": { " + displayName + ": " + viewModelInfo + " }"; + } else { + if (targetPart.getDescriptorId().equals("tizen.listitem")) { + string = value + ": " + viewModelInfo + BuilderConstants.DATABINDING_ARRAYITEM_VALUE_SUFFIX; + } else { + string = value + ": " + viewModelInfo; + } + } + } + + return string; + } + + /** + * Creates a view model information. + * + * @param treeItem + * @return view model information + */ + public static String makeViewModelInfoString(TreeItem treeItem) { + String str = ""; + while ((treeItem.getParentItem() != null)) { + if (str.isEmpty()) { + str = treeItem.getText(); + } else { + str = treeItem.getText() + "." + str; + } + treeItem = treeItem.getParentItem(); + } + TreeItemData treeItemData = (TreeItemData) treeItem.getData("TREEITEMDATA"); + str = treeItemData.getOriginModelName() + "." + str; + return str; + } + + public static String makeViewModelInfo(TreeItem treeItem) { + String viewModelInfo; + if ((treeItem.getParentItem() != null) + && (treeItem.getParentItem().getData("TREEITEMDATA") != null) + && (((TreeItemData) treeItem.getParentItem() + .getData("TREEITEMDATA")).getObjectType() != null) + && (((TreeItemData) treeItem.getParentItem() + .getData("TREEITEMDATA")).getObjectType().equals("Array"))) { + viewModelInfo = BuilderConstants.DATABINDING_ARRAYITEM_VALUE_PREFIX + treeItem.getText(); + } else { + viewModelInfo = DataBindingTooltipParser.makeViewModelInfoString(treeItem); + } + return viewModelInfo; + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/GetSourceAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/GetSourceAction.java index ea9fc13..7cb8cdc 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/GetSourceAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/GetSourceAction.java @@ -36,19 +36,16 @@ import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.part.IPage; -import org.tizen.webuibuilder.model.Part; -import org.tizen.webuibuilder.model.page.PageData; -import org.tizen.webuibuilder.model.project.ProjectManager; +import org.tizen.webuibuilder.ui.editor.PageDesigner; import org.tizen.webuibuilder.ui.views.databinding.DataBindingPage; import org.tizen.webuibuilder.ui.views.databinding.DataBindingView; +import org.tizen.webuibuilder.ui.views.databinding.model.BindingData; public class GetSourceAction extends SelectionAction { protected DataBindingView view; - private ProjectManager projectManager; - List idList = new ArrayList(); - List partList = new ArrayList(); + private PageDesigner pageDesigner; /** * Constructor. @@ -70,60 +67,32 @@ public class GetSourceAction extends SelectionAction { return false; } - //return true; - return false; + if (getSelectedTreeItem() == null) { + return false; + } + + return true; } public void refresh() { setEnabled(calculateEnabled()); } - // private CommandStack getCommandStackFromPageDesigner() { - // PageDesigner pageDesigner = - // (PageDesigner)view.getSite().getPage().getActiveEditor(); - // return (CommandStack) pageDesigner.getAdapter(CommandStack.class); - // } - - private void makeWidgetList() { - List subSubPart = null; - List part = null; - - idList.clear(); - partList.clear(); - - IPage page = view.getCurrentPage(); - if (!(page instanceof DataBindingPage)) { - return; - } - DataBindingPage dataBindingPage = (DataBindingPage) page; - projectManager = dataBindingPage.getProjectManager(); - List pageData = projectManager.getDefaultAppManager().getPages(); - - for (int i = 0; i < pageData.size(); i++) { - part = pageData.get(i).getRootPart().getChildren(); - for (int j = 0; j < part.size(); j++) { - List subPart = part.get(j).getChildren(); - for (int k = 0; k < subPart.size(); k++) { - subSubPart = subPart.get(k).getChildren(); - for (int l = 0; l < subSubPart.size(); l++) { - idList.add(subSubPart.get(l).getIdPropertyValue()); - partList.add(subSubPart.get(l)); - } - } - } - } - } - private TreeItem getSelectedTreeItem() { IPage page = view.getCurrentPage(); if (!(page instanceof DataBindingPage)) { return null; } DataBindingPage dataBindingPage = (DataBindingPage) page; + Tree tree = dataBindingPage.getViewModelTree(); TreeItem[] treeItem = tree.getSelection(); + + if ((treeItem == null) || (treeItem.length < 1)) { + return null; + } - if (treeItem[0].getParentItem() == null) { + if (treeItem[0].getParentItem() != null) { return null; } @@ -131,138 +100,40 @@ public class GetSourceAction extends SelectionAction { return treeItem[0]; } - /* - * private Tree getTree() { IPage page = view.getCurrentPage(); if (!(page instanceof - * DataBindingPage)) { return null; } DataBindingPage dataBindingPage = (DataBindingPage) page; - * Tree tree = dataBindingPage.getTree(); - * - * return tree; } - * - * - * //TODO private static String readAll(Reader rd) throws IOException { StringBuilder sb = new - * StringBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return - * sb.toString(); } - * - * - * public static JSONObject readJsonFromUrl(String url) throws IOException { InputStream is = - * null; try { is = new URL(url).openStream(); //BufferedReader rd = new BufferedReader(new - * InputStreamReader(is, Charset.forName("EUC-KR"))); BufferedReader rd = new BufferedReader(new - * InputStreamReader(is, "utf-8")); String jsonText = readAll(rd); //JSONObject json = new - * JSONObject(jsonText); JSONObject json = (JSONObject)JSONValue.parse(jsonText); return json; } - * finally { is.close(); } } - */ - - /* - * public Object getJSON(String json, String searchWord, Map resultMap) { //Json - * DATA 전 영역 탐사 및 원하는 데이터를 Map 형태로 리턴시킴 JSONObject jsonObj = null; try { jsonObj = new - * JSONObject(json); Iterator itr = jsonObj.keys(); int countJSON = 0; while (itr.hasNext()) { - * - * String key = (String)itr.next(); Object value = jsonObj.get(key); String selecter = - * (String)value.toString(); - * - * if(key.equals(searchWord)){ // 조건에 걸린 word 값을 찾아서 map 형태로 리턴 resultMap.put(key, value); } - * - * if(selecter != null && !selecter.equals("") && !selecter.equals("null") && jsonObj.get(key) - * instanceof JSONArray){ if((JSONArray)jsonObj.get(key) instanceof JSONArray){ JSONArray - * jsonArray = (JSONArray)jsonObj.get(key); //this.logger.debug(jsonArray.toString()); for(int i - * = 0 ; i 0) { for (int j=0; j < jsonTest.size(); j++) { Object[] obj = - * jsonTest.keySet().toArray(); makeDataModel(jsonTest, (String)obj[j], treeItem, j); //TODO // - * subTreeItem.setData((String)json.get((String)obj[j])); } } else { - * - * //TODO treeItem.setData((String)json.get(str)); } } else { TreeItem treeItem; if - * (parentTreeItem == null) { treeItem = new TreeItem(getTree(), index); } else { treeItem = new - * TreeItem(parentTreeItem, index); } treeItem.setText((String)str); - * treeItem.setData(json.get(str)); } } - */ - @Override public void run() { - - makeWidgetList(); - + IPage page = view.getCurrentPage(); + if (!(page instanceof DataBindingPage)) { + return; + } + DataBindingPage dataBindingPage = (DataBindingPage) page; + pageDesigner = dataBindingPage.getPageDesigner(); + if (pageDesigner == null) { + return; + } + + TreeItem treeItem = getSelectedTreeItem(); + if (treeItem == null) { + return; + } + + List sources = pageDesigner.getAppManager().getDataSources(); + List sourceNames = new ArrayList(); + for (BindingData source : sources) { + sourceNames.add(source.getSourceName()); + } ElementListSelectionDialog dialog = new ElementListSelectionDialog(Display.getCurrent().getActiveShell(), new LabelProvider()); - dialog.setElements(idList.toArray()); - dialog.setTitle("Which operating system are you using"); - // User pressed cancel + dialog.setElements(sourceNames.toArray()); + dialog.setTitle(""); + if (dialog.open() != Window.OK) { return; } Object[] result = dialog.getResult(); - for (int i = 0; i < partList.size(); i++) { - if (partList.get(i).getIdPropertyValue().equals((String) result[0])) { - // getCommandStackFromPageDesigner().execute(new - // SetPartPropertyCommand(partList.get(i), "data-bind", - // "value: MYOBJ.models.model0.temp", false)); - TreeItem treeItem = getSelectedTreeItem(); - if (treeItem == null) { - return; - } - treeItem.setData(partList.get(i).getPropertyValue("text")); - - IPage page = view.getCurrentPage(); - if (!(page instanceof DataBindingPage)) { - return; - } - DataBindingPage dataBindingPage = (DataBindingPage) page; - //dataBindingPage.updateModel(); - } - } - - /* - * InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(), "", "Enter URL", - * "http://apis.daum.net/search/blog?apikey=DAUM_SEARCH_DEMO_APIKEY&q=love&result=20&pageno=1&output=json" - * , null); - * - * if (dlg.open() == Window.OK) { // User clicked OK; update the label with the input - * - * IPage page = view.getCurrentPage(); if (!(page instanceof DataBindingPage)) { return; } - * DataBindingPage dataBindingPage = (DataBindingPage) page; TreeItem item = - * dataBindingPage.addTreeItem2(); item.setData("URL", dlg.getValue()); - * - * try { JSONObject json = readJsonFromUrl(dlg.getValue()); - * - * Object[] str = json.keySet().toArray(); for (int i=0; i < str.length; i++) { - * makeDataModel(json, (String)str[i], item, 0); //jsonTest.getClass(); } - * - * } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } - * - * dataBindingPage.updateModel(); } - */ - + dataBindingPage.setDataSourceToViewModel(pageDesigner.getAppManager().getDataSource(result[0].toString()), pageDesigner.getAppManager().getViewModel(treeItem.getText())); } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/SetTargetAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/SetTargetAction.java index 2d00616..ac66e47 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/SetTargetAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/actions/SetTargetAction.java @@ -23,38 +23,26 @@ package org.tizen.webuibuilder.ui.views.databinding.actions; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.gef.commands.CommandStack; import org.eclipse.gef.ui.actions.SelectionAction; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.part.IPage; -import org.tizen.webuibuilder.BuilderConstants; -import org.tizen.webuibuilder.gef.commands.SetPartPropertyCommand; import org.tizen.webuibuilder.model.Part; -import org.tizen.webuibuilder.model.descriptors.ConstantDescriptor; -import org.tizen.webuibuilder.model.page.PageData; -import org.tizen.webuibuilder.model.project.ProjectManager; -import org.tizen.webuibuilder.ui.editor.PageDesigner; import org.tizen.webuibuilder.ui.views.databinding.DataBindingPage; +import org.tizen.webuibuilder.ui.views.databinding.DataBindingTooltipParser; import org.tizen.webuibuilder.ui.views.databinding.DataBindingView; +import org.tizen.webuibuilder.ui.views.databinding.dialog.SetTargetPage; +import org.tizen.webuibuilder.ui.views.databinding.model.BindingInfo; public class SetTargetAction extends SelectionAction { protected DataBindingView view; - private ProjectManager projectManager; - List idList = new ArrayList(); - List partList = new ArrayList(); - + private DataBindingPage dataBindingPage; + /** * Constructor. * @@ -74,185 +62,67 @@ public class SetTargetAction extends SelectionAction { if (view == null) { return false; } + + if (getSelectedTreeItem() == null) { + return false; + } - //return true; - return false; + return true; } public void refresh() { setEnabled(calculateEnabled()); } - // FIXME remove? move to databindingPage? - private CommandStack getCommandStackFromPageDesigner() { - PageDesigner pageDesigner = (PageDesigner) view.getSite().getPage().getActiveEditor(); - return (CommandStack) pageDesigner.getAdapter(CommandStack.class); - } - - private void makeWidgetList() { - List part = null; - - idList.clear(); - partList.clear(); - - IPage page = view.getCurrentPage(); - if (!(page instanceof DataBindingPage)) { - return; - } - DataBindingPage dataBindingPage = (DataBindingPage) page; - projectManager = dataBindingPage.getProjectManager(); - List pageData = projectManager.getDefaultAppManager().getPages(); - - for (int i = 0; i < pageData.size(); i++) { - part = pageData.get(i).getRootPart().getChildren(); - - makeSubWidgetList(part, idList, partList); - } - } - - private void makeSubWidgetList(List part, List idList2, List partList2) { - - if (part.size() == 0) { - return; - } else { - for (int j = 0; j < part.size(); j++) { - idList.add(part.get(j).getIdPropertyValue()); - partList.add(part.get(j)); - List subPart = part.get(j).getChildren(); - makeSubWidgetList(subPart, idList, partList); - } - } - } - - private DataBindingPage getDataBindingPage() { + private TreeItem getSelectedTreeItem() { IPage page = view.getCurrentPage(); if (!(page instanceof DataBindingPage)) { return null; } - return (DataBindingPage) page; - } - - private TreeItem getSelectedTreeItem() { - DataBindingPage dataBindingPage = getDataBindingPage(); - if (dataBindingPage == null) { - return null; - } + DataBindingPage dataBindingPage = (DataBindingPage) page; Tree tree = dataBindingPage.getViewModelTree(); TreeItem[] treeItem = tree.getSelection(); + + if ((treeItem == null) || (treeItem.length < 1)) { + return null; + } if (treeItem[0].getParentItem() == null) { return null; } - // 0 .. multi select return treeItem[0]; } - private void addInfoTableItem(Part part, String modelName, String widgetName, - String bindingInfoStr) { - - DataBindingPage dataBindingPage = getDataBindingPage(); - if (dataBindingPage != null) { - if (dataBindingPage.checkDuplicatedTableItem(modelName, widgetName, bindingInfoStr)) { - dataBindingPage.addInfoTableItem(part, modelName, widgetName, bindingInfoStr); - //dataBindingPage.updateModel(); - } - } - } - @Override public void run() { IPage page = view.getCurrentPage(); if (!(page instanceof DataBindingPage)) { return; } + dataBindingPage = (DataBindingPage) page; TreeItem treeItem = getSelectedTreeItem(); if (treeItem == null) { return; } - - makeWidgetList(); - - ElementListSelectionDialog dialog = - new ElementListSelectionDialog(Display.getCurrent().getActiveShell(), - new LabelProvider()); - dialog.setElements(idList.toArray()); - dialog.setTitle("Which operating system are you using"); - // User pressed cancel - if (dialog.open() != Window.OK) { + + SetTargetPage dialog = new SetTargetPage(Display.getCurrent().getActiveShell(), dataBindingPage); + BindingInfo bindingInfo = dialog.open(); + + if (bindingInfo == null) { return; } - Object[] result = dialog.getResult(); - - for (int i = 0; i < partList.size(); i++) { - - // TODO partList.get(i).getPartId() - if (partList.get(i).getIdPropertyValue().equals(result[0].toString())) { - - // treeItem.getText(); //temp - // treeItem.getParentItem().getText(); //model - - String str = makePropertyValue(treeItem); - - // FIXME testCode - List enums = - partList.get(i).getPartDescriptor().getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND) - .getTypeDescriptor().getAvailableConstant(); - // String defaultBindingType = - // partList.get(i).getPartDescriptor().getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND).getDefaultValue(); - - // TODO 0 == defaultvalue - String defaultBindingType = enums.get(0).getValue(); - String bindingInfoStr; - if ((partList.get(i).getParent() != null) - && (partList.get(i).getParent().getPartDescriptor() - .getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND) != null) - && (partList.get(i).getParent().getPartDescriptor() - .getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND).getTypeDescriptor() - .getAvailableConstant().get(0).getValue().equals("foreach"))) { - bindingInfoStr = defaultBindingType + ": $data." + treeItem.getText(); - } else { - bindingInfoStr = defaultBindingType + ": " + str; - } - - //TODO add -> refresh - addInfoTableItem(partList.get(i), str, result[0].toString(), bindingInfoStr); - getCommandStackFromPageDesigner() - .execute(new SetPartPropertyCommand(partList.get(i), BuilderConstants.ATTRIBUTE_DATA_BIND, - bindingInfoStr, false)); - - /* - * //FIXME //move this code if( (treeItem.getData("TYPE") != null) && - * (treeItem.getData("TYPE").equals("Array")) ) { - * getCommandStackFromPageDesigner().execute(new - * SetPartPropertyCommand(partList.get(i), BuilderConstants.ATTRIBUTE_DATA_BIND, - * "foreach: MYOBJ.models."+str, false)); } else if( - * (treeItem.getParentItem().getData("TYPE") != null) && (treeItem - * .getParentItem().getData("TYPE").equals("Array")) ) { - * getCommandStackFromPageDesigner().execute(new - * SetPartPropertyCommand(partList.get(i), BuilderConstants.ATTRIBUTE_DATA_BIND, "text: "+treeItem.getText(), - * false)); } else { getCommandStackFromPageDesigner().execute(new - * SetPartPropertyCommand(partList.get(i), BuilderConstants.ATTRIBUTE_DATA_BIND, bindingInfoStr, false)); } - */ - } - } - - } - - private String makePropertyValue(TreeItem treeItem) { - String str = ""; - while ((treeItem.getParentItem() != null)) { - if (str == "") { - str = treeItem.getText(); - } else { - str = treeItem.getText() + "." + str; - } - treeItem = treeItem.getParentItem(); + + Part targetPart = bindingInfo.getTargetPart(); + String infoValue = bindingInfo.getInfoValue(); + String infoDisplayName = bindingInfo.getInfoDisplayName(); + + String viewModelInfo = DataBindingTooltipParser.makeViewModelInfo(treeItem); + + if (targetPart != null) { + dataBindingPage.setBindingInfoToPart(targetPart, viewModelInfo, infoDisplayName, infoValue); } - str = treeItem.getData("DEFAULTTEXT") + "." + str; - return str; } - } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/dialog/SetTargetPage.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/dialog/SetTargetPage.java new file mode 100644 index 0000000..574bef9 --- /dev/null +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/dialog/SetTargetPage.java @@ -0,0 +1,288 @@ +package org.tizen.webuibuilder.ui.views.databinding.dialog; + +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Dialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; +import org.tizen.webuibuilder.BuilderConstants; +import org.tizen.webuibuilder.model.Part; +import org.tizen.webuibuilder.model.descriptors.ConstantDescriptor; +import org.tizen.webuibuilder.model.page.PageData; +import org.tizen.webuibuilder.ui.views.databinding.DataBindingPage; +import org.tizen.webuibuilder.ui.views.databinding.model.BindingInfo; +import org.tizen.webuibuilder.utility.ResourceManager; + +public class SetTargetPage extends Dialog { + + private Shell shell; + private SashForm sashForm; + private DataBindingPage dataBindingPage; + private Tree widgetTree; + private Tree bindingInfoTree; + private Button okButton; + private BindingInfo bindingInfo = new BindingInfo(); + + public SetTargetPage(Shell parent, DataBindingPage dataBindingPage) { + super( parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL ); + setText( "Set Target" ); + this.dataBindingPage = dataBindingPage; + } + + /** + * Opens the dialog and returns the input + * + * @return message + */ + public BindingInfo open() { + // Create the dialog window + shell = new Shell( getParent(), SWT.TITLE | SWT.CLOSE | SWT.BORDER | SWT.RESIZE ); + shell.setText( getText() ); + //shell.setMinimumSize(400, 500); + createContents(); + shell.pack(); + + shell.open(); + Display display = getParent().getDisplay(); + while ( !shell.isDisposed() ) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + return bindingInfo; + } + + private void createContents() { + FormLayout layout = new FormLayout(); + shell.setLayout(layout); + layout.marginWidth = 5; + layout.marginHeight = 5; + + sashForm = new SashForm(shell, SWT.HORIZONTAL); + + FormData sashData = new FormData(); + sashData.top = new FormAttachment( 0, 0); + sashData.bottom = new FormAttachment(100, -35); + sashData.left = new FormAttachment(0, 0); + sashData.right = new FormAttachment(100, -5); + sashForm.setLayoutData( sashData ); + + Group widgetTreeGroup = new Group(sashForm, SWT.NONE); + Group bindingInfoGroup = new Group(sashForm, SWT.NONE); + + //sashForm.setWeights(new int[] {2, 3}); + + makeBindingInfoGroup( bindingInfoGroup ); + makeWidgetTreeGroup( widgetTreeGroup ); + + // Create the cancel button and add a handler + // so that pressing it will set input to null + Button cancelButton = new Button( shell, SWT.PUSH ); + cancelButton.setText( "CANCEL" ); + + FormData data = new FormData( 100, 30 ); + data.top = new FormAttachment( sashForm, 5 ); + data.right = new FormAttachment( 100, -5 ); + data.bottom = new FormAttachment( 100, -5 ); + + cancelButton.setLayoutData( data ); + + cancelButton.addSelectionListener( new SelectionAdapter() { + public void widgetSelected( SelectionEvent event ) { + bindingInfo = null; + shell.close(); + } + } ); + + // Create the OK button and add a handler + // so that pressing it will set input + // to the entered value + okButton = new Button( shell, SWT.PUSH ); + okButton.setText( "OK" ); + + data = new FormData( 100, 30 ); + data.top = new FormAttachment( sashForm, 5 ); + data.right = new FormAttachment( cancelButton, -5 ); + data.bottom = new FormAttachment( 100, -5 ); + + okButton.setLayoutData( data ); + okButton.setEnabled(false); + + okButton.addSelectionListener( new SelectionAdapter() { + public void widgetSelected( SelectionEvent event ) { + TreeItem[] widetTreeItem = widgetTree.getSelection(); + TreeItem[] bindingInfoTreeItem = bindingInfoTree.getSelection(); + + if ((widetTreeItem != null) && (bindingInfoTreeItem != null)) { + if ((widetTreeItem.length > 0) && (bindingInfoTreeItem.length > 0)) { + if ((widetTreeItem[0] != null) && (bindingInfoTreeItem[0] != null)) { + bindingInfo.setTargetPart((Part) widetTreeItem[0].getData("PART")); + bindingInfo.setInfoValue((String) bindingInfoTreeItem[0].getData("INFOVALUE")); + bindingInfo.setInfoDisplayName((String) bindingInfoTreeItem[0].getData("INFODISPLAYNAME")); + } + } + } + shell.close(); + } + }); + + } + + private void makeBindingInfoGroup(Group bindingInfoGroup) { + FormLayout layout = new FormLayout(); + bindingInfoGroup.setLayout(layout); + + bindingInfoTree = new Tree(bindingInfoGroup, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION ); + + bindingInfoTree.setLinesVisible(true); + //dialogTree.setHeaderVisible(true); + + FormData data = new FormData(150, 300); + data.top = new FormAttachment(0, 2); + data.left = new FormAttachment(0, 0); + data.right = new FormAttachment(100, 0); + data.bottom = new FormAttachment(100, 0); + bindingInfoTree.setLayoutData(data); + + bindingInfoGroup.layout(); + + bindingInfoTree.addMouseListener(new MouseAdapter() { + public void mouseUp(MouseEvent e) { + setVisibleToOkButton(); + } + }); + } + + private void makeWidgetTreeGroup(Group widgetTreeGroup) { + FormLayout layout = new FormLayout(); + widgetTreeGroup.setLayout(layout); + + widgetTree = new Tree(widgetTreeGroup, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION ); + + FormData data = new FormData(250, 300); + data.top = new FormAttachment(0, 2); + data.left = new FormAttachment(0, 0); + data.right = new FormAttachment(100, 0); + data.bottom = new FormAttachment(100, 0); + widgetTree.setLayoutData(data); + + makeTreeItems(widgetTree); + widgetTreeGroup.layout(); + + widgetTree.addMouseListener(new MouseAdapter() { + public void mouseUp(MouseEvent e) { + Point point = new Point(e.x, e.y); + final TreeItem treeItem = widgetTree.getItem(point); + makeBindingInfoList(treeItem); + setVisibleToOkButton(); + } + }); + } + + private void setVisibleToOkButton() { + boolean enable = false; + if ((widgetTree.getSelection() != null) && (widgetTree.getSelection().length > 0)) { + if ((bindingInfoTree.getSelection() != null) && (bindingInfoTree.getSelection().length > 0)) { + enable = true; + } + } + okButton.setEnabled(enable); + } + + private void makeBindingInfoList(TreeItem treeItem) { + if (treeItem == null) { + widgetTree.deselectAll(); + return; + } + Part part = (Part) treeItem.getData("PART"); + if (part == null) { + return; + } + + if (bindingInfoTree == null) { + return; + } + + bindingInfoTree.removeAll(); + + if (part.getPartDescriptor().getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND) == null) { + return; + } + + List list = + part.getPartDescriptor().getPropertyDescriptor(BuilderConstants.ATTRIBUTE_DATA_BIND) + .getTypeDescriptor().getAvailableConstant(); + + if ((list == null) || (list.size() <= 0)) { + return; + } + for (int i = 0; i < list.size(); i++) { + TreeItem subItem = new TreeItem(bindingInfoTree, SWT.NONE); + final String value = list.get(i).getValue(); + final String displayName = list.get(i).getDisplayName(); + subItem.setData("INFOVALUE", value); + if ((displayName != null) && (!displayName.isEmpty())) { + subItem.setText(value + "[" + displayName + "]"); + subItem.setData("INFODISPLAYNAME", displayName); + } else { + subItem.setText(value); + } + } + } + + private void makeTreeItems(Tree widgetTree) { + List pageData = dataBindingPage.getPageDesigner().getAppManager().getPages(); + List childParts = null; + + for (int i = 0; i < pageData.size(); i++) { + childParts = pageData.get(i).getRootPart().getChildren(); + makeSubWidgetList(null, childParts); + } + } + + private void makeSubWidgetList(TreeItem parentItem, List childParts) { + if (childParts.size() == 0) { + return; + } + + TreeItem subItem; + for (int i = 0; i < childParts.size(); i++) { + if (parentItem == null) { + subItem = new TreeItem(widgetTree, SWT.NONE); + } else { + subItem = new TreeItem(parentItem, SWT.NONE); + } + subItem.setText(childParts.get(i).getIdPropertyValue() + " <" + childParts.get(i).getPartDescriptor().getDisplayName()+ ">"); + subItem.setData("PART", childParts.get(i)); + String iconPath = childParts.get(i).getPartDescriptor().getIcon16(); + Image image = ResourceManager.getImage(BuilderConstants.ICON_DIR, iconPath); + subItem.setImage(image); + if ((dataBindingPage.getSelectedPart() != null) && (childParts.get(i).equals(dataBindingPage.getSelectedPart()))) { + subItem.setExpanded(true); + widgetTree.setSelection(subItem); + makeBindingInfoList(subItem); + } + + List subPart = childParts.get(i).getChildren(); + makeSubWidgetList(subItem, subPart); + } + + } + + +} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/model/BindingInfo.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/model/BindingInfo.java new file mode 100644 index 0000000..961cf67 --- /dev/null +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/ui/views/databinding/model/BindingInfo.java @@ -0,0 +1,28 @@ +package org.tizen.webuibuilder.ui.views.databinding.model; + +import org.tizen.webuibuilder.model.Part; + +public class BindingInfo { + private Part targetPart; + private String infoValue; + private String infoDisplayName; + + public Part getTargetPart() { + return targetPart; + } + public void setTargetPart(Part targetPart) { + this.targetPart = targetPart; + } + public String getInfoValue() { + return infoValue; + } + public void setInfoValue(String infoValue) { + this.infoValue = infoValue; + } + public String getInfoDisplayName() { + return infoDisplayName; + } + public void setInfoDisplayName(String infoDisplayName) { + this.infoDisplayName = infoDisplayName; + } +} \ No newline at end of file -- 2.7.4