# NotationPackage Updaten



## Tomas (4. Nov 2009)

hi,

mein Problem liegt im NotationPackage. und zwar hab ich attribute die mit dem NotationPackage mitaktualisiert gehören. Wie stelle ich es an?


```
@Override
	protected void handleNotificationEvent(Notification notification) {

		if (notification.getNotifier() instanceof ElementImpl) {
			RectangleImpl notifier = (RectangleImpl) notification.getNotifier();

			int featureId = ((EAttribute) notification.getFeature())
					.getFeatureID();
			
			x = notifier.getX();

			y = notifier.getY();

			width = notifier.getWidth();

			height = notifier.getHeight();
			
			switch (featureId) {
			case 0:
				this.getPrimaryShape().updateFace();
				break;
			case 1:
				this.getPrimaryShape().updateFace();
				break;
			case 3:
				this.getPrimaryShape().updateFace();
				break;
			case 4:
				this.getPrimaryShape().updateFace();
				break;
			default:
				System.out.println("default");
				break;
			}

			System.out.println("getFeatureid "
					+ ((EAttribute) notification.getFeature()).getFeatureID()
					+ " value " + notification.getNewValue());
			// notifier.eSet(((EAttribute)notification.getFeature()).getFeatureID(),
			// notification.getNewValue());

			((RectangleShapeFigure) getPrimaryShape()).updateFace();
		}
		super.handleNotificationEvent(notification);
	}
```

Also sobald sich etwas an der Größe der Figur ändert, werden die Attributswerte mitgesetzt. doch das problem ist, dass die Notationpackage werte nicht geändert werden, auch nicht mit setLocation() setSize() refresh(), wie kann ich diese manuel setzen? ist es möglich? oder muss ich mir bei jedem mal neu laden, alle verfügbaren elemente reinladen, .updateFace() machen (setzt mittels den hilfsvariablen die größe), dass sie sich zur aktuellen größe wieder ausklappen?

Also kann mir wer sagen wie ich am besten Werte vom NotationPackage ändere?
 ich hab 3 möglichkeiten nur weiß ich nicht welche die bessere ist, da alle nicht so toll sind
 -über addPropertyChangeListener()
 -über aktuallisierung bei neuladen und diese neu zeichnen (nur wenn es anders nicht geht oder nur vorrübergehend)
 -direktes setzen im NotationPackage, nur weiß ich nicht wie
meine werte sind übrigens

NotationPackage.eINSTANCE.getLocation_X();
NotationPackage.eINSTANCE.getLocation_Y();
.
.
(die Location und Size)


Danke


----------



## Wildcard (4. Nov 2009)

Verstehe ich das richtig das dein Domain Model selbst attribute für Size, Location usw. hat?
Das würde ich nicht tun, genau dafür hast du doch das Notation Model, um Domain von Darstellung sauber zu trennen.


----------



## Tomas (5. Nov 2009)

Jo, es ist aber egal, nur wie ändere ich das NotationPackage? Im Grunde ist es noch immer noch getrennt, da ich die internen variablen mit dem NotationPackage befülle. 
Die Frage bleibt dennoch offen.


----------



## Wildcard (5. Nov 2009)

Das Notation Package ist ein EMF Modell wie deines auch. Sprich, hast du eine Notation Instanz kannst du auch dessen Attribute verändern, daher verstehe ich nicht ganz was du wissen möchtest.
Wenn du innerhalb des GEF Viewers bist, reicht es AFAIR Layout Constraints auf einer Node zu setzen, das wird dann persistiert.


----------



## Tomas (10. Dez 2009)

Als grundvoraussetung wird von mir angenommen, dass notation model die visualisierungsmetadaten (x,y- coordinaten, height,witdth) beinhaltet und verwaltet. Also so hab ichs mir rausgeschaut.

also das grundproblem ist, wenn diese werte ändere wird das notation model nicht mitgeändert. Sprich ich speichere mein diagram ab und beim neuladen wird zwar der richtige Wert in der Property View angezeigt, doch dieser stimmt nicht mehr mit dem im Notation model zusammen. also du hast es ziemlich gut auf den punkt gebracht, dass ich es persistieren muss. 
Ich setze bei jeder veränderung der figur ein layout constraint.


```
((GraphicalEditPart) getParent()).setLayoutConstraint(this,
					getPrimaryShape().getParent(), newBounds);
```

auch .setSize() und .setLocation() haben keine wirkung.

Danke


----------



## Wildcard (10. Dez 2009)

Ich meinte eigentlich auf dem Notation Object:

```
Node node = (Node)((GraphicalEditPart) getParent()).getModel();
node.setLayoutConstraints();
```


----------



## Tomas (14. Dez 2009)

so habs jetzt. hast mich auf den richtigen weg gebracht, danke. meine funktionierende lösung



```
/**
	 * @generated NOT
	 */
	private void refreshFigure(EllipseFigure ellipse) {
		org.eclipse.draw2d.geometry.Rectangle rectangle = new org.eclipse.draw2d.geometry.Rectangle(
				x, y, cx * 2, cy * 2);

		if (getPrimaryShape() != null) {
			ShapeImpl model = (ShapeImpl) getModel();
			BoundsImpl layout = (BoundsImpl) model.getLayoutConstraint();
			layout.setHeight(rectangle.height);
			layout.setWidth(rectangle.width);
			layout.setX(rectangle.x);
			layout.setY(rectangle.y);
			model.setLayoutConstraint(layout);
			// model.setLayoutConstraint(element);
			//((GraphicalEditPart) getParent()).setLayoutConstraint(this,
			//		ellipse, rectangle);
		}
	}
```


----------

