Work on *.core.profile.esfsafetyconcepts plug-in.

- Add new methods in ESFSafetyConceptsUtil class

Change-Id: Ia0467d56ccf10790b75abf53e313bbd31568a0d7
diff --git a/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/META-INF/MANIFEST.MF b/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/META-INF/MANIFEST.MF
index 8eed312..840048d 100644
--- a/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/META-INF/MANIFEST.MF
+++ b/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/META-INF/MANIFEST.MF
@@ -15,7 +15,9 @@
  org.polarsys.esf.core.profile.esfcore;visibility:=reexport,
  org.polarsys.esf.core.profile.esfproperties;visibility:=reexport,
  org.eclipse.uml2.types;visibility:=reexport,
- org.eclipse.emf.ecore.xmi;bundle-version="2.11.1";visibility:=reexport
+ org.eclipse.emf.ecore.xmi;bundle-version="2.11.1";visibility:=reexport,
+ org.eclipse.emf.transaction,
+ org.polarsys.esf.core.utils
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Export-Package: org.polarsys.esf.core.profile.esfsafetyconcepts.set,
  org.polarsys.esf.core.profile.esfsafetyconcepts.util,
diff --git a/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/src/main/java/org/polarsys/esf/core/profile/esfsafetyconcepts/util/ESFSafetyConceptsUtil.java b/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/src/main/java/org/polarsys/esf/core/profile/esfsafetyconcepts/util/ESFSafetyConceptsUtil.java
index e0ad539..a61887e 100644
--- a/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/src/main/java/org/polarsys/esf/core/profile/esfsafetyconcepts/util/ESFSafetyConceptsUtil.java
+++ b/core/profile/org.polarsys.esf.core.profile.esfsafetyconcepts/src/main/java/org/polarsys/esf/core/profile/esfsafetyconcepts/util/ESFSafetyConceptsUtil.java
@@ -14,10 +14,14 @@
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.uml2.uml.Model;
 import org.eclipse.uml2.uml.Package;
 import org.eclipse.uml2.uml.util.UMLUtil;
+import org.polarsys.esf.core.utils.ModelUtil;
 import org.polarsys.esf.esfsafetyconcepts.ISSafetyArtifacts;
+import org.polarsys.esf.esfsafetyconcepts.impl.ESFSafetyConceptsPackage;
 
 /**
  * The utility class for dealing with SafetyArtifacts package.
@@ -26,6 +30,11 @@
  * @version $Revision: 168 $
  */
 public final class ESFSafetyConceptsUtil {
+    /** SSafetyArtifacts package name. */
+    public static final String SSAFETYARTIFACTS_PACKAGE_NAME = "SafetyArtifacts"; //$NON-NLS-1$
+
+    /** Create SSafetyArtifacts package label. */
+    public static final String CREATE_SSAFETYARTIFACTS_LABEL = "Create SSafetyArtifacts"; //$NON-NLS-1$
 
     /**
      * Default constructor, private as it's a utility class.
@@ -35,15 +44,32 @@
     }
 
     /**
-     * Retrieve SafetyArtifacts.
+     * Get SSafetyArtifacts.
      *
-     * @param pESFModel ESFModel root
-     * @return The SafetyArtifacts
+     * @param pModelRoot The UML Model root
+     * @return The SSafetyArtifacts
      */
-    public static ISSafetyArtifacts retrieveSafetyArtifacts(final Model pESFModel) {
+    public static ISSafetyArtifacts getSSafetyArtifacts(final Model pModelRoot) {
+        ISSafetyArtifacts vSSafetyArtifacts = retrieveSSafetyArtifacts(pModelRoot);
+
+        if (vSSafetyArtifacts == null) {
+            createSSafetyArtifacts(pModelRoot);
+            vSSafetyArtifacts = retrieveSSafetyArtifacts(pModelRoot);
+        }
+
+        return vSSafetyArtifacts;
+    }
+
+    /**
+     * Retrieve SSafetyArtifacts.
+     *
+     * @param pModelRoot The UML Model root
+     * @return The SSafetyArtifacts
+     */
+    private static ISSafetyArtifacts retrieveSSafetyArtifacts(final Model pModelRoot) {
         ISSafetyArtifacts vSafetyArtifacts = null;
         Boolean vFound = false;
-        List<Package> vPackagesList = pESFModel.getNestedPackages();
+        List<Package> vPackagesList = pModelRoot.getNestedPackages();
         Iterator<Package> vIterator = vPackagesList.iterator();
 
         while (!vFound && vIterator.hasNext()) {
@@ -57,4 +83,32 @@
         return vSafetyArtifacts;
     }
 
+    /**
+     *  Create SSafetyArtifacts.
+     *
+     * @param pModelRoot The UML Model root
+     */
+    public static void createSSafetyArtifacts(final Model pModelRoot) {
+        TransactionalEditingDomain vDomain = ModelUtil.getTransactionalEditingDomain(pModelRoot);
+
+        RecordingCommand vCreateSSafetyArtifacts =
+            new RecordingCommand(vDomain, CREATE_SSAFETYARTIFACTS_LABEL) {
+
+                @Override
+                protected void doExecute() {
+                    // Create the object 'SafetyArtifacts' package
+                    Package vLocalAnalysis = pModelRoot.createNestedPackage(SSAFETYARTIFACTS_PACKAGE_NAME);
+                    // Apply 'SSafetyArtifacts' stereotype on 'SafetyArtifacts' package
+                    UMLUtil.StereotypeApplicationHelper.getInstance(vLocalAnalysis)
+                        .applyStereotype(vLocalAnalysis, ESFSafetyConceptsPackage.eINSTANCE.getSSafetyArtifacts());
+                }
+            };
+
+        // Verify if command can be executed
+        if (vCreateSSafetyArtifacts.canExecute()) {
+            // Execute command
+            vDomain.getCommandStack().execute(vCreateSSafetyArtifacts);
+        }
+    }
+
 }