diff options
Diffstat (limited to 'jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java')
-rw-r--r-- | jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java | 1473 |
1 files changed, 0 insertions, 1473 deletions
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java deleted file mode 100644 index bb5afb2e22..0000000000 --- a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/util/JPASolver.java +++ /dev/null @@ -1,1473 +0,0 @@ -/******************************************************************************* - * <copyright> - * - * Copyright (c) 2005, 2011 SAP AG. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Stefan Dimov - initial API, implementation and documentation - * - * </copyright> - * - *******************************************************************************/ -package org.eclipse.jpt.jpadiagrameditor.ui.internal.util; - - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.WeakHashMap; -import org.eclipse.core.internal.resources.File; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarkerDelta; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.emf.transaction.RecordingCommand; -import org.eclipse.emf.transaction.TransactionalEditingDomain; -import org.eclipse.emf.transaction.util.TransactionUtil; -import org.eclipse.graphiti.dt.IDiagramTypeProvider; -import org.eclipse.graphiti.features.IRemoveFeature; -import org.eclipse.graphiti.features.context.impl.AddConnectionContext; -import org.eclipse.graphiti.features.context.impl.AddContext; -import org.eclipse.graphiti.features.context.impl.CustomContext; -import org.eclipse.graphiti.features.context.impl.RemoveContext; -import org.eclipse.graphiti.mm.algorithms.Text; -import org.eclipse.graphiti.mm.pictograms.Connection; -import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator; -import org.eclipse.graphiti.mm.pictograms.ContainerShape; -import org.eclipse.graphiti.mm.pictograms.Diagram; -import org.eclipse.graphiti.mm.pictograms.FreeFormConnection; -import org.eclipse.graphiti.mm.pictograms.PictogramElement; -import org.eclipse.graphiti.mm.pictograms.Shape; -import org.eclipse.graphiti.services.Graphiti; -import org.eclipse.jdt.core.ElementChangedEvent; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.IElementChangedListener; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IJavaElementDelta; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.internal.core.PackageFragmentRoot; -import org.eclipse.jpt.common.core.JptResourceModel; -import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType; -import org.eclipse.jpt.common.core.resource.java.JavaResourceCompilationUnit; -import org.eclipse.jpt.common.utility.internal.iterators.ArrayIterator; -import org.eclipse.jpt.common.utility.model.Model; -import org.eclipse.jpt.common.utility.model.event.CollectionAddEvent; -import org.eclipse.jpt.common.utility.model.event.CollectionChangeEvent; -import org.eclipse.jpt.common.utility.model.event.CollectionClearEvent; -import org.eclipse.jpt.common.utility.model.event.CollectionRemoveEvent; -import org.eclipse.jpt.common.utility.model.event.ListAddEvent; -import org.eclipse.jpt.common.utility.model.event.ListChangeEvent; -import org.eclipse.jpt.common.utility.model.event.ListClearEvent; -import org.eclipse.jpt.common.utility.model.event.ListMoveEvent; -import org.eclipse.jpt.common.utility.model.event.ListRemoveEvent; -import org.eclipse.jpt.common.utility.model.event.ListReplaceEvent; -import org.eclipse.jpt.common.utility.model.event.PropertyChangeEvent; -import org.eclipse.jpt.common.utility.model.event.StateChangeEvent; -import org.eclipse.jpt.common.utility.model.listener.CollectionChangeListener; -import org.eclipse.jpt.common.utility.model.listener.ListChangeListener; -import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener; -import org.eclipse.jpt.common.utility.model.listener.StateChangeListener; -import org.eclipse.jpt.jpa.core.JpaFile; -import org.eclipse.jpt.jpa.core.JpaNode; -import org.eclipse.jpt.jpa.core.JpaProject; -import org.eclipse.jpt.jpa.core.context.ManyToOneMapping; -import org.eclipse.jpt.jpa.core.context.MappedByRelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.OneToOneMapping; -import org.eclipse.jpt.jpa.core.context.OptionalMapping; -import org.eclipse.jpt.jpa.core.context.PersistentAttribute; -import org.eclipse.jpt.jpa.core.context.PersistentType; -import org.eclipse.jpt.jpa.core.context.ReadOnlyRelationship; -import org.eclipse.jpt.jpa.core.context.Relationship; -import org.eclipse.jpt.jpa.core.context.RelationshipMapping; -import org.eclipse.jpt.jpa.core.context.RelationshipStrategy; -import org.eclipse.jpt.jpa.core.context.java.JavaAttributeMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaEntity; -import org.eclipse.jpt.jpa.core.context.java.JavaManyToOneMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaOneToOneMapping; -import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute; -import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType; -import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.JPADiagramEditor; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.JPADiagramEditorPlugin; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.facade.EclipseFacade; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddAttributeFeature; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddRelationFeature; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RemoveAttributeFeature; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RemoveRelationFeature; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.UpdateAttributeFeature; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.modelintegration.util.ModelIntegrationUtil; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.JPAEditorDiagramTypeProvider; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.AbstractRelation; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.BidirectionalRelation; -import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.IRelation; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; - - -@SuppressWarnings("restriction") -public class JPASolver implements IResourceChangeListener, IJpaSolver { - - private static Set<JPASolver> solversSet = new HashSet<JPASolver>(); - - private static WorkingCopyChangeListener wclsnr = null; - - private Hashtable<String, Object> keyToBO; - private WeakHashMap<JpaProject, WeakReference<CollectionChangeListener>> projectToEntityListener; - private WeakHashMap<JavaPersistentType, WeakReference<PropertyChangeListener>> entityToPropListener; - private WeakHashMap<JavaPersistentAttribute, WeakReference<AttributePropertyChangeListener>> attributeToPropListener; - private WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeMappingOptionalityChangeListener>> attributeMappingOptionalityToPropListener; - private WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeJoiningStrategyPropertyChangeListener>> attributeJoiningStrategyToPropListener; - private WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeRelationshipReferencePropertyChangeListener>> attributeRelationshipReferenceToPropListener; - private WeakHashMap<JavaPersistentType, WeakReference<ListChangeListener>> entityToAtListener; - private WeakHashMap<JavaPersistentType, WeakReference<StateChangeListener>> entityToStateListener; - private EntityChangeListener entityNameListener; - private IJPAEditorFeatureProvider featureProvider; - private HashSet<String> removeIgnore = new HashSet<String>(); - private HashSet<String> removeRelIgnore = new HashSet<String>(); - - private HashSet<String> addIgnore = new HashSet<String>(); - private Hashtable<String, IRelation> attribToRel = new Hashtable<String, IRelation>(); - private static final String SEPARATOR = "-"; //$NON-NLS-1$ - - private IEclipseFacade eclipseFacade; - private IJPAEditorUtil util = null; - - /** - * Provides the unique key for the given business object. - * - * @param bo - * the given business object - * - * @return unique key - */ - public JPASolver() { - this(EclipseFacade.INSTANCE, new JPAEditorUtilImpl()); - synchronized (JPASolver.class) { - if (wclsnr == null) { - wclsnr = new WorkingCopyChangeListener(); - JavaCore.addElementChangedListener(wclsnr, ElementChangedEvent.POST_CHANGE | ElementChangedEvent.POST_RECONCILE); - } - } - solversSet.add(this); - } - - public JPASolver(IEclipseFacade eclipseFacade, IJPAEditorUtil util) { - this.eclipseFacade = eclipseFacade; - eclipseFacade.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.POST_BUILD); - keyToBO = new Hashtable<String, Object>(); - projectToEntityListener = new WeakHashMap<JpaProject, WeakReference<CollectionChangeListener>>(); - entityToPropListener = new WeakHashMap<JavaPersistentType, WeakReference<PropertyChangeListener>>(); - attributeToPropListener = new WeakHashMap<JavaPersistentAttribute, WeakReference<AttributePropertyChangeListener>>(); - attributeMappingOptionalityToPropListener = new WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeMappingOptionalityChangeListener>>(); - attributeJoiningStrategyToPropListener = new WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeJoiningStrategyPropertyChangeListener>>(); - attributeRelationshipReferenceToPropListener = new WeakHashMap<JavaPersistentAttribute, WeakReference<AttributeRelationshipReferencePropertyChangeListener>>(); - entityToAtListener = new WeakHashMap<JavaPersistentType, WeakReference<ListChangeListener>>(); - entityToStateListener = new WeakHashMap<JavaPersistentType, WeakReference<StateChangeListener>>(); - entityNameListener = new EntityChangeListener(this); - entityNameListener.setName("Entity Name Change Listener"); //$NON-NLS-1$ - this.util = util; - } - - public void resourceChanged(IResourceChangeEvent event) { - - closeDiagramEditorIfProjectIsDeleted(event); - - unregisterDeltedEntity(event); - - IMarkerDelta[] markerDeltas = event.findMarkerDeltas(null, true); - Set<IFile> filesToUpdate = new HashSet<IFile>(); - for (IMarkerDelta delta : markerDeltas) { - if (delta.getResource().getType() != IResource.FILE) - continue; - filesToUpdate.add((IFile) delta.getResource()); - } - - // update is made to the whole editor. Find if there is at least on pe - // to be update and break the iteration - boolean updateEditor = false; - FILE: for (IFile file : filesToUpdate) { - for (JavaPersistentType jpt : entityToPropListener.keySet()) { - if (jpt.getResource().equals(file)) { - final PictogramElement element = featureProvider.getPictogramElementForBusinessObject(jpt); - if (element == null) - break; - else { - updateEditor = true; - break FILE; - } - } - } - } - if (updateEditor) { - eclipseFacade.getDisplay().asyncExec(new Runnable() { - public void run() { - if(featureProvider != null) - featureProvider.getDiagramTypeProvider().getDiagramEditor().refresh(); - } - }); - - } - } - - public void addRemoveIgnore(String atName) { - removeIgnore.add(atName); - } - - public void addRemoveRelIgnore(String atName) { - removeRelIgnore.add(atName); - } - - public void addJPTForUpdate(String jptName) { - entityNameListener.addJPTForUpdate(jptName); - } - - public void addAddIgnore(String atName) { - addIgnore.add(atName); - } - - public HashSet<String> getAddIgnore(){ - return addIgnore; - } - - - public void stopThread() { - entityNameListener.stopThread(); - entityNameListener = null; - } - - synchronized public EntityChangeListener getMonitor() { - if (entityNameListener == null) { - entityNameListener = new EntityChangeListener(this); - entityNameListener.setName("Entity Name Change Listener"); //$NON-NLS-1$ - } - return entityNameListener; - } - - /* (non-Javadoc) - * @see org.eclipse.jpt.jpadiagrameditor.ui.util.IJpaSolver#setFeatureProvider(org.eclipse.jpt.jpadiagrameditor.ui.provider.IJPAEditorFeatureProvider) - */ - public void setFeatureProvider(IJPAEditorFeatureProvider featureProvider) { - this.featureProvider = featureProvider; - entityNameListener.setFeatureProvider(featureProvider); - entityNameListener.setDaemon(true); - entityNameListener.start(); - } - - public String getKeyForBusinessObject(Object bo) { - if (bo == null) - return ""; //$NON-NLS-1$ - if (bo instanceof JavaPersistentType) { - JavaPersistentType jpt = (JavaPersistentType) bo; - String name = jpt.getName(); - return name; - } else if (bo instanceof AbstractRelation) { - return ((AbstractRelation) bo).getId(); - } else if (bo instanceof JavaPersistentAttribute) { - JavaPersistentAttribute at = (JavaPersistentAttribute) bo; - return (((PersistentType)at.getParent()).getName() + "-" + at.getName()); //$NON-NLS-1$ - } - return bo.toString(); - } - - /** - * Provides the business object for the given key. - * - * @param key - * the unique key - * - * @return the business object - */ - public Object getBusinessObjectForKey(String key) { - if (key == null) - return null; - return keyToBO.get(key); - } - - protected String produceOwnerKeyForRel(AbstractRelation rel) { - return produceKeyForRel(rel.getOwner(), rel.getOwnerAttributeName()); - } - - protected String produceInverseKeyForRel(AbstractRelation rel) { - return produceKeyForRel(rel.getInverse(), rel.getInverseAttributeName()); - } - - public String produceKeyForRel(JavaPersistentType jpt, String attributeName) { - return jpt.getName() + SEPARATOR + attributeName; - } - - public void addKeyBusinessObject(String key, Object bo) { - keyToBO.put(key, bo); - if (bo instanceof JavaPersistentType) { - JavaPersistentType jpt = (JavaPersistentType) bo; - JpaProject proj = jpt.getJpaProject(); - addListenersToProject(proj); - addListenersToEntity(jpt); - PictogramElement pe = featureProvider.getPictogramElementForBusinessObject(jpt); - Graphiti.getPeService().setPropertyValue(pe, JPAEditorConstants.PROP_ENTITY_CLASS_NAME, jpt.getName()); - } else if (bo instanceof AbstractRelation) { - AbstractRelation rel = (AbstractRelation) bo; - attribToRel.put(produceOwnerKeyForRel(rel), rel); - if (rel instanceof BidirectionalRelation) { - attribToRel.put(produceInverseKeyForRel(rel), rel); - } - } else if (bo instanceof JavaPersistentAttribute) { - addPropertiesListenerToAttribute((JavaPersistentAttribute)bo); - } - } - - public Object remove(String key) { - if (key == null) - return null; - Object o = keyToBO.remove(key); - if (o instanceof JavaPersistentType) { - JavaPersistentType jpt = (JavaPersistentType) o; - for (JavaPersistentAttribute at : jpt.getAttributes()) { - String k = getKeyForBusinessObject(at); - remove(k); - } - - removeListenersFromEntity(jpt); - Diagram d = featureProvider.getDiagramTypeProvider().getDiagram(); - if (d.getChildren().size() == 1) { - WeakReference<CollectionChangeListener> ref = projectToEntityListener.remove(jpt.getJpaProject()); - if (ref != null) { - CollectionChangeListener ch = ref.get(); - if (ch != null) - jpt.getJpaProject().removeCollectionChangeListener(JpaProject.JPA_FILES_COLLECTION, ch); - } - } - - ICompilationUnit cu = getCompilationUnit(jpt); - JPAEditorUtil.discardWorkingCopyOnce(cu); - } else if (o instanceof AbstractRelation) { - AbstractRelation rel = (AbstractRelation) o; - attribToRel.remove(produceOwnerKeyForRel(rel)); - if (rel instanceof BidirectionalRelation) - attribToRel.remove(produceInverseKeyForRel(rel)); - } else if (o instanceof JavaPersistentAttribute) { - removeListenersFromAttribute((JavaPersistentAttribute)o); - } - return o; - } - - public ICompilationUnit getCompilationUnit(JavaPersistentType jpt) { - return util.getCompilationUnit(jpt); - } - - public boolean isRelationRelatedToAttribute(JavaPersistentAttribute jpa) { - String key = produceKeyForRel((JavaPersistentType)jpa.getParent(), jpa.getName()); - return attribToRel.containsKey(key); - } - - public IRelation getRelationRelatedToAttribute(JavaPersistentAttribute jpa) { - String key = produceKeyForRel((JavaPersistentType)jpa.getParent(), jpa.getName()); - return attribToRel.get(key); - } - - public Set<IRelation> getRelationsRelatedToEntity(JavaPersistentType jpt) { - HashSet<IRelation> res = new HashSet<IRelation>(); - for (JavaPersistentAttribute at : jpt.getAttributes()) { - IRelation rel = getRelationRelatedToAttribute(at); - if (rel != null) - res.add(rel); - } - return res; - } - - - public boolean existsRelation(JavaPersistentType jpt1, JavaPersistentType jpt2) { - Set<IRelation> rels = getRelationsRelatedToEntity(jpt1); - if (existsRelation(jpt1, jpt2, rels)) - return true; - rels = getRelationsRelatedToEntity(jpt2); - return existsRelation(jpt1, jpt2, rels); - } - - public boolean existsRelation(JavaPersistentType jpt1, - JavaPersistentType jpt2, - Set<IRelation> rels) { - Iterator<IRelation> it = rels.iterator(); - while (it.hasNext()) { - IRelation rel = it.next(); - if ((jpt1.equals(rel.getOwner()) && jpt2.equals(rel.getInverse())) || - ((jpt2.equals(rel.getOwner()) && jpt1.equals(rel.getInverse())))) - return true; - } - return false; - } - - public Collection<Object> getVisualizedObjects() { - return keyToBO.values(); - } - - public void renewAttributeMappingPropListener(JavaPersistentAttribute jpa) { - renewAttributeJoiningStrategyPropertyListener(jpa); - renewAttributeMappingOptPropListener(jpa); - } - - public void renewAttributeJoiningStrategyPropertyListener(JavaPersistentAttribute jpa) { - AttributeJoiningStrategyPropertyChangeListener lsn = null; - if (attributeJoiningStrategyToPropListener == null) - return; - WeakReference<AttributeJoiningStrategyPropertyChangeListener> ref = attributeJoiningStrategyToPropListener.remove(jpa); - if (ref != null) - lsn = ref.get(); - - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - Relationship rr = ((RelationshipMapping) jam).getRelationship(); - if (rr == null) - return; - RelationshipStrategy js = rr.getStrategy(); - if ((js == null) || !MappedByRelationshipStrategy.class.isInstance(js)) - return; - try { - if (lsn != null) - js.removePropertyChangeListener(MappedByRelationshipStrategy.MAPPED_BY_ATTRIBUTE_PROPERTY, lsn); - } catch (Exception e) { - //$NON-NLS-1$ - } - lsn = new AttributeJoiningStrategyPropertyChangeListener(); - js.addPropertyChangeListener(MappedByRelationshipStrategy.MAPPED_BY_ATTRIBUTE_PROPERTY, lsn); - ref = new WeakReference<AttributeJoiningStrategyPropertyChangeListener>(lsn); - attributeJoiningStrategyToPropListener.put(jpa, ref); - - } - - public void renewAttributeMappingOptPropListener(JavaPersistentAttribute jpa) { - AttributeMappingOptionalityChangeListener lsn = null; - WeakReference<AttributeMappingOptionalityChangeListener> ref = attributeMappingOptionalityToPropListener.remove(jpa); - if (ref != null) - lsn = ref.get(); - JavaAttributeMapping jam = jpa.getMapping(); - if (jam == null) - return; - if (!ManyToOneMapping.class.isInstance(jam) && !OneToOneMapping.class.isInstance(jam)) - return; - - try { - if (lsn != null) - jam.removePropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, lsn); - } catch (Exception e) { - //$NON-NLS-1$ - } - lsn = new AttributeMappingOptionalityChangeListener(); - jam.addPropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, lsn); - ref = new WeakReference<AttributeMappingOptionalityChangeListener>(lsn); - attributeMappingOptionalityToPropListener.put(jpa, ref); - } - - - private void addListenersToProject(JpaProject proj) { - addEntitiesListenerToProject(proj); - } - - private void addEntitiesListenerToProject(JpaProject proj) { - WeakReference<CollectionChangeListener> lsnrRef = projectToEntityListener.get(proj); - CollectionChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - /* - if (!proj.getUpdater().getClass().isInstance(SynchronousJpaProjectUpdater.class)) - proj.setUpdater(new SynchronousJpaProjectUpdater(proj)); - */ - lsnr = new JPAProjectListener(); - proj.addCollectionChangeListener(JpaProject.JPA_FILES_COLLECTION, lsnr); - lsnrRef = new WeakReference<CollectionChangeListener>(lsnr); - projectToEntityListener.put(proj, lsnrRef); - } - } - - private void addListenersToEntity(JavaPersistentType jpt) { - addAtListenerToEntity(jpt); - addPropertiesListenerToEntity(jpt); - addStateListenerToEntity(jpt); - } - - private void addAtListenerToEntity(JavaPersistentType jpt) { - WeakReference<ListChangeListener> lsnrRef = entityToAtListener.get(jpt); - ListChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new EntityAttributesChangeListener(); - jpt.addListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr); - lsnrRef = new WeakReference<ListChangeListener>(lsnr); - entityToAtListener.put(jpt, lsnrRef); - } - } - - private void addPropertiesListenerToEntity(JavaPersistentType jpt) { - WeakReference<PropertyChangeListener> lsnrRef = entityToPropListener.get(jpt); - PropertyChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new EntityPropertyChangeListener(); - jpt.getMapping().addPropertyChangeListener(PersistentType.NAME_PROPERTY, lsnr); - lsnrRef = new WeakReference<PropertyChangeListener>(lsnr); - entityToPropListener.put(jpt, lsnrRef); - } - } - - private void addPropertiesListenerToAttribute(JavaPersistentAttribute jpa) { - addPropertiesListenerToAttributeItself(jpa); - addPropertiesListenerToJoiningStrategy(jpa); - addPropertiesListenerToRelationshipReference(jpa); - addOptPropListenerToAttributeMapping(jpa); - } - - private void addPropertiesListenerToAttributeItself(JavaPersistentAttribute jpa) { - WeakReference<AttributePropertyChangeListener> lsnrRef = attributeToPropListener.get(jpa); - AttributePropertyChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new AttributePropertyChangeListener(); - jpa.addPropertyChangeListener(PersistentAttribute.MAPPING_PROPERTY, lsnr); - lsnrRef = new WeakReference<AttributePropertyChangeListener>(lsnr); - attributeToPropListener.put(jpa, lsnrRef); - } - } - - private void addOptPropListenerToAttributeMapping(JavaPersistentAttribute jpa) { - WeakReference<AttributeMappingOptionalityChangeListener> lsnrRef = attributeMappingOptionalityToPropListener.get(jpa); - AttributeMappingOptionalityChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new AttributeMappingOptionalityChangeListener(); - JavaAttributeMapping jam = jpa.getMapping(); - if (jam == null) - return; - if (!JavaManyToOneMapping.class.isInstance(jam) && - !JavaOneToOneMapping.class.isInstance(jam)) - return; - jam.addPropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, lsnr); - lsnrRef = new WeakReference<AttributeMappingOptionalityChangeListener>(lsnr); - attributeMappingOptionalityToPropListener.put(jpa, lsnrRef); - } - } - - - private void addPropertiesListenerToJoiningStrategy(JavaPersistentAttribute jpa) { - - WeakReference<AttributeJoiningStrategyPropertyChangeListener> lsnrRef = attributeJoiningStrategyToPropListener.get(jpa); - AttributeJoiningStrategyPropertyChangeListener lsnr = null; - lsnrRef = attributeJoiningStrategyToPropListener.get(jpa); - lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new AttributeJoiningStrategyPropertyChangeListener(); - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - Relationship rr = ((RelationshipMapping) jam).getRelationship(); - if (rr == null) - return; - RelationshipStrategy js = rr.getStrategy(); - if ((js == null) || !MappedByRelationshipStrategy.class.isInstance(js)) - return; - lsnrRef = new WeakReference<AttributeJoiningStrategyPropertyChangeListener>(lsnr); - attributeJoiningStrategyToPropListener.put(jpa, lsnrRef); - } - - } - - - private void addPropertiesListenerToRelationshipReference(JavaPersistentAttribute jpa) { - - WeakReference<AttributeRelationshipReferencePropertyChangeListener> lsnrRef = attributeRelationshipReferenceToPropListener.get(jpa); - AttributeRelationshipReferencePropertyChangeListener lsnr = null; - lsnrRef = attributeRelationshipReferenceToPropListener.get(jpa); - lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new AttributeRelationshipReferencePropertyChangeListener(); - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - Relationship rr = ((RelationshipMapping) jam).getRelationship(); - if (rr == null) - return; - rr.addPropertyChangeListener(ReadOnlyRelationship.STRATEGY_PROPERTY, lsnr); - rr.addPropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, new AttributeMappingOptionalityChangeListener()); - lsnrRef = new WeakReference<AttributeRelationshipReferencePropertyChangeListener>(lsnr); - attributeRelationshipReferenceToPropListener.put(jpa, lsnrRef); - } - - } - - - - private void addStateListenerToEntity(JavaPersistentType jpt) { - WeakReference<StateChangeListener> lsnrRef = entityToStateListener.get(jpt); - StateChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr == null) { - lsnr = new EntityStateChangeListener(); - jpt.addStateChangeListener(lsnr); - lsnrRef = new WeakReference<StateChangeListener>(lsnr); - entityToStateListener.put(jpt, lsnrRef); - } - } - - private void removeListenersFromEntity(JavaPersistentType jpt) { - removeAtListenerFromEntity(jpt); - removePropListenerFromEntity(jpt); - removeStateListenerFromEntity(jpt); - } - - private void removeListenersFromAttribute(JavaPersistentAttribute jpa) { - removePropListenerFromAttribute(jpa); - } - - private void removeAtListenerFromEntity(JavaPersistentType jpt) { - WeakReference<ListChangeListener> lsnrRef = entityToAtListener.get(jpt); - ListChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - entityToAtListener.remove(jpt); - jpt.removeListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsnr); - } - } - - private void removePropListenerFromEntity(JavaPersistentType jpt) { - WeakReference<PropertyChangeListener> lsnrRef = entityToPropListener.get(jpt); - PropertyChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - entityToPropListener.remove(jpt); - try { - jpt.getMapping().removePropertyChangeListener(PersistentType.NAME_PROPERTY, lsnr); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - } - - private void removePropListenerFromAttribute(JavaPersistentAttribute jpa) { - removePropListenerFromAttributeItself(jpa); - removePropListenerFromJoiningStrategy(jpa); - removePropListenerFromRelationshipReference(jpa); - removeOptPropListenerFromAttributeMapping(jpa); - } - - private void removePropListenerFromAttributeItself(JavaPersistentAttribute jpa) { - WeakReference<AttributePropertyChangeListener> lsnrRef = attributeToPropListener.get(jpa); - PropertyChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - attributeToPropListener.remove(jpa); - try { - jpa.removePropertyChangeListener(PersistentAttribute.MAPPING_PROPERTY, lsnr); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - } - - private void removePropListenerFromJoiningStrategy(JavaPersistentAttribute jpa) { - WeakReference<AttributeJoiningStrategyPropertyChangeListener> lsnrRef = attributeJoiningStrategyToPropListener.get(jpa); - PropertyChangeListener lsnr = null; - lsnrRef = attributeJoiningStrategyToPropListener.get(jpa); - lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - attributeJoiningStrategyToPropListener.remove(jpa); - try { - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - Relationship rr = ((RelationshipMapping) jam).getRelationship(); - if (rr == null) - return; - RelationshipStrategy js = rr.getStrategy(); - if ((js == null) || !MappedByRelationshipStrategy.class.isInstance(js)) - return; - js.removePropertyChangeListener(MappedByRelationshipStrategy.MAPPED_BY_ATTRIBUTE_PROPERTY, lsnr); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - - } - - private void removeOptPropListenerFromAttributeMapping(JavaPersistentAttribute jpa) { - WeakReference<AttributeMappingOptionalityChangeListener> lsnrRef = attributeMappingOptionalityToPropListener.get(jpa); - PropertyChangeListener lsnr = null; - lsnrRef = attributeMappingOptionalityToPropListener.get(jpa); - lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - attributeMappingOptionalityToPropListener.remove(jpa); - try { - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - jam.removePropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, lsnr); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - } - - - private void removePropListenerFromRelationshipReference(JavaPersistentAttribute jpa) { - WeakReference<AttributeRelationshipReferencePropertyChangeListener> lsnrRef = attributeRelationshipReferenceToPropListener.get(jpa); - PropertyChangeListener lsnr = null; - lsnrRef = attributeRelationshipReferenceToPropListener.get(jpa); - lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - attributeRelationshipReferenceToPropListener.remove(jpa); - try { - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - return; - Relationship rr = ((RelationshipMapping) jam).getRelationship(); - if (rr == null) - return; - rr.removePropertyChangeListener(ReadOnlyRelationship.STRATEGY_PROPERTY, lsnr); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - } - - - private void removeStateListenerFromEntity(JavaPersistentType jpt) { - WeakReference<StateChangeListener> lsnrRef = entityToStateListener.get(jpt); - StateChangeListener lsnr = null; - if (lsnrRef != null) - lsnr = lsnrRef.get(); - if (lsnr != null) { - entityToStateListener.remove(jpt); - jpt.removeStateChangeListener(lsnr); - } - } - - //--------------- - private void removeEntityStateChangeListeners() { - Iterator<JavaPersistentType> it = entityToStateListener.keySet().iterator(); - Set<JavaPersistentType> s = new HashSet<JavaPersistentType>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentType jpt = it.next(); - WeakReference<StateChangeListener> ref = entityToStateListener.remove(jpt); - StateChangeListener lsn = ref.get(); - if (lsn != null) - jpt.removeStateChangeListener(lsn); - } - entityToStateListener.clear(); - entityToStateListener = null; - } - - private void removeEntityPropChangeListeners() { - Iterator<JavaPersistentType> it = entityToPropListener.keySet().iterator(); - Set<JavaPersistentType> s = new HashSet<JavaPersistentType>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentType jpt = it.next(); - WeakReference<PropertyChangeListener> ref = entityToPropListener.remove(jpt); - PropertyChangeListener lsn = ref.get(); - if (lsn != null) - jpt.getMapping().removePropertyChangeListener(PersistentType.NAME_PROPERTY, lsn); - } - entityToPropListener.clear(); - entityToPropListener = null; - } - - private void removeAttributePropChangeListeners() { - Iterator<JavaPersistentAttribute> it = attributeToPropListener.keySet().iterator(); - Set<JavaPersistentAttribute> s = new HashSet<JavaPersistentAttribute>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentAttribute jpa = it.next(); - WeakReference<AttributePropertyChangeListener> ref = attributeToPropListener.remove(jpa); - PropertyChangeListener lsn = ref.get(); - if (lsn != null) - try { - jpa.removePropertyChangeListener(PersistentAttribute.MAPPING_PROPERTY, lsn); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - attributeToPropListener.clear(); - attributeToPropListener = null; - } - - private void removeAttributeJoiningStrategyPropChangeListeners() { - Iterator<JavaPersistentAttribute> it = attributeJoiningStrategyToPropListener.keySet().iterator(); - Set<JavaPersistentAttribute> s = new HashSet<JavaPersistentAttribute>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentAttribute jpa = it.next(); - WeakReference<AttributeJoiningStrategyPropertyChangeListener> ref = attributeJoiningStrategyToPropListener.remove(jpa); - PropertyChangeListener lsn = ref.get(); - if (lsn != null) - try { - jpa.getMapping().removePropertyChangeListener(MappedByRelationshipStrategy.MAPPED_BY_ATTRIBUTE_PROPERTY, lsn); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - attributeJoiningStrategyToPropListener.clear(); - attributeJoiningStrategyToPropListener = null; - } - - private void removeOptPropListeners() { - Iterator<JavaPersistentAttribute> it = this.attributeMappingOptionalityToPropListener.keySet().iterator(); - Set<JavaPersistentAttribute> s = new HashSet<JavaPersistentAttribute>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentAttribute jpa = it.next(); - WeakReference<AttributeMappingOptionalityChangeListener> ref = attributeMappingOptionalityToPropListener.remove(jpa); - if (ref == null) - continue; - PropertyChangeListener lsn = ref.get(); - if (lsn == null) - continue; - JavaAttributeMapping jam = jpa.getMapping(); - if ((jam == null) || !RelationshipMapping.class.isInstance(jam)) - continue; - try { - jam.removePropertyChangeListener(OptionalMapping.SPECIFIED_OPTIONAL_PROPERTY, lsn); - } catch (IllegalArgumentException e) { - //$NON-NLS-1$ - } - } - attributeRelationshipReferenceToPropListener.clear(); - attributeRelationshipReferenceToPropListener = null; - } - - private void removeEntityAttributeChangeListeners() { - Iterator<JavaPersistentType> it = entityToAtListener.keySet().iterator(); - Set<JavaPersistentType> s = new HashSet<JavaPersistentType>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JavaPersistentType jpt = it.next(); - WeakReference<ListChangeListener> ref = entityToAtListener.remove(jpt); - ListChangeListener lsn = ref.get(); - if (lsn != null) - jpt.removeListChangeListener(JavaPersistentType.ATTRIBUTES_LIST, lsn); - } - entityToAtListener.clear(); - entityToAtListener = null; - } - - private void removeProjectListeners() { - Iterator<JpaProject> it = projectToEntityListener.keySet().iterator(); - Set<JpaProject> s = new HashSet<JpaProject>(); - while(it.hasNext()) - s.add(it.next()); - it = s.iterator(); - while(it.hasNext()) { - JpaProject project = it.next(); - WeakReference<CollectionChangeListener> ref = projectToEntityListener.remove(project); - CollectionChangeListener lsn = ref.get(); - if (lsn != null) - project.removeCollectionChangeListener(JpaProject.JPA_FILES_COLLECTION, lsn); - } - projectToEntityListener.clear(); - projectToEntityListener = null; - } - - private void removeAllListeners() { - removeOptPropListeners(); - removeAttributeJoiningStrategyPropChangeListeners(); - removeAttributePropChangeListeners(); - removeEntityStateChangeListeners(); - removeEntityPropChangeListeners(); - removeEntityAttributeChangeListeners(); - removeProjectListeners(); - eclipseFacade.getWorkspace().removeResourceChangeListener(this); - } - - public void dispose() { - Iterator<Object> it = keyToBO.values().iterator(); - while (it.hasNext()) { - Object bo = it.next(); - if (!JavaPersistentType.class.isInstance(bo)) - continue; - ICompilationUnit cu = util.getCompilationUnit(((JavaPersistentType)bo)); - util.discardWorkingCopyOnce(cu); - } - - util = null; - keyToBO.clear(); - attribToRel.clear(); - keyToBO = null; - attribToRel = null; - removeAllListeners(); - featureProvider = null; - synchronized (JPASolver.class) { - solversSet.remove(this); - if (solversSet.isEmpty()) { - JavaCore.removeElementChangedListener(wclsnr); - wclsnr = null; - } - } - } - - public boolean containsKey(String key) { - return keyToBO.containsKey(key); - } - - public void restoreEntity(JavaPersistentType jpt) { - if (jpt == null) - return; - ICompilationUnit cu = this.getCompilationUnit(jpt); - JPAEditorUtil.discardWorkingCopyOnce(cu); - JPAEditorUtil.becomeWorkingCopy(cu); - } - - public static boolean ignoreEvents = false; - - public static class WorkingCopyChangeListener implements IElementChangedListener { - synchronized public void elementChanged(ElementChangedEvent event) { - Object o = event.getSource(); - if (!IJavaElementDelta.class.isInstance(o)) - return; - - IJavaElementDelta jed = (IJavaElementDelta)o; - Set<ICompilationUnit> affectedCompilationUnits = getAffectedCompilationUnits(jed); - - for (ICompilationUnit cu : affectedCompilationUnits) { - JavaPersistentType jpt = JPAEditorUtil.getJPType(cu); - for (JPASolver solver : solversSet) { - final ContainerShape cs = (ContainerShape)solver.featureProvider.getPictogramElementForBusinessObject(jpt); - if (cs == null) - return; - String entName = JPAEditorUtil.getText(jpt); - try { - final String newHeader = (cu.hasUnsavedChanges() ? "* " : "") + entName; //$NON-NLS-1$ //$NON-NLS-2$ - Display.getDefault().asyncExec(new Runnable() { - public void run() { - GraphicsUpdater.updateHeader(cs, newHeader); - } - }); - - } catch (JavaModelException e) { - JPADiagramEditorPlugin.logError("Cannot check compilation unit for unsaved changes", e); //$NON-NLS-1$ - } - } - - } - } - - private Set<ICompilationUnit> getAffectedCompilationUnits(IJavaElementDelta delta) { - Set<ICompilationUnit> res = new HashSet<ICompilationUnit>(); - IJavaElement el = delta.getElement(); - if (ICompilationUnit.class.isInstance(el)) - res.add((ICompilationUnit)el); - IJavaElementDelta[] children = delta.getChangedChildren(); - for (IJavaElementDelta child : children) { - Set<ICompilationUnit> cus = getAffectedCompilationUnits(child); - res.addAll(cus); - } - return res; - } - } - - public class JPAProjectListener implements CollectionChangeListener { - - synchronized public void itemsRemoved(CollectionRemoveEvent event) { - if (ignoreEvents) - return; - - Iterator<?> it = event.getItems().iterator(); - while (it.hasNext()) { - Object o = it.next(); - if (!(o instanceof JpaFile)) - continue; - final JpaFile jpaFile = (JpaFile)o; - JptResourceModel jrm = ((JpaFile)o).getResourceModel(); - if (!JavaResourceCompilationUnit.class.isInstance(jrm)) - continue; - JavaResourceCompilationUnit jrcu = (JavaResourceCompilationUnit)jrm; - JavaResourceAbstractType jrat = jrcu.getPrimaryType(); - String name = jrat.getQualifiedName(); - - JpaProject jpaProject = jpaFile.getJpaProject(); - PersistenceUnit pu = JpaArtifactFactory.instance().getPersistenceUnit(jpaProject); - if(pu == null) - continue; - JavaPersistentType jpt = (JavaPersistentType)pu.getPersistentType(name); - final ContainerShape cs = (ContainerShape)featureProvider.getPictogramElementForBusinessObject(jpt); - if (cs == null) - return; - final RemoveContext ctx = new RemoveContext(cs); - final IRemoveFeature ft = featureProvider.getRemoveFeature(ctx);; - Runnable r = new Runnable() { - public void run() { - TransactionalEditingDomain ted = TransactionUtil.getEditingDomain(cs); - ted.getCommandStack().execute(new RecordingCommand(ted) { - @Override - protected void doExecute() { - ft.remove(ctx); - } - }); - } - }; - Display.getDefault().syncExec(r); - } - } - - public void collectionCleared(CollectionClearEvent arg0) {} - - public void collectionChanged(CollectionChangeEvent event) {} - - public void itemsAdded(CollectionAddEvent event) {} - }; - - public class EntityStateChangeListener implements StateChangeListener { - public void stateChanged(StateChangeEvent event) { - } - } - - public class EntityAttributesChangeListener implements ListChangeListener { - - public void itemsAdded(ListAddEvent event) { - AddEntityAttributes task = new AddEntityAttributes(event); - Display.getDefault().asyncExec(task); - } - - public void itemsRemoved(ListRemoveEvent event) { - RemoveEntityAttributes task = new RemoveEntityAttributes(event); - Display.getDefault().asyncExec(task); - } - - public void listChanged(ListChangeEvent event) {} - - public void itemsMoved(ListMoveEvent arg0) {} - - public void itemsReplaced(ListReplaceEvent arg0) {} - - public void listCleared(ListClearEvent arg0) {} - }; - - public class EntityPropertyChangeListener implements PropertyChangeListener { - synchronized public void propertyChanged(PropertyChangeEvent event) { - String propName = event.getPropertyName(); - if (propName.equals(JPAEditorConstants.PROP_SPECIFIED_NAME)) { - final JavaEntity je = (JavaEntity)event.getSource(); - Runnable job = new Runnable() { - public void run() { - TransactionalEditingDomain ted = featureProvider.getTransactionalEditingDomain(); - ted.getCommandStack().execute(new RecordingCommand(ted) { - @Override - protected void doExecute() { - JavaPersistentType jpt = je.getPersistentType(); - updateJPTName(jpt); - String tableName = JPAEditorUtil.formTableName(jpt); - JpaArtifactFactory.instance().setTableName(jpt, tableName); - } - }); - } - }; - Display.getDefault().syncExec(job); - } - } - } - - public class AttributePropertyChangeListener implements - PropertyChangeListener { - synchronized public void propertyChanged(PropertyChangeEvent event) { - - Model source = event.getSource(); - if (!JavaPersistentAttribute.class.isInstance(source)) - return; - PictogramElement pe = featureProvider - .getPictogramElementForBusinessObject(((JavaPersistentAttribute) source) - .getParent()); - final UpdateAttributeFeature ft = new UpdateAttributeFeature( - featureProvider); - final CustomContext ctx = new CustomContext(); - ctx.setInnerPictogramElement(pe); - Runnable runnable = new Runnable() { - @SuppressWarnings("deprecation") - public void run() { - ft.execute(ctx); - } - }; - Display.getDefault().asyncExec(runnable); - String propName = event.getPropertyName(); - if (propName.equals(PersistentAttribute.MAPPING_PROPERTY)) { - renewAttributeMappingPropListener((JavaPersistentAttribute) source); - } - } - } - - /* - * This listener listens when mappedBy has been changed - */ - public class AttributeJoiningStrategyPropertyChangeListener implements PropertyChangeListener { - - synchronized public void propertyChanged(PropertyChangeEvent event) { - - Model m = event.getSource(); - if (!MappedByRelationshipStrategy.class.isInstance(m)) - return; - MappedByRelationshipStrategy js = (MappedByRelationshipStrategy)m; - JpaNode nd = js.getParent(); - if (nd == null) - return; - nd = nd.getParent(); - if (nd == null) - return; - nd = nd.getParent(); - if ((nd == null) || !JavaPersistentAttribute.class.isInstance(nd)) - return; - JavaPersistentAttribute at = (JavaPersistentAttribute)nd; - if (!at.getParent().getParent().getResource().exists()) - return; - PictogramElement pe = featureProvider.getPictogramElementForBusinessObject(at.getParent()); - final UpdateAttributeFeature ft = new UpdateAttributeFeature(featureProvider); - final CustomContext ctx = new CustomContext(); - ctx.setInnerPictogramElement(pe); - Runnable runnable = new Runnable() { - @SuppressWarnings("deprecation") - public void run() { - try { - ft.execute(ctx); - } catch (Exception e) { - //$NON-NLS-1$ - } - } - }; - Display.getDefault().asyncExec(runnable); - } - } - - - public class AttributeRelationshipReferencePropertyChangeListener implements PropertyChangeListener { - - synchronized public void propertyChanged(PropertyChangeEvent event) { - Relationship rr = (Relationship)event.getSource(); - JpaNode p = rr.getParent(); - if (p == null) - return; - p = p.getParent(); - if (p == null) - return; - if (!JavaPersistentAttribute.class.isInstance(p)) - return; - JavaPersistentAttribute jpa = (JavaPersistentAttribute)p; - renewAttributeJoiningStrategyPropertyListener(jpa); - if (!jpa.getParent().getParent().getResource().exists()) - return; - if (featureProvider == null) - return; - PictogramElement pe = featureProvider.getPictogramElementForBusinessObject(jpa.getParent()); - final UpdateAttributeFeature ft = new UpdateAttributeFeature(featureProvider); - final CustomContext ctx = new CustomContext(); - ctx.setInnerPictogramElement(pe); - Runnable runnable = new Runnable() { - @SuppressWarnings("deprecation") - public void run() { - try { - ft.execute(ctx); - } catch (Exception e) { - //$NON-NLS-1$ - } - } - }; - Display.getDefault().asyncExec(runnable); - } - } - - public class AttributeMappingOptionalityChangeListener implements PropertyChangeListener { - - synchronized public void propertyChanged(PropertyChangeEvent event) { - Boolean optional = (Boolean)event.getNewValue(); - boolean isOptional = (optional == null) ? true : optional.booleanValue(); - OptionalMapping nm = (OptionalMapping)event.getSource(); - JavaPersistentAttribute jpa = (JavaPersistentAttribute)nm.getParent(); - IRelation rel = featureProvider.getRelationRelatedToAttribute(jpa); - boolean atBeginning = !rel.getOwner().equals(jpa.getParent()) || - !rel.getOwnerAttributeName().equals(jpa.getName()); - final Connection c = (Connection)featureProvider.getPictogramElementForBusinessObject(rel); - Collection<ConnectionDecorator> conDecs = c.getConnectionDecorators(); - Iterator<ConnectionDecorator> it = conDecs.iterator(); - final String newLabelText = isOptional ? - JPAEditorConstants.CARDINALITY_ZERO_ONE : - JPAEditorConstants.CARDINALITY_ONE; - while (it.hasNext()) { - final ConnectionDecorator cd = it.next(); - if (!JPAEditorUtil.isCardinalityDecorator(cd)) - continue; - double d = cd.getLocation(); - if ((atBeginning && d > 0.5) || (!atBeginning && d <= 0.5)) - continue; - - TransactionalEditingDomain ted = TransactionUtil.getEditingDomain(cd); - ted.getCommandStack().execute(new RecordingCommand(ted) { - @Override - protected void doExecute() { - Text txt = (Text)cd.getGraphicsAlgorithm(); - txt.setValue(newLabelText); - - Point pt = JPAEditorUtil.recalcTextDecoratorPosition((FreeFormConnection)c, cd); - Graphiti.getGaService().setLocation(txt, pt.x, pt.y, false); - } - }); - break; - } - } - } - - public class RemoveEntityAttributes implements Runnable { - ListRemoveEvent event = null; - - public RemoveEntityAttributes(ListRemoveEvent event) { - this.event = event; - } - - @SuppressWarnings("unchecked") - synchronized public void run() { - try { - ArrayIterator<JavaPersistentAttribute> it = (ArrayIterator<JavaPersistentAttribute>) event.getItems().iterator(); - Set<Shape> shapesToRemove = new HashSet<Shape>(); - while (it.hasNext()) { - JavaPersistentAttribute at = it.next(); - /* - String key = getKeyForBusinessObject(at); - remove(key); - */ - if (removeIgnore.remove(((PersistentType)at.getParent()).getName() + "." + at.getName())) //$NON-NLS-1$ - continue; - Shape atShape = (Shape) featureProvider.getPictogramElementForBusinessObject(at); - if (atShape == null) - continue; - - - JavaPersistentType jpt = (JavaPersistentType)event.getSource(); - JavaPersistentAttribute newAt = jpt.getAttributeNamed(at.getName()); - if (newAt != null) { - RemoveAttributeFeature ft = new RemoveAttributeFeature(featureProvider, true, true); - RemoveContext c = new RemoveContext(atShape); - try { - ft.remove(c); - } catch (Exception ee) { - //$NON-NLS-1$ - } - AddAttributeFeature ft1 = new AddAttributeFeature(featureProvider); - AddContext c1 = new AddContext(); - c1.setNewObject(newAt); - ft1.add(c1); - return; - } - - shapesToRemove.add(atShape); - IRelation rel = featureProvider.getRelationRelatedToAttribute(at); - if (rel == null) - continue; - Connection conn = (Connection) featureProvider.getPictogramElementForBusinessObject(rel); - while (conn != null) { - RemoveContext ctx = new RemoveContext(conn); - RemoveRelationFeature ft = new RemoveRelationFeature(featureProvider); - ft.remove(ctx); - conn = (Connection) featureProvider.getPictogramElementForBusinessObject(rel); - } - } - Iterator<Shape> itr = shapesToRemove.iterator(); - while (itr.hasNext()) { - Shape atShape = itr.next(); - RemoveContext ctx = new RemoveContext(atShape); - RemoveAttributeFeature ft = new RemoveAttributeFeature(featureProvider, true, true); - ft.remove(ctx); - } - Collection<IRelation> rels = JpaArtifactFactory.instance().produceAllRelations( - (JavaPersistentType) event.getSource(), featureProvider); - Iterator<IRelation> iter = rels.iterator(); - while (iter.hasNext()) { - IRelation rel = iter.next(); - ContainerShape ownerShape = (ContainerShape) featureProvider - .getPictogramElementForBusinessObject(rel.getOwner()); - ContainerShape inverseShape = (ContainerShape) featureProvider - .getPictogramElementForBusinessObject(rel.getInverse()); - AddConnectionContext cntx = new AddConnectionContext(JPAEditorUtil.getAnchor(ownerShape), - JPAEditorUtil.getAnchor(inverseShape)); - cntx.setNewObject(rel); - AddRelationFeature ft = new AddRelationFeature(featureProvider); - ft.add(cntx); - } - } catch (Exception e) { - //$NON-NLS-1$ - } - } - - } - - public class AddEntityAttributes implements Runnable { - ListAddEvent event = null; - - public AddEntityAttributes(ListAddEvent event) { - this.event = event; - } - - @SuppressWarnings("unchecked") - synchronized public void run() { - try { - JavaPersistentType jpt = (JavaPersistentType) event.getSource(); - ContainerShape entShape = (ContainerShape)featureProvider.getPictogramElementForBusinessObject(jpt); - - // remove invalidated relations (if any) - ArrayIterator<JavaPersistentAttribute> it = (ArrayIterator<JavaPersistentAttribute>) event.getItems().iterator(); - while (it.hasNext()) { - JavaPersistentAttribute at = it.next(); - //Shape atShape = (Shape) featureProvider.getPictogramElementForBusinessObject(at); - //if (atShape != null) - // continue; - if (addIgnore.remove(((PersistentType)at.getParent()).getName() + "." + at.getName())) //$NON-NLS-1$ - continue; - AddContext ctx = new AddContext(); - ctx.setNewObject(at); - ctx.setTargetContainer(entShape); - AddAttributeFeature ft = new AddAttributeFeature(featureProvider); - ft.add(ctx); - } - //JpaArtifactFactory.instance().remakeRelations((IJPAEditorFeatureProvider)featureProvider, entShape, jpt); - featureProvider.addJPTForUpdate(jpt.getName()); - - } catch (Exception e) { - //$NON-NLS-1$ - } - } - } - - public void addAttribForUpdate(PersistenceUnit pu, String entAtMappedBy) { - entityNameListener.addAttribForUpdate(pu, entAtMappedBy); - } - - - private void updateJPTName(JavaPersistentType jpt) { - String entName = JpaArtifactFactory.instance().getEntityName(jpt); - entName = JPAEditorUtil.returnSimpleName(entName); - ContainerShape entShape = (ContainerShape)featureProvider.getPictogramElementForBusinessObject(jpt); - JPAEditorUtil.setJPTNameInShape(entShape, entName); - } - - private void closeDiagramEditorIfProjectIsDeleted(IResourceChangeEvent event) { - final IResource resource = event.getResource(); - if (resource != null && !resource.exists() || event.getType() == IResourceChangeEvent.PRE_CLOSE || (event.getType() == IResourceChangeEvent.PRE_DELETE)) { - if (resource instanceof IProject) { - final IDiagramTypeProvider provider = featureProvider.getDiagramTypeProvider(); - if (provider instanceof JPAEditorDiagramTypeProvider) { - final JPADiagramEditor diagramBySelectedProject = ((JPAEditorDiagramTypeProvider) provider).getDiagramEditor(); - final Diagram diagram = ((JPAEditorDiagramTypeProvider)provider).getDiagram(); - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if ((ModelIntegrationUtil.getProjectByDiagram(diagram.getName()).getProject()).equals(resource)) { - page.closeEditor(diagramBySelectedProject, false); - } - } - }); - } - - } - } - } - - private void unregisterDeltedEntity(IResourceChangeEvent event) { - if((event.getType() == IResourceChangeEvent.PRE_CLOSE) || (event.getType() == IResourceChangeEvent.PRE_DELETE)) - return; - - IResourceDelta changedDelta = event.getDelta(); - IResourceDelta[] deltas = changedDelta.getAffectedChildren(); - for (IResourceDelta delta : deltas) { - final IResource resource = delta.getResource(); - if (resource != null && resource.exists()) { - if (resource instanceof IProject) { - IProject project = (IProject) resource; - for (IResourceDelta deltaResource : delta.getAffectedChildren()) { - List<IResourceDelta> resources = new ArrayList<IResourceDelta>(); - resources = findDeletedResource(deltaResource, resources); - for (IResourceDelta resourceDelta : resources) { - if (resourceDelta.getResource() instanceof File) { - IFile file = this.eclipseFacade.getWorkspace().getRoot().getFile(((File) resourceDelta.getResource()).getFullPath()); - if (!file.exists() && file.getFileExtension().equals("java")) { //$NON-NLS-1$ - try { - JpaProject jpaProject = JpaArtifactFactory.instance().getJpaProject((IProject) resource); - if (jpaProject != null) { - IJavaProject javaProject = JavaCore.create(project); - IPackageFragmentRoot[] fragmentRoots = javaProject.getAllPackageFragmentRoots(); - for (IPackageFragmentRoot fragmentRoot : fragmentRoots) { - if ((fragmentRoot instanceof PackageFragmentRoot) && fragmentRoot.getKind() == PackageFragmentRoot.K_SOURCE) { - PackageFragmentRoot packageFragmentRoot = (PackageFragmentRoot) fragmentRoot; - String sourcefolder = packageFragmentRoot.getResource().getName(); - String[] fq = file.getFullPath().toString().split(sourcefolder); - String fqName = fq[1].replace("/", "."); //$NON-NLS-1$ //$NON-NLS-2$ - fqName = fqName.replaceFirst(".", "").replace(".java", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - //JPAEditorUtil.createUnregisterEntityFromXMLJob(jpaProject, fqName); - } - } - } - } catch (CoreException e) { - JPADiagramEditorPlugin.logError(e); - } - } - } - } - } - } - } - } - } - - - private List<IResourceDelta> findDeletedResource(IResourceDelta delta, List<IResourceDelta> resources){ - IResourceDelta[] deltas = delta.getAffectedChildren(); - for (IResourceDelta del : deltas) { - findDeletedResource(del, resources); - if(del.getAffectedChildren().length==0) - resources.add(del); - } - return resources; - } - -} |