Author: bobtarling
Date: 2011-03-25 08:10:04-0700
New Revision: 19135
Modified:
trunk/src/argouml-app/src/org/argouml/i18n/action.properties
trunk/src/argouml-app/src/org/argouml/profile/internal/ocl/uml14/ModelAccessModelInterpreter.java
trunk/src/argouml-app/src/org/argouml/uml/GenCompositeClasses2.java
trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizAssocComposite.java
trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizBreakCircularComp.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAggregation.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UndoCoreHelperDecorator.java
trunk/src/argouml-core-model/src/org/argouml/model/CoreHelper.java
trunk/src/argouml-core-model/src/org/argouml/model/Facade.java
Log:
3 different set and get aggregation methods
1 always emulates UML 1.4
1 always emulates UML2
The other does behaviour of current implementation
Modified: trunk/src/argouml-app/src/org/argouml/i18n/action.properties
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/action.properties?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/action.properties (original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/action.properties 2011-03-25 08:10:04-0700
@@ -55,6 +55,9 @@
action.adjust-grid.none = Adjust Grid - None
action.adjust-grid-snap = Adjust Grid Snap
action.adjust-page-breaks = Adjust Page Breaks
+action.aggregation.composite = {0} is a composite part of {1}
+action.aggregation.aggregate = {0} is an aggregate part of {1}
+action.aggregation.none = No Aggregation
action.align-bottoms = Align Bottoms
action.align-horizontal-centers = Align Horizontal Centers
action.align-lefts = Align Lefts
Modified: trunk/src/argouml-app/src/org/argouml/profile/internal/ocl/uml14/ModelAccessModelInterpreter.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/profile/internal/ocl/uml14/ModelAccessModelInterpreter.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/profile/internal/ocl/uml14/ModelAccessModelInterpreter.java (original)
+++ trunk/src/argouml-app/src/org/argouml/profile/internal/ocl/uml14/ModelAccessModelInterpreter.java 2011-03-25 08:10:04-0700
@@ -104,7 +104,7 @@
if (Model.getFacade().isAAssociationEnd(subject)) {
if (type.equals(".")) {
if (feature.equals("aggregation")) {
- return Model.getFacade().getAggregation(subject);
+ return Model.getFacade().getAggregation1(subject);
}
if (feature.equals("changeability")) {
return Model.getFacade().getChangeability(subject);
Modified: trunk/src/argouml-app/src/org/argouml/uml/GenCompositeClasses2.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/GenCompositeClasses2.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/GenCompositeClasses2.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/GenCompositeClasses2.java 2011-03-25 08:10:04-0700
@@ -95,7 +95,7 @@
while (assocEnds.hasNext()) {
Object ae = assocEnds.next();
if (Model.getAggregationKind().getComposite().equals(
- Model.getFacade().getAggregation(ae))) {
+ Model.getFacade().getAggregation1(ae))) {
Object asc = Model.getFacade().getAssociation(ae);
ArrayList conn =
new ArrayList(Model.getFacade().getConnections(asc));
Modified: trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizAssocComposite.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizAssocComposite.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizAssocComposite.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizAssocComposite.java 2011-03-25 08:10:04-0700
@@ -333,9 +333,9 @@
// Start is a composite aggregation of end
- Model.getCoreHelper().setAggregation(ae0,
+ Model.getCoreHelper().setAggregation1(ae0,
Model.getAggregationKind().getComposite());
- Model.getCoreHelper().setAggregation(ae1,
+ Model.getCoreHelper().setAggregation1(ae1,
Model.getAggregationKind().getNone());
break;
@@ -343,9 +343,9 @@
// Start is a shared aggregation of end
- Model.getCoreHelper().setAggregation(ae0,
+ Model.getCoreHelper().setAggregation1(ae0,
Model.getAggregationKind().getAggregate());
- Model.getCoreHelper().setAggregation(ae1,
+ Model.getCoreHelper().setAggregation1(ae1,
Model.getAggregationKind().getNone());
break;
@@ -353,27 +353,27 @@
// End is a composite aggregation of start
- Model.getCoreHelper().setAggregation(ae0,
+ Model.getCoreHelper().setAggregation1(ae0,
Model.getAggregationKind().getNone());
- Model.getCoreHelper().setAggregation(ae1,
+ Model.getCoreHelper().setAggregation1(ae1,
Model.getAggregationKind().getComposite());
break;
case 3:
// End is a shared aggregation of start
- Model.getCoreHelper().setAggregation(ae0,
+ Model.getCoreHelper().setAggregation1(ae0,
Model.getAggregationKind().getNone());
- Model.getCoreHelper().setAggregation(ae1,
+ Model.getCoreHelper().setAggregation1(ae1,
Model.getAggregationKind().getAggregate());
break;
case 4:
// No aggregation
- Model.getCoreHelper().setAggregation(ae0,
+ Model.getCoreHelper().setAggregation1(ae0,
Model.getAggregationKind().getNone());
- Model.getCoreHelper().setAggregation(ae1,
+ Model.getCoreHelper().setAggregation1(ae1,
Model.getAggregationKind().getNone());
break;
Modified: trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizBreakCircularComp.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizBreakCircularComp.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizBreakCircularComp.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/cognitive/critics/WizBreakCircularComp.java 2011-03-25 08:10:04-0700
@@ -208,10 +208,10 @@
Object ae0 = conns.get(0);
Object ae1 = conns.get(1);
try {
- Model.getCoreHelper().setAggregation(
+ Model.getCoreHelper().setAggregation1(
ae0,
Model.getAggregationKind().getNone());
- Model.getCoreHelper().setAggregation(
+ Model.getCoreHelper().setAggregation1(
ae1,
Model.getAggregationKind().getNone());
} catch (Exception pve) {
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/SelectionClass.java 2011-03-25 08:10:04-0700
@@ -183,7 +183,7 @@
Collection assocEnds = Model.getFacade().getConnections(newEdge);
Object firstAE = assocEnds.iterator().next();
Object aggregationKind = Model.getAggregationKind().getComposite();
- Model.getCoreHelper().setAggregation(firstAE, aggregationKind);
+ Model.getCoreHelper().setAggregation1(firstAE, aggregationKind);
}
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAggregation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAggregation.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAggregation.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/ActionAggregation.java 2011-03-25 08:10:04-0700
@@ -57,9 +57,19 @@
*
*/
public class ActionAggregation extends UndoableAction {
+
+ public static final int NONE = 0;
+ public static final int AGGREGATE_END1 = 1;
+ public static final int AGGREGATE_END2 = 2;
+ public static final int COMPOSITE_END1 = 3;
+ public static final int COMPOSITE_END2 = 4;
+
private String str = "";
private Object agg = null;
+ Object associationEnd1;
+ Object associationEnd2;
+ int aggr;
////////////////////////////////////////////////////////////////
// static variables
@@ -88,11 +98,120 @@
////////////////////////////////////////////////////////////////
// constructors
+
+ /**
+ * The <code>ActionNavigability</code> constructor.
+ *
+ * @param assocStart a <code>MAssociationEnd</code> object at the start
+ * of an association.
+ * @param assocEnd a <code>MAssociationEnd</code> object at the end of
+ * an association.
+ * @param nav the type of navigation required in the association
+ * being either <ul> <li>BIDIRECTIONAL <li>STARTTOEND
+ * <li>ENDTOSTART </ul>
+ *
+ * @return the constructed class
+ */
+ public static ActionAggregation newActionAggregation(Object assocStart,
+ Object assocEnd,
+ int aggr) {
+ return new ActionAggregation(getDescription(assocStart, assocEnd, aggr),
+ assocStart,
+ assocEnd,
+ aggr);
+ }
/**
* The constructor.
+ *
+ * @param label the description as build in <code>getDescription</code>
+ * @param associationEnd1 association end 1
+ * @param associationEnd2 association end 2
+ * @param aggr the aggregation: one of
+ * NONE, AGGREGATE_END1, AGGREGATE_END2,
+ * COMPOSITE_END1, COMPOSITE_END
+ */
+ private ActionAggregation(
+ final String label,
+ final Object associationEnd1,
+ final Object associationEnd2,
+ final int aggr) {
+ super(label, null);
+ // Set the tooltip string:
+ putValue(Action.SHORT_DESCRIPTION, label);
+ this.aggr = aggr;
+ this.associationEnd1 = associationEnd1;
+ this.associationEnd2 = associationEnd2;
+ }
+
+ /**
+ * Build a description string from the given association ends,
+ * and the navigability.
+ *
+ * @param assocStart association end 1
+ * @param assocEnd association end 2
+ * @param nav the navigability
+ * @return the string containing a human-readible indication
+ * of the navigability
+ */
+ private static String getDescription(final Object assocEnd1,
+ final Object assocEnd2,
+ final int aggr) {
+ String startName =
+ Model.getFacade().getName(Model.getFacade().getType(assocEnd1));
+ String endName =
+ Model.getFacade().getName(Model.getFacade().getType(assocEnd2));
+
+ if (startName == null || startName.length() == 0) {
+ startName = Translator.localize("action.navigation.anon");
+ }
+ if (endName == null || endName.length() == 0) {
+ endName = Translator.localize("action.navigation.anon");
+ }
+
+ if (aggr == COMPOSITE_END1) {
+ return Translator.messageFormat(
+ "action.aggregation.composite",
+ new Object[] {
+ startName,
+ endName,
+ }
+ );
+ } else if (aggr == COMPOSITE_END2) {
+ return Translator.messageFormat(
+ "action.aggregation.composite",
+ new Object[] {
+ endName,
+ startName,
+ }
+ );
+ } else if (aggr == AGGREGATE_END1) {
+ return Translator.messageFormat(
+ "action.aggregation.aggregate",
+ new Object[] {
+ startName,
+ endName,
+ }
+ );
+ } else if (aggr == AGGREGATE_END2) {
+ return Translator.messageFormat(
+ "action.aggregation.aggregate",
+ new Object[] {
+ endName,
+ startName,
+ }
+ );
+ } else {
+ return Translator.localize("action.aggregation.none");
+ }
+ }
+
+ /**
+ * The constructor.
* @param a the aggregation kind object
* @param s "src" or "dest". Anything else is interpreted as "dest".
+ * @deprecated by Bob Tarling in 0.33.1 by Bob Tarling use
+ * ActionAggregation.newActionAggregation
*/
protected ActionAggregation(Object a, String s) {
super(Translator.localize(Model.getFacade().getName(a)),
@@ -109,26 +228,51 @@
*/
@Override
public void actionPerformed(ActionEvent ae) {
- super.actionPerformed(ae);
- List sels = Globals.curEditor().getSelectionManager().selections();
- if (sels.size() == 1) {
- Selection sel = (Selection) sels.get(0);
- Fig f = sel.getContent();
- Object owner = ((FigEdgeModelElement) f).getOwner();
- Collection ascEnds = Model.getFacade().getConnections(owner);
+ if (agg != null) {
+ oldActionPerformed(ae);
+ } else {
+ super.actionPerformed(ae);
+ if (aggr == AGGREGATE_END1) {
+ Model.getCoreHelper().setAggregation2(associationEnd1, Model.getAggregationKind().getAggregate());
+ Model.getCoreHelper().setAggregation2(associationEnd2, Model.getAggregationKind().getNone());
+ } else if (aggr == AGGREGATE_END2) {
+ Model.getCoreHelper().setAggregation2(associationEnd1, Model.getAggregationKind().getNone());
+ Model.getCoreHelper().setAggregation2(associationEnd2, Model.getAggregationKind().getAggregate());
+ } else if (aggr == COMPOSITE_END1) {
+ Model.getCoreHelper().setAggregation2(associationEnd1, Model.getAggregationKind().getComposite());
+ Model.getCoreHelper().setAggregation2(associationEnd2, Model.getAggregationKind().getNone());
+ } else if (aggr == COMPOSITE_END2) {
+ Model.getCoreHelper().setAggregation2(associationEnd1, Model.getAggregationKind().getNone());
+ Model.getCoreHelper().setAggregation2(associationEnd2, Model.getAggregationKind().getComposite());
+ } else {
+ Model.getCoreHelper().setAggregation2(associationEnd1, Model.getAggregationKind().getNone());
+ Model.getCoreHelper().setAggregation2(associationEnd2, Model.getAggregationKind().getNone());
+ }
+ }
+ }
+
+ public void oldActionPerformed(ActionEvent ae) {
+ super.actionPerformed(ae);
+ List sels = Globals.curEditor().getSelectionManager().selections();
+ if (sels.size() == 1) {
+ Selection sel = (Selection) sels.get(0);
+ Fig f = sel.getContent();
+ Object owner = ((FigEdgeModelElement) f).getOwner();
+ Collection ascEnds = Model.getFacade().getConnections(owner);
Iterator iter = ascEnds.iterator();
- Object ascEnd = null;
- if (str.equals("src")) {
- ascEnd = iter.next();
+ Object ascEnd = null;
+ if (str.equals("src")) {
+ ascEnd = iter.next();
} else {
while (iter.hasNext()) {
ascEnd = iter.next();
}
}
- Model.getCoreHelper().setAggregation(ascEnd, agg);
- }
+ Model.getCoreHelper().setAggregation(ascEnd, agg);
+ }
}
-
+
+
/*
* @see org.tigris.gef.undo.UndoableAction#isEnabled()
*/
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociation.java 2011-03-25 08:10:04-0700
@@ -419,111 +419,120 @@
@Override
public Vector getPopUpActions(MouseEvent me) {
Vector popUpActions = super.getPopUpActions(me);
- /* Check if multiple items are selected: */
- boolean ms = TargetManager.getInstance().getTargets().size() > 1;
- /* None of the menu-items below apply
- * when multiple modelelements are selected:*/
- if (ms) {
+ if (TargetManager.getInstance().getTargets().size() > 1) {
return popUpActions;
}
- // x^2 + y^2 = r^2 (equation of a circle)
- Point firstPoint = this.getFirstPoint();
- Point lastPoint = this.getLastPoint();
- int length = getPerimeterLength();
-
- int rSquared = (int) (.3 * length);
-
- // max distance is set at 100 pixels, (rSquared = 100^2)
- if (rSquared > 100) {
- rSquared = 10000;
- } else {
- rSquared *= rSquared;
- }
-
- int srcDeterminingFactor =
- getSquaredDistance(me.getPoint(), firstPoint);
- int destDeterminingFactor =
- getSquaredDistance(me.getPoint(), lastPoint);
-
- if (srcDeterminingFactor < rSquared
- && srcDeterminingFactor < destDeterminingFactor) {
-
- ArgoJMenu multMenu =
- new ArgoJMenu("menu.popup.multiplicity");
-
- multMenu.add(ActionMultiplicity.getSrcMultOne());
- multMenu.add(ActionMultiplicity.getSrcMultZeroToOne());
- multMenu.add(ActionMultiplicity.getSrcMultOneToMany());
- multMenu.add(ActionMultiplicity.getSrcMultZeroToMany());
- popUpActions.add(popUpActions.size() - getPopupAddOffset(),
- multMenu);
-
- ArgoJMenu aggMenu = new ArgoJMenu("menu.popup.aggregation");
-
- aggMenu.add(ActionAggregation.getSrcAggNone());
- aggMenu.add(ActionAggregation.getSrcAgg());
- aggMenu.add(ActionAggregation.getSrcAggComposite());
- popUpActions.add(popUpActions.size() - getPopupAddOffset(),
- aggMenu);
- } else if (destDeterminingFactor < rSquared) {
- ArgoJMenu multMenu =
- new ArgoJMenu("menu.popup.multiplicity");
- multMenu.add(ActionMultiplicity.getDestMultOne());
- multMenu.add(ActionMultiplicity.getDestMultZeroToOne());
- multMenu.add(ActionMultiplicity.getDestMultOneToMany());
- multMenu.add(ActionMultiplicity.getDestMultZeroToMany());
- popUpActions.add(popUpActions.size() - getPopupAddOffset(),
- multMenu);
-
- ArgoJMenu aggMenu = new ArgoJMenu("menu.popup.aggregation");
- aggMenu.add(ActionAggregation.getDestAggNone());
- aggMenu.add(ActionAggregation.getDestAgg());
- aggMenu.add(ActionAggregation.getDestAggComposite());
- popUpActions
- .add(popUpActions.size() - getPopupAddOffset(), aggMenu);
+ if (isPointCloseToEdgeEnd(me.getPoint())) {
+ buildMultiplicityMenu(popUpActions);
}
- // else: No particular options for right click in middle of line
- // Options available when right click anywhere on line
Object association = getOwner();
- if (association != null) {
- // Navigability menu with suboptions built dynamically to
- // allow navigability from atart to end, from end to start
- // or bidirectional
- Collection ascEnds = Model.getFacade().getConnections(association);
- Iterator iter = ascEnds.iterator();
- Object ascStart = iter.next();
- Object ascEnd = iter.next();
-
- if (Model.getFacade().isAClassifier(
- Model.getFacade().getType(ascStart))
- && Model.getFacade().isAClassifier(
- Model.getFacade().getType(ascEnd))) {
- ArgoJMenu navMenu =
- new ArgoJMenu("menu.popup.navigability");
-
- navMenu.add(ActionNavigability.newActionNavigability(
- ascStart,
- ascEnd,
- ActionNavigability.BIDIRECTIONAL));
- navMenu.add(ActionNavigability.newActionNavigability(
- ascStart,
- ascEnd,
- ActionNavigability.STARTTOEND));
- navMenu.add(ActionNavigability.newActionNavigability(
- ascStart,
- ascEnd,
- ActionNavigability.ENDTOSTART));
-
- popUpActions.add(popUpActions.size() - getPopupAddOffset(),
- navMenu);
- }
- }
+ Collection ascEnds = Model.getFacade().getConnections(association);
+ Iterator iter = ascEnds.iterator();
+ Object ascStart = iter.next();
+ Object ascEnd = iter.next();
+
+ buildNavigationMenu(popUpActions, ascStart, ascEnd);
+ buildAggregationMenu(popUpActions, ascStart, ascEnd);
return popUpActions;
}
+ private boolean isPointCloseToEdgeEnd(Point p) {
+ // x^2 + y^2 = r^2 (equation of a circle)
+ Point firstPoint = this.getFirstPoint();
+ Point lastPoint = this.getLastPoint();
+ int length = getPerimeterLength();
+
+ int rSquared = (int) (.3 * length);
+
+ // max distance is set at 100 pixels, (rSquared = 100^2)
+ if (rSquared > 100) {
+ rSquared = 10000;
+ } else {
+ rSquared *= rSquared;
+ }
+
+ int srcDeterminingFactor =
+ getSquaredDistance(p, firstPoint);
+ int destDeterminingFactor =
+ getSquaredDistance(p, lastPoint);
+
+ return destDeterminingFactor < rSquared || (srcDeterminingFactor < rSquared
+ && srcDeterminingFactor < destDeterminingFactor);
+ }
+
+ private void buildMultiplicityMenu(
+ final Vector popUpActions) {
+ ArgoJMenu menu =
+ new ArgoJMenu("menu.popup.multiplicity");
+ menu.add(ActionMultiplicity.getDestMultOne());
+ menu.add(ActionMultiplicity.getDestMultZeroToOne());
+ menu.add(ActionMultiplicity.getDestMultOneToMany());
+ menu.add(ActionMultiplicity.getDestMultZeroToMany());
+ popUpActions.add(popUpActions.size() - getPopupAddOffset(),
+ menu);
+ }
+
+
+ private void buildNavigationMenu(
+ final Vector popUpActions,
+ final Object ascStart,
+ final Object ascEnd) {
+ ArgoJMenu menu =
+ new ArgoJMenu("menu.popup.navigability");
+
+ menu.add(ActionNavigability.newActionNavigability(
+ ascStart,
+ ascEnd,
+ ActionNavigability.BIDIRECTIONAL));
+ menu.add(ActionNavigability.newActionNavigability(
+ ascStart,
+ ascEnd,
+ ActionNavigability.STARTTOEND));
+ menu.add(ActionNavigability.newActionNavigability(
+ ascStart,
+ ascEnd,
+ ActionNavigability.ENDTOSTART));
+
+ popUpActions.add(
+ popUpActions.size() - getPopupAddOffset(),
+ menu);
+ }
+
+ private void buildAggregationMenu(
+ final Vector popUpActions,
+ final Object ascStart,
+ final Object ascEnd) {
+ ArgoJMenu menu =
+ new ArgoJMenu("menu.popup.aggregation");
+
+ menu.add(ActionAggregation.newActionAggregation(
+ ascStart,
+ ascEnd,
+ ActionAggregation.NONE));
+ menu.add(ActionAggregation.newActionAggregation(
+ ascStart,
+ ascEnd,
+ ActionAggregation.AGGREGATE_END1));
+ menu.add(ActionAggregation.newActionAggregation(
+ ascStart,
+ ascEnd,
+ ActionAggregation.AGGREGATE_END2));
+ menu.add(ActionAggregation.newActionAggregation(
+ ascStart,
+ ascEnd,
+ ActionAggregation.COMPOSITE_END1));
+ menu.add(ActionAggregation.newActionAggregation(
+ ascStart,
+ ascEnd,
+ ActionAggregation.COMPOSITE_END2));
+ popUpActions.add(
+ popUpActions.size() - getPopupAddOffset(),
+ menu);
+ }
+
/**
* Updates the multiplicity fields.
*/
@@ -918,38 +927,14 @@
}
/**
- * Get the aggregation kind to display at this end
- * @return the aggregation kind or null if this is not a binary association
- */
- private Object getAggregateKind() {
- if (Model.getFacade().getUmlVersion().charAt(0) == '1') {
- return Model.getFacade().getAggregation(getOwner());
- }
- Object ass = Model.getFacade().getAssociation(getOwner());
- Collection ends = Model.getFacade().getConnections(ass);
- if (ends.size() != 2) {
- // Aggregation is meaningless in a n-ary association
- // so always assume none.
- return Model.getAggregationKind().getNone();
- }
- Iterator it = ends.iterator();
- Object aggEnd = it.next();
- if (aggEnd != getOwner()) {
- return Model.getFacade().getAggregation(aggEnd);
- } else {
- return Model.getFacade().getAggregation(it.next());
- }
- }
-
- /**
* @return the current arrow type of this end of the association
*/
public int getArrowType() {
assert getOwner() != null;
- final Object ak = getAggregateKind();
- boolean nav = Model.getFacade().isNavigable(getOwner());
+ final Object ak = Model.getFacade().getAggregation1(getOwner());
+ final boolean nav = Model.getFacade().isNavigable(getOwner());
int arrowType;
if (Model.getAggregationKind().getAggregate().equals(ak)) {
Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java (original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java 2011-03-25 08:10:04-0700
@@ -20,6 +20,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -1326,7 +1327,28 @@
handle));
}
- public void setAggregation(final Object handle, final Object aggregationKind) {
+ public void setAggregation(
+ final Object handle,
+ final Object aggregationKind) {
+ setAggregation2(handle, aggregationKind);
+ }
+
+ public void setAggregation1(
+ final Object handle,
+ final Object aggregationKind) {
+ Property p = (Property) handle;
+ Association ass = p.getAssociation();
+ Collection assEnds = modelImpl.getFacade().getConnections(ass);
+ Iterator it = assEnds.iterator();
+ Object other = it.next();
+ if (other == handle) {
+ other = it.next();
+ }
+
+ setAggregation2(handle, aggregationKind);
+ }
+
+ public void setAggregation2(final Object handle, final Object aggregationKind) {
if (!(handle instanceof Property)) {
throw new IllegalArgumentException(
"handle must be instance of Property"); //$NON-NLS-1$
@@ -1358,7 +1380,8 @@
"Set the aggregation # to the association end #",
aggregationKind, handle));
}
-
+
+
public void setAnnotatedElements(final Object handle, final Collection elems) {
if (!(handle instanceof Comment)) {
throw new IllegalArgumentException(
Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java (original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java 2011-03-25 08:10:04-0700
@@ -219,8 +219,28 @@
public Object getAddition(Object handle) {
return ((Include) handle).getAddition();
}
-
+
public Object getAggregation(Object handle) {
+ return getAggregation2(handle);
+ }
+
+
+ public Object getAggregation1(Object handle) {
+ Property p = (Property) handle;
+ Association ass = p.getAssociation();
+ Collection assEnds = getConnections(ass);
+ Iterator it = assEnds.iterator();
+ if (!it.hasNext()) {
+ return null;
+ }
+ Object other = it.next();
+ if (other == handle) {
+ other = it.next();
+ }
+ return getAggregation2(other);
+ }
+
+ public Object getAggregation2(Object handle) {
if (!(handle instanceof Property)) {
throw new IllegalArgumentException(
"handle must be instance of Property"); //$NON-NLS-1$
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java 2011-03-25 08:10:04-0700
@@ -2592,8 +2592,11 @@
throw new IllegalArgumentException("handle: " + handle);
}
-
public void setAggregation(Object handle, Object aggregationKind) {
+ setAggregation1(handle, aggregationKind);
+ }
+
+ public void setAggregation1(Object handle, Object aggregationKind) {
if (handle instanceof AssociationEnd
&& aggregationKind instanceof AggregationKind) {
AggregationKind ak = (AggregationKind) aggregationKind;
@@ -2623,6 +2626,20 @@
+ " or aggregationKind: " + aggregationKind);
}
+ public void setAggregation2(Object handle, Object aggregationKind) {
+ if (handle instanceof AssociationEnd
+ && aggregationKind instanceof AggregationKind) {
+ // Simulates UML2 getting the aggregation from the opposite end
+ AssociationEnd assEnd = (AssociationEnd) handle;
+ Collection<AssociationEnd> assEnds = assEnd.getAssociation().getConnection();
+ Iterator<AssociationEnd> it = assEnds.iterator();
+ AssociationEnd other = it.next();
+ setAggregation1(other, aggregationKind);
+ }
+ throw new IllegalArgumentException("handle: " + handle
+ + " or aggregationKind: " + aggregationKind);
+ }
+
public void setAnnotatedElements(Object handle, Collection elems) {
if (handle instanceof Comment && elems instanceof List) {
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/FacadeMDRImpl.java 2011-03-25 08:10:04-0700
@@ -3786,6 +3786,10 @@
public Object getAggregation(Object handle) {
+ return getAggregation1(handle);
+ }
+
+ public Object getAggregation1(Object handle) {
try {
if (handle instanceof AssociationEnd) {
return ((AssociationEnd) handle).getAggregation();
@@ -3796,6 +3800,26 @@
return illegalArgumentObject(handle);
}
+ public Object getAggregation2(Object handle) {
+ try {
+ if (handle instanceof AssociationEnd) {
+ // Simulates UML2 getting the aggregation from the opposite end
+ AssociationEnd assEnd = (AssociationEnd) handle;
+ Collection<AssociationEnd> assEnds = assEnd.getAssociation().getConnection();
+ Iterator<AssociationEnd> it = assEnds.iterator();
+ AssociationEnd other = it.next();
+ if (other != assEnd) {
+ return other.getAggregation();
+ } else {
+ other = it.next();
+ return other.getAggregation();
+ }
+ }
+ } catch (InvalidObjectException e) {
+ throw new InvalidElementException(e);
+ }
+ return illegalArgumentObject(handle);
+ }
public String getAlias(Object handle) {
try {
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UndoCoreHelperDecorator.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UndoCoreHelperDecorator.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UndoCoreHelperDecorator.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UndoCoreHelperDecorator.java 2011-03-25 08:10:04-0700
@@ -235,6 +235,22 @@
}, aggregationKind, Model.getFacade().getAggregation(handle));
}
+ public void setAggregation1(final Object handle, Object aggregationKind) {
+ createCommand(new ObjectSetter() {
+ public void set(Object value) {
+ getComponent().setAggregation1(handle, value);
+ }
+ }, aggregationKind, Model.getFacade().getAggregation1(handle));
+ }
+
+
+ public void setAggregation2(final Object handle, Object aggregationKind) {
+ createCommand(new ObjectSetter() {
+ public void set(Object value) {
+ getComponent().setAggregation2(handle, value);
+ }
+ }, aggregationKind, Model.getFacade().getAggregation2(handle));
+ }
public void setLeaf(final Object handle, boolean flag) {
createCommand(new BooleanSetter() {
Modified: trunk/src/argouml-core-model/src/org/argouml/model/CoreHelper.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/CoreHelper.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/CoreHelper.java (original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/CoreHelper.java 2011-03-25 08:10:04-0700
@@ -875,6 +875,8 @@
/**
* Set the aggregation attribute of an AssociationEnd.
+ * This is implementation dependent regarding whether the UML version
+ * considers aggregation on the container or aggregated item
*
* @param handle
* the AssociationEnd
@@ -885,6 +887,34 @@
void setAggregation(Object handle, Object aggregationKind);
/**
+ * Set the aggregation attribute of an AssociationEnd.
+ * This assumes UML1 style where the aggregation is held on the
+ * containing part of the association rather than the aggregate.
+ *
+ * @param handle
+ * the AssociationEnd
+ * @param aggregationKind
+ * an {@link AggregationKind} of Aggregate, Composite, or None
+ * returned from {@link Model#getAggregationKind()}.
+ */
+ void setAggregation1(Object handle, Object aggregationKind);
+
+
+ /**
+ * Set the aggregation attribute of an AssociationEnd.
+ * This assumes UML2 style where the aggregation is held on the
+ * aggregate part of the association rather than the container.
+ *
+ * @param handle
+ * the AssociationEnd
+ * @param aggregationKind
+ * an {@link AggregationKind} of Aggregate, Composite, or None
+ * returned from {@link Model#getAggregationKind()}.
+ */
+ void setAggregation2(Object handle, Object aggregationKind);
+
+
+ /**
* Set the list of annotated elements for the given comment.
*
* @param handle the given comment
Modified: trunk/src/argouml-core-model/src/org/argouml/model/Facade.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/Facade.java?view=diff&pathrev=19135&r1=19134&r2=19135
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/Facade.java (original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/Facade.java 2011-03-25 08:10:04-0700
@@ -3046,6 +3046,8 @@
/**
* Return the AggregationKind of a given AssociationEnd.
+ * This is implementation dependent regarding whether the UML version
+ * considers aggregation on the container or aggregated item
*
* @param handle the AssociationEnd
* @return the AggregationKind
@@ -3053,6 +3055,26 @@
Object getAggregation(Object handle);
/**
+ * Return the AggregationKind of a given AssociationEnd.
+ * This assumes UML1 style where the aggregation is held on the
+ * containing part of the association rather than the aggregate.
+ *
+ * @param handle the AssociationEnd
+ * @return the AggregationKind
+ */
+ Object getAggregation1(Object handle);
+
+ /**
+ * Return the AggregationKind of a given AssociationEnd.
+ * This assumes UML2 style where the aggregation is held on the
+ * aggregate part of the association rather than the container.
+ *
+ * @param handle the AssociationEnd
+ * @return the AggregationKind
+ */
+ Object getAggregation2(Object handle);
+
+ /**
* Return the alias of an ElementImport.
*
* @param handle the ElementImport
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2714166
To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.