Author: scabanovich
Date: 2008-05-29 12:47:28 -0400 (Thu, 29 May 2008)
New Revision: 8446
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/SeamPagesGuiEditor.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesElement.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesModel.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PageImpl.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesElementImpl.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesModelImpl.java
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PgExceptionImpl.java
Log:
JBIDE-1189
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/SeamPagesGuiEditor.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/SeamPagesGuiEditor.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/SeamPagesGuiEditor.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -45,7 +45,7 @@
public void dispose() {
if(model == null) return;
-// model.dispose();
+ model.dispose();
model = null;
gui.dispose();
disposeGui();
@@ -114,29 +114,6 @@
}
}
- private PagesModel getFakeModel(){
- PagesModel model = PagesFactory.eINSTANCE.createPagesModel();
-
- Link link = PagesFactory.eINSTANCE.createLink();
-
- link.setName("page1");
-
- PgException ex = PagesFactory.eINSTANCE.createPgException();
- ex.setName("Exception");
- ex.setLocation(new Point(10,100));
- ex.setSize(new Dimension(300,21));
- ex.getOutputLinks().add(link);
- model.getChildren().add(ex);
-
- Page page = PagesFactory.eINSTANCE.createPage();
- page.setName("page1");
- page.setLocation(new Point(500,150));
- page.setSize(new Dimension(100,100));
- page.getInputLinks().add(link);
- model.getChildren().add(page);
- return model;
- }
-
private PagesModel createModel() {
PagesModel model = PagesFactory.eINSTANCE.createPagesModel();
model.setData(installedProcess);
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesElement.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesElement.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesElement.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -111,4 +111,6 @@
* @generated
*/
void setData(Object value);
+
+ public void dataChanged();
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesModel.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesModel.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/PagesModel.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -14,4 +14,6 @@
public void load();
+ public void dispose();
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PageImpl.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PageImpl.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PageImpl.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -6,12 +6,16 @@
*/
package org.jboss.tools.seam.ui.pages.editor.ecore.pages.impl;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesProcessStructureHelper;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.Page;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesPackage;
@@ -163,4 +167,25 @@
return result.toString();
}
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void dataChanged() {
+ XModelObject item = getModelObject();
+ SeamPagesProcessStructureHelper h = SeamPagesProcessStructureHelper.getInstance();
+
+ setName(h.getPageTitle(item));
+ int[] shape = h.asIntArray(item, "shape");
+ if(shape != null && shape.length >= 2) {
+ setLocation(new Point(shape[0],shape[1]));
+ } else {
+ setLocation(new Point(0,0));
+ }
+ if(shape != null && shape.length >= 4) {
+ setSize(new Dimension(shape[2],shape[3]));
+ }
+
+ }
} //PageImpl
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesElementImpl.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesElementImpl.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesElementImpl.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -25,6 +25,7 @@
import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
import org.eclipse.emf.ecore.util.InternalEList;
+import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.Link;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesElement;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesPackage;
@@ -567,4 +568,24 @@
return result.toString();
}
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void dataChanged() {
+
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ protected XModelObject getModelObject() {
+ if(data instanceof XModelObject) {
+ return (XModelObject)data;
+ }
+ return null;
+ }
} //PagesElementImpl
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesModelImpl.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesModelImpl.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PagesModelImpl.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -11,9 +11,12 @@
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.event.XModelTreeEvent;
+import org.jboss.tools.common.model.event.XModelTreeListener;
import org.jboss.tools.seam.pages.xml.model.SeamPagesConstants;
import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesProcessStructureHelper;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.Link;
@@ -47,11 +50,18 @@
* <!-- end-user-doc -->
* @generated NOT
*/
- Map<XModelObject, PagesElement> elements = null;
+ Map<String, PagesElement> elementsByPath = null;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @generated NOT
+ */
+ XModelTreeListener modelListener = new ML();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @generated
*/
protected PagesModelImpl() {
@@ -73,90 +83,190 @@
* <!-- end-user-doc -->
* @generated NOT
*/
-
public PagesElement findElement(Object data) {
if(data instanceof XModelObject) {
- PagesElement result = elements.get(data);
- //Check null and something else
+ data = ((XModelObject)data).getPath();
+ }
+ if(data instanceof String) {
+ PagesElement result = elementsByPath.get(data);
return result;
}
return null;
}
+
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
+ void addElement(XModelObject data, PagesElement element) {
+ elementsByPath.put(data.getPath(), element);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
public void load() {
XModelObject installedProcess = (XModelObject)getData();
if(installedProcess == null) return;
- elements = new HashMap<XModelObject, PagesElement>();
+ elementsByPath = new HashMap<String, PagesElement>();
+ addElement(installedProcess, this);
XModelObject[] is = h.getItems(installedProcess);
for (int i = 0; i < is.length; i++) {
- String type = is[i].getAttributeValue(SeamPagesConstants.ATTR_TYPE);
- if(SeamPagesConstants.TYPE_PAGE.equals(type)) {
- Page page = PagesFactory.eINSTANCE.createPage();
- page.setName(h.getPageTitle(is[i]));
- int[] shape = h.asIntArray(is[i], "shape");
- if(shape != null && shape.length >= 2) {
- page.setLocation(new Point(shape[0],shape[1]));
+ addItem(is[i]);
+ }
+
+ for (int i = 0; i < is.length; i++) {
+ addItemLinks(is[i]);
+ }
+ installedProcess.getModel().removeModelTreeListener(modelListener);
+ installedProcess.getModel().addModelTreeListener(modelListener);
+ }
+
+ private void addItem(XModelObject item) {
+ String type = item.getAttributeValue(SeamPagesConstants.ATTR_TYPE);
+ if(SeamPagesConstants.TYPE_PAGE.equals(type)) {
+ Page page = PagesFactory.eINSTANCE.createPage();
+ page.setData(item);
+ page.dataChanged();
+ addElement(item, page);
+ getChildren().add(page);
+ } else if(SeamPagesConstants.TYPE_EXCEPTION.equals(type)) {
+ PgException exc = PagesFactory.eINSTANCE.createPgException();
+ exc.setData(item);
+ exc.dataChanged();
+ addElement(item, exc);
+ getChildren().add(exc);
+ } else {
+ //TODO
+ }
+ }
+
+ private void addItemLinks(XModelObject item) {
+ String type = item.getAttributeValue(SeamPagesConstants.ATTR_TYPE);
+ if(SeamPagesConstants.TYPE_PAGE.equals(type)
+ || SeamPagesConstants.TYPE_EXCEPTION.equals(type)) {
+ PagesElement from = findElement(item);
+ if(from == null) {
+ //TODO report failure
+ return;
+ }
+ XModelObject[] os = h.getOutputs(item);
+ for (int j = 0; j < os.length; j++) {
+ XModelObject t = h.getItemOutputTarget(os[j]);
+ if(t == null) {
+ //TODO report failure
+ return;
}
- if(shape != null && shape.length >= 4) {
- page.setSize(new Dimension(shape[2],shape[3]));
+ PagesElement to = findElement(t);
+ if(to == null) {
+ //TODO report failure
+ return;
}
- page.setData(is[i]);
- getChildren().add(page);
- elements.put(is[i], page);
- } else if(SeamPagesConstants.TYPE_EXCEPTION.equals(type)) {
- PgException exc = PagesFactory.eINSTANCE.createPgException();
- exc.setName(is[i].getPresentationString());
- int[] shape = h.asIntArray(is[i], "shape");
- if(shape != null && shape.length >= 2) {
- exc.setLocation(new Point(shape[0],shape[1]));
- }
- if(shape != null && shape.length >= 4) {
- exc.setSize(new Dimension(shape[2],shape[3]));
- }
- exc.setData(is[i]);
- getChildren().add(exc);
- //maybe we need other map for exceptions?
- elements.put(is[i], exc);
- } else {
- //TODO
+ Link link = PagesFactory.eINSTANCE.createLink();
+ link.setFromElement(from);
+ link.setToElement(to);
+ link.setName(h.getItemOutputPresentation(os[j]));
+ link.setShortcut(h.isShortcut(os[j]));
}
}
+ }
- for (int i = 0; i < is.length; i++) {
- String type = is[i].getAttributeValue(SeamPagesConstants.ATTR_TYPE);
- if(SeamPagesConstants.TYPE_PAGE.equals(type)
- || SeamPagesConstants.TYPE_EXCEPTION.equals(type)) {
- PagesElement from = elements.get(is[i]);
- if(from == null) {
- //TODO report failure
- continue;
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void update() {
+ XModelObject installedProcess = (XModelObject)getData();
+ if(installedProcess == null) return;
+
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void dispose() {
+ XModelObject installedProcess = (XModelObject)getData();
+ if(installedProcess == null) return;
+ installedProcess.getModel().removeModelTreeListener(modelListener);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ class ML implements XModelTreeListener {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void nodeChanged(XModelTreeEvent event) {
+ if(getData() == null) return;
+ XModelObject installedProcess = (XModelObject)getData();
+ if(!event.getModelObject().getPath().startsWith(installedProcess.getPath())) {
+ return;
+ }
+ PagesElement item = findElement(event.getModelObject());
+ if(item != null) {
+ item.dataChanged();
+ }
+ //TODO update link
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void structureChanged(XModelTreeEvent event) {
+ if(getData() == null) return;
+ XModelObject installedProcess = (XModelObject)getData();
+ XModelObject target = event.getModelObject();
+ if(!target.getPath().startsWith(installedProcess.getPath())) {
+ return;
+ }
+ if(event.kind() == XModelTreeEvent.CHILD_ADDED) {
+ XModelObject added = (XModelObject)event.getInfo();
+ if(target == installedProcess) {
+ addItem(added);
+ addItemLinks(added);
+ } else {
+ PagesElement item = findElement(target);
+ //TODO
}
- XModelObject[] os = h.getOutputs(is[i]);
- for (int j = 0; j < os.length; j++) {
- XModelObject t = h.getItemOutputTarget(os[j]);
- if(t == null) {
- //TODO report failure
- continue;
+ } else if(event.kind() == XModelTreeEvent.CHILD_REMOVED) {
+ if(target == installedProcess) {
+ PagesElement removed = findElement(event.getInfo());
+ if(removed != null) {
+ elementsByPath.remove(event.getInfo());
+ Link[] ls = removed.getOutputLinks().toArray(new Link[0]);
+ for (int i = 0; i < ls.length; i++) {
+ ls[i].setFromElement(null);
+ ls[i].setToElement(null);
+ }
+ ls = removed.getInputLinks().toArray(new Link[0]);
+ for (int i = 0; i < ls.length; i++) {
+ ls[i].setFromElement(null);
+ ls[i].setToElement(null);
+ }
+ getChildren().remove(removed);
}
- PagesElement to = elements.get(t);
- if(to == null) {
- //TODO report failure
- continue;
- }
- Link link = PagesFactory.eINSTANCE.createLink();
- link.setFromElement(from);
- link.setToElement(to);
- link.setName(h.getItemOutputPresentation(os[j]));
- link.setShortcut(h.isShortcut(os[j]));
+ } else {
+
}
}
+ update();
}
-
+
}
} //PagesModelImpl
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PgExceptionImpl.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PgExceptionImpl.java 2008-05-29
15:42:01 UTC (rev 8445)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui.pages/src/org/jboss/tools/seam/ui/pages/editor/ecore/pages/impl/PgExceptionImpl.java 2008-05-29
16:47:28 UTC (rev 8446)
@@ -6,8 +6,12 @@
*/
package org.jboss.tools.seam.ui.pages.editor.ecore.pages.impl;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EClass;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesProcessStructureHelper;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesPackage;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PgException;
@@ -40,4 +44,25 @@
return PagesPackage.Literals.PG_EXCEPTION;
}
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void dataChanged() {
+ XModelObject item = getModelObject();
+ SeamPagesProcessStructureHelper h = SeamPagesProcessStructureHelper.getInstance();
+
+ setName(item.getPresentationString());
+ int[] shape = h.asIntArray(item, "shape");
+ if(shape != null && shape.length >= 2) {
+ setLocation(new Point(shape[0],shape[1]));
+ } else {
+ setLocation(new Point(0,0));
+ }
+ if(shape != null && shape.length >= 4) {
+ setSize(new Dimension(shape[2],shape[3]));
+ }
+ }
+
} //PgExceptionImpl