package gov.nasa.jpl.mbee.mdk.model; import com.nomagic.magicdraw.core.Application; import com.nomagic.magicdraw.core.GUILog; import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element; import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Property; import com.nomagic.uml2.impl.ElementsFactory; import gov.nasa.jpl.mbee.mdk.util.Utils; import java.util.HashMap; import java.util.Map; public class MappingUtil { private static final String DEPPREFIX = "zz_"; /** * Utility for refactoring properties between the library and mission * characterizations (e.g, lib properties are mandatory for mc) * * @param lib Library characterization * @param mc Concrete characterization * @param ef ElementsFactory */ public static void refactorProperties(Element lib, Element mc, ElementsFactory ef) { GUILog log = Application.getInstance().getGUILog(); Map<String, Property> mprops = new HashMap<String, Property>(); Map<String, Property> lprops = new HashMap<String, Property>(); // get the property sets for the mission characterization and the // library characterization for (Element e : mc.getOwnedElement()) { if (e instanceof Property) { Property p = (Property) e; mprops.put(p.getName(), p); } } for (Element e : lib.getOwnedElement()) { if (e instanceof Property) { Property p = (Property) e; lprops.put(p.getName(), p); } } for (Property mprop : mprops.values()) { if (lprops.containsKey(mprop.getName().replace(DEPPREFIX, ""))) { if (mprop.getName().startsWith(DEPPREFIX)) { mprop.setName(mprop.getName().replace(DEPPREFIX, "")); mprops.put(mprop.getName(), mprop); // so it's not recreated // in next pass log.log("Property undeprecated: " + mprop.getName() + " undeprecated in " + mc.getHumanName()); } } else { if (!mprop.getName().startsWith(DEPPREFIX)) { mprop.setName(DEPPREFIX + mprop.getName()); log.log("Property deprecated: " + mprop.getName() + " deprecated in " + mc.getHumanName()); } } } for (Property lprop : lprops.values()) { if (!mprops.containsKey(lprop.getName())) { Property np = ef.createPropertyInstance(); np.setName(lprop.getName()); np.setOwner(mc); np.setType(lprop.getType()); np.setAggregation(lprop.getAggregation()); np.getRedefinedProperty().add(lprop); Utils.copyStereotypes(lprop, np); log.log("Property created: " + np.getName() + " added to " + mc.getHumanName()); } } } }