Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 212560 Details for
Bug 374089
[ECP2] Update of navigator when adding new model element to project
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch for tree update bug
ecp2.navigator.treeupdate.patch (text/plain), 13.83 KB, created by
Eugen Neufeld
on 2012-03-13 11:24:48 EDT
(
hide
)
Description:
patch for tree update bug
Filename:
MIME Type:
Creator:
Eugen Neufeld
Created:
2012-03-13 11:24:48 EDT
Size:
13.83 KB
patch
obsolete
>diff --git a/ECP2/org.eclipse.emf.ecp.cdo.core/src/org/eclipse/emf/ecp/cdo/internal/core/CDOProvider.java b/ECP2/org.eclipse.emf.ecp.cdo.core/src/org/eclipse/emf/ecp/cdo/internal/core/CDOProvider.java >index abacad0..8710405 100644 >--- a/ECP2/org.eclipse.emf.ecp.cdo.core/src/org/eclipse/emf/ecp/cdo/internal/core/CDOProvider.java >+++ b/ECP2/org.eclipse.emf.ecp.cdo.core/src/org/eclipse/emf/ecp/cdo/internal/core/CDOProvider.java >@@ -29,6 +29,7 @@ > import org.eclipse.net4j.util.UUIDGenerator; > import org.eclipse.net4j.util.io.IOUtil; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPProject; > import org.eclipse.emf.ecp.core.ECPRepository; >@@ -174,7 +175,7 @@ > throw new UnsupportedOperationException(); > } > >- public void addRootElement(ECPProject project, EObject rootElement) >+ public EList<EObject> getElements(ECPProject ecpProject) > { > // TODO: implement CDOProvider.addRootElement(project, rootElement) > throw new UnsupportedOperationException(); >diff --git a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/core/ECPProject.java b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/core/ECPProject.java >index d04f0f8..33ef854 100644 >--- a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/core/ECPProject.java >+++ b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/core/ECPProject.java >@@ -10,6 +10,7 @@ > */ > package org.eclipse.emf.ecp.core; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.util.ECPCloseable; > import org.eclipse.emf.ecp.core.util.ECPDeletable; >@@ -34,7 +35,7 @@ > */ > public ECPMetamodelContext getMetamodelContext(); > >- public void addRootElement(EObject rootElement); >+ public EList<EObject> getElements(); > > /** > * Returns <code>true</code> if this project is shared with a {@link ECPRepository repository}, <code>false</code> >diff --git a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProjectImpl.java b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProjectImpl.java >index f5010aa..7ce3d99 100644 >--- a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProjectImpl.java >+++ b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProjectImpl.java >@@ -10,6 +10,7 @@ > */ > package org.eclipse.emf.ecp.internal.core; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPMetamodelContext; > import org.eclipse.emf.ecp.core.ECPProject; >@@ -56,6 +57,7 @@ > super(name, properties); > this.provider = provider; > open = true; >+ notifyProvider(LifecycleEvent.INIT); > } > > public ECPProjectImpl(ECPRepository repository, String name, ECPProperties properties) >@@ -69,6 +71,7 @@ > > setRepository((InternalRepository)repository); > open = true; >+ notifyProvider(LifecycleEvent.INIT); > } > > public ECPProjectImpl(ObjectInput in) throws IOException >@@ -99,6 +102,10 @@ > } > > open = in.readBoolean(); >+ if (open) >+ { >+ notifyProvider(LifecycleEvent.INIT); >+ } > } > > @Override >@@ -491,8 +498,8 @@ > return provider.getMetamodelContext(this); > } > >- public void addRootElement(EObject rootElement) >+ public EList<EObject> getElements() > { >- provider.addRootElement(this, rootElement); >+ return provider.getElements(this); > } > } >diff --git a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProviderRegistryImpl.java b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProviderRegistryImpl.java >index 1b44d94..99b5fb7 100644 >--- a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProviderRegistryImpl.java >+++ b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/internal/core/ECPProviderRegistryImpl.java >@@ -12,6 +12,7 @@ > > import org.eclipse.net4j.util.AdapterUtil; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPMetamodelContext; > import org.eclipse.emf.ecp.core.ECPProject; >@@ -274,14 +275,12 @@ > > /* > * (non-Javadoc) >- * @see org.eclipse.emf.ecp.spi.core.InternalProvider#addToRoot(org.eclipse.emf.ecore.EObject, >- * org.eclipse.emf.ecp.core.ECPProject) >+ * @see org.eclipse.emf.ecp.spi.core.InternalProvider#getElements(org.eclipse.emf.ecp.internal.core.ECPProjectImpl) > */ >- public void addRootElement(ECPProject ecpProject, EObject newMEInstance) >+ public EList<EObject> getElements(ECPProject ecpProject) > { > // TODO Auto-generated method stub >- getResolvedElement().addRootElement(ecpProject, newMEInstance); >- >+ return getResolvedElement().getElements(ecpProject); > } > } > } >diff --git a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/spi/core/InternalProvider.java b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/spi/core/InternalProvider.java >index 0fedaae..0739959 100644 >--- a/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/spi/core/InternalProvider.java >+++ b/ECP2/org.eclipse.emf.ecp.core/src/org/eclipse/emf/ecp/spi/core/InternalProvider.java >@@ -10,6 +10,7 @@ > */ > package org.eclipse.emf.ecp.spi.core; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPMetamodelContext; > import org.eclipse.emf.ecp.core.ECPProject; >@@ -52,12 +53,16 @@ > CREATE, INIT, DISPOSE, REMOVE; > } > >- public void addRootElement(ECPProject project, EObject rootElement); >- > /** > * @param project > * the project to retrieve the meta context for > * @return the meta model context > */ > public ECPMetamodelContext getMetamodelContext(ECPProject project); >+ >+ /** >+ * @param ecpProject >+ * @return list of Elements of this project >+ */ >+ public EList<EObject> getElements(ECPProject ecpProject); > } >diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.core/src/org/eclipse/emf/ecp/emfstore/core/internal/EMFStoreProvider.java b/ECP2/org.eclipse.emf.ecp.emfstore.core/src/org/eclipse/emf/ecp/emfstore/core/internal/EMFStoreProvider.java >index 2868fef..6d41360 100644 >--- a/ECP2/org.eclipse.emf.ecp.emfstore.core/src/org/eclipse/emf/ecp/emfstore/core/internal/EMFStoreProvider.java >+++ b/ECP2/org.eclipse.emf.ecp.emfstore.core/src/org/eclipse/emf/ecp/emfstore/core/internal/EMFStoreProvider.java >@@ -1,5 +1,8 @@ > package org.eclipse.emf.ecp.emfstore.core.internal; > >+import org.eclipse.emf.common.notify.Notification; >+import org.eclipse.emf.common.notify.NotifyingList; >+import org.eclipse.emf.common.notify.impl.AdapterImpl; > import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecp.core.ECPProject; >@@ -14,6 +17,9 @@ > import org.eclipse.emf.emfstore.client.model.ProjectSpace; > import org.eclipse.emf.emfstore.client.model.WorkspaceManager; > import org.eclipse.emf.emfstore.server.model.ProjectInfo; >+ >+import java.util.HashMap; >+import java.util.Map; > > public class EMFStoreProvider extends DefaultProvider > { >@@ -46,15 +52,12 @@ > if (parent instanceof InternalProject) > { > InternalProject project = (InternalProject)parent; >- String projectSpaceID = project.getProperties().getValue(EMFStoreProvider.PROP_PROJECTSPACEID); >- EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces(); >- for (ProjectSpace projectSpace : projectSpaces) >- { >- if (projectSpace.getIdentifier().equals(projectSpaceID)) >- { >- childrenList.addChildren(projectSpace.getProject().getModelElements()); >- } >- } >+ ProjectSpace projectSpace = getProjectSpace(project); >+ >+ childrenList.addChildren(projectSpace.getProject().getModelElements()); >+ // TODO: provide interface at emfstore >+ NotifyingList<EObject> modelElements = (NotifyingList<EObject>)projectSpace.getProject().getModelElements(); >+ modelElements.getNotifier(); > > } > if (parent instanceof InternalRepository) >@@ -91,16 +94,95 @@ > throw new UnsupportedOperationException(); > } > >- public void addRootElement(ECPProject project, EObject rootElement) >+ public EList<EObject> getElements(ECPProject ecpProject) > { >- String id = project.getProperties().getValue(EMFStoreProvider.PROP_PROJECTSPACEID); >- EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces(); >- for (ProjectSpace projectSpace : projectSpaces) >+ ProjectSpace projectSpace = getProjectSpace(ecpProject); >+ return projectSpace.getProject().getModelElements(); >+ } >+ >+ private Map<ECPProject, ProjectSpace> cachedProjectSpaces = new HashMap<ECPProject, ProjectSpace>(); >+ >+ private AdapterImpl adapter; >+ >+ /** >+ * Method for caching the loading of {@link ProjectSpace} >+ * >+ * @return {@link EList} of {@link ProjectSpace} >+ */ >+ private ProjectSpace getProjectSpace(ECPProject ecpProject) >+ { >+ if (!cachedProjectSpaces.containsKey(ecpProject)) > { >- if (projectSpace.getIdentifier().equals(id)) >+ >+ EList<ProjectSpace> projectSpaces = WorkspaceManager.getInstance().getCurrentWorkspace().getProjectSpaces(); >+ for (ProjectSpace projectSpace : projectSpaces) > { >- projectSpace.getProject().addModelElement(rootElement); >+ String projectSpaceID = ecpProject.getProperties().getValue(EMFStoreProvider.PROP_PROJECTSPACEID); >+ if (projectSpace.getIdentifier().equals(projectSpaceID)) >+ { >+ cachedProjectSpaces.put(ecpProject, projectSpace); >+ } > } > } >+ return cachedProjectSpaces.get(ecpProject); >+ >+ } >+ >+ @Override >+ public void handleLifecycle(ECPModelContext context, LifecycleEvent event) >+ { >+ switch (event) >+ { >+ case INIT: >+ handleInit(context); >+ break; >+ case DISPOSE: >+ handelDispose(context); >+ default: >+ break; >+ } >+ // TODO Trace properly >+ String providerClass = getClass().getSimpleName(); >+ String contextClass = context.getClass().getSimpleName(); >+ System.out.println(providerClass + " received " + event + " for " + contextClass + " " + context); >+ } >+ >+ /** >+ * @param context >+ */ >+ private void handelDispose(ECPModelContext context) >+ { >+ if (context instanceof InternalProject) >+ { >+ ProjectSpace projectSpace = getProjectSpace((ECPProject)context); >+ >+ projectSpace.getProject().eAdapters().remove(adapter); >+ >+ } >+ >+ } >+ >+ /** >+ * @param context >+ */ >+ private void handleInit(final ECPModelContext context) >+ { >+ if (context instanceof InternalProject) >+ { >+ ProjectSpace projectSpace = getProjectSpace((ECPProject)context); >+ >+ adapter = new AdapterImpl() >+ { >+ @Override >+ public void notifyChanged(Notification notification) >+ { >+ ((InternalProject)context).notifyObjectsChanged(new Object[] { context }); >+ } >+ }; >+ >+ projectSpace.getProject().eAdapters().add(adapter); >+ >+ } >+ > } > } >diff --git a/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/ModelTreePage.java b/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/ModelTreePage.java >index 4d0a3e2..7c34fe5 100644 >--- a/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/ModelTreePage.java >+++ b/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/ModelTreePage.java >@@ -112,7 +112,7 @@ > treeViewer = new TreeViewer(tree); > GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).minSize(0, 150).span(2, 1) > .applyTo(treeViewer.getControl()); >- treeViewer.setContentProvider(new ModelTreeContentProvider(project.getMetamodelContext())); >+ treeViewer.setContentProvider(new ModelTreeContentProvider(metaContext)); > treeViewer.setLabelProvider(new MEClassLabelProvider()); > treeViewer.setComparator(new ViewerComparator()); > treeViewer.addFilter(filter); >diff --git a/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/NewModelElementWizard.java b/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/NewModelElementWizard.java >index eb6eea2..f0cc5b2 100644 >--- a/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/NewModelElementWizard.java >+++ b/ECP2/org.eclipse.emf.ecp.ui/src/org/eclipse/emf/ecp/wizards/NewModelElementWizard.java >@@ -71,7 +71,7 @@ > EPackage ePackage = newMEType.getEPackage(); > newMEInstance = ePackage.getEFactoryInstance().create(newMEType); > >- ecpProject.addRootElement(newMEInstance); >+ ecpProject.getElements().add(newMEInstance); > > // 3.open the newly created ME > ActionHelper.openModelElement(newMEInstance, this.getClass().getName()); >diff --git a/ECP2/org.eclipse.emf.ecp.workspace.core/src/org/eclipse/emf/ecp/workspace/internal/core/WorkspaceProvider.java b/ECP2/org.eclipse.emf.ecp.workspace.core/src/org/eclipse/emf/ecp/workspace/internal/core/WorkspaceProvider.java >index e91d244..b46fdc5 100644 >--- a/ECP2/org.eclipse.emf.ecp.workspace.core/src/org/eclipse/emf/ecp/workspace/internal/core/WorkspaceProvider.java >+++ b/ECP2/org.eclipse.emf.ecp.workspace.core/src/org/eclipse/emf/ecp/workspace/internal/core/WorkspaceProvider.java >@@ -10,6 +10,7 @@ > */ > package org.eclipse.emf.ecp.workspace.internal.core; > >+import org.eclipse.emf.common.util.EList; > import org.eclipse.emf.common.util.URI; > import org.eclipse.emf.ecore.EObject; > import org.eclipse.emf.ecore.resource.Resource; >@@ -149,7 +150,7 @@ > throw new UnsupportedOperationException(); > } > >- public void addRootElement(ECPProject project, EObject rootElement) >+ public EList<EObject> getElements(ECPProject ecpProject) > { > // TODO: implement WorkspaceProvider.addRootElement(project, rootElement) > throw new UnsupportedOperationException();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
eclipse
:
iplog+
Actions:
View
|
Diff
Attachments on
bug 374089
: 212560