private void addExtension(Link link, String assId) { final Element association = document.createElement("UML:Generalization"); association.setAttribute("xmi.id", assId); association.setAttribute("namespace", "model1"); if (link.getLabel() != null) { association.setAttribute("name", forXMI(link.getLabel())); } if (link.getType().getDecor1() == LinkDecor.EXTENDS) { association.setAttribute("child", link.getEntity1().getUid()); association.setAttribute("parent", link.getEntity2().getUid()); } else if (link.getType().getDecor2() == LinkDecor.EXTENDS) { association.setAttribute("child", link.getEntity2().getUid()); association.setAttribute("parent", link.getEntity1().getUid()); } else { throw new IllegalStateException(); } ownedElement.appendChild(association); }
private void addLink(Link link) { final String assId = "ass" + UniqueSequence.getValue(); if (link.getType().getDecor1() == LinkDecor.EXTENDS || link.getType().getDecor2() == LinkDecor.EXTENDS) { addExtension(link, assId); return; } final Element association = document.createElement("UML:Association"); association.setAttribute("xmi.id", assId); association.setAttribute("namespace", "model1"); if (link.getLabel() != null) { association.setAttribute("name", forXMI(link.getLabel())); } final Element connection = document.createElement("UML:Association.connection"); final Element end1 = document.createElement("UML:AssociationEnd"); end1.setAttribute("xmi.id", "end" + UniqueSequence.getValue()); end1.setAttribute("association", assId); end1.setAttribute("type", link.getEntity1().getUid()); if (link.getQualifier1() != null) { end1.setAttribute("name", forXMI(link.getQualifier1())); } final Element endparticipant1 = document.createElement("UML:AssociationEnd.participant"); // if (fileFormat == FileFormat.XMI_ARGO) { // if (done.contains(link.getEntity1())) { // endparticipant1.appendChild(createEntityNodeRef(link.getEntity1())); // } else { // endparticipant1.appendChild(createEntityNode(link.getEntity1())); // done.add(link.getEntity1()); // } // } else if (fileFormat == FileFormat.XMI_STAR) { if (link.getType().getDecor2() == LinkDecor.COMPOSITION) { end1.setAttribute("aggregation", "composite"); } if (link.getType().getDecor2() == LinkDecor.AGREGATION) { end1.setAttribute("aggregation", "aggregate"); } // } end1.appendChild(endparticipant1); connection.appendChild(end1); final Element end2 = document.createElement("UML:AssociationEnd"); end2.setAttribute("xmi.id", "end" + UniqueSequence.getValue()); end2.setAttribute("association", assId); end2.setAttribute("type", link.getEntity2().getUid()); if (link.getQualifier2() != null) { end2.setAttribute("name", forXMI(link.getQualifier2())); } final Element endparticipant2 = document.createElement("UML:AssociationEnd.participant"); // if (fileFormat == FileFormat.XMI_ARGO) { // if (done.contains(link.getEntity2())) { // endparticipant2.appendChild(createEntityNodeRef(link.getEntity2())); // } else { // endparticipant2.appendChild(createEntityNode(link.getEntity2())); // done.add(link.getEntity2()); // } // } else if (fileFormat == FileFormat.XMI_STAR) { if (link.getType().getDecor1() == LinkDecor.COMPOSITION) { end2.setAttribute("aggregation", "composite"); } if (link.getType().getDecor1() == LinkDecor.AGREGATION) { end2.setAttribute("aggregation", "aggregate"); } // } end2.appendChild(endparticipant2); connection.appendChild(end2); association.appendChild(connection); ownedElement.appendChild(association); }