Skip to content

Commit

Permalink
Merge pull request #1730 from umple/associationMixset
Browse files Browse the repository at this point in the history
Refactor association as feature plus feature interaction
  • Loading branch information
TimLethbridge committed May 31, 2021
2 parents 4b08639 + 98924c0 commit 55635aa
Show file tree
Hide file tree
Showing 12 changed files with 589 additions and 490 deletions.
350 changes: 180 additions & 170 deletions cruise.umple/src/constraint/Umple_CodeConstraint.ump

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion cruise.umple/src/filter/UmpleFilterModel.ump
Expand Up @@ -11,7 +11,9 @@ class Filter
name;
Integer superCount = -1;
Integer subCount = 0;
Integer associationCount = -1;
mixset Association {
Integer associationCount = -1;
}
String[] values;
String[] filterValues;
}
Expand Down
24 changes: 14 additions & 10 deletions cruise.umple/src/filter/UmpleInternalParser_CodeFilter.ump
Expand Up @@ -49,9 +49,11 @@ class UmpleInternalParser
{
addSubValue(f,t);
}
if(t.is("association"))
{
addAssociationValue(f,t);
mixset Association {
if(t.is("association"))
{
addAssociationValue(f,t);
}
}
if(t.is("filterValue"))
{
Expand Down Expand Up @@ -101,15 +103,17 @@ class UmpleInternalParser
}
}
}

private void addAssociationValue(Filter f, Token t)
{
for(Token nt : t.getSubTokens())

mixset Association {
private void addAssociationValue(Filter f, Token t)
{
if("associationNum".equals(nt.getName()))
for(Token nt : t.getSubTokens())
{
int associationNum = Integer.parseInt(nt.getValue("associationNum"));
f.setAssociationCount(associationNum);
if("associationNum".equals(nt.getName()))
{
int associationNum = Integer.parseInt(nt.getValue("associationNum"));
f.setAssociationCount(associationNum);
}
}
}
}
Expand Down
23 changes: 16 additions & 7 deletions cruise.umple/src/filter/Umple_Code_Filter.ump
Expand Up @@ -54,9 +54,11 @@ mixset Filter {
}
}

