blob: dbdfb0f91f992ba57b5a2b3d538285c51f20a4c7 [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- CHESS core plugin --
-- --
-- Copyright (C) 2011-2012 --
-- University of Padova, ITALY --
-- --
-- Author: Alessandro Zovi azovi@math.unipd.it --
-- --
-- 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-v20.html --
-----------------------------------------------------------------------
*/
package org.polarsys.chess.core.profiles;
import java.util.HashSet;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.papyrus.MARTE.MARTE_AnalysisModel.GQAM.GQAMPackage;
import org.eclipse.papyrus.MARTE.MARTE_AnalysisModel.SAM.SAMPackage;
import org.eclipse.papyrus.MARTE.MARTE_Annexes.VSL.VSLPackage;
import org.eclipse.papyrus.MARTE.MARTE_Annexes.VSL.DataTypes.DataTypesPackage;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.GCM.ClientServerPort;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.GCM.GCMPackage;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HLAM.HLAMPackage;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HRMPackage;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Concurrency.SW_ConcurrencyPackage;
import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Interaction.SW_InteractionPackage;
import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.AllocPackage;
import org.eclipse.papyrus.MARTE.MARTE_Foundations.CoreElements.CoreElementsPackage;
import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.GRMPackage;
import org.eclipse.papyrus.MARTE.MARTE_Foundations.NFPs.NFPsPackage;
import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Profile;
import org.eclipse.uml2.uml.Stereotype;
import org.eclipse.uml2.uml.resources.util.UMLResourcesUtil;
import org.polarsys.chess.core.util.uml.UMLUtils;
/**
* This class wraps the MARTE profile resource and is used for loading the profile and
* applying its stereotypes.
*
* @author Alessandro Zovi
*
*/
public class MARTEProfileManager {
/** The Constant MARTE. */
public static final String MARTE = "MARTE";
/** The Constant NFPs. */
public static final String NFPs = "NFPs";
/** The Constant Time. */
public static final String Time = "Time";
/** The Constant GRM. */
public static final String GRM = "GRM";
/** The Constant Alloc. */
public static final String Alloc = "Alloc";
/** The Constant CoreElements. */
public static final String CoreElements = "CoreElements";
/** The Constant HLAM. */
public static final String HLAM = "HLAM";
/** The Constant HRM. */
public static final String HRM = "HRM";
/** The Constant HwLogical. */
public static final String HwLogical = "HwLogical";
/** The Constant HwComputing. */
public static final String HwComputing = "HwComputing";
/** The Constant HwCommunication. */
public static final String HwCommunication = "HwCommunication";
/** The Constant HwTiming. */
public static final String HwTiming = "HwTiming";
/** The Constant HwDevice. */
public static final String HwDevice = "HwDevice";
/** The Constant HwStorage. */
public static final String HwStorage = "HwStorage";
/** The Constant HwMemory. */
public static final String HwMemory = "HwMemory";
/** The Constant HwStorageManager. */
public static final String HwStorageManager = "HwStorageManager";
/** The Constant HwPhysical. */
public static final String HwPhysical = "HwPhysical";
/** The Constant HwLayout. */
public static final String HwLayout = "HwLayout";
/** The Constant HwPower. */
public static final String HwPower = "HwPower";
/** The Constant HwGeneral. */
public static final String HwGeneral = "HwGeneral";
/** The Constant SRM. */
public static final String SRM = "SRM";
/** The Constant SW_ResourceCore. */
public static final String SW_ResourceCore = "SW_ResourceCore";
/** The Constant SW_Concurrency. */
public static final String SW_Concurrency = "SW_Concurrency";
/** The Constant SW_Brokering. */
public static final String SW_Brokering = "SW_Brokering";
/** The Constant SW_Interaction. */
public static final String SW_Interaction = "SW_Interaction";
/** The Constant GCM. */
public static final String GCM = "GCM";
/** The Constant GQAM. */
public static final String GQAM = "GQAM";
/** The Constant SAM. */
public static final String SAM = "SAM";
/** The Constant PAM. */
public static final String PAM = "PAM";
/** The Constant RSM. */
public static final String RSM = "RSM";
/** The Constant VSL. */
public static final String VSL = "VSL";
/** The Constant DataTypes. */
public static final String DataTypes = "DataTypes";
/** The Constant Variables. */
public static final String Variables = "Variables";
/** The Constant MARTE_PATH. */
public static final String MARTE_PATH = "pathmap://Papyrus_PROFILES/MARTE.profile.uml";
/*private static Profile MARTEProfile;
private static Profile MARTE_gcmProfile;
private static Profile MARTE_HRMProfile;
private static Profile MARTE_SAMProfile;
private static Profile MARTE_HLAMProfile;
private static Profile MARTE_Alloc;
private static Profile MARTE_GQAM;
private static Profile MARTE_VSL;
private static Profile MARTE_VSL_DATATYPES;
private static Profile MARTE_SW_CONCURRENCY;*/
/** The predefined profiles. */
//private static MARTEProfileManager instance;
public static HashSet<String> PREDEFINED_PROFILES = new HashSet<String>();
static {
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.MARTE);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.NFPs);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.Time);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.GRM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.Alloc);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.CoreElements);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HLAM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HRM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwLogical);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwComputing);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwCommunication);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwTiming);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwDevice);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwStorage);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwMemory);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwStorageManager);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwPhysical);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwLayout);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwPower);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.HwGeneral);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SRM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SW_ResourceCore);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SW_Concurrency);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SW_Brokering);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SW_Interaction);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.GCM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.GQAM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.SAM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.PAM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.RSM);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.VSL);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.DataTypes);
MARTEProfileManager.PREDEFINED_PROFILES.add(MARTEProfileManager.Variables);
}
/**
* Load MARTE profile.
*
* @param rs the rs
*/
public static void loadMARTEProfile(ResourceSet rs) {
}
/**
* Applies the MARTE profile to the model.
*
* @param model the model
*/
public static void applyTo(Model model) {
ResourceSet rs = model.eResource().getResourceSet();
Profile MARTEProfile = (Profile) rs
.getResource(URI.createURI(MARTE_PATH), true).getContents()
.get(0);
PackageUtil.applyProfile(model, MARTEProfile, true);
}
/**
* Applies HRM and nested profiles to the given element.
*
*
* @param element the element
*/
public static void applyHRMProfileTo(Package element) {
Profile MARTE_HRMProfile = UMLResourcesUtil.getProfile(HRMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_HRMProfile, true);
}
/**
* Applied the GCM profile to the given element.
*
* @param element the element
*/
public static void applyGCMProfileTo(Package element) {
Profile MARTE_gcmProfile = UMLResourcesUtil.getProfile(GCMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_gcmProfile, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applySAMProfileTo(Package element) {
Profile MARTE_SAMProfile = UMLResourcesUtil.getProfile(SAMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_SAMProfile, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyHLAMProfileTo(Package element) {
Profile MARTE_HLAMProfile = UMLResourcesUtil.getProfile(HLAMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_HLAMProfile, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyAllocProfileTo(Package element) {
Profile MARTE_Alloc = UMLResourcesUtil.getProfile(AllocPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_Alloc, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyGQAMProfileTo(Package element) {
Profile MARTE_GQAM = UMLResourcesUtil.getProfile(GQAMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_GQAM, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyNFPsProfileTo(Package element) {
Profile MARTE_NFPs = UMLResourcesUtil.getProfile(NFPsPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_NFPs, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyVSLProfileTo(Package element) {
Profile MARTE_VSL = UMLResourcesUtil.getProfile(VSLPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_VSL, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applyDataTypeProfileTo(Package element) {
Profile MARTE_VSL_DATATYPES = UMLResourcesUtil.getProfile(DataTypesPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_VSL_DATATYPES, false);
}
/**
* Applied the SAM profile to the given element.
*
* @param element the element
*/
public static void applySwConcurrencyProfileTo(Package element) {
Profile MARTE_SW_CONCURRENCY = UMLResourcesUtil.getProfile(SW_ConcurrencyPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_SW_CONCURRENCY, false);
}
/**
* Applied the SwInteraction profile to the given element.
*
* @param element the element
*/
public static void applySwInteractionProfileTo(Package element) {
Profile MARTE_SW_INTERACTION = UMLResourcesUtil.getProfile(SW_InteractionPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_SW_INTERACTION, false);
}
/**
* Applied the Core profile to the given element.
*
* @param element the element
*/
public static void applyCoreElementProfileTo(Package element) {
Profile MARTE_CORE_ELEMENT = UMLResourcesUtil.getProfile(CoreElementsPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_CORE_ELEMENT, false);
}
/**
* Applied the NFP profile to the given element.
*
* @param element the element
*/
public static void applyNFPProfileTo(Package element) {
Profile NFPs = UMLResourcesUtil.getProfile(NFPsPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, NFPs, false);
}
/**
* Applied the GRM and nested profiles to the given element.
*
* @param element the element
*/
public static void applyGRMProfileTo(Package element) {
Profile MARTE_GRMProfile = UMLResourcesUtil.getProfile(GRMPackage.eINSTANCE, element);
PackageUtil.applyProfile(element, MARTE_GRMProfile, true);
}
/**
* Applies the stereotype referenced by its name to the given element.
*
* @param stereoName the name (not the qualified name)
* @param element the element
*/
public static void applyStereotypeTo(String stereoName, Element element) {
if (stereoName.equalsIgnoreCase("Allocate")) {
//UMLUtils.applyStereotype(element, "MARTE::MARTE_Foundations::Alloc::Allocated");
UMLUtils.applyStereotype(element, "MARTE::MARTE_Foundations::Alloc::Allocate");
}
if (stereoName.equalsIgnoreCase("ClientServerPort")) {
UMLUtils.applyStereotype(element, "MARTE::MARTE_DesignModel::GCM::ClientServerPort");
}
if (stereoName.equalsIgnoreCase("FlowPort")) {
UMLUtils.applyStereotype(element, "MARTE::MARTE_DesignModel::GCM::FlowPort");
}
// else if ...
}
/**
* Return the {@link ClientServerPort} stereotype of the given element.
*
* @param element the element
* @return the stereotype applied
*/
public static Stereotype getClientServerPort(Element element)
{
return UMLUtils.getStereotype(element, "MARTE::MARTE_DesignModel::GCM::ClientServerPort");
}
/**
* Initialize the model with the needed profiles.
*
* @param currentModel the model
*/
public static void createModel(Model currentModel) {
applyGCMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.COMPONENT_VIEW));
applyAllocProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.COMPONENT_VIEW));
Package deploViewPack = currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.DEPLOYMENT_VIEW);
applyHRMProfileTo(deploViewPack);
applyAllocProfileTo(deploViewPack);
applySwConcurrencyProfileTo(deploViewPack);
applyGCMProfileTo(deploViewPack);
applyGQAMProfileTo(deploViewPack);
applyNFPProfileTo(currentModel);
applySAMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.ANALYSIS_VIEW).getNestedPackage(currentModel.getName() + CHESSProfileManager.RT_ANALYSIS_VIEW));
applyGQAMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.ANALYSIS_VIEW));
applySAMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.PSM_VIEW));
applySwConcurrencyProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.PSM_VIEW));
applySwInteractionProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.PSM_VIEW));
applyCoreElementProfileTo(currentModel);
applyDataTypeProfileTo(currentModel);
applyGRMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.COMPONENT_VIEW));
applyGRMProfileTo(deploViewPack);
applyGRMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.SYSTEM_VIEW));
applyGQAMProfileTo(currentModel.getNestedPackage(currentModel.getName() + CHESSProfileManager.SYSTEM_VIEW));
}
}