blob: 970e89a29e4a6bc8b3719c6c173d42cc9a92e93b [file] [log] [blame]
### Eclipse Workspace Patch 1.0
#P org.eclipse.gmf.examples.eclipsecon.library.diagram.custom
Index: plugin.xml
===================================================================
RCS file: /cvsroot/technology/org.eclipse.gmf/examples/org.eclipse.gmf.examples.eclipsecon.library.diagram.custom/plugin.xml,v
retrieving revision 1.1
diff -u -r1.1 plugin.xml
--- plugin.xml 16 Feb 2007 23:08:27 -0000 1.1
+++ plugin.xml 17 Feb 2007 00:03:10 -0000
@@ -21,4 +21,13 @@
</popupContribution>
</contributionItemProvider>
</extension>
+ <extension
+ point="org.eclipse.gmf.runtime.diagram.ui.decoratorProviders">
+ <decoratorProvider
+ class="org.eclipse.gmf.examples.eclipsecon.library.diagram.custom.provider.BadShelfDecoratorProvider">
+ <Priority
+ name="Medium">
+ </Priority>
+ </decoratorProvider>
+ </extension>
</plugin>
Index: src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/decoration/BadShelfDecorator.java
===================================================================
RCS file: src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/decoration/BadShelfDecorator.java
diff -N src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/decoration/BadShelfDecorator.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/decoration/BadShelfDecorator.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,84 @@
+package org.eclipse.gmf.examples.eclipsecon.library.diagram.custom.decoration;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gmf.examples.eclipsecon.library.LibraryPackage;
+import org.eclipse.gmf.examples.eclipsecon.library.Shelf;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.AbstractDecorator;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.HashedCircle;
+import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
+import org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter;
+import org.eclipse.gmf.runtime.notation.View;
+
+
+public class BadShelfDecorator
+ extends AbstractDecorator {
+
+ public BadShelfDecorator(IDecoratorTarget decoratorTarget) {
+ super(decoratorTarget);
+ }
+
+ public void activate() {
+ refresh();
+ }
+
+ public void refresh() {
+ removeDecoration();
+ EditPart editPart = (EditPart)getDecoratorTarget().getAdapter(EditPart.class);
+ View view = (View) getDecoratorTarget().getAdapter(View.class);
+ Shelf shelf = (Shelf)view.getElement();
+ int count = getEmployeeCount(shelf);
+ if (count>1){
+ int radius = MapModeUtil.getMapMode(((GraphicalEditPart)editPart).getFigure()).DPtoLP(8);
+ HashedCircle circle = new HashedCircle(HashedCircle.HashType.X,radius);
+ circle.setFill(false);
+ setDecoration(getDecoratorTarget().addShapeDecoration(circle,
+ IDecoratorTarget.Direction.NORTH_EAST, MapModeUtil.getMapMode(((ShapeEditPart)editPart).getFigure()).DPtoLP(-4),
+ false));
+ }
+ }
+
+ private int getEmployeeCount(Shelf shelf) {
+ int count = 0 ;
+ CrossReferenceAdapter crossReferenceAdapter = getCrossReferenceAdapter(shelf);
+ Collection referencers = crossReferenceAdapter
+ .getNonNavigableInverseReferences(shelf);
+ if (!referencers.isEmpty()) {
+ for (Iterator iterator = referencers.iterator(); iterator.hasNext();) {
+ Setting setting = (Setting) iterator.next();
+ if (setting.getEStructuralFeature() == LibraryPackage.Literals.EMPLOYEE__SHELVES){
+ count++;
+
+ }
+ }
+ }
+ return count;
+ }
+
+ private CrossReferenceAdapter getCrossReferenceAdapter(Shelf shelf) {
+ CrossReferenceAdapter crossReferenceAdapter = CrossReferenceAdapter
+ .getExistingCrossReferenceAdapter(shelf);
+ if (crossReferenceAdapter == null) {
+ TransactionalEditingDomain domain = TransactionUtil
+ .getEditingDomain(shelf);
+
+ if (domain != null) {
+ crossReferenceAdapter = CrossReferenceAdapter
+ .getCrossReferenceAdapter(domain.getResourceSet());
+ }
+ }
+ return crossReferenceAdapter;
+ }
+
+
+
+
+}
Index: src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/provider/BadShelfDecoratorProvider.java
===================================================================
RCS file: src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/provider/BadShelfDecoratorProvider.java
diff -N src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/provider/BadShelfDecoratorProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/gmf/examples/eclipsecon/library/diagram/custom/provider/BadShelfDecoratorProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,50 @@
+package org.eclipse.gmf.examples.eclipsecon.library.diagram.custom.provider;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.examples.eclipsecon.library.Shelf;
+import org.eclipse.gmf.examples.eclipsecon.library.diagram.custom.decoration.BadShelfDecorator;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.CreateDecoratorsOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
+
+
+public class BadShelfDecoratorProvider
+ extends AbstractProvider
+ implements IDecoratorProvider {
+
+ public void createDecorators(IDecoratorTarget decoratorTarget) {
+ EditPart ep = (EditPart)decoratorTarget.getAdapter(EditPart.class);
+ if (ep != null && ep instanceof IPrimaryEditPart) {
+ GraphicalEditPart gEP = (GraphicalEditPart)ep;
+ if (gEP.hasNotationView()){
+ decoratorTarget.installDecorator("BAD_SHELF_DECORATOR",
+ new BadShelfDecorator(decoratorTarget));
+ }
+ }
+ }
+
+
+
+ public boolean provides(IOperation operation) {
+ if (!(operation instanceof CreateDecoratorsOperation)) {
+ return false;
+ }
+
+ IDecoratorTarget decoratorTarget = ((CreateDecoratorsOperation) operation)
+ .getDecoratorTarget();
+
+ EditPart ep = (EditPart)decoratorTarget.getAdapter(EditPart.class);
+ if (ep instanceof GraphicalEditPart && ep instanceof IPrimaryEditPart){
+ GraphicalEditPart gEP = (GraphicalEditPart)ep;
+ if (gEP.hasNotationView()){
+ return (gEP.resolveSemanticElement() instanceof Shelf);
+ }
+ }
+ return false;
+ }
+
+}