if(f.hasAssociation())
{
markRelatedClass(f.getAssociationCount());
mixset Association {
if(f.hasAssociation())
{
markRelatedClass(f.getAssociationCount());
}
}

if(!f.hasSuper())
Expand All @@ -81,6 +83,7 @@ mixset Filter {
UmpleClass clazz = umpleClasses.get(i);
if (!clazz.getFilteredin())
{
mixset Association {
// Chop out it and its associations
for(Association a : clazz.getAssociations())
{
Expand Down Expand Up @@ -114,6 +117,8 @@ mixset Filter {
}
removeUmpleClass(clazz);
clazz.delete();

}
}
else {
// Flag its interfaces to keep
Expand Down Expand Up @@ -146,10 +151,12 @@ mixset Filter {
{
return getFilterValues().length > 0;
}

public boolean hasAssociation()
{
return getAssociationCount() > 0;

mixset Association {
public boolean hasAssociation()
{
return getAssociationCount() > 0;
}
}

public boolean hasSub()
Expand Down Expand Up @@ -199,6 +206,7 @@ mixset Filter {
// Fragment source file: Umple_Code.ump
// Line : 571
class UmpleModel {
mixset Association {
private void markRelatedClass(int asso)
{
ArrayList<String> names = new ArrayList<String>();
Expand All @@ -222,6 +230,7 @@ mixset Filter {
names.add(a.getType());
}
}
}

private void markClassByName(ArrayList<String> names)
{
Expand Down
20 changes: 15 additions & 5 deletions cruise.umple/src/fixml/UmpleInternalParser_FIXML.ump
Expand Up @@ -3,8 +3,10 @@
class UmpleInternalParser {
Map<Attribute,Token> fixmlLastIntilialization = new HashMap<Attribute, Token>();
Map<Attribute,Integer> fixmlAttributeCount = new HashMap<Attribute, Integer>();
Map<Association,List<Token>> afixmlLastIntilialization = new HashMap<Association, List<Token>>();
Map<Association,Integer> afixmlAttributeCount = new HashMap<Association, Integer>();
mixset Association {
Map<Association,List<Token>> afixmlLastIntilialization = new HashMap<Association, List<Token>>();
Map<Association,Integer> afixmlAttributeCount = new HashMap<Association, Integer>();
}
//----------------------------------------------------------------------------
//---------------------------------Start--------------------------------------
//----------------------------------------------------------------------------
Expand Down Expand Up @@ -42,7 +44,9 @@ class UmpleInternalParser {
if (subToken.getName().equals("fixmlContent")) {
analyzeFIXMLContetnt(subToken);
//assignInitialValues(); // based-on-single-attributes
assignAssociationInitialValues(); // based-on-single-associations
mixset Association {
assignAssociationInitialValues(); // based-on-single-associations
}
}
}
}
Expand Down Expand Up @@ -103,10 +107,14 @@ class UmpleInternalParser {
} else if (subToken.getName().equals("endContent")){
UmpleClass rUClass = analyzeFIXMLEndContetnt(uClass,subToken);
//addAttributes(uClass, rUClass,subToken); //based-on-single-attributes
addAssociation(uClass, rUClass,subToken); // based-on-single-associations
mixset addAssociation {
addAssociation(uClass, rUClass,subToken); // based-on-single-associations
}
} else if (subToken.getName().equals("extendContent")) {
UmpleClass rUClass = analyzeFIXMLextendedContentContetnt(subToken);
addAssociation(uClass, rUClass,subToken); // based-on-single-associations
mixset Association {
addAssociation(uClass, rUClass,subToken); // based-on-single-associations
}
//addAttributes(uClass, rUClass,subToken); //based-on-single-attributes
}
}
Expand Down Expand Up @@ -314,6 +322,7 @@ class UmpleInternalParser {
//---------------------------------end----------------------------------------
//----------------------------------------------------------------------------
//---------------------------------Start--------------------------------------
mixset Association {
private void addAssociation(UmpleClass uClass, UmpleClass rUClass, Token mainToken){
Multiplicity m = new Multiplicity();
Association aAss = getModel().getAssociation(rUClass.getName()+"_Object");
Expand Down Expand Up @@ -486,6 +495,7 @@ class UmpleInternalParser {
value = value.subSequence(0, value.length()-2) + ")";
return value;
}
}
//---------------------------------end----------------------------------------
//----------------------------------------------------------------------------
//---------------------------------Start--------------------------------------
Expand Down
59 changes: 31 additions & 28 deletions cruise.umple/src/layout/UmpleInternalParser_CodeLayout.ump
Expand Up @@ -49,19 +49,21 @@ class UmpleInternalParser
if(!theColor.endsWith("\"")) theColor= theColor+"\"";
inUmpleClassifier.setDisplayColor(theColor);
}
else if (token.is("associationPosition"))
{
String name = token.getValue("name");
Association assoc = model.getAssociation(name);

if (assoc != null)
mixset Association {
else if (token.is("associationPosition"))
{
assoc.setName(name);
for(Token position : token.getSubTokens())
String name = token.getValue("name");
Association assoc = model.getAssociation(name);

if (assoc != null)
{
if (position.is("coordinate"))
assoc.setName(name);
for(Token position : token.getSubTokens())
{
assoc.addPosition(new Coordinate(position.getIntValue("x"),position.getIntValue("y"),0,0));
if (position.is("coordinate"))
{
assoc.addPosition(new Coordinate(position.getIntValue("x"),position.getIntValue("y"),0,0));
}
}
}
}
Expand Down Expand Up @@ -108,25 +110,26 @@ class UmpleInternalParser
c.getCoordinates().setStatus(Coordinate.Status.Defaulted);
}
}

// Layout associations
for (int i=0; i<model.numberOfAssociations(); i++)
{
Association a = model.getAssociation(i);

if (associationIsBetweenClassAndInterface (a)){continue;}
if (associationIsBetweenClassAndTrait (a)){continue;}

int numberOfPositions = a.numberOfPositions();

if (numberOfPositions < 2)
mixset Association {
// Layout associations
for (int i=0; i<model.numberOfAssociations(); i++)
{
Coordinate[] defaults = model.getDefaultAssociationPosition(a);
if (defaults==null) continue;
a.addPosition(defaults[0]);
a.addPosition(defaults[1]);
a.getPosition(0).setStatus(Coordinate.Status.Defaulted);
a.getPosition(1).setStatus(Coordinate.Status.Defaulted);
Association a = model.getAssociation(i);

if (associationIsBetweenClassAndInterface (a)){continue;}
if (associationIsBetweenClassAndTrait (a)){continue;}

int numberOfPositions = a.numberOfPositions();

if (numberOfPositions < 2)
{
Coordinate[] defaults = model.getDefaultAssociationPosition(a);
if (defaults==null) continue;
a.addPosition(defaults[0]);
a.addPosition(defaults[1]);
a.getPosition(0).setStatus(Coordinate.Status.Defaulted);
a.getPosition(1).setStatus(Coordinate.Status.Defaulted);
}
}
}
}
Expand Down

0 comments on commit 55635aa

Please sign in to comment.