package org.archstudio.xarchadt.variability.examples; import java.net.InetAddress; import java.net.UnknownHostException; import org.archstudio.ljm.LJMException; import org.archstudio.ljm.LJMProxyFactory; import org.archstudio.xadl3.structure_3_0.Component; import org.archstudio.xadl3.structure_3_0.Connector; import org.archstudio.xadl3.structure_3_0.Direction; import org.archstudio.xadl3.structure_3_0.Interface; import org.archstudio.xadl3.structure_3_0.Structure; import org.archstudio.xadl3.xadlcore_3_0.DocumentRoot; import org.archstudio.xadl3.xadlcore_3_0.XADLType; import org.archstudio.xarchadt.IXArchADT; import org.archstudio.xarchadt.ObjRef; import org.archstudio.xarchadt.XArchADTProxy; import org.archstudio.xarchadt.variability.ChangeSetTransform; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; /* * This example transform reverses the direction of all interfaces in all architectures */ public class ExampleChangeSetTransform implements ChangeSetTransform { public ExampleChangeSetTransform() { } @Override public void transform(IXArchADT xarch, ObjRef documentRootRef) { DocumentRoot documentRoot = XArchADTProxy.proxy(xarch, documentRootRef); XADLType xadlType = documentRoot.getXADL(); if (xadlType != null) { for (EObject eObject : xadlType.getTopLevelElement()) { if (eObject instanceof Structure) { Structure structure = (Structure) eObject; for (Component c : structure.getComponent()) { for (Interface i : c.getInterface()) { i.setDirection(getOpposite(i.getDirection())); } } for (Connector c : structure.getConnector()) { for (Interface i : c.getInterface()) { i.setDirection(getOpposite(i.getDirection())); } } } } } } private Direction getOpposite(Direction direction) { switch (direction) { case IN: return Direction.OUT; case OUT: return Direction.IN; case INOUT: return Direction.NONE; case NONE: return Direction.INOUT; } throw new IllegalArgumentException(direction.toString()); } public static void main(String[] args) throws LJMException, UnknownHostException { int port = Integer.parseInt(System.getenv("IXArchADTPort")); String documentURI = System.getenv("IXArchADTDocumentURI"); IXArchADT xarch = LJMProxyFactory.createProxy(InetAddress.getLocalHost(), port, "IXArchADT", IXArchADT.class); ObjRef documentRootRef = xarch.getDocumentRootRef(URI.createURI(documentURI)); new ExampleChangeSetTransform().transform(xarch, documentRootRef); } }