/******************************************************************************* * Copyright (c) 2010-2013, Embraer S.A., Budapest University of Technology and Economics * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marton Bur, Abel Hegedus, Akos Horvath - initial API and implementation *******************************************************************************/ package hu.bme.mit.massif.simulink.api.util; import hu.bme.mit.massif.simulink.Block; import hu.bme.mit.massif.simulink.Connection; import hu.bme.mit.massif.simulink.IdentifierReference; import hu.bme.mit.massif.simulink.LibraryLinkReference; import hu.bme.mit.massif.simulink.MultiConnection; import hu.bme.mit.massif.simulink.OutPort; import hu.bme.mit.massif.simulink.Port; import hu.bme.mit.massif.simulink.SimulinkElement; import hu.bme.mit.massif.simulink.SimulinkFactory; import hu.bme.mit.massif.simulink.SimulinkModel; import hu.bme.mit.massif.simulink.SimulinkReference; import hu.bme.mit.massif.simulink.SingleConnection; import hu.bme.mit.massif.simulink.SubSystem; public class SimulinkUtil { /** * Returns a copy of the SimulinkReference of the given SimulinkElement */ public static IdentifierReference createIdentifierReference(SimulinkElement slELem) { return createIdentifierReference(slELem.getSimulinkRef()); } public static IdentifierReference createIdentifierReference(IdentifierReference slRef) { IdentifierReference ref = createIdentifierReference(slRef.getName(), slRef.getQualifier()); return ref; } public static IdentifierReference createIdentifierReference(String name, String qualifier) { IdentifierReference ref = SimulinkFactory.eINSTANCE.createIdentifierReference(); setNameAndQualifierForReference(name, qualifier, ref); return ref; } public static LibraryLinkReference createLinkReference(SimulinkElement slElem) { return createLinkReference(slElem.getSimulinkRef()); } public static LibraryLinkReference createLinkReference(SimulinkReference ref) { return createLinkReference(ref.getName(), ref.getQualifier()); } public static LibraryLinkReference createLinkReference(String name, String qualifier) { LibraryLinkReference ref = SimulinkFactory.eINSTANCE.createLibraryLinkReference(); setNameAndQualifierForReference(name, qualifier, ref); return ref; } public static IdentifierReference createChildIdentifierReference(SimulinkElement slElem, String childName) { IdentifierReference parentRef = slElem.getSimulinkRef(); IdentifierReference ref = createChildIdentifierReference(parentRef, childName); return ref; } public static IdentifierReference createChildIdentifierReference(IdentifierReference parentRef, String childName) { IdentifierReference ref = createIdentifierReference(childName, parentRef.getFQN()); return ref; } public static void setNameAndQualifierOfElementForReference(SimulinkElement fromElem, SimulinkReference toRef) { setNameAndQualifierForReference(fromElem.getSimulinkRef(), toRef); } public static void setNameAndQualifierForReference(SimulinkReference fromRef, SimulinkReference toRef) { String name = fromRef.getName(); String qualifier = fromRef.getQualifier(); setNameAndQualifierForReference(name, qualifier, toRef); } public static void setNameAndQualifierForReference(String name, String qualifier, SimulinkReference toRef) { toRef.setName(name); toRef.setQualifier(qualifier); } /** * Changes the qualifier of the element to the supplied FQN and also propagates this change on the qualifier tree. * */ public static void changeRootQualifier(SimulinkElement elem, String parentFQN) { elem.getSimulinkRef().setQualifier(parentFQN); String fqnOfRoot = elem.getSimulinkRef().getFQN(); if(elem instanceof Block){ for (Port port : ((Block) elem).getPorts()) { changeRootQualifier(port, fqnOfRoot); } if (elem instanceof SubSystem) { for(Block subBl : ((SubSystem)elem).getSubBlocks()){ changeRootQualifier(subBl, fqnOfRoot); } } } else if(elem instanceof SimulinkModel) { for (Block child : ((SimulinkModel) elem).getContains()) { changeRootQualifier(child, fqnOfRoot); } } else if (elem instanceof Port) { if(elem instanceof OutPort){ Connection conn = ((OutPort) elem).getConnection(); changeRootQualifier(conn, fqnOfRoot); } } else if (elem instanceof Connection) { if(elem instanceof MultiConnection){ for (SingleConnection conn : ((MultiConnection) elem).getConnections()) { changeRootQualifier(conn, fqnOfRoot); } } } else { throw new IllegalArgumentException("Cannot change root qualifier for element " + elem.getSimulinkRef().getFQN()); } } }