/** Return a Fig that can be used to represent the given edge */ public FigEdge getFigEdgeFor(GraphModel gm, Layer lay, Object edge) { if (edge instanceof MDependency) { MDependency dep = (MDependency) edge; FigDependency depFig = new FigDependency(dep); MModelElement supplier = (MModelElement) ((dep.getSuppliers().toArray())[0]); MModelElement client = (MModelElement) ((dep.getClients().toArray())[0]); FigNode supFN = (FigNode) lay.presentationFor(supplier); FigNode cliFN = (FigNode) lay.presentationFor(client); depFig.setSourcePortFig(cliFN); depFig.setSourceFigNode(cliFN); depFig.setDestPortFig(supFN); depFig.setDestFigNode(supFN); depFig.getFig().setLayer(lay); depFig.getFig().setDashed(true); return depFig; } if (edge instanceof MAssociation) { MAssociation asc = (MAssociation) edge; FigAssociation ascFig = new FigAssociation(asc, lay); Collection connections = asc.getConnections(); if (connections == null) System.out.println("null connections...."); Object[] connArray = connections.toArray(); MAssociationEnd fromEnd = (MAssociationEnd) connArray[0]; MClassifier fromCls = (MClassifier) fromEnd.getType(); MAssociationEnd toEnd = (MAssociationEnd) connArray[1]; MClassifier toCls = (MClassifier) toEnd.getType(); FigNode fromFN = (FigNode) lay.presentationFor(fromCls); FigNode toFN = (FigNode) lay.presentationFor(toCls); ascFig.setSourcePortFig(fromFN); ascFig.setSourceFigNode(fromFN); ascFig.setDestPortFig(toFN); ascFig.setDestFigNode(toFN); ascFig.getFig().setLayer(lay); return ascFig; } return null; }
public Enumeration gen(Object o) { Vector res = new Vector(); if (!(o instanceof MClassifier)) return res.elements(); MClassifier cls = (MClassifier) o; Vector ends = new Vector(cls.getAssociationEnds()); if (ends == null) return res.elements(); Iterator enum = ends.iterator(); while (enum.hasNext()) { MAssociationEnd ae = (MAssociationEnd) enum.next(); if (MAggregationKind.COMPOSITE.equals(ae.getAggregation())) { MAssociation asc = ae.getAssociation(); List conn = asc.getConnections(); if (conn == null || conn.size() != 2) continue; Object otherEnd = (ae == conn.get(0)) ? conn.get(1) : conn.get(0); MClassifier componentClass = ((MAssociationEnd)otherEnd).getType(); res.add(componentClass); } } return res.elements(); }
public Vector getChildren(Object parent) { if (!(parent instanceof MClass)) return null; Vector res = new Vector(); Vector ends = new Vector(((MClass)parent).getAssociationEnds()); if (ends == null) return null; java.util.Enumeration enum = ends.elements(); while (enum.hasMoreElements()) { MAssociationEnd ae = (MAssociationEnd) enum.nextElement(); MAssociation asc = ae.getAssociation(); Vector allEnds = new Vector( asc.getConnections()); MAssociationEnd otherEnd = null; if (ae == allEnds.elementAt(0)) otherEnd = (MAssociationEnd) allEnds.elementAt(1); if (ae == allEnds.elementAt(1)) otherEnd = (MAssociationEnd) allEnds.elementAt(0); if (otherEnd == null) continue; if (!otherEnd.isNavigable()) continue; if (res.contains(otherEnd.getType())) continue; res.addElement(otherEnd.getType()); // needs-more-work: handle n-way Associations } return res; }