The implementation for the fallacy detection (EPF Composer), and the
baseline, argumentation and process transformation (EPF Composer to
OpenCert).
diff --git a/org.eclipse.opencert.epf.detectFallacies/.classpath b/org.eclipse.opencert.epf.detectFallacies/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.opencert.epf.detectFallacies/.project b/org.eclipse.opencert.epf.detectFallacies/.project
new file mode 100644
index 0000000..96fc6ef
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.opencert.epf.detectFallacies</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.opencert.epf.detectFallacies/META-INF/MANIFEST.MF b/org.eclipse.opencert.epf.detectFallacies/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c67d33c
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fallacy Detection
+Bundle-SymbolicName: org.eclipse.opencert.epf.detectFallacies;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.opencert.epf.detectFallacies.activator.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.epf.library;bundle-version="1.5.0",
+ org.eclipse.epf.library.edit;bundle-version="1.5.0",
+ org.eclipse.epf.uma;bundle-version="1.5.0",
+ org.eclipse.ui.workbench
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.ui.console
diff --git a/org.eclipse.opencert.epf.detectFallacies/build.properties b/org.eclipse.opencert.epf.detectFallacies/build.properties
new file mode 100644
index 0000000..78d73f7
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .

diff --git a/org.eclipse.opencert.epf.detectFallacies/plugin.xml b/org.eclipse.opencert.epf.detectFallacies/plugin.xml
new file mode 100644
index 0000000..e9e29be
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/plugin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+

+   <extension

+         point="org.eclipse.ui.popupMenus">

+      <objectContribution

+            objectClass="org.eclipse.epf.uma.ProcessComponent"

+            id="detectFallacies.contribution1">

+         <menu

+               label="Fallacy Detection"

+               path="additions"

+               id="detectFallacies.menu1">

+            <separator

+                  name="group1">

+            </separator>

+         </menu>

+         <action

+               label="Detect Omission of Key Evidence"

+               class="org.eclipse.opencert.epf.detectFallacies.actions.FallacyDetection"

+               menubarPath="detectFallacies.menu1/group1"

+               enablesFor="1"

+               id="detectFallacies.newAction">

+         </action>

+      </objectContribution>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/DialogManager.java b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/DialogManager.java
new file mode 100644
index 0000000..9a19157
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/DialogManager.java
@@ -0,0 +1,155 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.detectFallacies.actions;

+

+import java.io.BufferedWriter;

+import java.io.FileWriter;

+import java.io.IOException;

+import java.net.URI;

+

+import org.eclipse.jface.dialogs.IDialogConstants;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.widgets.DirectoryDialog;

+import org.eclipse.swt.widgets.Shell;

+

+public class DialogManager {

+	

+	private Shell shell;

+	private Object[] arrayBuffWrit = new Object[3];

+	

+	public DialogManager(Shell shell) {

+		this.shell = shell;

+	}

+	

+

+	public Object[] createDialog() throws IOException{

+		for (int i=0; i<arrayBuffWrit.length; i++){

+			arrayBuffWrit[i]=null;

+		}

+		MessageDialog dg = new MessageDialog(

+	            shell,

+	            "Select directory",

+	            null,

+	            "Please specify a target directory to store the result of the validation",

+	            MessageDialog.INFORMATION,

+	            new String[]{

+	                "Browse...", 

+	                IDialogConstants.CANCEL_LABEL},

+	            -1//SWT.CLOSE

+	            );

+	    

+		switch(dg.open()) {

+	    case 0: 

+	    	createDirectoryChooser();

+	        break;

+	    case 1:

+	    	confirmExit(1);

+	    	break;

+	    	

+		case -1:

+			confirmExit(1);

+	        break;

+		}

+		

+		return arrayBuffWrit;

+	}                 

+	

+	

+	public void createDirectoryChooser() throws IOException{

+		for (int i=0; i<arrayBuffWrit.length; i++){

+			arrayBuffWrit[i]=null;

+		}

+        DirectoryDialog dialog = new DirectoryDialog(shell, SWT.Close);

+	    dialog.setMessage("Please specify a directory to store the result of the validation.");

+	    dialog.setText("Browse For Folder");

+

+	    String path = dialog.open();

+	    if (path != null) {

+	    	arrayBuffWrit[2]=path;

+	    	FileWriter filewriterStaff = new FileWriter(path+"/Staffing Plan Report.txt");

+	    	BufferedWriter bwStaff = new BufferedWriter(filewriterStaff);

+			arrayBuffWrit[0]=bwStaff;

+			FileWriter filewriterTool = new FileWriter(path+"/Tool Qualification Plan Report.txt");

+			BufferedWriter bwTool = new BufferedWriter(filewriterTool);

+			arrayBuffWrit[1]=bwTool;

+	    }else{

+	    	confirmExit(2);

+	    }

+	}

+	

+	

+	public void confirmExit(int i) throws IOException {

+		MessageDialog dg = new MessageDialog(

+	            shell,

+	            "Confirm",

+	            null,

+				"Selecting a target directory is mandatory, by closing the window the validation will be cancelled.\nDo you really want to cancel the process?",

+	            MessageDialog.INFORMATION,

+	            new String[]{

+	                IDialogConstants.YES_LABEL, 

+	                IDialogConstants.NO_LABEL},

+	            -1//SWT.CLOSE

+	            );

+	    

+		switch(dg.open()) {

+	    case 0: 

+	    	dg.close();

+	        break;

+	    case 1:

+	    	if (i==1){

+	    		createDialog();

+	    	}

+	    	if(i==2){

+	    		createDirectoryChooser();

+	    	}

+	    	break;

+		case -1:

+			dg.close();

+			break;

+		}

+	}

+

+	

+	public void showValidationResults(String message, int type, String labelButton, URI uri){	

+		MessageDialog mdialog = new MessageDialog(

+	            shell,

+	            "Validation Completion",

+	            null,

+	            message,

+	            type,

+	            new String[]{

+	                IDialogConstants.OK_LABEL, 

+	                labelButton},

+	            SWT.CLOSE //0 

+	            );

+	    

+		switch(mdialog.open()) {

+	    case 0: 

+	    	mdialog.close();

+	        break;

+	    case 1:

+	        try{

+	    		Runtime r = Runtime.getRuntime();

+	        	Process p = r.exec("cmd /c start "+uri);

+	    	}catch (IOException e1){

+	            e1.printStackTrace();

+	        }

+	        break;

+	    }

+	}

+}

diff --git a/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/FallacyDetection.java b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/FallacyDetection.java
new file mode 100644
index 0000000..7a7f96d
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/actions/FallacyDetection.java
@@ -0,0 +1,745 @@
+/*******************************************************************************
+ * Copyright (c) 2018, MDH 
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ *   Contributors:
+ *   Faiz Ul Muram
+ *   Initial API and implementation and/or initial documentation
+ *******************************************************************************/
+/**
+ */
+package org.eclipse.opencert.epf.detectFallacies.actions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+
+import org.eclipse.epf.library.LibraryService;
+import org.eclipse.epf.library.edit.util.TngUtil;
+import org.eclipse.epf.uma.Activity;
+import org.eclipse.epf.uma.BreakdownElement;
+import org.eclipse.epf.uma.CapabilityPattern;
+import org.eclipse.epf.uma.ContentDescription;
+import org.eclipse.epf.uma.ContentElement;
+import org.eclipse.epf.uma.ContentPackage;
+import org.eclipse.epf.uma.MethodElement;
+import org.eclipse.epf.uma.MethodLibrary;
+import org.eclipse.epf.uma.MethodPackage;
+import org.eclipse.epf.uma.MethodPlugin;
+import org.eclipse.epf.uma.Phase;
+import org.eclipse.epf.uma.Practice;
+import org.eclipse.epf.uma.ProcessElement;
+import org.eclipse.epf.uma.ProcessPackage;
+import org.eclipse.epf.uma.Role;
+import org.eclipse.epf.uma.RoleDescription;
+import org.eclipse.epf.uma.RoleDescriptor;
+import org.eclipse.epf.uma.Task;
+import org.eclipse.epf.uma.TaskDescriptor;
+import org.eclipse.epf.uma.Tool;
+import org.eclipse.epf.uma.ToolMentor;
+import org.eclipse.epf.uma.impl.ProcessComponentImpl;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.console.MessageConsole;
+import org.eclipse.ui.console.MessageConsoleStream;
+
+public class FallacyDetection implements IObjectActionDelegate {
+
+	private List<Practice> listPracticesRoles = new ArrayList<Practice>(); 
+	private List<ContentElement> listReferencesRoles = new ArrayList<ContentElement>(); 
+	private List<Practice> listPracticesTools = new ArrayList<Practice>();
+	private List<ContentElement> listReferencesTools = new ArrayList<ContentElement>();
+	private List<String> visitedElements = new ArrayList<String>();
+	private List<Boolean> resultsValidationTools = new ArrayList<Boolean>(); //false if there are an omission of key evidence, true if not
+	private List<Boolean> resultsValidationStaff = new ArrayList<Boolean>(); //false if there are an omission of key evidence, true if not
+	private BufferedWriter bwStaff;
+	private BufferedWriter bwTool;
+	private String path;
+	private IWorkbenchPage page;
+	private Shell shell;
+	private MessageConsoleStream out;
+	
+	private List<String> arrayRoleMessageNoOk= new ArrayList<String>(); //list to store the message when the evidence is insufficient
+	private List<String> arrayRoleNameNoOk= new ArrayList<String>(); //list to store the name of the role when the evidence is insufficient
+	private List<String> arrayRoleNameOk= new ArrayList<String>(); //list to store the name of the role when the evidence is sufficient
+	private int numRole;
+	private List<String> arrayToolMessageNoOk= new ArrayList<String>();
+	private List<String> arrayToolNameNoOk= new ArrayList<String>();
+	private List<String> arrayToolNameOk= new ArrayList<String>();
+	private int numTool;
+	
+	private String prepositions = " about , after , at , before , between , but , for , from , in , into , like , of , on , through "
+								+ " to , under , up , with , within , without , the , and , a , an , is , are ";
+	
+	private String rationales = "because,due to,since";
+	
+	
+	/**
+	 * Constructor for Action1.
+	 */
+	public FallacyDetection() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		page = targetPart.getSite().getPage();
+		shell = targetPart.getSite().getShell();
+	}
+
+	
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		
+		 MessageConsole pluginConsole = getConsole("Fallacy Detection Console");
+		 out = pluginConsole.newMessageStream();
+		
+		//Clear variables
+		visitedElements.clear();
+		arrayRoleMessageNoOk.clear();
+		arrayRoleNameNoOk.clear();
+		arrayRoleNameOk.clear();
+		arrayToolMessageNoOk.clear();
+		arrayToolNameNoOk.clear();
+		arrayToolNameOk.clear();
+		resultsValidationStaff.clear();
+		resultsValidationTools.clear();
+		numRole=0;
+		numTool=0;
+		
+		DialogManager dialogManager = new DialogManager(shell);
+		
+		try {
+			Object[] arrayBuffWrit = dialogManager.createDialog();
+			bwStaff=(BufferedWriter) arrayBuffWrit[0];
+			bwTool=(BufferedWriter) arrayBuffWrit[1];
+			path=(String) arrayBuffWrit[2];
+			
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		
+		//ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+		//dialog.open();
+		//IProgressMonitor monitor = dialog.getProgressMonitor();
+		//monitor.beginTask("Detecting fallacies. Please wait... ", monitor.UNKNOWN);
+		
+		if(bwStaff!=null){
+			
+			MethodLibrary src = LibraryService.getInstance().getCurrentMethodLibrary();
+			Boolean flag = false;
+			//Get the Method Plugins
+			List<MethodPlugin> listPlugins = src.getMethodPlugins();
+			for(MethodPlugin plugin: listPlugins){
+				if(flag){break;}
+				//Get the System Packages
+				List systemPackages = TngUtil.getAllSystemPackages(plugin);
+				for(Object sp: systemPackages){
+					if(flag){break;}
+					if(sp instanceof ContentPackage){
+						//Get the Content Packages
+						ContentPackage systemPackage = (ContentPackage) sp;
+						if (systemPackage.getName().equals("CoreContent")){
+							List<MethodPackage> methodPackages = systemPackage.getChildPackages();
+							for(MethodPackage methodPackage: methodPackages){
+								if(flag){break;}	
+								ContentPackage contentPackage = (ContentPackage)methodPackage;
+								List<ContentElement> contentElements = contentPackage.getContentElements();
+								for(ContentElement contentElement: contentElements){
+									//Get the Practice
+									if(contentElement instanceof Practice){
+										Practice practice = (Practice) contentElement;
+										//Get the Sub Practices
+										List<Practice> subPractices = practice.getSubPractices();
+										for(Practice subPractice: subPractices){
+											//Get the References
+											List<ContentElement> references = subPractice.getContentReferences();
+											for(ContentElement reference: references){
+												//If the Reference is a Role, that sub practice belongs to the Staffing Plan Practice
+												if(reference instanceof Role){
+													listPracticesRoles.add(subPractice);
+													listReferencesRoles.add(references.get(0));
+													flag = true;
+												}
+												//If the Reference is a Tool, that sub practice belongs to the Tool Qualification Plan Practice
+												if(reference instanceof Tool){
+													listPracticesTools.add(subPractice);
+													listReferencesTools.add(references.get(0));
+													flag = true;
+												}
+											}
+										}	
+									}
+								}
+								break;
+							}	
+						}
+					}
+				}
+			}		
+			
+			ISelection sel = page.getSelection();
+			TreeSelection tree = (TreeSelection) sel;
+			ProcessComponentImpl process = (ProcessComponentImpl) tree.getFirstElement();
+			
+			for (Iterator it = process.eContents().iterator(); it.hasNext();) {
+				Object nextObj = it.next();			
+				ProcessPackage child = nextObj instanceof ProcessPackage ?
+						(ProcessPackage) nextObj : null;	
+				if (child == null) {
+					continue;
+				}
+				
+				//Get the selected element (Delivery Process / Capability Pattern)
+				if (child instanceof ProcessPackage){
+					ProcessPackage proc = (ProcessPackage) child;
+					
+					//Get the Process Elements (Capability Patterns for Delivery Process / Phases for Capability Pattern)
+					List<ProcessElement> listProcessElements = proc.getProcessElements();
+					for (ProcessElement p: listProcessElements) {
+						//If the selected element is a Delivery Process, for each Capability Pattern
+						if (p instanceof CapabilityPattern){
+							//get the Phases
+							List<BreakdownElement> listPhases =((CapabilityPattern) p).getBreakdownElements();
+							for (ProcessElement phase: listPhases){
+								if (phase instanceof Phase){
+									//get the Activities
+									List<BreakdownElement> listActivities = ((Phase) phase).getBreakdownElements();
+									//and get the rest of the elements
+									getElements(listActivities);
+								}
+							}
+						}
+						
+						//If the selected element is a Capability Pattern, for each Phase
+						if (p instanceof Phase){
+							//get the Activities
+							List<BreakdownElement> listActivities = ((Phase) p).getBreakdownElements();
+							//and get the rest of the elements
+							getElements(listActivities);
+						}
+					}
+				}
+			}
+			
+			//monitor.done();
+			//dialog.close();
+			
+    		try {
+				createReport(bwStaff);
+				createReport(bwTool);
+				
+				bwStaff.close();
+				bwTool.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			
+	
+			if(resultsValidationTools.contains(false)&&resultsValidationStaff.contains(false)){
+				String rol ="";
+				for (String r: arrayRoleNameNoOk){
+					rol = rol+"   - "+r+" role\n";
+				}
+				
+				String tol ="";
+				for (String t: arrayToolNameNoOk){
+					tol = tol+"   - "+t+" tool\n";
+				}
+				
+				String m = "Validation completed successfully.\n\nRESULT: The presented evidence is insufficient for the following elements:\n"+rol+tol+"\n"+
+							"Please look at the validation reports or console for further details and provide the omitted key evidences before doing the transformation.\n\n";
+	    		
+	    		File folder = new File(path);
+	    		URI uriFolder = folder.toURI();
+	    		
+				dialogManager.showValidationResults(m, MessageDialog.ERROR, "Open Folder", uriFolder);
+
+			}else{
+				
+				if(resultsValidationTools.contains(false)){
+					String tol ="";
+					for (String t: arrayToolNameNoOk){
+						tol = tol+"   - "+t+"\n";
+					}
+					String m = "Validation completed successfully.\n\nRESULT: The presented evidence is insufficient for the following tools:\n"+tol+"\n"+
+							"Please look at the Tool Qualification Plan report or console for further details and provide the omitted key evidences before doing the transformation.\n\n";
+					
+					File file = new File(path+"/Tool Qualification Plan Report.txt");  
+		    		URI uriFile = file.toURI();
+					
+					dialogManager.showValidationResults(m, MessageDialog.ERROR, "Open File", uriFile);
+
+				}else if(resultsValidationStaff.contains(false)){
+					String rol ="";
+					for (String r: arrayRoleNameNoOk){
+						rol = rol+"   - "+r+"\n";
+					}
+					
+					String m = "Validation completed successfully.\n\nRESULT: The presented evidence is insufficient for the following roles:\n"+rol+"\n"+
+							"Please look at the Staffing Plan report or console for further details and provide the omitted key evidences before doing the transformation.\n\n";
+					
+					File file = new File(path+"/Staffing Plan Report.txt");  
+		    		URI uriFile = file.toURI();
+					
+					dialogManager.showValidationResults(m, MessageDialog.ERROR, "Open File", uriFile);	
+
+				}else{
+					String m = "Validation completed successfully.\n\nRESULT: The presented key evidences are sufficient.\n\n"+
+							"Please look at the validation reports or console for further details.\n\n";
+					
+		    		File folder = new File(path);
+		    		URI uriFolder = folder.toURI();
+					
+					dialogManager.showValidationResults(m, MessageDialog.INFORMATION, "Open Folder", uriFolder);
+				}
+			}
+		}
+	}
+		
+	public void getElements(List<BreakdownElement> listActivities){
+		//For each Activity
+		for (BreakdownElement bde: listActivities){
+			if (bde instanceof Activity){
+				//Get the Tasks
+				List<BreakdownElement> listTasks = ((Activity) bde).getBreakdownElements();
+				for (BreakdownElement bde2: listTasks){
+					if(bde2 instanceof TaskDescriptor){
+						//Get the Roles that perform that Task
+						TaskDescriptor taskDescriptor = (TaskDescriptor) bde2;
+						List<RoleDescriptor> listRoles = taskDescriptor.getPerformedPrimarilyBy();
+						for(RoleDescriptor r: taskDescriptor.getAdditionallyPerformedBy()){
+							listRoles.add(r);
+						}
+						for(RoleDescriptor r: taskDescriptor.getAssistedBy()){
+							listRoles.add(r);
+						}
+						for (RoleDescriptor rol: listRoles){
+							Role role = rol.getRole();
+							if(visitedElements.contains(role.getGuid())){
+								continue;
+							}
+							visitedElements.add(role.getGuid());
+							
+							for (Iterator iter = role.eContents().iterator(); iter.hasNext();) {
+								Object nextObject = iter.next();			
+								MethodElement child2 = nextObject instanceof MethodElement ?
+													(MethodElement) nextObject : null;		
+								if (child2 == null) {
+									continue;
+								}
+								
+								//Get the Skills
+								if (child2 instanceof RoleDescription){
+									String skills = ((RoleDescription) child2).getSkills();
+									
+									//If the Role has any Practice that references to it, get the requirements and verify its skills
+									for (ContentElement ref: listReferencesRoles){
+										if (ref.getGuid().equals(role.getGuid())){
+											int index = listReferencesRoles.indexOf(ref);
+											String requirements = listPracticesRoles.get(index).getBriefDescription();
+											try {
+												validationRequirements(role.getPresentationName(), requirements, skills, role.getType().getName());
+											} catch (IOException e) {
+												e.printStackTrace();
+											}
+											break;
+										}
+									}
+								}
+							}
+						}
+				
+						//Get the Tool Mentors of the task
+						Task task = taskDescriptor.getTask();
+						List<ToolMentor> listToolMentorsTask = task.getToolMentors();
+						if(!listToolMentorsTask.isEmpty()){
+							//For each Tool of the requirements, get the Tool Mentors
+							for (ContentElement refTool: listReferencesTools){
+								String qual="";
+								Tool tool = (Tool) refTool;
+								List<ToolMentor> listToolMentorsTool = tool.getToolMentors();
+								//and check if the associated Tool of the Tool Mentor of the task has any requirements
+								for(ToolMentor tm: listToolMentorsTool){
+									for(ToolMentor tm2: listToolMentorsTask){
+										//if it has
+										if(tm.getGuid().equals(tm2.getGuid())){
+											for (Iterator iter = tool.eContents().iterator(); iter.hasNext();) {
+												Object nextObject = iter.next();			
+												ContentDescription toolDescription = nextObject instanceof ContentDescription ?
+																			(ContentDescription) nextObject : null;			
+												if (toolDescription == null) {
+													continue;
+												}
+												//get the qualification
+												qual = toolDescription.getKeyConsiderations();
+											}
+											int index = listReferencesTools.indexOf(tool);
+											//and the requirement
+											String req = listPracticesTools.get(index).getBriefDescription();
+											
+											//and validate them
+											if(!visitedElements.contains(tool.getGuid())){
+												try {
+													validationRequirements(tool.getPresentationName(), req, qual, tool.getType().getName());
+													visitedElements.add(tool.getGuid());
+												} catch (IOException e) {
+													e.printStackTrace();
+												}
+											}
+										}
+									}
+								}
+							}
+						}	
+					}	
+				}
+			}	
+		}
+	}
+
+
+	private void validationRequirements (String name, String requirements, String evidence, String type) throws IOException {
+	switch(type){
+	
+		case("Role"):
+			
+			String arraySkills[];
+			String arraySkillsNoPrep[]=null;
+			String arrayRequirements[];
+			String arrayReqNoPrep[]=null;
+			
+			arrayRequirements = requirements.split("; ");
+			arrayReqNoPrep = requirements.split("; "); 
+			//Remove the introduction sentence, e.g. "Shall be competent and have relevant experience:, Shall be competent in"
+			StringBuffer stringbuff = new StringBuffer();	
+			for (int i=0; i<arrayRequirements[0].length(); i++){
+				char c = arrayRequirements[0].charAt(i);
+				String subStr = stringbuff.append(c).toString();
+				if (subStr.contains(":")||subStr.contains("competent in")||subStr.contains("shall be able to")){
+					String req0 = arrayRequirements[0].substring(i+1, arrayRequirements[0].length());
+					arrayRequirements[0] = req0;
+					arrayReqNoPrep[0] = req0;
+					stringbuff.delete(0, stringbuff.length());
+					i=0;
+				}
+			}
+	
+			if (evidence.isEmpty()) {
+				resultsValidationStaff.add(false);
+				List<String> listRequirements = new ArrayList<String>();
+				for(int i=0; i<arrayRequirements.length; i++){
+					listRequirements.add(arrayRequirements[i]);
+				}
+				storeMissingEvidence(name, listRequirements, type);
+				return;
+				
+			} else {	
+				//Remove the HTML tags and special characters
+				String skills5 = evidence.replaceAll("\\<[^>]*>","");
+				String skills4 = skills5.replaceAll("\r\n    ", " ");
+				String skills3 = skills4.replaceAll("\r\n", "");
+				String skills2 = skills3.replaceAll("&amp;", "&");
+				String skills1 = skills2.replaceAll("&nbsp;", " ");
+				arraySkills = skills1.split("; ");
+				
+				//Remove the introduction sentence, e.g. "Certification against qualifications and relevant experience:"
+				StringBuffer sb = new StringBuffer();			
+				for (int i=0; i<arraySkills[0].length(); i++){
+					char c = arraySkills[0].charAt(i);
+					String subStr = sb.append(c).toString();
+					if (subStr.contains("against")||subStr.contains(":")||subStr.contains("over")){
+						String skill0 = arraySkills[0].substring(i+2, arraySkills[0].length());
+						arraySkills[0] = skill0;
+						sb.delete(0, sb.length());
+						i=0;
+					}
+				}
+				arraySkillsNoPrep = arraySkills;
+			}
+			
+			List<String> omittedReq = new ArrayList<String>();
+			List<Integer> usedSkills = new ArrayList<Integer>();
+			String[] arrayPrepositions = prepositions.split(",");
+			
+			//For each requirement, check all the skills
+			if (arrayRequirements!=null){
+				for(int i=0; i<arrayRequirements.length; i++){
+					for (int j=0; j<arraySkills.length; j++){
+						if(usedSkills.contains(j)){
+							continue;
+						}
+						
+						String s = arrayReqNoPrep[i].trim();
+						arrayReqNoPrep[i] = s;
+						
+						//Remove the prepositions and other non-main words
+						for(String p: arrayPrepositions){
+							if(arraySkills[j].contains(p)){
+								arraySkillsNoPrep[j] = arraySkills[j].replace(p," ");
+							}
+							
+							if(arrayRequirements[i].contains(p)){
+								arrayReqNoPrep[i] = arrayReqNoPrep[i].replace(p," ");
+							}
+						}
+						
+						String[] arrayWordsRequirement;
+						arrayWordsRequirement = arrayReqNoPrep[i].split(" ");
+						double numWordsReq = arrayWordsRequirement.length;
+						String[] arrayWordsSkill = arraySkillsNoPrep[j].split(" ");
+						double numWordsMatch = 0;
+						//Count how many skill words are in the requirement
+						for (String w: arrayWordsSkill){
+							if (arrayRequirements[i].toLowerCase().contains(w.toLowerCase())){
+								numWordsMatch ++;
+							}
+						}
+						
+						//Get the match percentage between the total number of main words of the requirement
+						//and the number of words that match the skill
+						double percentMatch = numWordsMatch / numWordsReq;
+						
+						String[] words = rationales.split(",");
+						Boolean isRationale = false;
+						
+						for (String word: words) {
+							//Look for rationales
+							if (arraySkillsNoPrep[j].contains(word)&&(percentMatch>=((double)1/3))) {
+								usedSkills.add(j);
+								resultsValidationStaff.add(true);
+								isRationale = true;
+								break;
+							}
+						}
+						
+						if (isRationale){
+							break;
+						}else{
+							//If the match percentage is greater than 2/3, the meaning is the same, so the evidence is provided
+							if (percentMatch >= ((double)2/3)){
+								usedSkills.add(j);
+								resultsValidationStaff.add(true);
+								j=arraySkillsNoPrep.length;
+							}else{
+								if (j==arraySkills.length-1){
+									resultsValidationStaff.add(false);
+									omittedReq.add(arrayRequirements[i]);
+								}
+							}
+						}
+					}	
+				}
+				
+				if(omittedReq.isEmpty()){
+					arrayRoleNameOk.add(name.toUpperCase());
+				}else{
+					storeMissingEvidence(name, omittedReq, type);
+				}
+			}
+			break;
+			
+		case("Tool"):
+		
+			if(evidence.isEmpty()){
+				List<String> misReqTool = new ArrayList<String>();
+				misReqTool.add(requirements);
+				storeMissingEvidence(name, misReqTool, type);
+				resultsValidationTools.add(false);
+				
+			}else{
+				Boolean toolQual = false;
+				String qualifications = "qualified by, previously been used";
+				String[] qualificationsArray = qualifications.split(",");
+				
+				String[] rationalesArray = rationales.split(",");
+				
+				for(String q: qualificationsArray){
+					if (evidence.toLowerCase().contains(q.toLowerCase())){
+						toolQual = true;
+					}
+				}
+				
+				for(String r: rationalesArray){
+					if (evidence.toLowerCase().contains(r.toLowerCase())){
+						toolQual = true;
+					}
+				}
+				
+				if(toolQual){
+					resultsValidationTools.add(true);
+					arrayToolNameOk.add(name);			
+				}else{	
+					resultsValidationTools.add(false);
+					List<String> misReqTool = new ArrayList<String>();
+					misReqTool.add(requirements);
+					storeMissingEvidence(name, misReqTool, type);	
+				}		
+			}
+			break;
+		}
+	}
+
+	public void storeMissingEvidence (String name, List<String> omittedReq, String type) {	
+		String m ="";
+		if(type.equals("Role")){
+			arrayRoleNameNoOk.add(name);
+			for(String o:omittedReq){
+				if(!o.isEmpty()){
+					m=m+o+";";
+				}
+			}
+			arrayRoleMessageNoOk.add(m);
+		}
+		
+		if(type.equals("Tool")){
+			arrayToolNameNoOk.add(name);
+			for(String o:omittedReq){
+				if(!o.isEmpty()){
+					m=m+o+";";
+				}
+			}
+			arrayToolMessageNoOk.add(m);	
+		}
+    }
+	
+	
+	public void createReport(BufferedWriter bw) throws IOException{
+		if (bw.equals(bwStaff)){
+			if(!arrayRoleMessageNoOk.isEmpty()){
+				bw.write("Certification against following roles are INSUFFICIENT: ");
+				out.println("Certification against following ROLES are INSUFFICIENT: ");
+				for (String s: arrayRoleNameNoOk){
+					bw.newLine();
+					numRole++;
+					bw.write("   "+numRole+". "+s.toUpperCase());
+					out.println("   "+numRole+". "+s.toUpperCase());
+					bw.newLine();
+					bw.write("\tDETECTED FALLACIES: Certifications against following competencies/requirements are omitted:");
+					out.println("\tDETECTED FALLACIES: Certifications against following competencies/requirements are omitted:");
+					for(String st: arrayRoleMessageNoOk){
+						if (arrayRoleMessageNoOk.indexOf(st)==arrayRoleNameNoOk.indexOf(s)){
+							for (String str: st.split(";")){
+								bw.newLine();
+								String stri = str.trim();
+								bw.write("\t"+"- "+stri);
+								out.println("\t"+"- "+stri);
+							}
+							bw.newLine();
+							bw.write("\tRECOMMENDATION: Add skill certifications against above omitted evidence for the "+s+" role\r\n\tto achieve sufficiency or provide rationale for its omission.");
+							out.println("\tRECOMMENDATION: Add skill certifications against above omitted evidence for the "+s+" role\r\n\tto achieve sufficiency or provide rationale for its omission.");
+							bw.newLine();
+						}
+					}
+				}
+			}
+			
+			if(!arrayRoleMessageNoOk.isEmpty()){
+				bw.newLine();
+				bw.newLine();
+				out.println();
+			}
+			bw.write("Certification against following roles are SUFFICIENT: ");
+			out.println("Certification against following ROLES are SUFFICIENT: ");
+	
+			for (String s: arrayRoleNameOk){
+				bw.newLine();
+				numRole++;
+				bw.write("   "+numRole+". "+s.toUpperCase());
+				out.println("   "+numRole+". "+s.toUpperCase());
+			}
+		}
+		
+		if(bw.equals(bwTool)){
+			if(!arrayToolMessageNoOk.isEmpty()){
+				out.println("\n");
+				bw.write("Qualification against following tools are INSUFFICIENT: ");
+				out.println("Qualification against following TOOLS are INSUFFICIENT: ");
+				for (String s: arrayToolNameNoOk){
+					bw.newLine();
+					numTool++;
+					bw.write("   "+numTool+". "+s.toUpperCase()+". Certifications against following requirements are omitted:");
+					out.println("   "+numTool+". "+s.toUpperCase()+". Certifications against following requirements are omitted:");
+					for(String st: arrayToolMessageNoOk){
+						if (arrayToolMessageNoOk.indexOf(st)==arrayToolNameNoOk.indexOf(s)){
+							for (String str: st.split(";")){
+								bw.newLine();
+								String stri = str.trim();
+								bw.write("\t"+"- "+stri);
+								out.println("\t"+"- "+stri);
+							}
+							bw.newLine();
+							bw.write("\tRECOMMENDATION: Add tool certifications against above omitted evidence for the "+s+" tool\r\n\tto achieve sufficiency or provide rationale for its omission.");
+							out.println("\tRECOMMENDATION: Add tool certifications against above omitted evidence for the "+s+" tool\r\n\tto achieve sufficiency or provide rationale for its omission.");
+							bw.newLine();
+						}
+					}
+				}
+			}
+
+			if(!arrayToolMessageNoOk.isEmpty()){
+				bw.newLine();
+				bw.newLine();
+				out.println();
+			}
+			bw.write("Certification against following tool qualifications are SUFFICIENT: ");
+			out.println();
+			out.println("Certification against following TOOL qualifications are SUFFICIENT: ");
+			for (String s: arrayToolNameOk){
+				bw.newLine();
+				numTool++;
+				bw.write("   "+numTool+". "+s.toUpperCase());
+				out.println("   "+numTool+". "+s.toUpperCase());
+			}
+			out.println("\n");
+		}
+	}
+	
+	
+	private MessageConsole getConsole(String name) {
+		ConsolePlugin consolePlugin = ConsolePlugin.getDefault();
+		IConsoleManager conMan = consolePlugin.getConsoleManager();
+		IConsole[] existing = conMan.getConsoles();
+		for (int i = 0; i < existing.length; i++){
+			if (name.equals(existing[i].getName())){
+		    	return (MessageConsole) existing[i];
+		    }
+		}
+		MessageConsole plugConsole = new MessageConsole(name, null);
+		conMan.addConsoles(new IConsole[]{plugConsole});
+		return plugConsole;
+	}
+	
+	
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		System.out.println(selection);	
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/activator/Activator.java b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/activator/Activator.java
new file mode 100644
index 0000000..c643ce9
--- /dev/null
+++ b/org.eclipse.opencert.epf.detectFallacies/src/org/eclipse/opencert/epf/detectFallacies/activator/Activator.java
@@ -0,0 +1,77 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.detectFallacies.activator;

+

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "detectFallacies"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	/**

+	 * Returns an image descriptor for the image file at the given

+	 * plug-in relative path

+	 *

+	 * @param path the path

+	 * @return the image descriptor

+	 */

+	public static ImageDescriptor getImageDescriptor(String path) {

+		return imageDescriptorFromPlugin(PLUGIN_ID, path);

+	}

+}

diff --git a/org.eclipse.opencert.epf.generateArgumentation/.classpath b/org.eclipse.opencert.epf.generateArgumentation/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.opencert.epf.generateArgumentation/.project b/org.eclipse.opencert.epf.generateArgumentation/.project
new file mode 100644
index 0000000..be747e8
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.opencert.epf.generateArgumentation</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.opencert.epf.generateArgumentation/META-INF/MANIFEST.MF b/org.eclipse.opencert.epf.generateArgumentation/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8563d5f
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Transformation
+Bundle-SymbolicName: org.eclipse.opencert.epf.generateArgumentation;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.opencert.epf.generateArgumentation.transformation.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.epsilon.eol.engine;bundle-version="1.4.0",
+ org.eclipse.epsilon.etl.engine;bundle-version="1.4.0",
+ org.eclipse.epsilon.emc.emf;bundle-version="1.4.0",
+ org.eclipse.epf.uma;bundle-version="1.5.0",
+ org.eclipse.gmf.runtime.emf.core,
+ org.eclipse.opencert.sam.arg.diagram;bundle-version="1.0.0",
+ org.eclipse.gmf.runtime.emf.commands.core,
+ org.eclipse.gmf.runtime.diagram.core,
+ org.eclipse.emf.cdo.dawn.util,
+ org.eclipse.emf.cdo.dawn.ui,
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.emf.cdo.dawn,
+ org.eclipse.emf.cdo.dawn.gmf;bundle-version="2.1.300",
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="1.7.0",
+ org.eclipse.opencert.sam.arg.editor;bundle-version="1.0.0",
+ org.eclipse.epf.library.edit
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+
diff --git a/org.eclipse.opencert.epf.generateArgumentation/build.properties b/org.eclipse.opencert.epf.generateArgumentation/build.properties
new file mode 100644
index 0000000..78d73f7
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .

diff --git a/org.eclipse.opencert.epf.generateArgumentation/epsilon/epf2argument.etl b/org.eclipse.opencert.epf.generateArgumentation/epsilon/epf2argument.etl
new file mode 100644
index 0000000..8f7af37
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/epsilon/epf2argument.etl
@@ -0,0 +1,792 @@
+/*Copyright (c) 2018, MDH */

+// All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v2.0

+// which accompanies this distribution, and is available at

+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+

+// EPF - Process -> OpenCert - ARG

+pre {

+  'Running ETL'.println();

+  //var arg:= new ARG!Case;

+  

+    var processComponent : LIB!ProcessComponent;

+	processComponent =  LIB!ProcessComponent.allInstances().first();

+	var id = processComponent.id;

+	id.println();

+}	

+

+

+rule ProcessComponent2Case

+transform l : LIB!ProcessComponent

+	to arg : ARG!Case{

+	guard : l.process.isTypeOf(LIB!DeliveryProcess) 

+	

+	var str = "Process = " + l.name;

+	str.println();

+

+	for (cp in LIB!CapabilityPattern.allInstances()){

+		var contClaims : Integer = 0;

+		var contArgRea : Integer = 0;

+		var contEvid : Integer = 0;

+		var contJusti : Integer = 0;

+		

+		var u = "Capability Pattern: "+cp;

+		u.println();

+		arg.argument.add(cp.equivalent());

+	}

+}

+		

+

+/*Transform Capability Pattern to Claim*/	

+rule CapabilityPattern2Claim

+	transform cp : LIB!CapabilityPattern

+	to cpcl : ARG!Claim{

+		contClaims=contClaims+1;

+		

+		//Cap. pattern -> Claim

+		cpcl.name = cp.name;

+		cpcl.id = "G"+contClaims+".CP"+cp.id;

+		cpcl.description="Capability Pattern: "+cp.briefDescription;

+		arg.argument.add(cpcl);

+			

+		if(cp.breakdownElements.select(ph|ph.isTypeOf(LIB!Phase))<>null){

+			contArgRea=contArgRea+1;

+			var arr = new ARG!ArgumentReasoning;

+			var cpar = new ARG!AssertedInference;

+			

+			//Argument reasoning over Phases

+	  	    	arr.id="S"+contArgRea+".Ph"+cp.id;

+			arr.name="Argument over phases P";

+			arr.description="Argument over phases P";

+			arg.argument.add(arr);

+			    

+			//Asserted inference links Claim to Argument

+			cpar.name = 'CP_Arph'; 

+			cpar.source.add(cpcl);

+	  		cpar.target.add(arr);

+	  		arg.argument.add(cpar);

+	  		

+		

+			/*Phases -> linked to Capability Pattern*/

+			for (ph in cp.breakdownElements.select(ph|ph.isTypeOf(LIB!Phase))){

+				contClaims=contClaims+1;

+				var phcl = new ARG!Claim;

+				var arph = new ARG!AssertedInference;

+				

+				//Phase -> Claim

+				phcl.name = ph.name;

+				phcl.id = "G"+contClaims+".Ph"+ph.id;

+				phcl.description="Phase: "+ph.name;

+				arg.argument.add(phcl);

+				

+				//Asserted inference links Argument to Claim

+				arph.name = 'Arph_Phcl'; 

+				arph.source.add(arr);

+		  		arph.target.add(phcl);

+		  		arg.argument.add(arph);

+				

+				var ctx = new ARG!InformationElementCitation;

+				var c = new ARG!AssertedContext;

+				

+				//Purpose -> Context

+				var context : String = LIB2!DeliveryProcessDescription.allInstances().first().purpose;

+				var context2 = context.replaceAll("\\<[^>]*>","");

+				var context3 = context2.replaceAll("&#xD;","");

+				var context4 = context3.replaceAll("&#xA;","");

+				var context5 = context4.replaceAll("&lt;","");

+				var context6 = context5.trim();

+

+				ctx.name= ph.name+"'s context";

+				ctx.id="C.Ph"+ph.id;

+				ctx.description=context6;	

+				ctx.type = ARG!InformationElementType#Context;

+		  		arg.argument.add(ctx);

+		  		

+		  		//Asserted inference links Claim to Context

+		  		c.name = 'Ph_Con'; 

+				c.source.add(phcl);

+		  		c.target.add(ctx);

+		  		arg.argument.add(c);	 

+		  		 		

+				if(ph.getActivities(ph.breakdownElements)<>null){

+					contArgRea=contArgRea+1;

+				  	var arr = new ARG!ArgumentReasoning;

+				  	var phar = new ARG!AssertedInference;

+				  	

+				  	//Argument reasoning over Activities

+		  	    	arr.id="S"+contArgRea+".A"+ph.id;

+					arr.name="Argument over activities A";

+				    arr.description="Argument over activities A";

+				    arg.argument.add(arr);

+				    

+				    //Asserted inference links Claim to Argument

+				    phar.name = 'Ph_Aract'; 

+					phar.source.add(phcl);

+		  		 	phar.target.add(arr);

+		  		 	arg.argument.add(phar);

+		  		 	

+				

+					/*Activities -> linked to Phases*/

+					for(act in ph.getActivities(ph.breakdownElements)){

+						contClaims=contClaims+1;

+						var acl = new ARG!Claim;

+						var aa = new ARG!AssertedInference;

+				

+						//Activity -> Claim

+						acl.id="G"+contClaims+".A"+act.id; //act.guid;

+						acl.name="Activity: "+ act.name; //act.presentationName;

+						acl.description="Activity: "+ act.name;

+						arg.argument.add(acl);

+						

+						//Asserted inference links Claim to Claim

+						aa.name = 'Aph_Act'; 

+						aa.source.add(arr);

+			  			aa.target.add(acl);

+			  			arg.argument.add(aa);

+			  			

+					

+						/*Task Descriptors -> linked to Activity*/

+						if(act.getTaskDescriptors(act.breakdownElements) <> null){  

+						

+							contArgRea=contArgRea+1;

+							var arr = new ARG!ArgumentReasoning;

+							var actar = new ARG!AssertedInference;

+						

+							//Argument reasoning over Task

+		  	    				arr.id="S"+contArgRea+".T"+act.id;

+							arr.name="Argument over tasks Td";

+				    			arr.description="Argument over tasks Td";

+				    			arg.argument.add(arr);	    		

+				    

+				    		//Asserted inference links Claim to Argument

+				   			actar.name = 'Act_Artask'; 

+							actar.source.add(acl);

+				  		 	actar.target.add(arr);

+				  		 	arg.argument.add(actar);

+						

+							for(td in act.getTaskDescriptors(act.breakdownElements)){

+								contClaims=contClaims+1;

+								var cltd = new ARG!Claim;

+								var cxa = new ARG!AssertedInference;

+						

+								//Task descriptor -> Claim

+								cltd.id="G"+contClaims+".T"+td.id;

+								cltd.name="Task: "+td.name;

+								cltd.description="Task: "+td.briefDescription;

+			

+								//Asserted inference links Claim to Claim

+								cxa.name = 'Act_Td'; 

+								cxa.source.add(arr);

+			  		 			cxa.target.add(cltd);

+								

+								arg.argument.add(acl);

+			  			 		arg.argument.add(cxa);

+								arg.argument.add(cltd);	

+								

+							  		

+			  					/*Role Descriptors -> attached to Task Descriptor*/

+			  					if(td.getTaskParticipants() <>null){

+			  						contArgRea=contArgRea+1;

+			  						var ar = new ARG!ArgumentReasoning;

+			  						

+			  						//Argument reasoning over role descriptors

+			  	    				ar.id="S"+contArgRea+".R"+td.id;

+									ar.name="Argument over role descriptors Rd";

+					    			ar.description="Argument over role descriptors Rd";

+					    			arg.argument.add(ar);

+			  	

+									for(rd in td.getTaskParticipants()){

+										contClaims=contClaims+1;

+										var ca = new ARG!Claim;

+										var x = new ARG!AssertedInference;

+								

+										//Role descriptor -> Claim

+										ca.name="Role: "+rd.name;

+										ca.id="G"+contClaims+".R"+rd.id;

+										ca.description="Role: "+rd.name + " is certified";

+										arg.argument.add(ca);

+								

+										//Asserted Inference links Argument to Claim

+		  		 						x.name = 'Ard_Crd'; 

+				 						x.source.add(ar);

+				 						x.target.add(ca);

+										arg.argument.add(x);

+										

+										("Role: "+rd.name).println(); // can be removed

+										

+										//Skills -> Solution/Justification

+										var skillsOk = rd.getSkills(rd.name);

+										("skillsOk: "+skillsOk).println();

+											

+										var sk : String;

+										

+										for (ski in skillsOk) {

+											sk = ski.trim();

+											

+											var justification : Boolean = false;

+											// already

+											if (sk.contains("because") or sk.contains("due to") or sk.contains("since") or sk.contains("already")){

+												contJusti=contJusti+1;

+												var iec = new ARG!InformationElementCitation;

+												var y = new ARG!AssertedContext;

+												

+												//Rationale -> Justification

+												iec.name= rd.name+"'s justification";

+												iec.id="J"+contJusti+".R"+rd.id;

+												iec.description=rd.presentationName + "'s justification: "+sk;	

+												iec.type = ARG!InformationElementType#Justification;

+						

+												//Asserted Context links Claim to Justification

+												y.name = 'Crd_Jrd'; 

+												y.source.add(ca);

+		  		 								y.target.add(iec);

+		  		 						

+		  		 								arg.argument.add(y);

+		  		 								arg.argument.add(iec);

+		  		 								justification = true;	

+											}					

+											

+											if (justification <> true) {

+												contEvid=contEvid+1;

+												var iec = new ARG!InformationElementCitation;

+												var y = new ARG!AssertedEvidence;

+												var skill : String = sk.firstToLowerCase();

+												skill.println();

+												rd.presentationName.println();

+									

+												//Skill -> Solution

+												iec.name= rd.name+"'s certification";

+												iec.id="E"+contEvid+".R"+rd.id;

+												iec.description=rd.presentationName + "'s certification against "+sk.firstToLowerCase();	

+												iec.type = ARG!InformationElementType#Solution;

+						

+												//Asserted Evidence links Claim to Solution

+												y.name = 'Crd_Erd'; 

+												y.source.add(ca);

+		  		 								y.target.add(iec);

+		  		 					

+		  		 								arg.argument.add(y);

+		  		 								arg.argument.add(iec);

+		 	 		 						}		

+										}

+									}

+							

+									//Asserted Inference links Claim to Argument

+					 				var z = new ARG!AssertedInference;

+			  		 				z.name = "Cltd_Ard"; 

+					 				z.source.add(cltd);

+						 			z.target.add(ar);

+						 			arg.argument.add(z);

+								}

+								

+						

+							/* WorkProduct Descriptors -> attached to Task Descriptor */

+							if(td.getWorkProducts().isEmpty()=false){

+								contArgRea=contArgRea+1;

+								var arw = new ARG!ArgumentReasoning;

+				  	    		

+				  	    		//Argument Reasoning over work products

+								arw.name="Argument over work product descriptors Wp";

+								arw.description="Argument over work product descriptors Wp";

+								arw.id="S"+contArgRea+".Wp"+td.id;

+								arg.argument.add(arw);

+							

+								for(wp in td.getWorkProducts()){

+									contClaims=contClaims+1;

+									var clw = new ARG!Claim;

+									var xw = new ARG!AssertedInference;

+									

+									//Work product -> Claim

+									clw.name="Work Product: "+wp.name;

+									clw.id="G"+contClaims+".Wp"+wp.id;

+									clw.description="Work Product: "+wp.name + " is planned";

+								

+				  		 			//Asserted Inference links Argument to Claim

+				  		 			xw.name = 'Awp_Cwp'; 

+						 			xw.source.add(arw);

+						 			xw.target.add(clw);

+						 			

+						 			//Undeveloped goal

+						 			if (ph.superActivities.name.toLowercase.contains("planning")){

+										clw.toBeSupported = true;

+									}else{

+										contEvid=contEvid+1;

+										var iew = new ARG!InformationElementCitation;

+										var yw = new ARG!AssertedEvidence;

+									

+										//Work product -> Solution

+										iew.name= wp.name+" should be filled-in template";

+										iew.id="E"+contEvid+".Wp"+wp.id;

+										iew.description= "Evidence: "+wp.name + " should be filled-in template";	//"E_"+wp.name + 

+										iew.type = ARG!InformationElementType#Solution;

+									

+										//Asserted Evidence links Claim to Solution

+										yw.name = 'Cwp_Ewp'; 

+										yw.source.add(clw);

+					  		 			yw.target.add(iew);

+					  		 		

+					  		 			arg.argument.add(yw);		

+					  		 			arg.argument.add(iew);	

+									}

+									

+									arg.argument.add(xw);

+					  		 		arg.argument.add(clw);

+								}

+						

+								//Asserted Inference links Claim to Argument Reasoning

+								var zw = new ARG!AssertedInference;

+				  		 		zw.name = "Cltd_Awp"; 

+						 		zw.source.add(cltd);

+						 		zw.target.add(arw);

+						 		arg.argument.add(zw);

+							}

+								

+

+							if(td.Task<>null){

+								var task = REQ!Task.allInstances.selectOne(task|task.name=td.name);

+								

+								/*Guideline -> attached to Task Descriptor*/

+								//if(task.guidelines <> null){

+										if(task.guidelines.isEmpty()=false){

+									

+									contArgRea=contArgRea+1;

+									var aguk = new ARG!ArgumentReasoning;				

+										

+									//Argument Reasoning over guidelines

+									aguk.name="Argument over guidelines Gu";

+									aguk.description="Argument over guidelines Gu";

+									aguk.id="S"+contArgRea+".Gu"+td.id;

+									

+									//arg.argument.add(aguk);

+										

+									for(gu in task.guidelines){

+										

+										contClaims=contClaims+1;

+										var clgk = new ARG!Claim;

+										var xgk = new ARG!AssertedInference;

+										

+										//Asserted inference links Argument to Claim

+						  		 		xgk.name = 'Agu_Cgu'; 

+								 		xgk.source.add(aguk);

+								 		xgk.target.add(clgk);

+										

+										//Guideline -> Claim

+										clgk.id="G"+contClaims+".Gu"+gu.id;

+										clgk.name="Guideline: "+gu.name;

+										//clgk.description="Guideline: "+gu.name + " is planned";

+										

+										//Undeveloped goal

+						 				if (ph.superActivities.name.toLowercase.contains("planning")){

+											clgk.description="Guideline: "+gu.name + " should be followed according to the template";

+											clgk.toBeSupported = true;

+										}else{

+											clgk.description=gu.name + " is planned";

+											contEvid=contEvid+1;

+											var iegk = new ARG!InformationElementCitation;

+											var ygk = new ARG!AssertedEvidence;

+	

+											//Guideline -> Solution

+											iegk.id="E"+contEvid+".Gu"+gu.id;

+											iegk.name=gu.name+" should be followed according to the template";

+											iegk.description= gu.name+" should be followed according to the template";

+											iegk.type = ARG!InformationElementType#Solution;

+										

+											//Asserted Evidence links Sub-claim to Solution

+											ygk.name = 'Cgu_Egu'; 

+											ygk.source.add(clgk);

+							  		 		ygk.target.add(iegk);

+											

+											arg.argument.add(ygk);

+						  		 			arg.argument.add(iegk);

+						  		 		}

+						  		 		

+						  		 		arg.argument.add(xgk);		

+						  		 		arg.argument.add(clgk);

+

+									}

+										//Asserted Inference links Claim to Argument Reasoning

+							  		 	var zgk = new ARG!AssertedInference;

+							  		 	zgk.name = "Cltd_Agu"; 

+									 	zgk.source.add(cltd);

+									 	zgk.target.add(aguk);

+									 	arg.argument.add(zgk);

+										arg.argument.add(aguk);	

+								} 

+								

+						

+								/* Checklist -> attached to Task Descriptor */

+								//if(task.checklists <> null){

+										if(task.checklists.isEmpty()=false){

+

+									//Argument reasoning over checklists

+									contArgRea=contArgRea+1;

+									var arc = new ARG!ArgumentReasoning;

+							  	    	

+									arc.id="S"+contArgRea+".Ch"+td.id;

+									arc.name="Argument over checklists Ch";

+									arc.description="Argument over checklists Ch";

+

+									for(che in task.checklists){

+									

+										contClaims=contClaims+1;

+										var cc = new ARG!Claim;

+										var xc = new ARG!AssertedInference;

+										

+										//Checklist -> Sub-claim

+										cc.id="G"+contClaims+".Ch"+che.id;

+										cc.name="Checklist: "+che.name;

+										

+										//Asserted inference links Argument to Sub-Claim

+						  		 		xc.name = 'Ach_Cch'; 

+								 		xc.source.add(arc);

+								 		xc.target.add(cc);

+										

+										if (ph.superActivities.name.toLowercase.contains("planning")){

+											cc.description="Checklist: "+che.name + "should be completed or verified";

+											cc.toBeSupported = true;

+										}else{

+											var icc = new ARG!InformationElementCitation;

+											var yc = new ARG!AssertedEvidence;

+											contEvid=contEvid+1;

+										

+											cc.description=che.briefDescription + "is planned";

+				

+											//Checklist -> Solution

+											icc.id="E"+contEvid+".Ch"+che.id;

+											icc.name= che.name+" should be completed or verified";

+											icc.description= che.briefDescription;	

+											icc.type = ARG!InformationElementType#Solution;

+										

+											//Asserted Evidence links Sub-claim to Solution

+											yc.name = 'Cch_Ech'; 

+											yc.source.add(cc);

+						  			 		yc.target.add(icc);

+						  			 		

+						  			 		arg.argument.add(yc);

+						  			 		arg.argument.add(icc);

+						  			 	}

+						  		 		arg.argument.add(xc);

+						  		 		arg.argument.add(cc);

+										

+										

+

+									}

+									//Asserted Inference Links Claim to Argument

+								 	var zc = new ARG!AssertedInference;

+						  		 	zc.name = "Cltd_Ach"; 

+								 	zc.source.add(cltd);

+								 	zc.target.add(arc);

+								 	arg.argument.add(zc);

+									arg.argument.add(arc);

+									

+								} 		

+				

+				

+								/* Example -> attached to Task Descriptor */

+								//if(task.examples <> null){

+										if(task.examples.isEmpty()=false){

+

+									contArgRea=contArgRea+1;

+									var are = new ARG!ArgumentReasoning;

+

+									//Argument Reasoning over examples

+							  	   	 are.id="S"+contArgRea+".Ex"+td.id;

+									are.name="Argument over examples Ex";

+									are.description="Argument over examples Ex";

+									

+									for(exp in task.examples){

+										

+										contClaims=contClaims+1;

+										var ce = new ARG!Claim;

+										var xe = new ARG!AssertedInference;

+										

+										//Example -> Sub-claim

+										ce.id="G"+contClaims+".Ex"+exp.id;

+										ce.name="Example: "+exp.name;

+										

+										//Asserted Inference links Argument to Sub-Claim

+						  		 		xe.name = 'Aex_Cex'; 

+								 		xe.source.add(are);

+								 		xe.target.add(ce);

+										if (ph.superActivities.name.toLowercase.contains("planning")){

+											ce.description= "Example: "+exp.name + " example will be used";

+											ce.toBeSupported = true;

+										}else{

+											var iee = new ARG!InformationElementCitation;

+											var ye = new ARG!AssertedEvidence;

+											contEvid=contEvid+1;

+										

+											ce.description=exp.name + " is planned";

+										

+											//Example -> Solution

+											iee.id="E"+contEvid+".Ex"+exp.id;

+											iee.name= exp.name; //+" should be completed or verified";

+											iee.description= exp.briefDescription + exp.name;	

+											iee.type = ARG!InformationElementType#Solution;

+										

+											//Asserted Evidence links Sub-claim to Solution

+											ye.name = 'Cex_Eex'; 

+											ye.source.add(ce);

+						  			 		ye.target.add(iee);

+						  			 		

+						  			 		arg.argument.add(ye);

+						  			 		arg.argument.add(iee);

+						  			 	}

+						  			 		

+						  		 		arg.argument.add(xe);

+						  		 		arg.argument.add(ce);

+										//arg.argument.add(are);

+									}

+									//Asserted Inference links Claim to Argument

+								 	var ze = new ARG!AssertedInference;

+						  		 	ze.name = "Cltd_Aex"; 

+								 	ze.source.add(cltd);

+								 	ze.target.add(are);

+								 	arg.argument.add(ze);

+									arg.argument.add(are);

+								}

+							

+								/* ToolMentor -> attached to Task Descriptor */

+								if(task.toolMentors.isEmpty()=false){

+									contArgRea=contArgRea+1;

+									var art = new ARG!ArgumentReasoning;

+									

+									//Argument over tool mentors

+									art.name="Argument over tool mentors Tm";

+									art.id="S"+contArgRea+".Tm"+td.id;

+									art.description="Argument over tool mentors Tm";

+									arg.argument.add(art);

+									

+									//Asserted Inference links Claim to Argument

+									var ztm = new ARG!AssertedInference;

+								  	ztm.name = "Cltd_Atm"; 

+									ztm.source.add(cltd);

+									ztm.target.add(art);

+									arg.argument.add(ztm);

+										

+									for(tm in task.toolMentors){

+										contClaims=contClaims+1;

+										var clt = new ARG!Claim;

+										var iet = new ARG!InformationElementCitation;

+										var xt = new ARG!AssertedInference;

+								

+										//Tool mentor -> Claim

+										clt.id="G"+contClaims+".Tm"+tm.id;

+										clt.name="Tool Mentor: "+tm.name;

+										clt.description=tm.name + " is qualified";

+

+					  		 			//Asserted Inference links Argument to Claim

+						  		 		xt.name = 'Atm_Ctm'; 

+								 		xt.source.add(art);

+								 		xt.target.add(clt);

+								 		

+								 		//Tool Qualifications -> Solution/Justification

+								 		var q = tm.getToolQual();

+								 		

+								 		if (q.contains("because") or q.contains("due to") or q.contains("since")or q.contains("already")){

+								 			contJusti=contJusti+1;

+								 			

+								 			//Rationale -> Justification

+											iet.id="J"+contJusti+".T"+tm.id;

+											iet.name= tm.name+"’s qualifications";

+											iet.description=q;

+											iet.type = ARG!InformationElementType#Justification;

+

+											//Asserted Context links Claim to Justification

+											var yt = new ARG!AssertedContext;

+											yt.name = 'Ctm_Etm'; 

+											yt.source.add(clt);

+						  				 	yt.target.add(iet);	  		 		

+										 	

+							  			 	arg.argument.add(iet);	

+										 	arg.argument.add(yt);

+										}else{		

+											contEvid=contEvid+1;

+											

+											//Qualification -> Solution

+											iet.id="E"+contEvid+".T"+tm.id;

+											iet.name= tm.name+"’s qualifications";

+											iet.description=q;

+											iet.type = ARG!InformationElementType#Solution;

+

+											//Asserted Evidence links Claim to Solution

+											var yt = new ARG!AssertedEvidence;

+											yt.name = 'Ctm_Etm'; 

+											yt.source.add(clt);

+						  				 	yt.target.add(iet);	  		 		

+										 	

+										 	arg.argument.add(iet);	

+										 	arg.argument.add(yt);

+										}

+							  		   	arg.argument.add(xt);

+							  		 	arg.argument.add(clt);

+									}	

+								}

+							}

+						}	

+					}

+				}

+			}

+		}

+	}

+}

+	

+	

+

+operation Any getActivities(source : Set(LIB!BreadkDownElement)):Set(LIB!Activity){

+	return source.select(act|act.isTypeOf(LIB!Activity));

+	//act.id.println();

+}

+

+operation Any getTaskDescriptors(source : Set(LIB!BreadkDownElement)):Set(LIB!TaskDescriptor){

+	return source.select(td|td.isTypeOf(LIB!TaskDescriptor));

+	//td.id.println();

+}

+

+

+operation LIB!TaskDescriptor getTaskParticipants():Set(LIB!RoleDescriptor){

+	var res=new Set(LIB!RoleDescriptor);

+	  		

+	// performedPrimarilyBy; additionallyPerformedBy; assistedBy

+	for(p in self.performedPrimarilyBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=p.id));

+	}

+	for(a in self.additionallyPerformedBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=a.id));

+		//var strr3 = "a = " + a;

+		//strr3.println();

+	}

+	for(asi in self.assistedBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=asi.id));

+		//var strr4 = "asi = " + asi;

+		//strr4.println();

+	}

+	return res;

+}

+

+

+operation LIB!RoleDescriptor getSkills(name:String):Sequence{

+	var rolesDescriptions : Sequence = ROL!RoleDescription.allInstances();

+	var skOk5 : String;

+	

+	for(r in rolesDescriptions){

+		var nameRole : String;

+		nameRole = r.name.substring(0,r.name.indexOf(","));

+	

+		if (nameRole = name) {

+			("name: "+name).println();

+			"ENTRO EN IF".println();

+			var skOk0 = r.skills.replaceAll("\\<[^>]*>","");

+			var skOk1 = skOk0.replaceAll("&nbsp;"," ");

+			var skOk2 = skOk1.replaceAll("&amp;","&");

+			var skOk3 = skOk2.replaceAll("    ","");

+			var skOk4 = skOk3.replaceAll("&#xA;","");

+			skOk5 = skOk4.replaceAll("&#xD;","");

+		}

+	}

+	

+	var splitSkills = skOk5.split(";");

+	var firstSkill = splitSkills.first();

+	var skill0 : String;

+	var skillsOk : Sequence;

+	

+	if (firstSkill.contains(":")){

+		skill0 = firstSkill.substring((firstSkill.indexOf(":"))+2);

+		skillsOk.add(skill0);

+		splitSkills.remove(firstSkill);

+		for(x in splitSkills){

+			skillsOk.add(x);

+		}

+	} else {

+		

+		if(firstSkill.contains("against")){

+			var skagainst: Sequence = firstSkill.split("against");

+			skill0 = skagainst.at(1);

+				skillsOk.add(skill0);

+				splitSkills.remove(firstSkill);

+				for(x in splitSkills){

+					skillsOk.add(x);

+				}

+		}

+		

+		if(firstSkill.contains("over")){

+			var skover: Sequence = firstSkill.split("over");

+			skill0 = skover.at(1);

+				skillsOk.add(skill0);

+				splitSkills.remove(firstSkill);

+				for(x in splitSkills){

+					skillsOk.add(x);

+				}

+		}

+	}			

+	return skillsOk;

+}

+		

+

+operation LIB!TaskDescriptor getWorkProducts():Set(LIB!WorkProductDescriptor){

+	var res=new Set(LIB!WorkProductDescriptor);

+	  		

+	// externalInput; optionalInput; mandatoryInput; output

+	for(ei in self.externalInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=ei));

+		//var strr6 = "ei = " + ei;

+		//strr6.println();

+	}

+	for(oi in self.optionalInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=oi));

+		//var strr3 = "oi = " + oi;

+		//strr3.println();

+	}

+	for(mi in self.mandatoryInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=mi));

+		//var strr4 = "mi = " + mi;

+		//strr4.println();

+	}

+	

+	for(o in self.output){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=o.id));

+		//var strr5 = "o = " + o;

+		//strr5.println();

+	}

+	

+	return res;

+}

+

+operation REQ!ToolMentor getToolQual():String{

+	var tools : Sequence(REQ!Tool) = REQ!Tool.allInstances();

+	var tool : REQ!Tool;

+

+	for (t in tools){

+		var toolMentors = t.toolMentors;

+		for (tm in toolMentors){

+			if(tm.id = self.id){

+				tool = t;

+			}

+		}

+	}

+	

+	var toolsDescriptions : Sequence = TOOL!ContentDescription.allInstances();

+	var keyConsiderations : String;

+	var qualification : String;

+	

+	

+	for(t in toolsDescriptions){

+		var nameTool : String;

+		var idTool : String;

+		nameTool = t.name.substring(0,t.name.indexOf(","));

+		idTool = t.name.substring(t.name.indexOf(","));

+		

+		

+		if ((nameTool = tool.name)or(idTool = tool.id)) {

+			var q1 = t.keyConsiderations.replaceAll("\\<[^>]*>","");

+			var q2 = q1.replaceAll("&nbsp;"," ");

+			var q3 = q2.replaceAll("&amp;","&");

+			qualification = q3.replaceAll("&#xD;","");

+		}

+	}			

+	return qualification;

+}

+

+post{	

+

+"End of transformation".println();

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssetsPackage.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssuranceProject.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssuranceProject.gif
new file mode 100644
index 0000000..c4b1624
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/AssuranceProject.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/BaselineConfig.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/PermissionConfig.gif b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/icons/full/obj16/PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.generateArgumentation/model/arg.ecore b/org.eclipse.opencert.epf.generateArgumentation/model/arg.ecore
new file mode 100644
index 0000000..c674662
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/model/arg.ecore
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="arg" nsURI="arg" nsPrefix="arg">

+  <eClassifiers xsi:type="ecore:EClass" name="Case">

+    <eAnnotations source="gmf.diagram">

+      <details key="foo" value="bar"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="argument" upperBound="-1"

+        eType="#//ArgumentElement" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="argumentation" upperBound="-1"

+        eType="#//Argumentation" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="agreement" upperBound="-1"

+        eType="#//Agreement" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="cited" upperBound="-1"

+        eType="#//ArgumentElementCitation" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="information" upperBound="-1"

+        eType="#//InformationElementCitation" containment="true"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ModelElement" abstract="true">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssuranceCase" eSuperTypes="#//ModelElement">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="hasArgument" upperBound="-1"

+        eType="#//Argumentation" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="hasEvidence" upperBound="-1"

+        eType="ecore:EClass evidence.ecore#//Artefact" containment="true"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="composedOf" upperBound="-1"

+        eType="#//AssuranceCase"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ArgumentationElement" abstract="true"

+      eSuperTypes="#//ModelElement">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eAnnotations source="gmf.label"/>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="content" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Argumentation" eSuperTypes="#//ArgumentationElement assuranceasset.ecore#//ManageableAssuranceAsset">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNArgumentModule"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/ArgumentModule.gif"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/ArgumentModule.gif"/>

+      <details key="size" value="120,80"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="argumentation" upperBound="-1"

+        eType="#//Argumentation"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="consistOf" upperBound="-1"

+        eType="#//ArgumentElement"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ArgumentElement" abstract="true" eSuperTypes="#//ArgumentationElement"/>

+  <eClassifiers xsi:type="ecore:EClass" name="InformationElementCitation" eSuperTypes="#//ArgumentElement">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNSolution"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/Solution.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/Solution.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="size" value="100,100"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//InformationElementType"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toBeInstantiated" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="url" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="artefact" upperBound="-1"

+        eType="ecore:EClass evidence.ecore#//Artefact"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ReasoningElement" abstract="true" eSuperTypes="#//ArgumentElement"/>

+  <eClassifiers xsi:type="ecore:EClass" name="ArgumentElementCitation" eSuperTypes="#//ArgumentElement">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNArgumentModule"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/ArgumentModule.gif"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/ArgumentModule.gif"/>

+      <details key="size" value="120,80"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="citedType" eType="#//CitationElementType"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="argumentationReference"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eAnnotations source="gmf.label"/>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Assertion" abstract="true" eSuperTypes="#//ReasoningElement"/>

+  <eClassifiers xsi:type="ecore:EClass" name="ArgumentReasoning" eSuperTypes="#//ReasoningElement">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNStrategy"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/Strategy.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/Strategy.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="size" value="120,80"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toBeSupported" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toBeInstantiated" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="hasStructure" upperBound="-1"

+        eType="#//Argumentation"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Claim" eSuperTypes="#//Assertion assuranceasset.ecore#//ManageableAssuranceAsset">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNGoal"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/Goal.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/Goal.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="size" value="120,80"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="public" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="assumed" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toBeSupported" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toBeInstantiated" lowerBound="1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject"

+        defaultValueLiteral="false"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="choice" eType="#//Choice"

+        containment="true">

+      <eAnnotations source="gmf.affixed"/>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedRelationship" abstract="true"

+      eSuperTypes="#//Assertion"/>

+  <eClassifiers xsi:type="ecore:EClass" name="Choice" eSuperTypes="#//ArgumentElement">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="optionality"/>

+      <details key="label.placement" value="external"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="org.eclipse.opencert.sam.arg.ui.figures.Choice"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/Optionality.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/Optionality.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="size" value="40,40"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceMultiextension" eType="#//AssertedByMultiplicityExtension"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceCardinality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"

+        defaultValueLiteral=""/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optionality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedInference" eSuperTypes="#//AssertedRelationship">

+    <eAnnotations source="gmf.link">

+      <details key="color" value="0,0,0"/>

+      <details key="source" value="source"/>

+      <details key="target" value="target"/>

+      <details key="target.constraint" value="self.oclIsTypeOf(Claim) or self.oclIsTypeOf(Argumentation) or self.oclIsTypeOf(ArgumentReasoning) or self.oclIsTypeOf(Agreement)"/>

+      <details key="source.constraint" value="self.oclIsTypeOf(Choice) or self.oclIsTypeOf(Claim) or self.oclIsTypeOf(ArgumentElementCitation) or self.oclIsTypeOf(Argumentation) or self.oclIsTypeOf(ArgumentReasoning)"/>

+      <details key="style" value="solid"/>

+      <details key="width" value="1"/>

+      <details key="target.decoration" value="filledclosedarrow"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/solvedBy.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/solvedBy.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="label" value="cardinality"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="multiextension" eType="#//AssertedByMultiplicityExtension"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cardinality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"

+        defaultValueLiteral=""/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" upperBound="-1"

+        eType="#//ArgumentationElement"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" upperBound="-1"

+        eType="#//ArgumentationElement"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedEvidence" eSuperTypes="#//AssertedRelationship">

+    <eAnnotations source="gmf.link">

+      <details key="color" value="0,0,0"/>

+      <details key="source" value="source"/>

+      <details key="source.constraint" value="self.oclIsTypeOf(Claim)"/>

+      <details key="target" value="target"/>

+      <details key="target.constraint" value="self.oclIsTypeOf(InformationElementCitation)"/>

+      <details key="style" value="solid"/>

+      <details key="width" value="1"/>

+      <details key="target.decoration" value="filledclosedarrow"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/solvedBy.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/solvedBy.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="label" value="cardinality"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="multiextension" eType="#//AssertedByMultiplicityExtension"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cardinality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"

+        defaultValueLiteral=""/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" upperBound="-1"

+        eType="#//ArgumentElement"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" upperBound="-1"

+        eType="#//ArgumentElement"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedContext" eSuperTypes="#//AssertedRelationship">

+    <eAnnotations source="gmf.link">

+      <details key="color" value="0,0,0"/>

+      <details key="source" value="source"/>

+      <details key="source.constraint" value="self.oclIsTypeOf(ArgumentReasoning) or self.oclIsTypeOf(Claim) or self.oclIsTypeOf(Argumentation)"/>

+      <details key="target" value="target"/>

+      <details key="target.constraint" value="self.oclIsTypeOf(ArgumentElementCitation) or self.oclIsTypeOf(InformationElementCitation)"/>

+      <details key="style" value="solid"/>

+      <details key="width" value="1"/>

+      <details key="target.decoration" value="closedarrow"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/inTheContextOf.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/inTheContextOf.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="label" value="cardinality"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="multiextension" eType="#//AssertedByMultiplicityExtension"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cardinality" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"

+        defaultValueLiteral=""/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" upperBound="-1"

+        eType="#//ArgumentationElement"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" upperBound="-1"

+        eType="#//ArgumentationElement"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedChallenge" eSuperTypes="#//AssertedRelationship">

+    <eAnnotations source="gmf.link">

+      <details key="source" value="source"/>

+      <details key="target" value="target"/>

+      <details key="color" value="255,0,0"/>

+      <details key="style" value="solid"/>

+      <details key="width" value="1"/>

+      <details key="source.constraint" value="self.oclIsTypeOf(Claim)"/>

+      <details key="target.constraint" value="self.oclIsTypeOf(Claim) or self.oclIsTypeOf(AssertedInference) or self.oclIsTypeOf(AssertedEvidence) or self.oclIsTypeOf(AssertedContext) or self.oclIsTypeOf(AssertedChallenge) or self.oclIsTypeOf(AssertedCounterEvidence)"/>

+      <details key="target.decoration" value="filledclosedarrow"/>

+      <details key="tool.small.path" value="SACEM_tooling_icons/Challenge.gif"/>

+      <details key="tool.large.path" value="SACEM_tooling_icons/Challenge.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" upperBound="-1"

+        eType="#//Claim"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" upperBound="-1"

+        eType="#//Assertion"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="AssertedCounterEvidence" eSuperTypes="#//AssertedRelationship">

+    <eAnnotations source="gmf.link">

+      <details key="source" value="source"/>

+      <details key="target" value="target"/>

+      <details key="color" value="255,0,0"/>

+      <details key="style" value="solid"/>

+      <details key="width" value="1"/>

+      <details key="source.constraint" value="self.oclIsTypeOf(InformationElementCitation)"/>

+      <details key="target.constraint" value="self.oclIsTypeOf(Claim) or self.oclIsTypeOf(AssertedInference) or self.oclIsTypeOf(AssertedEvidence) or self.oclIsTypeOf(AssertedContext) or self.oclIsTypeOf(AssertedChallenge) or self.oclIsTypeOf(AssertedCounterEvidence)"/>

+      <details key="target.decoration" value="filledclosedarrow"/>

+      <details key="tool.small.path" value="SACEM_tooling_icons/CounterEvidence.gif"/>

+      <details key="tool.large.path" value="SACEM_tooling_icons/CounterEvidence.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="source" upperBound="-1"

+        eType="#//InformationElementCitation"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="target" upperBound="-1"

+        eType="#//Assertion"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Agreement" eSuperTypes="#//Argumentation">

+    <eAnnotations source="gmf.node">

+      <details key="label" value="id"/>

+      <details key="label.icon" value="false"/>

+      <details key="figure" value="gsnfigures.GSNContract"/>

+      <details key="tool.small.path" value="GSN_tooling_icons/Contract.gif"/>

+      <details key="tool.large.path" value="GSN_tooling_icons/Contract.gif"/>

+      <details key="tool.small.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="tool.large.bundle" value="org.eclipse.opencert.sam.arg"/>

+      <details key="size" value="120,80"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="between" upperBound="-1"

+        eType="#//Argumentation"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="AssertedByMultiplicityExtension">

+    <eLiterals name="Normal"/>

+    <eLiterals name="Optional" value="1"/>

+    <eLiterals name="Multi" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="InformationElementType">

+    <eLiterals name="Justification"/>

+    <eLiterals name="Context" value="1"/>

+    <eLiterals name="Solution" value="2"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EEnum" name="CitationElementType">

+    <eLiterals name="Claim"/>

+    <eLiterals name="Context" value="1"/>

+    <eLiterals name="Solution" value="2"/>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.opencert.epf.generateArgumentation/model/uma.ecore b/org.eclipse.opencert.epf.generateArgumentation/model/uma.ecore
new file mode 100644
index 0000000..6f103e6
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/model/uma.ecore
@@ -0,0 +1,1302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="uma"
+    nsURI="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" nsPrefix="org.eclipse.epf.uma">
+  <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+    <details key="documentation" value="06&#xD;&#xA;05&#xD;&#xA;04&#xD;&#xA;03&#xD;&#xA;01&#xD;&#xA;02"/>
+  </eAnnotations>
+  <eClassifiers xsi:type="ecore:EClass" name="Classifier" abstract="true" eSuperTypes="#//Type">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Classifier."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//PackageableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Type."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PackageableElement" abstract="true"
+      eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Packagable Element."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true" eSuperTypes="#//Element">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Named Element.  Defined that every element has a name."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" eType="#//String"
+        defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Element."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="String" instanceClassName="java.lang.String">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A string is a sequence of characters in some suitable character set used to display information about the model. Character sets may include non-Roman alphabets and characters."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="Boolean" instanceClassName="java.lang.Boolean">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Boolean type is used for logical expression, consisting of the predefined values true and false."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="#//Namespace #//PackageableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Package."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Namespace" abstract="true" eSuperTypes="#//NamedElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="UML 2.0 meta-class Namespace."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="Date" instanceClassName="java.util.Date">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Data type used for attributes of meta-model classes of the type Date."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="Uri" instanceClassName="java.net.URI">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Data type used for attributes of meta-model classes that point to resources such as files."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="Set" instanceClassName="java.util.Set"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="Sequence" instanceClassName="java.util.List"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="Integer" instanceClassName="int">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An integer is a primitive type representing integer values."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="Double" instanceClassName="java.lang.Double"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Constraint" eSuperTypes="#//MethodElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Constraint is a Method Element that represents a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of a Method Element."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" ordered="false" eType="#//String"
+        defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attribute stores the definition of the constraint."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodElement" abstract="true" eSuperTypes="#//PackageableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Every class defined in this specification is derived from Method Element.  In other words Method Element is the root generalization for all UMA classes and defines a common set of attributes inherited by every other element type of this model.  Method Element itself is derived from Packageable Element from the UML 2.0 Infrastructure.  Method Element inherits the Name attribute from Packageable Element's super class.  Every element defined as a UMA instance is derived from Model Element.  Every Method Element in-stance is at least defined by a unique id, a name, as well as brief description.&#xD;&#xA;Method Element in the package Method Plugin adds additional properties via package merge to Method Element defined in Method Core needed for the variability and extensibility capabilities introduces in this package."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="guid" ordered="false" eType="#//String"
+        defaultValueLiteral="" iD="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every instance of Method Element has a global unique id."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presentationName" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every Describable Element has a presentation name, which is used for external presentation of the element.  For example, name (the internal representation) might be set to &quot;rup_architecture_document&quot; to differentiate from a &quot;j2ee_architcture_document&quot; whereas the external presentation would always be &quot;Architecture Document&quot;.&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="briefDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every instance of Method Element shall be briefly described with one or two sentences summarizing the element."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ownedRules" ordered="false"
+        upperBound="-1" eType="#//Constraint" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodElementProperty"
+        ordered="false" upperBound="-1" eType="#//MethodElementProperty" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="kind" ordered="false" upperBound="-1"
+        eType="#//Kind"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="suppressed" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="If a Variability Element is derived from another Variability Element using the Extends Variability Specialization then this attribute can be used to suppress inherited Method Elements that were part of the based-on Variability Element, which can be any type of Method Element.  In other words, if this attribute is set to true on a Method Element that has the same name than an inherited method element then it will not be regarded as inherited at all."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="orderingGuide" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attribute is used for CASE tool realizations of this model to contain information about layout and ordering of the method element and its parts."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodElementProperty" eSuperTypes="#//PackageableElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Kind" eSuperTypes="#//ContentElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableMetaClassInfo"
+        ordered="false" upperBound="-1" eType="#//ApplicableMetaClassInfo" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ContentElement" abstract="true" eSuperTypes="#//DescribableElement #//VariabilityElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Content Element is a Describable Element that represents an abstract generalization for all elements that are considered to be and managed as Method Content.&#xA;Content Elements represents reusable Method Content that is supposed to be managed in Content Packages.  The separation of Content Element from Process Element allows to clearly distinguish between pure method content from content that is represented in processes.&#xA;&#xD;&#xA;This is the Guidance Types package's extension of Content Element (defined in Content Elements) providing additonal associations.&#xD;&#xA;Content Element in the package Method Plugin inherits from Variability Element and not directly from Method Element anymore.  This is achieved using UML 2.0 package merge semantics.  Only if an adopter of this meta-model decides to realize Method Plugins, he would get the variability and extension capabilities for all Content Elements.&#xA;Content Element inherits the semantics of Variability Element.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="supportingMaterials" ordered="false"
+        upperBound="-1" eType="#//SupportingMaterial"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="conceptsAndPapers" ordered="false"
+        upperBound="-1" eType="#//Concept"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="checklists" ordered="false"
+        upperBound="-1" eType="#//Checklist"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guidelines" ordered="false"
+        upperBound="-1" eType="#//Guideline"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="examples" ordered="false"
+        upperBound="-1" eType="#//Example"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="assets" ordered="false"
+        upperBound="-1" eType="#//ReusableAsset"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="termdefinition" ordered="false"
+        upperBound="-1" eType="#//TermDefinition"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DescribableElement" abstract="true"
+      eSuperTypes="#//MethodElement #//Classifier">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Describable Element is an abstract generalization of Method Elements for which external presentation names as well as content descriptions have been defined, such as Roles or Work Products.  Presentation Name and Content Descriptions are typically localized using a resource allocation mechanism for its String type attributes.&#xA;This abstraction represents all elements in the Method Content as well as Process space for which concrete textual descriptions are defined in the form of documenting attributes grouped in a matching Content Description instance (see Section 4.1.4).  Describable Elements are intended to be published in method or process publications (similar to the IBM Rational Unified Process web).  Describable Element defines that the element it represents will have content 'attached' to it.  Content Description is the abstraction for the actual places in which the content is being represented.  This separation allows a distinction between core method model elements describing the structure of the model from the actual description container providing, for example, the documentation of the content element in different alternatives languages, audiences, licensing levels, etc.&#xA;&#xD;&#xA;This definition of Content Element extends the Content Element definition via package merge with references to icons that are used for presenting Content Elements in a UMA-based modeling environment as well as when publishing Content Elements into documentation presentation (e.g. document or html pages)."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presentation" ordered="false"
+        eType="#//ContentDescription" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="shapeicon" ordered="false"
+        eType="#//Uri">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A reference to an icon that can be used for modeling with specific Content Element instances (as graphical stereotypes, e.g. a use case symbol for a use case artifact) as well as publication of content."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeicon" ordered="false"
+        eType="#//Uri">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A reference to an icon that can be used in tree browser presentations and breakdown structures."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ContentDescription" eSuperTypes="#//MethodUnit">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Content Description is a Method Element that is used to store the textual description for a Content Element.  It defines standard attributes applicable for all Content Element types.  Specific Content Element sub-types can define their own matching Content Description sub-types. "/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mainDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attribute store the main descriptive text for the Content Element.  All text that is not part of any of the more specific attributes shall be stored here.  If the Content Description is divided into sections using the Section class, then only the text from the 'start' of the content description to the first section will be stored here (similar to a normal document where you can place text between its beginning to its first diction heading)."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sections" ordered="false"
+        upperBound="-1" eType="#//Section" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalId" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="An external visible number or label that is used to reference this element. Used like a synonym to the name."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="keyConsiderations" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Key Considerations provides advise and guidance of a critical nature for the content element as well as warnings, cautions, pitfalls, dangers."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="longPresentationName" ordered="false"
+        lowerBound="1" eType="#//String"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodUnit" abstract="true" eSuperTypes="#//MethodElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Method Unit is a special Method Element that shall be maintained in a Method Library as a separate unit of control."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="authors" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every Method Unit is being created and owned by an author or authoring team."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDate" ordered="false"
+        eType="#//Date">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The date the last change that resulted into this version has been made."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The description of the last change that resulted into this version."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every Package has a version number used to track changes."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="copyrightStatement" ordered="false"
+        eType="#//SupportingMaterial"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SupportingMaterial" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Supporting Materials is catchall for other types of guidance not specifically defined elsewhere. It can be related to all kinds of Content Elements, i.e. including other guidance elements."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Guidance" abstract="true" eSuperTypes="#//ContentElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Guidance is an abstract generalization of additional information related to content elements such as Roles, Tasks, and Work Products.  Examples for Guidance are Guidelines, Templates, Checklists, Tool Mentors, Estimates, Supporting Materials, Reports, Concepts, etc.  This package only contains the definition of the abstract Guidance class.  The package Guidance Types defines concrete guidance types."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Section" eSuperTypes="#//VariabilityElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Section is a special Method Element that represents structural subsections of a Content Description's sectionDescription attribute.  It is used for either large scale documentation of Content Elements organized into sections as well as to flexibly add new Sections to Content Elements using contribution variability added to the Section concept for Method Plug-ins.&#xD;&#xA;Section in the package Method Plugin inherits from Variability Element and extends Section defined in Method Core :: Basic Elements with new capabilities for variability. &#xA;For example, when a Task contributes to another Task its Presentation association is contributed including its Sections (i.e. its Steps), which are modeled as parts of the Content Description instance.  Sections can be nested and therefore Task Descriptions can be flexibly organized in Steps with sub-Steps.  Sections are Variability Elements themselves, so they can contribute to each other.  For example, one could model a Task step as a Section instance without relating it to a Task Description that directly contributes to (or replaces) another Section which is part of a Task Description.  This contribution (or replacement) would add new description text to the original step description (or replace the original step description).  Another example would be to contribute new Check List items organized as Sections to an existing Check List (defined as guidance).  &#xA;&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sectionName" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Every Section has a name used for external presentation of the section, e.g. when published or when section heading are listed in a table of contents.  This attribute is similar to Presentation Name for Content Elements."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sectionDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attributes store the description text for a Content Description's Section."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subSections" ordered="false"
+        upperBound="-1" eType="#//Section" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="predecessor" ordered="false"
+        eType="#//Section"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="VariabilityElement" abstract="true"
+      eSuperTypes="#//MethodElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Variability Element is an abstract class derived from Method Element that provides new capabilities for content variation and extension to Content Elements or any other Method Element that derives from it.  It has been placed in-between the classes Method Element and Content Element in the overall UMA taxonomy of classes using the UML 2.0 package merge mechanism.  The association Variability Specialization shall only be instantiated between two subclasses of Variability Element of the same type.  The element on varaibilitySpecialElement side of the relationship defines a value for the attribute variabilityType defining the nature of the relationship using a literal from the enumeration Variability Type.&#xA;Variability Element of the meta-model package Method Plugins adds the capabilities of variation and extension to Method Elements that derive from it.  By default all Content Elements such as Role, Task, Guidance Types, or Activities are defined to be Variability Elements.&#xA;Variability and extension provides unique mechanisms for customizing method content without actually directly modifying the original content, but by just be able to describe with separate objects the differences (additions, changes, omissions) relative to the original.  This plug-in concept allows users to factor their method content and processes in interrelated units and even to architect method content and processes in layers that extend each other with new capabilities.  The resulting method and process design can be dynamically combined and applied on demand using the interpretation rules defined for Variability Element Specializations assembling to process practitioners the most accurate method and process descriptions possible.  It also allows process practitioners to extends and tailor method content and processes they do not own and to easily upgrade to newer versions by simply reapply their personal changes to these upgrades.&#xA;Variability Element defines two types of variability and one type of extension which are formally defined for the enumeration Variability Type.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variabilityType" ordered="false"
+        lowerBound="1" eType="#//VariabilityType" defaultValueLiteral="na">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="If in instance of the variabilitySpecialization association between two Variability Elements of the same type exists, then the variabilityType attribute specifies how the element at the variabilitySpecialElement end of the association changes the Content Element at the variabilityBasedOnElement end. See the Variability Type enumeration class for definitions for the different types of variability."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variabilityBasedOnElement"
+        ordered="false" lowerBound="1" eType="#//VariabilityElement"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="VariabilityType">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Variability Type is an Enumeration used for values for instances of Variability Element's attribute variabilityType.  It defines the nature of how a Variability Element extends another Variability Element. See enumeration literals for definitions for each type."/>
+    </eAnnotations>
+    <eLiterals name="na">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This is the default &quot;not assigned&quot; value of a Variabillity Element's variabilityType attribute which is set in the case no variability association is present between the Variability Element and other Variability Elements.&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="contributes" value="1">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Contributes provides a way for instances of Variability Elements to contribute their properties into their base Variability Element without directly altering any of its existing properties, i.e. in an additive fashion.  Properties contributed are: attribute values and association instances.  The effect after interpretation of contribution is that the base Variability Element is logically replaced with an augmented variant of the element that combines attribute values and association instances.  The way this combination is realized depends on the type of the attribute or association.  For example, String attributes are concatenated resolving embedded commands for dependent text or merging text fragments (e.g. descriptions for content elements).  Additional elements in to-many associations are added (e.g. additional Guidance elements or Task Descriptors of an Activity).  Different elements in to-one associations are ignored (e.g. the one Primary Performer of a Task).  Multiple Content Elements can contribute to the same base element and all of these contributions properties are added to the base in the same fashion. The following table provides the detailed list of interpretation rules:&#xA;attribute values:&#x9;String values from the special Variability Element are concatenated with values from the based-on Variability Element.  Other values from the special Variability Element of any other type such as Integer, Date are ignored.&#xA;The identifying attributes guid and name of Method Element are exempt from this rule and will not be modified.&#xA;0..1-association instances:&#x9;The one association instance of the based-on Variability Element is kept and any association from the contributing special Variability Element is ignored.&#xA;0..n-association instances:&#x9;Association instances of the special Variability Element are added to the already existing association instances of the based-on element.  If both Variability Elements refer to the same object then only one instance of the association will remain.&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="extends" value="2">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Extension allows Method Plugins to easily reuse elements from a Base Plugin by providing a kind of inheritance for the special Variability Element.  Attribute values and Association instances are inherited from the based-on Variability Element to the special Variability Element.  The result of interpretation is that the special element has the same properties as the based-on has, but might define its own additions.  Hence extends is not used to modify content of the base Plugin, but to provide the ability for the extending Plugin to define its own content which is a variant of content already defined (e.g. a special version of a generic Review Record for a specific type of review).  The effect of this is that the base Variability Element and any number of extending Variability Elements can be used side by side, but refer to each other via the extends relationship.  Extends also provides the key mechanism for binding Capability Patterns to Processes: A pattern is applied by defining an extends relationships from an Activity of the applying Processes to the Pattern.  The Activity inherits associations instances from the pattern and the pattern appears to be part of the resulting Process after Interpretation.&#xA;attribute values:&#x9;Values from the based-on Variability element are inherited and used to populate the special Variability Elements attributes.  If the special element attributes are already populated the inherited values are ignored.  &#xA;The identifying attributes guid and name of Method Element are exempt from this rule and will not be modified.&#xA;0..1-association instances:&#x9;The one association instance of the based-on Variability Element is inherited to the special Variability Element.  If the special Variability Element defines its own association instance then the inherited one is ignored.&#xA;0..n-association instances:&#x9;Association instances defined for the based-on Variability Element are inherited to the special Variability Element.  The special element can add additional association instances.&#xA;&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="replaces" value="3">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Replaces provides a way for Variability Elements to replace a base Variability Element without directly changing any of its existing properties.  This is in most cases used for Method Plugins that aim to replace specific Content Elements such as Roles, Task, or Activities with either a complete new variant or to change fundamental relationships of these elements (e.g. Role-Artifact responsibility).  Properties replaced are attribute values and association instances.  The effect of this is that the base Content Element is logically replaced with this new variant of the element to which all incoming associations still point as before, but which has potentially new attribute values and outgoing association properties.  This provides a very powerful mechanism to replace, for example, whole Activities in a Process with complete new realizations of the Activity.  For instance, replacing an Activity doing use case-based design with an activity doing agile code-centric development doing the same work using a different development technique utilizing different Roles, Tasks, etc.  Another example, would be to replace an Activity that describes database design for an RDBMS with an Activity that describes database design for an OODBMS.  A Variability Element can only be replaced by one other element at a time.  For example, if two Method Plugins replace the same element only one Method Plugin can be used for interpretation (see concept of Method Configuration for more details on how to resolve such conflicts, Section 7.1.2).  The following table provides the detailed list of interpretation rules:&#xA;attribute values:&#x9;Values from the special Variability Element are replaced with values from the based-on Variability Element including unassigned values.&#xA;The identifying attributes guid and name of Method Element are exempt from this rule and will not be modified.&#xA;0..1-association instances:&#x9;The one association instance of the based-on Variability Element is replaced with the association instance from the replacing special Variability Element.  If the special Variability Element does not have an association instance then resulting element will also not have an association.&#xA;0..n-association instances:&#x9;Association instances of the special Variability Element replace all association instances of the based-on Variability Element.&#xA;&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="localContribution" value="4"/>
+    <eLiterals name="localReplacement" value="5"/>
+    <eLiterals name="extendsReplaces" value="6"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Concept" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Concept is a specific type of guidance that outlines key ideas associated with basic principles underlying the referenced item. Concepts normally address more general topics than Guidelines and span across sev-eral work product and/or tasks/activities."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Checklist" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Checklist is a specific type of guidance that identifies a series of items that need to be completed or veri-fied.  Checklists are often used in reviews such as walkthroughs or inspections. "/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Guideline" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Guideline is a specific type of guidance that provides additional detail on how to perform a particular task or grouping of tasks (e.g. grouped together as activities) or that provides additional detail, rules, and recommendations on work products and their properties.  Amongst others, it can include details about best practices and different approaches for doing work, how to use particular types of work products, information on different subtypes and variants of the work product and how they evolve throughout a lifecycle, discussions on skills the performing roles should acquire or improve upon, measurements for progress and maturity, etc."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Example" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An Example is a specific type of Guidance that represents a typical, partially completed, sample instance of one or more work products or scenario like descriptions of how Task may be performed. Examples can be related to Work Products as well as Tasks that produce them as well as any other Content Element."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ReusableAsset" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Reusable Asset provides a solution to a problem for a given context. The asset may have a variability point, which is a location in the asset that may have a value provided or customized by the asset consumer. The asset has rules for usage which are the instructions describing&#xA;how the asset should be used.&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TermDefinition" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="TermDefinitions define concepts and are used to build up the Glossary. They are not directly related to ContentElements, but their relationship is being derived when the Term is used in the ContentElements description text."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ApplicableMetaClassInfo" eSuperTypes="#//Classifier">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimaryExtension" ordered="false"
+        lowerBound="1" eType="#//Boolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Artifact" eSuperTypes="#//WorkProduct">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Artifact is a Work Product that provides a description and definition for tangible work product types. Artifacts may be composed of other artifacts. For example, a model artifact can be composed of model elements, which are also artifacts.&#xA;Artifacts are tangible work products consumed, produced, or modified by Tasks.  It may serve as a basis for defining reusable assets.  Roles use Artifacts to perform Tasks and produce Artifacts in the course of performing Tasks.  Artifacts are the responsibility of a single Role, making responsibility easy to identify and understand, and promoting the idea that every piece of information produced in the method requires the appropriate set of skills. Even though one role might &quot;own&quot; a specific type of Artifacts, other roles can still use the Artifacts; perhaps even update them if the Role has been given permission to do so.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="containerArtifact" ordered="false"
+        eType="#//Artifact" eOpposite="#//Artifact/containedArtifacts"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="containedArtifacts" ordered="false"
+        upperBound="-1" eType="#//Artifact" containment="true" eOpposite="#//Artifact/containerArtifact"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkProduct" eSuperTypes="#//ContentElement #//FulfillableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Work Product is an abstract class which provides a generalization for the content element types Artifact, Outcome, and Deliverable.  The meta-model class Work Product actually represents work product types, i.e. an instance of Work Product is a description of a specific type of work product and not an individual work product instance.  However, for simplicity reasons and because of low risk of misinterpretation we did not append the word 'type' to every meta-class.&#xA;A work product is an abstraction for descriptions of content elements that are used to define anything used, produced, or modified by a task.&#xA;&#xD;&#xA;This is the Guidance Types package's extension of Work Product (defined in Content Elements) providing additonal associations."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reports" ordered="false"
+        upperBound="-1" eType="#//Report"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="templates" ordered="false"
+        upperBound="-1" eType="#//Template"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="toolMentors" ordered="false"
+        upperBound="-1" eType="#//ToolMentor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="estimationConsiderations"
+        ordered="false" upperBound="-1" eType="#//EstimationConsiderations"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FulfillableElement" eSuperTypes="#//DescribableElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fulfills" ordered="false"
+        upperBound="-1" eType="#//FulfillableElement"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Report" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Report is a predefined template of a result that is generated on the basis of other work products as an output from some form of tool automation. An example for a report would be a use case model survey, which is generated by extracting diagram information from a graphical model and textual information from documents and combines these two types of information into a report."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Template" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Template is a specific type of guidance that provides for a work product a pre-defined table of contents, sections, packages, and/or headings, a standardized format, as well as descriptions how the sections and packages are supposed to be used and completed. Templates cannot only be provided for documents, but also for conceptual models or physical data stores."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ToolMentor" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Tool Mentor is a specific type of guidance that shows how to use a specific tool to accomplish some piece of work a Work Product either in the context of or independent from a Task or Activity."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EstimationConsiderations" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Estimation Considerations qualify the usage and application of estimation metrics in the development of an actual estimate."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Deliverable" eSuperTypes="#//WorkProduct">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A deliverable is a Work Product that provides a description and definition for packaging other Work Products, and may be delivered to an internal or external party.  Therefore, a Deliverable aggregates other Work Products. Therefore, a Deliverable aggregates other Work Products.  A Deliverable is used to pre-define typical or recommended content in the form or work products that would be packaged for delivery.  The actual packaging of the Deliverable in an actual process or even project could be a modification of this recommendation.  Deliverables are used to represent an output from a process that has value, material or otherwise, to a client, customer or other stakeholder. "/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deliveredWorkProducts"
+        ordered="false" upperBound="-1" eType="#//WorkProduct"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Outcome" eSuperTypes="#//WorkProduct">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An outcome describes intangible work products that are a result or state. Outcomes may also be used to describe work products that are not formally defined.  A key differentiator for outcomes against artifacts is that outcomes are not candidates for harvesting as reusable assets."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Step" eSuperTypes="#//Section #//WorkDefinition">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Step is a Section and Work Definition that is used to organize Tasks into parts or subunits of work.  Steps inherit the subSections decomposition from Section and can therefore describe Sub-Steps nested into Steps.&#xA;A Step describes a meaningful and consist part of the overall work described for a Task.  The collection of Steps defined for a Task represents all the work that should be done to achieve the overall development goal of the Task.  Not all steps are necessarily performed each time a Task is invoked in a Process (see Task Descriptor), so they can also be expressed in the form of alternate 'flows' of work.  Different ways of achieving the same development goal can then be 'assembled' by selecting different combinations of steps when applying the Task in a Process.  Typical kinds of steps a Task author should consider are: Thinking steps: where the individual roles understand the nature of the task, gathers and examines the input artifacts, and formulates the outcome. Performing steps: where the individual roles create or update some artifacts. Reviewing steps: where the individual roles inspects the results against some criteria.&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkDefinition" abstract="true" eSuperTypes="#//MethodElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Work Definition is an abstract Method Element that generalizes all descriptions of work within the Unified Method Architecture.  This package introduces two concrete types of Work Definitions: Task and Step.  Work Definitions can contain sets of pre- and post-conditions defining constraints that need to be valid before the described work can begin or before it can be declared as finished.  Note that general ownedRules can be used to define additional constraints and rules for Work Definitions.&#xA;Work Definitions represent behavioral descriptions for doing work.  These behavioral descriptions are not bound to one specific classifier, but represent an arbitrary definition of work.  For example, a Work Definition could represent work that is being performed by a specific Role (e.g. a Role performing a specific Task or Steps of a Task), by many Roles working in close collaboration (many Roles all working together on the same interdisciplinary Task), or complex work that is performed throughout the lifecycle (e.g. a process defining a breakdown structure for organizing larger composite units of work performed by many Roles working in collaboration).&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="precondition" ordered="false"
+        eType="#//Constraint" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="postcondition" ordered="false"
+        eType="#//Constraint" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Whitepaper" eSuperTypes="#//Concept">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Whitepapers are a special Concept guidance that have been externally reviewed or published and can be read and understood in isolation of other content elements and guidance."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Task" eSuperTypes="#//ContentElement #//WorkDefinition">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Task is a content element that describes work being performed by Roles.  It defines one default performing Role as well as many additional performers.  A Task is associated to input and output work products.  Inputs are differentiated in mandatory versus optional inputs.  The associations to Work Products are not instantiatable/variable-like parameters.  They rather express (hyper-)links to the descriptions of the work products types that are related to the Task as inputs and outputs.  In other words, these associations are not intended to be used to capture which concrete instances will be passed when instantiating the method in a project.  All of the Task's default associations can be overridden in an actual process definition.&#xA;A Task describes an assignable unit of work.  Every Task is assigned to specific Roles.  The granularity of a Task is generally a few hours to a few days.  It usually affects one or only a small number of work products. A Task is used as an element of defining a process. Tasks are further used for planning and tracking progress; therefore, if they are defined too fine-grained, they will be neglected, and if they are too large, progress would have to be expressed in terms of a Task's parts (e.g. Steps, which is not recommended). &#xA;A Task has a clear purpose in which the performing roles achieve a well defined goal.  It provides complete step-by-step explanations of doing all the work that needs to be done to achieve this goal.  This description is complete, independent of when in a process lifecycle the work would actually be done.  It therefore does not describe when you do what work at what point of time, but describes all the work that gets done throughout the development lifecycle that contributes to the achievement of this goal.  When the Task is being applied in a process then this process application (defined as Task Descriptor) provides the information of which pieces of the Task will actually be performed at any particular point in time. This assumes that the Task will be performed in the process over and over again, but each time with a slightly different emphasis on different steps or aspects of the task description. &#xA;For example, a Task such as &quot;Develop Use Case Model&quot; describes all the work that needs to be done to develop a complete use case model. This would comprise of the identification and naming of use cases and actors, the writing of a brief description, the modeling of use cases and their relationships in diagrams, the detailed description of a basic flow, the detailed description of alternatives flows, performing of walkthroughs workshops and reviews, etc.  All of these parts contribute to the development goal of developing the use case model, but the parts will be performed at different points in time in a process.  Identification, naming, and brief descriptions would be performed early in a typical development process versus the writing of detailed alternative flows which would be performed much later.  All these parts or steps within the same Task define the &quot;method&quot; of Developing a Use Case Model.  Applying such a method in a lifecycle (i.e. in a process) is defining which steps are done when going from one iteration to the next.&#xA;&#xD;&#xA;This is the Guidance Types package's extension of Task (defined in Content Elements) providing additional associations."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="performedBy" ordered="false"
+        upperBound="-1" eType="#//Role"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mandatoryInput" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="additionallyPerformedBy"
+        ordered="false" upperBound="-1" eType="#//Role"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="optionalInput" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="steps" ordered="false"
+        upperBound="-1" eType="#//Step" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="toolMentors" ordered="false"
+        upperBound="-1" eType="#//ToolMentor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="estimationConsiderations"
+        ordered="false" upperBound="-1" eType="#//EstimationConsiderations"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Role" eSuperTypes="#//ContentElement #//FulfillableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Role is a content element that defines a set of related skills, competencies, and responsibilities.  Roles are used by Tasks to define who performs them as well as define a set of work products they are responsible for.  &#xA;A Role defines a set of related skills, competencies, and responsibilities of an individual or a set of individuals.  Roles are not individuals or resources.  Individual members of the development organization will wear different hats, or perform different roles. The mapping from individual to role, performed by the project manager when planning and staffing for a project, allows different individuals to act as several different roles, and for a role to be played by several individuals.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modifies" ordered="false"
+        upperBound="-1" eType="#//WorkProduct" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="responsibleFor" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArtifactDescription" eSuperTypes="#//WorkProductDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="briefOutline" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides a brief description of the information that can be found in this artifact. For example, discusses the contents for key chapters of a document artifact or the key packages and modules of a model artifact."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="representationOptions"
+        ordered="false" eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Discusses different possible alternative representations for the artifact. For example a design model can be represented as a UML model or an informal block diagram or by textual description only."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="representation" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="notation" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Describes why the work product is produced and to what use it will be put."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="impactOfNotHaving" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Describes the consequences of not producing the work product.  This is intended to aid in the tailoring the method/process to the needs of a specific project."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reasonsForNotNeeding" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Describes the circumstances in which it is reasonable not to produce the work product.  This is intended to aid in the tailoring of the method/process to the needs of a specific project."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeliverableDescription" eSuperTypes="#//WorkProductDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The description of the Deliverable used for client documents (proposal, statements of work or contractual agreements).  It might use a different language and follow legal constraints."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="packagingGuidance" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides guidance on how to assemble the deliverable from all its required inputs.  This section describes the most common content medium and format.  Distribution of the deliverable is addressed in this section, if necessary."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RoleDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="skills" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Lists of set of required skills a person needs to possess to fulfill that Role."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="assignmentApproaches" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides guidance on for assigning individuals to the Role in terms of what other roles these individuals could perform and what responsibility different individuals assigned to this role might have.  The guidance can also describe different assignment approaches for different types of projects, e.g. for large versus small teams where individuals could be allocated to roles full time versus sharing roles within the team."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="synonyms" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Lists synonyms, i.e. other names the Role might be referred by.  Tool support for the meta-model might support that a Role name can be consistently be replaced with one of its synonyms throught a Process."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TaskDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Summarizes the main reason for performing this Task and what is intended to be achieved."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="alternatives" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Comprises of summaries describing important exceptional and non-standard ways of achieving this Task's development goals that were not covered by the Task's Steps."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GuidanceDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attachments" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This field is primarily used for attachments augmenting the information provided for guidance.  In particular the attribute is used for Templates, Examples, and Reusable Assets to contain the actual attachment described in the mainDescription.  It can additionally contain representations of the guidance in just a third party format, e.g. PDF, MS Word, or Word Perfect."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PracticeDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="additionalInfo" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Any additional Information not covered by the other attributes."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="problem" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A description of the problem the Practice addresses."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="background" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Elaboration on the background and the context in which the problem occurs and where the solution described by this Practice will fit in."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="goals" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A summary of the overall goals to be addressed by the Practice."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="application" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Describes how the Practice is being applied or introduced into the context described in background."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="levelsOfAdoption" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Outlines the different forms or variants in which the practice could be realized. (e.g. full adoption verus a partial adoption of the Practice)"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RoleSet" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Role Set organizes Roles into categories.  It is used to group roles together that have certain commonalities.  For example, the &quot;Analysts&quot; Role Set could group the &quot;Business Process Analyst&quot;, &quot;System Analyst&quot;, as well as &quot;Requirements Specifier&quot; roles.  All of these work with similar techniques and have overlapping skills, but are required as distinct roles for a method (e.g. the method the IBM Rational Unified Process is based on).&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="roles" ordered="false"
+        upperBound="-1" eType="#//Role"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ContentCategory" abstract="true" eSuperTypes="#//ContentElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Content Category is an abstract class generalizing content category types."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Domain" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Domain is a refineable hierarchy grouping related work products.  In other words, Domains can be further divided into sub-domains, with work product elements to be categorized only at the leaf-level of this hierarchy.&#xA;Domain is a logical grouping of work products that have an affinity to each other based on resources, timing, or relationship.  A Domain may be divided into subdomains.  For example, GS Method uses six predefined Domains for Work Products: Application, Architecture, Business, Engagement, Operations and Organization.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="workProducts" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subdomains" ordered="false"
+        upperBound="-1" eType="#//Domain" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductType" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Work Product Type is a second category for work products, which in contrast to Domain is more presentation oriented.  A work product can have many Work Product Types.  Examples, for a Work Product Type is &quot;Class Diagram&quot;, which categorizes the Artifacts Analysis Model, Design Model, User Experience Model, or &quot;Specification&quot;, which categorizes requirements specifications that define a system with a well-defined system boundary, such as use case or functional requirements specification.  A Work Product can be categorized to be of many Work Product Types.  For example, a use case model can be categorized as a Specification as well as Diagram Work Product Type.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="workProducts" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DisciplineGrouping" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Discipline Groupings are used to group Disciplines.  For example, the Discipline Grouping &quot;Software Disciplines&quot; would be the group of all disciplines related to developing software such as &quot;Requirements Management&quot; or &quot;Testing&quot;; &quot;IT Infrastructure Management&quot; would be a Disciplines Grouping for disciplines such as &quot;IT Operational Services&quot;, &quot;IT Customer Relationships&quot;, or &quot;IT Enabling Services&quot;.  Disciplines can be associated to more than one Discipline Grouping.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="disciplines" ordered="false"
+        upperBound="-1" eType="#//Discipline"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Discipline" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Discipline is a categorization of work (i.e. Tasks for Method Content), based upon similarity of concerns and cooperation of work effort.&#xA;A discipline is a collection of Tasks that are related to a major 'area of concern' within the overall project. The grouping of Tasks into disciplines is mainly an aid to understanding the project from a 'traditional' waterfall perspective. However, typically, for example, it is more common to perform certain requirements activities in close coordination with analysis and design activities. Separating these activities into separate disciplines makes the activities easier to comprehend.&#xA;&#xD;&#xA;Discipline is a categorization of Tasks based upon similarity of concerns and cooperation of work effort.  This is the extensions of Discipline defined in the Method Core package adding an additional association to Activities, which represent typical standard or reference ways of meaningful groupings of the Discipline's Tasks into workflows.&#xA;Tasks represent descriptions of work, which are categorized by Disciplines.  The reason that several Tasks are all categorized by the same Discipline is that they all represent a part in achieving a higher goal or performing work that is all related to each other.  Every Discipline defines standard ways of doing the work it categorizes.  Such standard ways are express by Activities or Capability Patterns defining how the Tasks categorized by the Discipline 'work together' in the most generic way.  These reference workflows are often used for educating and teaching practitioners. &#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="tasks" ordered="false"
+        upperBound="-1" eType="#//Task"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subdiscipline" ordered="false"
+        upperBound="-1" eType="#//Discipline" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referenceWorkflows" ordered="false"
+        upperBound="-1" eType="#//Activity"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Activity" eSuperTypes="#//WorkBreakdownElement #//FulfillableElement #//VariabilityElement #//WorkDefinition">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="An Activity is a Work Breakdown Element and Work Definition which supports the nesting and logical grouping of related Breakdown Elements forming breakdown structures.  Although Activity is a concrete meta-class, other classes which represent breakdown structures derive from it; such as Phase, Iteration, Delivery Process, or Capability Pattern.&#xA;Activity represents a grouping element for other Breakdown Elements such as Activities, Descriptors, Milestones, etc.  It is not per-se a 'high-level' grouping of only work as in other meta-models, but groups any kind of Breakdown Elements.  For example, one can define valid Activities that group only Work Products Descriptors without any matching Task Descriptors.  Activities also inherit all properties from Work Breakdown Element and indirectly from Process Element; i.e. Activity is ready to have a full content description attached to it.&#xA;&#xD;&#xA;This definition of Activity extends Activity introduced in the package Breakdown with new capabilities and is the basis for the definition of the class Process.&#xA;Extends Activity with an association to Roadmap.  This definition of Activity also participates in the extension of the Discipline category.&#xA;&#xD;&#xA;Activity in the package Method Plugin inherits from Variability Element to extend Activity with new capabilities for variability.&#xD;&#xA;Activity inherits the semantics of Variability Element which provides key mechanism to enable dynamic binding of Capability Patterns in Processes as well as Process Contributions.  Variability is used in the following way for Activities:&#xD;&#xA;- Extend: To apply a Capability Pattern to a process one would create an Activity which extends the pattern's top-level activity.  Through extension the extending Activity inherits the patterns Breakdown Elements.&#xD;&#xA;- Replace: To replace an Activity of an applied Capability Pattern or an existing process for which one develops a Process Contribution (or a combination of both) one would create an Activity and specify the replace variability specialization between them.&#xD;&#xA;- Contribute: To contribute new Breakdown Elements to an existing Activity one would define an Activity with Breakdown Elements that relates via the Contributes Variability Specialization to this existing Activity.  The contributing Activity's Breakdown Elements will be added to the contributed Activity.&#xD;&#xA;&#xD;&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="breakdownElements" ordered="false"
+        upperBound="-1" eType="#//BreakdownElement" eOpposite="#//BreakdownElement/superActivities"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="roadmaps" ordered="false"
+        upperBound="-1" eType="#//Roadmap"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkBreakdownElement" abstract="true"
+      eSuperTypes="#//BreakdownElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Work Breakdown Element is a special Breakdown Element that provides specific properties for Breakdown Elements that represent or refer to Work Definitions.  For example its subclass Activity defines work as it is also a subclass of Work Definition.  Its subclass Task Descriptor does not define work by itself, but refers to a Work Definition and therefore can have the same common properties and Work Breakdown Element has."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isRepeatable" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attribute is used to define repetition of work, e.g. iterations.  A Process Work Definition with this attribute set to True shall be repeated more than once on the same set of artifacts.  For example, for an instance of Iteration (defined as a special Process Work Definition below) this attribute is set to True by default indicating that every sub-Activity will be repeated more than once.  However, any Process Work Definition can set this attribute to True to define iterations (e.g. to iterate one Activity consisting of many sub-activities or even Phases, but to iterate just one Task)."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOngoing" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="If the isOngoing attribute is set to True for a Process Work Definition instance, then the element describes an ongoing piece of work without a fixed duration or end state.  For example, the Process Work Definition could represent work of an administrator continuously (e.g. 3h a day) working to ensure that systems are kept in a certain state.  Another example would be program management work overseeing many different projects being scheduled for one particular project at specific reoccurring intervals during the whole lifecycle of the project."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isEventDriven" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The isEventDriven attribute indicates that the Process Work Definition describes an instance of work which is not started because it has been scheduled to start at a certain point of time, because preceding work is being completed, or input work products are available, but because another specific event has occurred.  Examples for such events are exceptions or problem situations which require specific work to be performed as a result.  Also change management work can be modeled as event driven work analyzing a change request or defect and allocating work dynamically to resources to deal with it following the work described with such Process Work Definition.  The events themselves are not modeled in this version of the specification.  They shall be described as part of the normal descriptions fields available.&#xA;&#xA;&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="linkToPredecessor" ordered="false"
+        upperBound="-1" eType="#//WorkOrder"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BreakdownElement" abstract="true" eSuperTypes="#//ProcessElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Breakdown Element is an abstract generalization for any type of Method Element that is part of a breakdown structure.  It defines a set of properties available to all of its specializations."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="prefix" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Prefix represents an additional label that will be presented as a prefix to any Breakdown Element to indicate a user-defined sub-type for the element.  For example, if the process engineer would like to distinguish his Activities by 'Module' (as done in the IBM Rational Summit Ascendant Method), he can define a different prefix for every model to be used in addition to naming Activities, e.g. &quot;SRA.Establish Requirements&quot; with SRA indicating that this Activity belongs to the &quot;Software Requirements Analysis&quot; module.  Another common application for prefix is to qualify roles in Role Descriptors.  For example, &quot;Customer.Architect&quot; would define a &quot;Customer&quot; prefix for the Role Descriptor &quot;Architect&quot; expressing that this is an architect on the customer side and not the development team side.&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPlanned" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="true">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A key application for Development Processes expressed with Breakdown structures is to generate a project plan from it.  A process as defined in UMA (cf. with Sections XX and 5.2) is a multi-dimensional structure defining what work is being performed at what time by which roles using which input and producing what outputs.  A project plan as it is represented in project planning tools such as IBM Rational Portfolio Manager or Microsoft Project normally does not need all this information and is normally limited to just representing a subset.  For example, a typical MS Project plan only represents the work breakdown consisting of Tasks and Activities (sometimes referred to as summary tasks).  It does not show the input and output Work Products for a Task, but it can show which roles shall be staffed for performing the Task.  However, such role allocation need to be replaced with concrete resources when instantiating the plan for a concrete project.  Sometimes project plans can then again be organized differently by organizing work by deliverables in which Work Products are mapped to the plan's summary tasks and Task that have these work products as output mapped below such as summary task.  Therefore, a process can make recommendations about which elements to include and which to exclude when generating a plan.  When the isPlanned attribute is set to False for an instance of a Breakdown Element, then this element shall not be not included when a concrete project plan is being generated from the breakdown structure that contains this element.&#xA;&#xA;&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="hasMultipleOccurrences"
+        ordered="false" lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Just as the isPlanned attribute the hasMultipleOccurrences attribute has an impact on generating plans from a Process.  When this attribute is set to True for a Breakdown Element then it will typically occur multiple times within the same Activity.  For example, a Task such as &quot;Detail Use Case&quot; would be performed for every use case identified for a particular Iteration or Activity.  Generating a plan would list one Task instance per use case.&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOptional" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The isOptional attribute indicates that the Breakdown Element describes work, a work result, or even work resources, which inclusion is not mandatory when performing a project that is planned based on a process containing this element."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presentedAfter" ordered="false"
+        eType="#//BreakdownElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presentedBefore" ordered="false"
+        eType="#//BreakdownElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="planningData" ordered="false"
+        eType="#//PlanningData" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="superActivities" ordered="false"
+        lowerBound="1" eType="#//Activity" eOpposite="#//Activity/breakdownElements"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="checklists" ordered="false"
+        upperBound="-1" eType="#//Checklist"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="concepts" ordered="false"
+        upperBound="-1" eType="#//Concept"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="examples" ordered="false"
+        upperBound="-1" eType="#//Example"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guidelines" ordered="false"
+        upperBound="-1" eType="#//Guideline"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reusableAssets" ordered="false"
+        upperBound="-1" eType="#//ReusableAsset"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="supportingMaterials" ordered="false"
+        upperBound="-1" eType="#//SupportingMaterial"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="templates" ordered="false"
+        upperBound="-1" eType="#//Template"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reports" ordered="false"
+        upperBound="-1" eType="#//Report"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="estimationconsiderations"
+        ordered="false" upperBound="-1" eType="#//EstimationConsiderations"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="toolmentor" ordered="false"
+        upperBound="-1" eType="#//ToolMentor"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessElement" abstract="true" eSuperTypes="#//DescribableElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Process Element is a Describable Element that represents an abstract generalization for all elements defined in the Process package.&#xA;Process Elements represents Process specific elements that are supposed to be managed in Process Packages.  The separation of Process Element from Content Element allows to clearly distinguish between pure method content from content that is represented in processes. &#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PlanningData" eSuperTypes="#//ProcessElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Planning Data is a Method Element that adds planning data to Breakdown Elements when it is used for a Process Planning Template.  For Delivery Processes and Capability Patterns this class can either not be instantiated or populated with default data.&#xA;Planning Data factors out specific optional data needed for representing planning templates.  This association allows to access planning data if it is stored for the Breakdown Element.&#xA;(NOTE, THE ATTRIBUTES FOR THIS CLASS ARE NOT COMPLETE, YET)&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startDate" ordered="false"
+        lowerBound="1" eType="#//Date">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The default start date for a planed Task."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="finishDate" ordered="false"
+        lowerBound="1" eType="#//Date">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The default finish date for a planed Task."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rank" ordered="false" lowerBound="1"
+        eType="#//Integer">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="The default rank for a planed Task."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkOrder" eSuperTypes="#//ProcessElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Work Order is a Method Element that represents a relationship between two Breakdown Elements in which one Breakdown Elements depends on the start or finish of another Breakdown Elements in order to begin or end.  &#xA;(Note, Work Order is not modeled as an Association Class to provide a straightforward mapping  to XMI and EMF.)&#xA;The Work Order class defines predecessor and successor relations amongst Breakdown Elements.  This information is in particular critical for planning applications.  See more details on different types of Work Order relationships at Work Order Type.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="linkType" ordered="false"
+        lowerBound="1" eType="#//WorkOrderType" defaultValueLiteral="finishToStart">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This attribute expresses the type of the Work Order relationship by assigning a value from the Work Order Type enumeration."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="pred" ordered="false" lowerBound="1"
+        eType="#//WorkBreakdownElement"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="WorkOrderType">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Work Order represents a relationship between two Breakdown Element in which one Breakdown Element (referred to as (B) below) depends on the start or finish of another Breakdown Element (referred to as (A) below) in order to begin or end. This enumeration defines the different types of Work Order relationships available in UMA and is used to provide values for Work Order's linkType attribute."/>
+    </eAnnotations>
+    <eLiterals name="finishToStart">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Breakdown Element (B) cannot start until Breakdown Element (A) finishes. For example, if you have two Breakdown Elements, &quot;Construct fence&quot; and &quot;Paint fence,&quot; &quot;Paint fence&quot; can't start until &quot;Construct fence&quot; finishes. This is the most common type of dependency and the default for a new Work Order instance.&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="finishToFinish" value="1">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Breakdown Element (B) cannot finish until Breakdown Element (A) finishes. For example, if you have two Breakdown Elements, &quot;Add wiring&quot; and &quot;Inspect electrical,&quot; &quot;Inspect electrical&quot; can't finish until &quot;Add wiring&quot; finishes.&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="startToStart" value="2">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Breakdown Element (B) cannot start until Breakdown Element (A) starts. For example, if you have two Breakdown Elements, &quot;Pour foundation&quot; and &quot;Level concrete,&quot; &quot;Level concrete&quot; can't begin until &quot;Pour foundation&quot; begins.&#xA;"/>
+      </eAnnotations>
+    </eLiterals>
+    <eLiterals name="startToFinish" value="3">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Breakdown Element (B) cannot finish until Breakdown Element (A) starts. This dependency type can be used for just-in-time scheduling up to a milestone or the project finish date to minimize the risk of a Breakdown Element finishing late if its dependent Breakdown Elements slip. If a related Breakdown Element needs to finish before the milestone or project finish date, but it doesn't matter exactly when and you don't want a late finish to affect the just-in-time Breakdown Element, you can create an SF dependency between the Breakdown Element you want scheduled just in time (the predecessor) and its related Breakdown Element (the successor). Then if you update progress on the successor Breakdown Element, it won't affect the scheduled dates of the predecessor Breakdown Element."/>
+      </eAnnotations>
+    </eLiterals>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Roadmap" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Roadmap is a special Guidance Type which is only related to Activates and therefore has been added by this package to the list of Guidance Types rather than listed in the Guidance Types package.  A Roadmap represents a linear walkthrough of an Activity, typically a Process.&#xA;An instance of a Roadmap represents important documentation for the Activity or Process it is related to.  Often a complex Activity such as a Process can be much easier understood by providing a walkthrough with a linear thread of a typical instantiation of this Activity.  In addition to making the process practitioner understand how work in the process is being performed, a Roadmap provides additional information about how Activities and Tasks relate to each other over time.  Roadmaps are also used to show how specific aspects are distributed over a whole process providing a kind of filter on the process for this information.&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Tool" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Tool is a container/aggregate for ToolMentors.  It can also provide general descriptions of the tool and its general capabilities."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="toolMentors" ordered="false"
+        upperBound="-1" eType="#//ToolMentor"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RoleSetGrouping" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Role Sets can be categorized into Role Set Groupings.  For example, different methods might define similar Role Sets, which however need to be distinguished from each other on a global scale.  Thus, Role Set Groupings allow distinguishing, for example, Software Services Manager Role Sets from Software Development Organization Manager Role Sets."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="roleSets" ordered="false"
+        upperBound="-1" eType="#//RoleSet"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CustomCategory" eSuperTypes="#//ContentCategory">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Custom Category is a category introduced by a method content author to structure any number of method Content Elements of any subtype based on user-defined criteria.  Because Content Categories (and therefore Custom Categories, too) are Content Elements themselves, Custom Categories can be used to recursively categorize Content Categories as well.  Custom Categories can also be nested with any Content Category.  Custom categories can be used to categorize content based on the user's criteria as well as to define whole tree-structures of nested categories allowing the user to systematically navigate and browse method content and processes based on these categories.  For example, one could create a custom category to logically organize content relevant for the user's development organization departments; e.g. a &quot;Testing&quot; category that groups together all roles, work products, tasks, and guidance element relevant to testing.  Another example would be categories that express licensing levels of the content grouping freely distributable method content versus content that represent intellectual property and requires a license to be purchased to be able to use it.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="categorizedElements" ordered="false"
+        upperBound="-1" eType="#//DescribableElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subCategories" ordered="false"
+        upperBound="-1" eType="#//ContentCategory"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodPackage" abstract="true" eSuperTypes="#//MethodElement #//Package">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Method Package is an abstract class for packaging Method Elements.  All Method Elements shall be located in exactly one of Method Package's concrete specializations (e.g. Content Package).   Method Package defines common properties for all of its specializations. Elements are organized in Method Packages to structure large scale of method content and processes as well as to define a mechanism for reuse.  Method Elements from one package can reuse element from other packages by defining a reusedPackages link.  For example, a work product defined in one package can be used as an input for Tasks defined in other packages.  By reusing it from one common place (i.e. the package in which it has been defined) ensures that no redundant definitions of the same elements are required.  Also maintenance of method content is greatly improved as changes can be performed in only one place.  Note, that other packages will introduce more specializations of Method Package, e.g. Process Package and Process Component."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="global" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="false">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Method Packages can have a global scope.  This means that every element of every other Method Package can see the global package's contents.  Global Method Packages are primarily used to store commonly used category definitions such as for Disciplines or Domains, which are used by many Task and Work Products respectively."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reusedPackages" ordered="false"
+        upperBound="-1" eType="#//MethodPackage"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="childPackages" ordered="false"
+        upperBound="-1" eType="#//MethodPackage" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ContentPackage" eSuperTypes="#//MethodPackage">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Content Package is special Method Package that contains Content Elements and Content Elements, only.  Examples for Content Element are Artifacts, Tasks, Roles, etc.  A key separation of concerns in UMA is the distinction between Method Content and Process.  This separation is enforced by special package types, which do not allow the mixing of method content with processes."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contentElements" ordered="false"
+        upperBound="-1" eType="#//ContentElement" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Milestone" eSuperTypes="#//WorkBreakdownElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Milestone describes a significant event in a development project, such as a major decision, completion of a deliverable, or meeting of a major dependency (like completion of a project phase).  Because, Milestone is commonly used to refer to both the event itself and the point in time at which the event is scheduled to happen, it is modeled as a Breakdown Element (i.e. it appears as part of a breakdown structure)."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="requiredResults" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductDescriptor" eSuperTypes="#//Descriptor">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Work Product Descriptor represents a Work Product in the context of one specific Activity.  Every breakdown structure can define different relationships of Work Product Descriptors to Task Descriptors and Role Descriptors.  Therefore one Work Product can be represented by many Work Product Descriptors each within the context of an Activity with its own set of relationships."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activityEntryState" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Given that an instance of Work Product Descriptor has been created for a specific Activity, then the Activity Entry State attribute specifies the desired state of instances of the referenced Work Product when work on the Activity is initiated (i.e. work on the Activity's Task Descriptors is being initiated that use this Work Product Descriptor as input).  &#xA;For some Work Products state is expressed in percentage of completion, compliance to work product checklist, informal state descriptions, etc.  Others have very specific states expressed as enumerations such as [identified, briefly described, outlined, detailed] for use cases.  Other Work Product states relate to some quality measures or lifecycle states such as [reviewed, implemented, tested].&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activityExitState" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Given that an instance of Work Product Descriptor has been created for a specific Activity, then the Activity Exist State attribute specifies the desired state of instances of the referenced Work Product when work on the Activity is finished (i.e. work on the Activity's Task Descriptors has finished that have this Work Product Descriptor as output).&#xA;For some Work Products state is expressed in percentage of completion, compliance to work product checklist, informal state descriptions, etc.  Others have very specific states expressed as enumerations such as [identified, briefly described, outlined, detailed] for use cases.  Other Work Product states relate to some quality measures or lifecycle states such as [reviewed, implemented, tested].&#xA;"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="WorkProduct" ordered="false"
+        eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="impactedBy" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor" eOpposite="#//WorkProductDescriptor/impacts"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="impacts" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor" eOpposite="#//WorkProductDescriptor/impactedBy"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deliverableParts" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deliverablePartsExclude"
+        ordered="false" upperBound="-1" eType="#//WorkProduct"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Descriptor" abstract="true" eSuperTypes="#//BreakdownElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Descriptor is an abstract generalization for special Breakdown Elements that references one concrete Content Element.  A descriptor provides a representation of a Content Element within breakdown structures.  In addition to just referencing Content Elements it allows overriding the Content Elements structural relationships by defining its own sets of associations.&#xA;Descriptors are the key concept for realizing the separation of processes from method content.  A Descriptor can be characterized as a reference object for one particular Content Element, which has its own relationships and properties.  When a Descriptor is created it shall be provided with congruent copies of the relationships defined for the referenced content element.  However, a user can modify these relationships for the particular process situation for which the descriptor has been created. &#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isSynchronizedWithSource"
+        ordered="false" lowerBound="1" eType="#//Boolean" defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guidanceExclude" ordered="false"
+        upperBound="-1" eType="#//Guidance"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="guidanceAdditional" ordered="false"
+        upperBound="-1" eType="#//Guidance"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Iteration" eSuperTypes="#//Activity">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Iteration is a special Activity, which prescribes pre-defined values for its instances for the attributes prefix ('Iteration') and isRepeatable ('True').  It has been included into the meta-model for convenience and to provide a special stereotype, because it represents a very commonly used Activity type.&#xA;Iteration groups a set of nested Activities that are repeated more than once.  It represents an important structuring element to organize work in repetitive cycles.  The concept of Iteration can be associated with different rules in different methods.  For example, the IBM Rational Unified Process method framework (RUP) defines a rule that Iterations are not allowed to span across Phases.  In contrast IBM Global Services Method (GSMethod) based method frameworks this rule does not apply and Iteration can be defined which nest Phases.  Rules like these, which play an important role for each individual method and are therefore not enforced by this meta-model.  Instead, process authors are expected to follow and check these rules manually.  (Note: Any Breakdown Element can be repeated; however, Iterations has been introduced as a special meta-model concept, because of its important role for many methods.)&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Phase" eSuperTypes="#//Activity">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Phase is a special Activity, which prescribes pre-defined values for its instances for the attributes prefix ('Phase') and isRepeatable ('False').  It has been included into the meta-model for convenience and to provide a special stereotype, because it represents a very commonly used Activity type.&#xA;Phase represent a significant period in a project, ending with major management checkpoint, milestone or set of Deliverables.  It is included in the model as a predefined special Activity, because of its significance in defining breakdowns.&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TeamProfile" eSuperTypes="#//BreakdownElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Team Profile is a Breakdown Element that groups Role Descriptors or Resource Definitions defining a nested hierarchy of teams and team members.&#xA;Work assignments and Work Product responsibilities can be different from Activity to Activity in a development project. Different phases require different staffing profiles, i.e. different skills and resources doing different types of work.  Therefore, a process needs to define such different profiles in a flexible manner.  Whereas Core Method Content defines standard responsibilities and assignments, a process express by a breakdown structures needs to be able refine and redefine these throughout its definition.  Role Descriptors, Resource Definitions, as well as Team Profiles provide the data structure necessary to achieve this flexibility and to provide a process user with the capability to define different teams and role relationships for every Activity (including Activities on any nesting-level as well as Iterations or Phases).&#xA;Hence, in addition to the work breakdown and work product breakdown structures defined so far, Team Profiles are used to define a third type of breakdown structure: team breakdown structures.  These are created as an Activity specific hierarchy of Team Profiles comprising of Role Descriptors and Resource Definitions.  These structures can be presented as well-known Org-Charts.  Just as with any other Breakdown Element and Descriptors, Team Profiles can be defined within the scope of any Activity in a breakdown structure.  In other words every Activity can define its own Team Profiles consisting of Activity specific Role Descriptors and Resource Definitions.  Typically, Team Profiles are defined on the level of Iterations or Phases or other higher-level Activity.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="teamRoles" ordered="false"
+        upperBound="-1" eType="#//RoleDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="superTeam" ordered="false"
+        lowerBound="1" eType="#//TeamProfile" eOpposite="#//TeamProfile/subTeam"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subTeam" ordered="false"
+        upperBound="-1" eType="#//TeamProfile" eOpposite="#//TeamProfile/superTeam"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RoleDescriptor" eSuperTypes="#//Descriptor">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Role Descriptor represents a Role in the context of one specific Activity.  Every breakdown structure can define different relationships of Role Descriptors to Task Descriptors and Work Product Descriptors.  Therefore one Role can be represented by many Role Descriptors each within the context of an Activity with its own set of relationships."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="Role" ordered="false" eType="#//Role"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modifies" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor" volatile="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="responsibleFor" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="responsibleForExclude"
+        ordered="false" upperBound="-1" eType="#//WorkProduct"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TaskDescriptor" eSuperTypes="#//WorkBreakdownElement #//Descriptor">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Task Descriptor is a Descriptor and Work Breakdown Element that represents a proxy for a Task in the context of one specific Activity.  Every breakdown structure can define different relationships of Task Descriptors to Work Product Descriptors and Role Descriptors. Therefore one Task can be represented by many Task Descriptors each within the context of an Activity with its own set of relationships.&#xA;A key difference between Method Content and Process is that a Content Element such as Task describes all aspects of doing work defined around this Task.  This description is managed in steps, which are modeled as Sections of the Tasks' Content Descriptions.  When applying a Task in a Process' Activity with a Task Descriptor a Process Engineer needs to indicate that at that particular point in time in the Process definition for which the Task Descriptor has been created, only a subset of steps shall be performed.  He defines this selection using the selectedSteps association.  If he wants to add steps to a Task Descriptor, he can describe these either pragmatically in the refinedDescription attribute or 'properly' create a contributing Task to the Task the Task Descriptor refers to.&#xA;&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="Task" ordered="false" eType="#//Task"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="additionallyPerformedBy"
+        ordered="false" upperBound="-1" eType="#//RoleDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="assistedBy" ordered="false"
+        upperBound="-1" eType="#//RoleDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="externalInput" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mandatoryInput" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="optionalInput" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="output" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="performedPrimarilyBy" ordered="false"
+        upperBound="-1" eType="#//RoleDescriptor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="selectedSteps" ordered="false"
+        upperBound="-1" eType="#//Section"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="performedPrimarilyByExcluded"
+        ordered="false" upperBound="-1" eType="#//Role"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="additionallyPerformedByExclude"
+        ordered="false" upperBound="-1" eType="#//Role"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mandatoryInputExclude"
+        ordered="false" upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="optionalInputExclude" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="outputExclude" ordered="false"
+        upperBound="-1" eType="#//WorkProduct"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="selectedStepsExclude" ordered="false"
+        upperBound="-1" eType="#//Section"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CompositeRole" eSuperTypes="#//RoleDescriptor">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Composite Role is a special Role Descriptor that relates to more then one Role.  It represents a grouping of Roles with the main purpose of simplification, i.e. reducing the number of roles for a process.&#xA;A Composite Role is a grouping of Roles that can be used in an Activity or Process to reduce the number of Roles.  A typical application would be a process for a small team in which a standard set of roles from the method content would be all performed by one or more resource.  By using Composite Role the process would suggest a typical clustering of Roles to Resources.  A Composite Role could perform all Tasks defined for the Roles it refers to.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="aggregatedRoles" ordered="false"
+        upperBound="-1" eType="#//Role"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeliveryProcess" eSuperTypes="#//Process">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Delivery Processes is a special Process describing a complete and integrated approach for performing a specific project type.  It describes a complete project lifecycle end-to-end and shall be used as a reference for running projects with similar characteristics as defined for the process.  A Delivery Process is related to specific supporting information such as Roadmaps (inherited via Activity) as well as Communications and Education Material.&#xA;A Delivery Process is a Process that covers a whole development lifecycle from beginning to end.  A Delivery Process shall be used as a template for planning and running a project.  It provides a complete lifecycle model with predefined phases, iterations, and activities that have been detailed by sequencing referencing method content in breakdown structures.  It is defined on the basis of experience with past projects or engagements, and/or the best practice use of a development or delivery approach.  It defines what gets produced, how those items are produced, and the required staffing in the form of integrated Work, Work Product, and Team Breakdown Structures.  For example, a process engineer can define alternative Delivery Processes for software development projects that differ in the scale of the engagement and staffing necessary, the type of the software application to be developed, the development methods and technologies to be used, etc.  Although, the Delivery Process aims to cover a whole project it keeps certain decision that are too project specific open.  For example, the breakdown structure defines which Breakdown Elements have multiple occurrences or is repeatable via it respective attributes, but does not say how many occurrences and how many repeats/iterations it will have.  These decisions have to be done by a project manager when planning a concrete project, project phase, or project iterations.  A Delivery Process is always a complete description of a process in terms of completeness of the lifecycle, as well as in terms of all three views on the process which are the Work Breakdown Structure, Work Product Breakdown Structure, and Team Breakdown Structure have to be fully and consistently populated.  Consistency of a Delivery Process is actually ensured by the fact that all three breakdowns are represented by one single data structure and one particular breakdown such as Team Breakdown is just a view on that data structure.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="educationMaterials" ordered="false"
+        upperBound="-1" eType="#//SupportingMaterial"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="communicationsMaterials"
+        ordered="false" upperBound="-1" eType="#//SupportingMaterial"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Process" abstract="true" eSuperTypes="#//Activity">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Process is a special Activity that describes a structure for particular types of development projects.  To perform such a development project a Processes would be 'instantiated' and adapted for the specific situation.  Process is an abstract class and this meta-model defines different special types of Processes for different process management applications and different situations of process reuse.  Every Process comprises of and is the top-level element of an n-level breakdown structure using the Nesting association defined on Activity.&#xA;Core Method Content provides step-by-step explanations, describing how very specific development goals are achieved independent of the placement of these steps within a development lifecycle.  Processes take these method elements and relate them into semi-ordered sequences that are customized to specific types of projects.  Thus, a process is a set of partially ordered work descriptions intended to reach a higher development goal, such as the release of a specific software system.  A process and the process meta-model structure defined in this specification focuses on the lifecycle and the sequencing of work in breakdown structures.  To achieve this it uses the Descriptor concept referencing method content and allowing defining time-specific customizations of the referenced content (e.g. defining a focus on different steps of the same Task and providing input Work Products in different states within the different Phases of a process lifecycle in which the same Task is performed).&#xA;&#xD;&#xA;Process in the package Library Configuration extends the class Process with association relating a Process to one default and many optional valid Configurations.&#xA;These configurations describe valid contexts for the Process within a Method Library indicating under which Configurations a Process is well defined.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="includesPatterns" ordered="false"
+        upperBound="-1" eType="#//CapabilityPattern"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultContext" ordered="false"
+        lowerBound="1" eType="#//MethodConfiguration"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="validContext" ordered="false"
+        upperBound="-1" eType="#//MethodConfiguration"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CapabilityPattern" eSuperTypes="#//Process">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Capability Pattern is a special Process that describes a reusable cluster of doing work in common process areas.  Capabilities Patterns express and communicate process knowledge for a key area of interest such as a Discipline and can be directly used by process practitioner to guide his work.  They are also used as building blocks to assemble Delivery Processes or larger Capability Patterns ensuring optimal reuse and application of the key practices they express.&#xA;A Capability Pattern is a special Process that describes a reusable cluster of doing work in a general process area that provides a consistent development approach to common problems.  Examples for Capability Pattern could be 'use case-based requirements management', 'use case analysis', or 'unit testing'. Typically but not necessarily, Capability Patterns have the scope of one discipline providing a breakdown of reusable complex Activities, relationships to the Roles which perform Tasks within these Activities, as well as to the Work Products that are used and produced.  A capability pattern does not relate to any specific phase or iteration of a development lifecycle, and should not imply any.  In other words, a pattern should be designed in a way that it is applicable anywhere in a Delivery Process.  This enables its Activities to be flexibly assigned to whatever phases there are in the Delivery Process to which it is being applied.  It is a good practice to design a Capability Pattern to produce one or more generic Deliverables.  The typical configuration is that each Activity in the Capability Pattern produces one Deliverable, and the last Task Descriptor in the Activity explicitly outputs just this Deliverable.  This enables the process engineer to select Patterns or just Activities by deciding which Deliverables are required.  It also offers a simple integration approach: an Activity from a capability pattern is linked to the Phase or Iteration which is required to produce the Activity's Deliverable.  Key applications areas of / areas of reuse for Capability Patterns are:&#xA;- To serve as building blocks for assembling Delivery Processes or larger Capability Patterns.  Normally developing a Delivery Process is not done from scratch but by systematically applying and binding patterns.  In addition to the standard pattern application of 'copy-and-modify', which allows the process engineer to individually customize the pattern's content to the particular situation it is applied for, the Plugin meta-model package (Section 6.1) introduces even more sophisticated inheritance relationships that support dynamic binding of patterns (i.e. the pattern is referenced and not copied).  This unique new way of reusing process knowledge allows to factor out commonly reoccurring Activities into patterns and to apply them over and over again for a process.  When the pattern is being revised or updated, all changes will be automatically reflected in all pattern application in all processes because of the dynamic binding.&#xA;- To support direct execution in a development project that does not work following a well-defined process, but works based on loosely connected process fragments of best practices in a flexible manner (e.g. Agile Development).&#xA;- To support process education by describing knowledge for a key area such as best practices on how to perform the work for a Discipline (e.g. Requirements Management), for a specific development technique (aspect-oriented development), or a specific technical area (e.g. relational database design), which is used for education and teaching.&#xA;"/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodConfiguration" eSuperTypes="#//MethodUnit">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Method Configuration is a collection of selected Method Models and MethodPackages. A configuration can be exported into its own standalone library when it includes the full transitive closure of all elements all other elements depend on."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodPluginSelection"
+        ordered="false" lowerBound="1" upperBound="-1" eType="#//MethodPlugin"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodPackageSelection"
+        ordered="false" lowerBound="1" upperBound="-1" eType="#//MethodPackage"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="processViews" ordered="false"
+        upperBound="-1" eType="#//ContentCategory"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="defaultView" ordered="false"
+        lowerBound="1" eType="#//ContentCategory"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="baseConfigurations" ordered="false"
+        upperBound="-1" eType="#//MethodConfiguration"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subtractedCategory" ordered="false"
+        upperBound="-1" eType="#//ContentCategory"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="addedCategory" ordered="false"
+        upperBound="-1" eType="#//ContentCategory"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodPlugin" eSuperTypes="#//MethodUnit #//Package">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Method Plugin is a Method Element that represents a physical container for Method Packages.  It defines a granularity level for the modularization and organization of method content and processes.  A Method Plugin can extend many other Method Plugins and it can be extended by many Method Plugins.  It can also be used stand-alone, i.e. with no Extension relationship to other plug-ins.&#xA;Method Plugin conceptually represents a unit for configuration, modularization, extension, packaging, and deployment of method content and processes.  A Process Engineer shall design his Plugins and allocate his content to these Plugins with requirements for extensibility, modularity, reuse, and maintainability in mind.&#xA;Special extensibility mechanisms defined for the meta-classes Variability Element and Process Contribution allow Plugin content to directly contribute new content, replace existing content, or to cross-reference to any Content Element or Process within another Plugin that it extends.  Similar to UML 2.0's 'package merge' mechanism transformation interpretations, interpreting these Method Plugin mechanisms results into new extended Method Content and Processes.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="userChangeable" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodPackages" ordered="false"
+        lowerBound="1" upperBound="-1" eType="#//MethodPackage" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="bases" ordered="false"
+        upperBound="-1" eType="#//MethodPlugin"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="supporting" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A supporting method plug-in is a plug-in that contains supporting and optional method elements. Only the elements that are referenced from non-supporting plug-in are to be considered for inclusion into a method configuration. In other words, if a supporting method plug-in is selected for a configuration only its elements referenced from outside of this plug-in will be considered for the configuration.  All other unreferenced elements will not be."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessPlanningTemplate" eSuperTypes="#//Process">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Process Planning Template is a special Process that is prepared for instantiation by a project planning tool.  Typically, it is created based on a Process such as a Delivery Process as a whole (e.g. in case of a waterfall-based development approach) or in parts (e.g. in case of an iterative development approach).&#xA;A Process Planning Template represents a partially finished plan for a concrete project.  It uses the same information structures as all other Process Types to represent templates for project plans.  However, certain planning decisions have already been applied to the template as well as information has been removed and/or reformatted to be ready for export to a specific planning tool.  Examples for such decisions are: a template has been created to represent a plan for a particular Iteration in an iterative development project, which fr example distinguishes early from late iterations in the Elaboration phase of a project; if the targeted planning tool cannot represent input and output of Task, then these have been removed from the structure; certain repetitions have been already applied, e.g. stating that a cycle of specific Task grouped in an Activity have to be repeated n-times; etc.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="basedOnProcesses" ordered="false"
+        upperBound="-1" eType="#//Process"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Practice" eSuperTypes="#//Guidance">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Practice represents a proven way or strategy of doing work to achieve a goal that has a positive impact on work product or process quality.  Practices are defined orthogonal to methods and processes.  They could summarize aspects that impact many different parts of a method or specific processes.  Examples for practices would be &quot;Manage Risks&quot;, &quot;Continuously verify quality&quot;, &quot;Architecture-centric and component-based development&quot;, etc.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subPractices" ordered="false"
+        upperBound="-1" eType="#//Practice" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contentReferences" ordered="false"
+        upperBound="-1" eType="#//ContentElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="activityReferences" ordered="false"
+        upperBound="-1" eType="#//Activity"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BreakdownElementDescription" eSuperTypes="#//ContentDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="usageGuidance" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides information and guidance on the meaning of the Boolean flag values and under what circumstances they should be overridden. For example, it describes why the breakdown element is optional or considerations for repeating it and differences in the individual occurrences of this Breakdown Element across the lifecycle."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ActivityDescription" eSuperTypes="#//BreakdownElementDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Summarizes the main reason for performing this Activity, describes what the activity as a whole is intended to achieve."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="alternatives" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Comprises of summaries describing important exceptional and non-standard ways of doing the work of this Activity not covered by the Activity's Tasks."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="howtoStaff" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides background on who should be involved in this activity what are the required skills, experience,  and perhaps attitudes."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeliveryProcessDescription" eSuperTypes="#//ProcessDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Outlines characteristics about the size of a typical project that performs this project expressed in team size, man years, etc."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="projectCharacteristics"
+        ordered="false" eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Characterizes the project that would typically perform this Process"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="riskLevel" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Outlines typical project risks that are addressed with this process."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="estimatingTechnique" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Describes the Estimation Techniques provided for this Process."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="projectMemberExpertise"
+        ordered="false" eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides a profile of a typical project team, the distribution of roles, skills required for a team performs a project based on this process."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeOfContract" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Provides background information about the contracts that need to be established between a project team that performs this process and a client (e.g. for an IGS engagement)."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessDescription" eSuperTypes="#//ActivityDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scope" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Defines the scope of the Process, i.e. which types of projects does it address and which not."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="usageNotes" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="Any additional notes on how to apply and instantiate this process for a project."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DescriptorDescription" eSuperTypes="#//BreakdownElementDescription">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="refinedDescription" ordered="false"
+        eType="#//String" defaultValueLiteral="">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="A Descriptor might add refinements to the main description of the Content Element it refers to.  For example, it could provide additional information about a Work Product relevant for the specific point in time in the process this Work Product type is being used.  It could describe additional skills needed for a Role at that particular point in time in a process, etc. "/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessComponentDescriptor" eSuperTypes="#//Descriptor">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Process Component Descriptor represents a Process Component application in a Process, i.e. the breakdown structure defining the Process.  The Process Component Descriptor is used to encapsulate the details of the component in a breakdown structure and to provide its own set of relationships such as it own predecessors and successors."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="_processComponent" ordered="false"
+        unique="false" lowerBound="1" eType="#//ProcessComponent"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessComponent" eSuperTypes="#//ProcessPackage #//MethodUnit">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Process Component is a special Process Package that applies the principles of encapsulation.  A Process Component realizes one or more Interfaces which specify inputs and outputs of the component. There might be many components realizing the same interfaces, but using different techniques to achieve similar outputs for similar inputs.  Whereas the Component Interfaces represent component specifications (black box descriptions of the component), good candidates for component realizations can be found in Capability Patterns (white box descriptions for the component).&#xA;UMA supports replaceable and reusable Process Components realizing the principles of encapsulation. Certain situations in a software development project might require that concrete realizations of parts of the process remain undecided or will be decided by the executing team itself (e.g. in outsourcing situations).  UMA provides a unique component concept defining interfaces for work product input and output, allowing treating the actual definition of the work that produces the outputs as a &quot;black box&quot;.  At any point during a project the component &quot;realization&quot; detailing the work can be added to the process.  The component approach also allows that different styles or techniques of doing work can be replaced with one another.  For example, a software code output of a component could be produced with a model-driven development or a code-centric technique.  The component concept encapsulates the actual work and lets the development team choose the appropriate technique and fill the component's realization with their choice of Activities that produce the required outputs.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaces" ordered="false"
+        lowerBound="1" upperBound="-1" eType="#//ProcessComponentInterface"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="process" ordered="false"
+        lowerBound="1" eType="#//Process" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessPackage" eSuperTypes="#//MethodPackage">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="Process Package is a special Method Package that contains Process Elements, only.&#xA;A key separation of concerns in UMA is the distinction between Method Content and Process.  This separation is enforced by special package types, which do not allow the mixing of method content with processes.&#xA;"/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="processElements" ordered="false"
+        upperBound="-1" eType="#//ProcessElement" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diagrams" ordered="false"
+        upperBound="-1" eType="#//Diagram" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Diagram" eSuperTypes="#//GraphNode">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diagramLink" ordered="false"
+        upperBound="-1" eType="#//DiagramLink" eOpposite="#//DiagramLink/diagram"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" ordered="false"
+        lowerBound="1" eType="#//SemanticModelBridge" containment="true" eOpposite="#//SemanticModelBridge/diagram"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="zoom" ordered="false" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="viewpoint" ordered="false"
+        lowerBound="1" eType="#//Point"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphNode" eSuperTypes="#//GraphElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="size" ordered="false" lowerBound="1"
+        eType="#//Dimension"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphElement" abstract="true" eSuperTypes="#//DiagramElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="contained" ordered="false"
+        upperBound="-1" eType="#//DiagramElement" containment="true" eOpposite="#//DiagramElement/container"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="position" ordered="false"
+        lowerBound="1" eType="#//Point"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="link" ordered="false" upperBound="-1"
+        eType="#//DiagramLink" containment="true" eOpposite="#//DiagramLink/graphElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="anchorage" ordered="false"
+        upperBound="-1" eType="#//GraphConnector" containment="true" eOpposite="#//GraphConnector/graphElement"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="semanticModel" ordered="false"
+        lowerBound="1" eType="#//SemanticModelBridge" containment="true" eOpposite="#//SemanticModelBridge/graphElement"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiagramElement" abstract="true" eSuperTypes="#//MethodElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isVisible" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="container" ordered="false"
+        eType="#//GraphElement" eOpposite="#//GraphElement/contained"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="reference" ordered="false"
+        upperBound="-1" eType="#//Reference" eOpposite="#//Reference/referenced"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="property" ordered="false"
+        upperBound="-1" eType="#//Property" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Reference" eSuperTypes="#//DiagramElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isIndividualRepresentation"
+        ordered="false" lowerBound="1" eType="#//Boolean" defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referenced" ordered="false"
+        lowerBound="1" eType="#//DiagramElement" eOpposite="#//DiagramElement/reference"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//DiagramElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" ordered="false" eType="#//String"
+        defaultValueLiteral=""/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Point">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="x" ordered="false" lowerBound="1"
+        eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="y" ordered="false" lowerBound="1"
+        eType="#//Double"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DiagramLink" eSuperTypes="#//DiagramElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="zoom" ordered="false" lowerBound="1"
+        eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="viewport" ordered="false"
+        lowerBound="1" eType="#//Point"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diagram" ordered="false"
+        lowerBound="1" eType="#//Diagram" eOpposite="#//Diagram/diagramLink"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphElement" ordered="false"
+        lowerBound="1" eType="#//GraphElement" eOpposite="#//GraphElement/link"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphConnector" eSuperTypes="#//GraphElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphEdge" ordered="false"
+        upperBound="-1" eType="#//GraphEdge" eOpposite="#//GraphEdge/anchor"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphElement" ordered="false"
+        lowerBound="1" eType="#//GraphElement" eOpposite="#//GraphElement/anchorage"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphEdge" eSuperTypes="#//GraphElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="waypoints" ordered="false"
+        lowerBound="2" upperBound="-1" eType="#//Point" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="anchor" ordered="false"
+        lowerBound="2" upperBound="2" eType="#//GraphConnector" eOpposite="#//GraphConnector/graphEdge"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SemanticModelBridge" abstract="true"
+      eSuperTypes="#//DiagramElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presentation" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="diagram" ordered="false"
+        eType="#//Diagram" eOpposite="#//Diagram/namespace"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="graphElement" ordered="false"
+        eType="#//GraphElement" eOpposite="#//GraphElement/semanticModel"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Dimension">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="width" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="height" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessComponentInterface" eSuperTypes="#//BreakdownElement">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Process Component Interface comprises of a list of interface specifications (similar to operation declarations) that express inputs and outputs for a process component.  These interface specifications are expressed using Task Descriptors which are not linked to Tasks that are related to Work Product Descriptors as well as optional a Role Descriptor."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaceSpecifications"
+        ordered="false" upperBound="-1" eType="#//TaskDescriptor" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaceIO" ordered="false"
+        upperBound="-1" eType="#//WorkProductDescriptor" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SimpleSemanticModelElement" eSuperTypes="#//SemanticModelBridge">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeInfo" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="UMASemanticModelBridge" eSuperTypes="#//SemanticModelBridge">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="element" ordered="false"
+        lowerBound="1" eType="#//MethodElement"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CoreSemanticModelBridge" eSuperTypes="#//SemanticModelBridge">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="element" ordered="false"
+        lowerBound="1" eType="#//Element"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LeafElement" abstract="true" eSuperTypes="#//DiagramElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TextElement" eSuperTypes="#//LeafElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" ordered="false" eType="#//String"
+        defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Image" eSuperTypes="#//LeafElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" ordered="false" eType="#//Uri"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mimeType" ordered="false"
+        eType="#//String" defaultValueLiteral=""/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphicPrimitive" abstract="true" eSuperTypes="#//LeafElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Polyline" eSuperTypes="#//GraphicPrimitive">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closed" ordered="false"
+        lowerBound="1" eType="#//Boolean" defaultValueLiteral="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="waypoints" ordered="false"
+        lowerBound="2" upperBound="-1" eType="#//Point" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Ellipse" eSuperTypes="#//GraphicPrimitive">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="center" ordered="false"
+        lowerBound="1" eType="#//Point"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="radiusX" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="radiusY" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rotation" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startAngle" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endAngle" ordered="false"
+        lowerBound="1" eType="#//Double"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ProcessFamily" eSuperTypes="#//MethodConfiguration">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Delivery Model Family is a convenient grouping of Delivery Processes and Capability Patterns of interest to some specific user community."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deliveryProcesses" ordered="false"
+        upperBound="-1" eType="#//DeliveryProcess"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MethodLibrary" eSuperTypes="#//MethodUnit #//Package">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A Method Library is a physical container for Method Plugins and Method Configuration definitions.  All Method Elements are stored in a Method Library."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodPlugins" ordered="false"
+        upperBound="-1" eType="#//MethodPlugin" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="predefinedConfigurations"
+        ordered="false" upperBound="-1" eType="#//MethodConfiguration" containment="true"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/org.eclipse.opencert.epf.generateArgumentation/plugin.xml b/org.eclipse.opencert.epf.generateArgumentation/plugin.xml
new file mode 100644
index 0000000..ad25608
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/plugin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+

+   <extension

+         point="org.eclipse.ui.popupMenus">

+      <objectContribution

+            objectClass="org.eclipse.epf.uma.ProcessComponent"

+            id="transformation.contribution1">

+         <menu

+               label="Transformation"

+               path="additions"

+               id="transformation.menu1">

+            <separator

+                  name="group1">

+            </separator>

+         </menu>

+         <action

+               label="Generate Process-based Argument"

+               class="org.eclipse.opencert.epf.generateArgumentation.transformation.actions.TransformationHandler"

+               menubarPath="transformation.menu1/group1"

+               enablesFor="1"

+               id="transformation.newAction">

+         </action>

+      </objectContribution>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/Activator.java b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/Activator.java
new file mode 100644
index 0000000..1d209ca
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/Activator.java
@@ -0,0 +1,77 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.generateArgumentation.transformation;

+

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "transformation"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	/**

+	 * Returns an image descriptor for the image file at the given

+	 * plug-in relative path

+	 *

+	 * @param path the path

+	 * @return the image descriptor

+	 */

+	public static ImageDescriptor getImageDescriptor(String path) {

+		return imageDescriptorFromPlugin(PLUGIN_ID, path);

+	}

+}

diff --git a/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/GUI.java b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/GUI.java
new file mode 100644
index 0000000..e967690
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/GUI.java
@@ -0,0 +1,137 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.generateArgumentation.transformation.actions;

+

+import java.util.HashMap;

+

+import org.eclipse.emf.cdo.dawn.ui.composites.CDOResourceNodeSelectionWidget;

+import org.eclipse.emf.cdo.eresource.CDOResourceFolder;

+import org.eclipse.emf.cdo.eresource.CDOResourceNode;

+import org.eclipse.emf.cdo.view.CDOView;

+import org.eclipse.jface.dialogs.Dialog;

+import org.eclipse.jface.dialogs.IDialogConstants;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.window.IShellProvider;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Button;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Shell;

+

+public class GUI extends Dialog{

+	

+	CDOResourceFolder assuranceprojectFolder;

+	CDOResourceFolder argFolder;

+	

+	HashMap<Object, Object> options = new HashMap<Object, Object>();

+

+	private Label argLabel;

+	private String resourceName;

+	private CDOResourceNodeSelectionWidget chooser;

+	private Shell shell;

+	

+	public GUI(Shell parentShell, CDOView view) {

+		super(parentShell);

+		this.shell=parentShell;

+	}

+	public GUI(IShellProvider parentShell) {

+		super(parentShell);

+	}

+	

+	@Override

+	protected void createButtonsForButtonBar(Composite parent) {

+	    super.createButtonsForButtonBar(parent);

+

+	    Button ok = getButton(IDialogConstants.OK_ID);

+	    setButtonLayoutData(ok);

+

+	    chooser.addSelectionChangedListener(new ISelectionChangedListener(){

+

+			@Override

+			public void selectionChanged(SelectionChangedEvent event) {

+

+				if(event.getSelection() instanceof IStructuredSelection){

+

+					IStructuredSelection selection = (IStructuredSelection) event.getSelection();

+					Object element = selection.getFirstElement();

+					if(element instanceof CDOResourceNode){

+						resourceName = ((CDOResourceNode)element).getName();

+					}

+				}

+			}

+			

+		});

+	    

+	    Button cancel = getButton(IDialogConstants.CANCEL_ID);

+	    

+	    setButtonLayoutData(cancel);

+	 }

+	

+	@Override

+	protected Control createDialogArea(final Composite parent) {

+

+		Composite contents = (Composite) super.createDialogArea(parent);

+		

+		GridData contentsGridData2 = (GridData) contents.getLayoutData();

+		contentsGridData2.horizontalAlignment = SWT.FILL;

+		contentsGridData2.verticalAlignment = SWT.FILL;

+		contentsGridData2.minimumHeight = 300;

+		contentsGridData2.minimumWidth = 300;

+		

+		argLabel = new Label(contents, SWT.NONE);

+		argLabel.setText("Please select your assurance project folder:");

+		GridData argLabelGridData = new GridData();		

+		argLabelGridData.horizontalAlignment = SWT.FILL;

+		argLabelGridData.verticalAlignment = SWT.FILL;

+		GridLayout layoutLabel = new GridLayout();

+		layoutLabel.marginHeight = 20;

+		layoutLabel.marginWidth = 0;

+		argLabel.setLayoutData(argLabelGridData);

+		

+		GridLayout layout = new GridLayout();

+		layout.marginHeight = 5;

+		layout.marginWidth = 0;

+			

+		chooser = new CDOResourceNodeSelectionWidget(contents,SWT.FILL);

+		chooser.setLayoutData(contentsGridData2);

+		chooser.setLayout(layout);

+		

+		contents.setData(chooser);

+		

+		return contents;

+	}

+

+	public String resourceName(){

+		return resourceName;

+	}

+	

+	@Override

+	protected void cancelPressed(){

+		MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 

+	}

+	@Override

+	protected void configureShell(Shell newShell) {

+		super.configureShell(newShell);

+		newShell.setText("Assurance project selection");

+	}

+}

diff --git a/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/Transformation.java b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/Transformation.java
new file mode 100644
index 0000000..87d44b1
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/Transformation.java
@@ -0,0 +1,291 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram 

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.generateArgumentation.transformation.actions;

+

+import java.io.File;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IWorkspaceRoot;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+

+import org.eclipse.epsilon.etl.EtlModule;

+import org.eclipse.epsilon.emc.emf.EmfModel;

+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;

+import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;

+

+

+import org.eclipse.epf.library.edit.LibraryEditPlugin;

+import org.eclipse.epf.uma.impl.ProcessComponentImpl;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.TreeSelection;

+

+import org.eclipse.ui.IWorkbenchPage;

+

+

+public class Transformation {

+

+	private IWorkbenchPage workbenchPage;

+	private static String processName;

+

+	public Transformation(IWorkbenchPage workbenchPage){

+		this.workbenchPage = workbenchPage;

+	}

+

+	public void execute(IProgressMonitor monitor){

+

+		EtlModule etlModule = new EtlModule();

+		

+		//Get the current delivery process

+		ISelection sel = workbenchPage.getSelection();

+		

+		TreeSelection tree = (TreeSelection) sel;

+		ProcessComponentImpl process = (ProcessComponentImpl) tree.getFirstElement();

+		

+		processName = process.getName();

+		

+		//Get the needed model files

+		String pluginPathWS = process.eContainer().eResource().getURI().toFileString();

+		File plugin = new File(pluginPathWS); //REQ

+		String directoryRootPlugin = plugin.getParent();

+		

+		File deliveryProcess = new File(directoryRootPlugin + "/"+ "deliveryprocesses" +"/"+ processName + "/model.xmi");//LIB

+		File deliveryProcess2 = new File(directoryRootPlugin + "/" + "deliveryprocesses" +"/"+processName+"/content.xmi");//LIB2

+		File directoryRoles = new File(directoryRootPlugin + "/" + "roles");

+		File directoryTools = new File(directoryRootPlugin + "/" + "tools");

+		

+		String[] listRoles = directoryRoles.list();

+		String[] listTools = directoryTools.list();

+		

+		

+		String configPath = null;

+

+		String spluginPath = LibraryEditPlugin.getPlugin().getBundle().getLocation();

+		if(spluginPath.contains("plugins")) // Yes, in jar mode.

+		{			

+			String pluginPath = spluginPath.substring(15, spluginPath.indexOf("plugins"));

+			configPath = pluginPath + "configuration";

+			

+			try {

+				String etlPath = configPath + "/" + "epsilon" +"/" + "epf2argument.etl";

+				etlModule.parse(new File(etlPath));

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+			

+			monitor.worked(2);						

+		}

+		

+		String modelPath = configPath + "/" + "model" +"/" + "uma.ecore";

+		

+		//Create the source models

+		EmfModel libModel = createEMFSourceModel("LIB", modelPath, deliveryProcess, true, false);

+		EmfModel libModel2 = createEMFSourceModel("LIB2", modelPath, deliveryProcess2, true, false); //content

+		

+		EmfModel reqModel = createEMFSourceModel("REQ", modelPath, plugin, true, false);

+		

+		List<EmfModel> listModelsRoles = new ArrayList<EmfModel>();

+		for (int i=0;i<listRoles.length;i++){

+			File role = new File(directoryRoles+"/"+listRoles[i]);

+			EmfModel roleModel = createEMFSourceModel(listRoles[i], modelPath, role, true, false);

+			roleModel.getAliases().add("ROL");

+			listModelsRoles.add(roleModel);	

+		}

+		List<EmfModel> listModelsTools = new ArrayList<EmfModel>();

+		for (int i=0;i<listTools.length;i++){

+			File tool = new File(directoryTools+"/"+listTools[i]);

+			EmfModel toolModel = createEMFSourceModel(listTools[i], modelPath, tool, true, false);

+			toolModel.getAliases().add("TOOL");

+			listModelsRoles.add(toolModel);	

+		}

+		

+		//Create the project into the workspace

+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

+		IProject project = root.getProject("Argumentation");

+		String projectLocation = root.getLocation().toString()+"/Argumentation";

+		if(project.exists()){

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}else{

+			try {

+				project.create(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}

+		

+		monitor.worked(3);

+		String modelPath_ = configPath + "/" + "model" +"/" + "arg.ecore"; //change

+		//Create the target model

+		EmfModel argModel = createEMFTargetModel("ARG","arg", modelPath_, projectLocation+"/"+processName+".arg", false, true); 

+		

+		//Load the models into ETL module

+		etlModule.getContext().getModelRepository().addModel(libModel);

+		etlModule.getContext().getModelRepository().addModel(libModel2);

+		

+		etlModule.getContext().getModelRepository().addModel(argModel);

+		etlModule.getContext().getModelRepository().addModel(reqModel);

+		

+		for(EmfModel model: listModelsRoles){

+			etlModule.getContext().getModelRepository().addModel(model);

+		}

+		for(EmfModel model: listModelsTools){

+			etlModule.getContext().getModelRepository().addModel(model);

+		}

+		

+		//Running the transformation

+		try {

+			etlModule.execute();

+		} catch (EolRuntimeException e) {

+			e.printStackTrace();

+		}

+		

+		monitor.worked(4);

+		

+		argModel.dispose();

+		//libModel.dispose();

+		libModel2.dispose();

+		//reqModel.dispose();

+		

+		

+		for(EmfModel modelRole: listModelsRoles){

+			modelRole.dispose();

+		}

+		

+		for(EmfModel modelTool: listModelsTools){

+			modelTool.dispose();

+		}

+		

+		//etlModule.getContext().getModelRepository().dispose();	

+	}

+	

+	

+	protected EmfModel createEMFSourceModel(String name, String sourceMetaModelFilePath,

+			File sourceModelFilePath, Boolean sourceReadOnLoad, Boolean sourceStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+		

+		if(sourceMetaModelFilePath != null && !sourceMetaModelFilePath.isEmpty()) { 

+			if(sourceMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = sourceMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(sourceMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(sourceModelFilePath.getAbsolutePath());

+		emfModel.setReadOnLoad(sourceReadOnLoad);

+		emfModel.setStoredOnDisposal(sourceStoreOnDisposal);

+		

+		// MCP

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		// MCP

+		try {

+			emfModel.load();

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel;

+	}

+	

+	

+	protected EmfModel createEMFTargetModel(String name, String targetMetaModelURI, String targetMetaModelFilePath,

+			String targetModelFilePath, Boolean targetReadOnLoad, Boolean targetStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+

+		if(targetMetaModelURI != null && !targetMetaModelURI.isEmpty()) 

+		{ 

+			if(targetMetaModelURI.contains(","))

+			{

+				String[] metaModelURIs = targetMetaModelURI.split(",");

+				List<String> uris =new ArrayList<String>(metaModelURIs.length);

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					uris.add(metaModelURIs[i].trim());

+				};

+				emfModel.setMetamodelUris(uris);

+			}

+			else

+			{

+				emfModel.setMetamodelUri(targetMetaModelURI);

+			}

+		}

+		

+		if(targetMetaModelFilePath != null && !targetMetaModelFilePath.isEmpty()) { 

+			if(targetMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = targetMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(targetMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(targetModelFilePath);

+		emfModel.setReadOnLoad(targetReadOnLoad);

+		emfModel.setStoredOnDisposal(targetStoreOnDisposal);

+		

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		try {

+			emfModel.load();

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel;

+	}

+}

diff --git a/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/TransformationHandler.java b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/TransformationHandler.java
new file mode 100644
index 0000000..0282329
--- /dev/null
+++ b/org.eclipse.opencert.epf.generateArgumentation/src/org/eclipse/opencert/epf/generateArgumentation/transformation/actions/TransformationHandler.java
@@ -0,0 +1,485 @@
+/*******************************************************************************
+ * Copyright (c) 2018, MDH 
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ *   Contributors:
+ *   Faiz Ul Muram
+ *   Initial API and implementation and/or initial documentation
+ *******************************************************************************/
+/**
+ */
+package org.eclipse.opencert.epf.generateArgumentation.transformation.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.opencert.sam.arg.arg.diagram.edit.parts.CaseEditPart;
+import org.eclipse.opencert.sam.arg.arg.diagram.edit.policies.CasePersistedCanonicalEditPolicy;
+import org.eclipse.opencert.sam.arg.arg.diagram.part.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.LinkedList;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.util.ConcurrentAccessException;
+import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.epf.uma.impl.ProcessComponentImpl;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.notation.Diagram;
+
+
+public class TransformationHandler implements IObjectActionDelegate {
+
+	private Shell shell;
+	private IWorkbenchPage page;
+	private IWorkbenchWindow window;
+
+	private URI domainModelURI;
+	private EObject diagramRoot=null;
+	private boolean transfDiagramOk=false;
+	private Resource diagramResource;
+	private IProgressMonitor monitor2;
+	private String name;
+	
+	
+	/**
+	 * Constructor for Action1.
+	 */
+	public TransformationHandler() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		shell = targetPart.getSite().getShell();
+		page = targetPart.getSite().getPage();
+		window = targetPart.getSite().getWorkbenchWindow();	
+	}
+
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		
+		
+		MessageDialog dg = new MessageDialog(
+	            shell,
+	            "Select Directory",
+	            null,
+	            "Please select the target assurance project from the CDO Repository",
+	            MessageDialog.INFORMATION,
+	            new String[]{
+	                "Browse...", 
+	                IDialogConstants.CANCEL_LABEL},
+	            -1//SWT.CLOSE
+	            );
+	    
+		if(dg.open()==0){
+			
+			//Connect to the CDO Repository
+			CDOConnectionUtil.instance.init(
+					PreferenceConstants.getRepositoryName(),
+					PreferenceConstants.getProtocol(),
+					PreferenceConstants.getServerName());
+			CDOSession session = CDOConnectionUtil.instance.getCurrentSession();
+			CDOView view = session.openView();
+			CDOTransaction transaction = session.openTransaction();
+			
+			GUI gui = new GUI(shell,view);
+			gui.create();
+			gui.open();
+			
+			String selection = gui.resourceName();
+	
+			if(selection != null){
+				
+				//Get the current delivery process
+				ISelection sel = page.getSelection();
+				TreeSelection tree = (TreeSelection) sel;
+				ProcessComponentImpl process = (ProcessComponentImpl) tree.getFirstElement();
+						
+				name = process.getName();
+			
+				//Invoke transformation
+				Transformation transformation = new Transformation(page);
+			
+				ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+				dialog.open();
+				IProgressMonitor monitor = dialog.getProgressMonitor();
+				monitor.beginTask("Generating the process-based argumentation model and diagram... ", 15);
+				monitor.worked(1);
+				monitor.subTask("Performing the transformation...");
+	
+				transformation.execute(monitor); 
+				
+				monitor.worked(5);
+				monitor.subTask("Creating CDO Resources...");
+
+				
+				//Create the model CDO Resource
+				CDOResource argModel;
+				if (transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/ARGUMENTATION/"+name+".arg").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					argModel = transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg");
+				}else{
+					argModel = transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg");
+				}
+				//CDOResource argModel = transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg");
+				
+				String argModelFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Argumentation/"+name+".arg";
+				URI argXmiUri = URI.createFileURI(argModelFile);
+				URI argCDOUri = argModel.getURI();
+			
+				ResourceSet resourceSet = new ResourceSetImpl();
+				resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+			
+				Resource argXmiResource = resourceSet.createResource(argXmiUri);
+				File newFile = new File(argModelFile);
+				
+				monitor.worked(6);
+				monitor.subTask("Loading model to CDO Repository...");
+	
+				//Load the model contents into the created resource
+				try {
+					FileInputStream argFileInStream = new FileInputStream(newFile);
+					argXmiResource.load(argFileInStream,Collections.EMPTY_MAP);
+					argXmiResource.setURI(argXmiUri);	
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			
+				EMFUtil.safeResolveAll(resourceSet);
+			
+				CDOResource argCDOResource = transaction.getOrCreateResource(argCDOUri.path());
+				argCDOResource.getContents().addAll(argXmiResource.getContents());
+	
+				EMFUtil.safeResolveAll(resourceSet);
+				
+				monitor.worked(7);
+			
+				try {
+					argCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				monitor.worked(8);
+				monitor.subTask("Creating diagram...");
+				
+				//Create diagram
+				createArgDiagram();
+				
+				monitor.worked(9);
+				monitor.subTask("Creating CDO Resources...");
+				
+				
+				//Create the diagram CDO Resource
+				CDOResource argDiagram;
+				
+				if (transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg_diagram").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/ARGUMENTATION/"+name+".arg_diagram").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					argDiagram = transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg_diagram");
+				}else{
+					argDiagram = transaction.getOrCreateResource("/"+selection+"/ARGUMENTATION/"+name+".arg_diagram");
+				}
+				
+				monitor.worked(10);
+				
+				//Load the diagram contents into the created resource
+				String argDiagramFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Argumentation/"+name+".arg_diagram";
+				URI argDiagUri = URI.createFileURI(argDiagramFile);
+			    URI argDiagCdoURI = argDiagram.getURI(); 
+				
+				ResourceSet resourceSet2 = new ResourceSetImpl();
+				resourceSet2.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+				
+				Resource argDiagramXmiResource = resourceSet.createResource(argDiagUri);
+				File newFile2 = new File(argDiagramFile);
+				
+				monitor.worked(11);
+				monitor.subTask("Loading diagram to CDO Repository...");
+				
+				try {
+					FileInputStream argFileInStream2 = new FileInputStream(newFile2);
+					argDiagramXmiResource.load(argFileInStream2,Collections.EMPTY_MAP);
+					argDiagramXmiResource.setURI(argDiagUri);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				EMFUtil.safeResolveAll(resourceSet2);
+				
+				CDOResource argDiagramCDOResource = transaction.getOrCreateResource(argDiagCdoURI.path());
+				argDiagramCDOResource.getContents().addAll(argDiagramXmiResource.getContents());
+				
+				EMFUtil.safeResolveAll(resourceSet2);
+				
+				monitor.worked(12);
+				
+				try {
+					argDiagramCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				monitor.worked(13);
+				
+				//Commit the transaction
+				try {
+					transaction.commit();
+				} catch (ConcurrentAccessException e) {
+					e.printStackTrace();
+				} catch (CommitException e) {
+					e.printStackTrace();
+				}
+				
+				
+				monitor.worked(14);
+				monitor.done();
+				dialog.close();
+				
+				if(transfDiagramOk == true){
+					try{
+						MessageDialog.openInformation(shell, "Transformation Completed", 
+									"The process-based argumentation model and diagram are generated under:\n\n"
+									+"    - ARGUMENTATION folder of the project "+selection+" in the CDO Repository\n"
+									+"    - Argumentation project in the current workspace");
+					}catch(Exception e){
+						System.out.println(e);
+					}
+				}
+					
+				
+				ProgressMonitorDialog dialog2 = new ProgressMonitorDialog(shell);
+				dialog2.open();
+				monitor2 = dialog2.getProgressMonitor();
+				monitor2.beginTask("Opening diagram... ", 6);
+				monitor2.worked(1);
+				
+				//Change the perspective
+				if (PlatformUI.getWorkbench() != null) {
+					IPerspectiveDescriptor descriptor = window.getWorkbench()
+					    .getPerspectiveRegistry().findPerspectiveWithId("org.eclipse.ui.resourcePerspective");
+		
+		    		PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+					    .getActivePage().setPerspective(descriptor);
+		        }
+				
+				monitor2.worked(2);
+				
+				generateDiagram(new NullProgressMonitor());
+				
+				monitor2.worked(5);
+				monitor2.done();
+				dialog2.close();
+			
+			}else{
+				MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 
+			}
+
+		}else{
+			MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation");
+		}
+	}
+	
+	
+	/* Copied and modified from org.eclipse.opencert.sam.arg.arg.diagram.part.ArgNewDiagramFileWizard.java */
+	public void createArgDiagram(){
+		IPath workspace = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+		domainModelURI = URI.createPlatformResourceURI("Argumentation/"+name+".arg", true);
+		LinkedList<IFile> affectedFiles = new LinkedList<IFile>();
+		File file = new File(workspace+"/Argumentation/"+name+".arg_diagram");
+		
+		try {
+			file.createNewFile();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		
+		IPath location= Path.fromOSString(file.getPath());
+		IFile diagramFile= ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(location);
+				
+		setCharset(diagramFile); // setCharset method is added
+		
+		affectedFiles.add(diagramFile);
+		URI diagramModelURI = URI.createPlatformResourceURI("Argumentation/"+name+".arg_diagram", true);
+		
+		TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+				.createEditingDomain();
+		ResourceSet resourceSet = editingDomain.getResourceSet();
+		
+		try {
+			Resource resource = resourceSet.getResource(domainModelURI, true);
+			diagramRoot = (EObject) resource.getContents().get(0);
+		} catch (WrappedException ex) {
+			ArgDiagramEditorPlugin.getInstance().logError(
+					"Unable to load resource: " + domainModelURI, ex); //$NON-NLS-1$
+		}
+	
+		diagramResource = resourceSet.createResource(diagramModelURI);
+		AbstractTransactionalCommand command = new AbstractTransactionalCommand(
+				editingDomain,
+				Messages.ArgNewDiagramFileWizard_InitDiagramCommand,
+				affectedFiles) {
+
+			protected CommandResult doExecuteWithResult(
+					IProgressMonitor monitor, IAdaptable info)
+					throws ExecutionException {
+				int diagramVID = ArgVisualIDRegistry
+						.getDiagramVisualID(diagramRoot);
+				if (diagramVID != CaseEditPart.VISUAL_ID) {
+					return CommandResult
+							.newErrorCommandResult(Messages.ArgNewDiagramFileWizard_IncorrectRootError);
+				}
+				Diagram diagram = ViewService.createDiagram(
+						diagramRoot,
+						CaseEditPart.MODEL_ID,
+						ArgDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
+				diagramResource.getContents().add(diagram);
+
+				return CommandResult.newOKCommandResult();
+			}
+		};
+		try {
+			OperationHistoryFactory.getOperationHistory().execute(command,
+					new NullProgressMonitor(), null);
+			diagramResource.save(ArgDiagramEditorUtil.getSaveOptions());
+
+		} catch (ExecutionException e) {
+			ArgDiagramEditorPlugin.getInstance().logError(
+					"Unable to create model and diagram", e); //$NON-NLS-1$
+		} catch (IOException ex) {
+			ArgDiagramEditorPlugin.getInstance().logError(
+					"Save operation failed for: " + diagramModelURI, ex); //$NON-NLS-1$
+		}	
+		
+		transfDiagramOk = true;
+	}
+	
+	
+	public void generateDiagram(IProgressMonitor monitor) {
+		try {
+			generateDiagram0(monitor);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	public void generateDiagram0(IProgressMonitor monitor) throws IOException {
+		if (diagramResource != null) {
+			try {
+				ArgDiagramEditorUtil.openDiagram(diagramResource);
+
+				IEditorPart editorPart = PlatformUI.getWorkbench()
+						.getActiveWorkbenchWindow().getActivePage()
+						.getActiveEditor();
+				
+					DiagramEditPart editp = ((IDiagramWorkbenchPart) editorPart).getDiagramEditPart();
+					
+					monitor2.worked(3);
+
+					editp.removeEditPolicy(EditPolicyRoles.CANONICAL_ROLE);
+ 					editp.installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+							new CasePersistedCanonicalEditPolicy());
+ 					
+ 					monitor2.worked(4);
+ 					
+	        		ArgDiagramEditor dawnEditorPart = (ArgDiagramEditor)editorPart;
+	        		dawnEditorPart.doSave(new NullProgressMonitor());
+
+			} catch (PartInitException e) {
+				System.out.println(e);
+			}
+		}
+	}
+	
+	public static void setCharset(IFile file) {
+		if (file == null) {
+			return;
+		}
+		try {
+			file.setCharset("UTF-8", new NullProgressMonitor()); //$NON-NLS-1$
+		} catch (CoreException e) {
+			ArgDiagramEditorPlugin.getInstance().logError(
+					"Unable to set charset for file " + file.getFullPath(), e); //$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf.transfromRequirements/.classpath b/org.eclipse.opencert.epf.transfromRequirements/.classpath
new file mode 100644
index 0000000..b1dabee
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.opencert.epf.transfromRequirements/.project b/org.eclipse.opencert.epf.transfromRequirements/.project
new file mode 100644
index 0000000..778d08c
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.opencert.epf.transfromRequirements</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.opencert.epf.transfromRequirements/LICENSE b/org.eclipse.opencert.epf.transfromRequirements/LICENSE
new file mode 100644
index 0000000..3534f2f
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0

+

+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE

+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION

+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+  a) in the case of the initial Contributor, the initial content

+     Distributed under this Agreement, and

+

+  b) in the case of each subsequent Contributor:

+     i) changes to the Program, and

+     ii) additions to the Program;

+  where such changes and/or additions to the Program originate from

+  and are Distributed by that particular Contributor. A Contribution

+  "originates" from a Contributor if it was added to the Program by

+  such Contributor itself or anyone acting on such Contributor's behalf.

+  Contributions do not include changes or additions to the Program that

+  are not Modified Works.

+

+"Contributor" means any person or entity that Distributes the Program.

+

+"Licensed Patents" mean patent claims licensable by a Contributor which

+are necessarily infringed by the use or sale of its Contribution alone

+or when combined with the Program.

+

+"Program" means the Contributions Distributed in accordance with this

+Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement

+or any Secondary License (as applicable), including Contributors.

+

+"Derivative Works" shall mean any work, whether in Source Code or other

+form, that is based on (or derived from) the Program and for which the

+editorial revisions, annotations, elaborations, or other modifications

+represent, as a whole, an original work of authorship.

+

+"Modified Works" shall mean any work in Source Code or other form that

+results from an addition to, deletion from, or modification of the

+contents of the Program, including, for purposes of clarity any new file

+in Source Code form that contains any contents of the Program. Modified

+Works shall not include works that contain only declarations,

+interfaces, types, classes, structures, or files of the Program solely

+in each case in order to link to, bind by name, or subclass the Program

+or Modified Works thereof.

+

+"Distribute" means the acts of a) distributing or b) making available

+in any manner that enables the transfer of a copy.

+

+"Source Code" means the form of a Program preferred for making

+modifications, including but not limited to software source code,

+documentation source, and configuration files.

+

+"Secondary License" means either the GNU General Public License,

+Version 2.0, or any later versions of that license, including any

+exceptions or additional permissions as identified by the initial

+Contributor.

+

+2. GRANT OF RIGHTS

+

+  a) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free copyright

+  license to reproduce, prepare Derivative Works of, publicly display,

+  publicly perform, Distribute and sublicense the Contribution of such

+  Contributor, if any, and such Derivative Works.

+

+  b) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free patent

+  license under Licensed Patents to make, use, sell, offer to sell,

+  import and otherwise transfer the Contribution of such Contributor,

+  if any, in Source Code or other form. This patent license shall

+  apply to the combination of the Contribution and the Program if, at

+  the time the Contribution is added by the Contributor, such addition

+  of the Contribution causes such combination to be covered by the

+  Licensed Patents. The patent license shall not apply to any other

+  combinations which include the Contribution. No hardware per se is

+  licensed hereunder.

+

+  c) Recipient understands that although each Contributor grants the

+  licenses to its Contributions set forth herein, no assurances are

+  provided by any Contributor that the Program does not infringe the

+  patent or other intellectual property rights of any other entity.

+  Each Contributor disclaims any liability to Recipient for claims

+  brought by any other entity based on infringement of intellectual

+  property rights or otherwise. As a condition to exercising the

+  rights and licenses granted hereunder, each Recipient hereby

+  assumes sole responsibility to secure any other intellectual

+  property rights needed, if any. For example, if a third party

+  patent license is required to allow Recipient to Distribute the

+  Program, it is Recipient's responsibility to acquire that license

+  before distributing the Program.

+

+  d) Each Contributor represents that to its knowledge it has

+  sufficient copyright rights in its Contribution, if any, to grant

+  the copyright license set forth in this Agreement.

+

+  e) Notwithstanding the terms of any Secondary License, no

+  Contributor makes additional grants to any Recipient (other than

+  those set forth in this Agreement) as a result of such Recipient's

+  receipt of the Program under the terms of a Secondary License

+  (if permitted under the terms of Section 3).

+

+3. REQUIREMENTS

+

+3.1 If a Contributor Distributes the Program in any form, then:

+

+  a) the Program must also be made available as Source Code, in

+  accordance with section 3.2, and the Contributor must accompany

+  the Program with a statement that the Source Code for the Program

+  is available under this Agreement, and informs Recipients how to

+  obtain it in a reasonable manner on or through a medium customarily

+  used for software exchange; and

+

+  b) the Contributor may Distribute the Program under a license

+  different than this Agreement, provided that such license:

+     i) effectively disclaims on behalf of all other Contributors all

+     warranties and conditions, express and implied, including

+     warranties or conditions of title and non-infringement, and

+     implied warranties or conditions of merchantability and fitness

+     for a particular purpose;

+

+     ii) effectively excludes on behalf of all other Contributors all

+     liability for damages, including direct, indirect, special,

+     incidental and consequential damages, such as lost profits;

+

+     iii) does not attempt to limit or alter the recipients' rights

+     in the Source Code under section 3.2; and

+

+     iv) requires any subsequent distribution of the Program by any

+     party to be under a license that satisfies the requirements

+     of this section 3.

+

+3.2 When the Program is Distributed as Source Code:

+

+  a) it must be made available under this Agreement, or if the

+  Program (i) is combined with other material in a separate file or

+  files made available under a Secondary License, and (ii) the initial

+  Contributor attached to the Source Code the notice described in

+  Exhibit A of this Agreement, then the Program may be made available

+  under the terms of such Secondary Licenses, and

+

+  b) a copy of this Agreement must be included with each copy of

+  the Program.

+

+3.3 Contributors may not remove or alter any copyright, patent,

+trademark, attribution notices, disclaimers of warranty, or limitations

+of liability ("notices") contained within the Program from any copy of

+the Program which they Distribute, provided that Contributors may add

+their own appropriate notices.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities

+with respect to end users, business partners and the like. While this

+license is intended to facilitate the commercial use of the Program,

+the Contributor who includes the Program in a commercial product

+offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes

+the Program in a commercial product offering, such Contributor

+("Commercial Contributor") hereby agrees to defend and indemnify every

+other Contributor ("Indemnified Contributor") against any losses,

+damages and costs (collectively "Losses") arising from claims, lawsuits

+and other legal actions brought by a third party against the Indemnified

+Contributor to the extent caused by the acts or omissions of such

+Commercial Contributor in connection with its distribution of the Program

+in a commercial product offering. The obligations in this section do not

+apply to any claims or Losses relating to any actual or alleged

+intellectual property infringement. In order to qualify, an Indemnified

+Contributor must: a) promptly notify the Commercial Contributor in

+writing of such claim, and b) allow the Commercial Contributor to control,

+and cooperate with the Commercial Contributor in, the defense and any

+related settlement negotiations. The Indemnified Contributor may

+participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial

+product offering, Product X. That Contributor is then a Commercial

+Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance

+claims and warranties are such Commercial Contributor's responsibility

+alone. Under this section, the Commercial Contributor would have to

+defend claims against the other Contributors related to those performance

+claims and warranties, and if a court requires any other Contributor to

+pay any damages as a result, the Commercial Contributor must pay

+those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"

+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR

+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF

+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR

+PURPOSE. Each Recipient is solely responsible for determining the

+appropriateness of using and distributing the Program and assumes all

+risks associated with its exercise of rights under this Agreement,

+including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs

+or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS

+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST

+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE

+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE

+POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under

+applicable law, it shall not affect the validity or enforceability of

+the remainder of the terms of this Agreement, and without further

+action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity

+(including a cross-claim or counterclaim in a lawsuit) alleging that the

+Program itself (excluding combinations of the Program with other software

+or hardware) infringes such Recipient's patent(s), then such Recipient's

+rights granted under Section 2(b) shall terminate as of the date such

+litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it

+fails to comply with any of the material terms or conditions of this

+Agreement and does not cure such failure in a reasonable period of

+time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use

+and distribution of the Program as soon as reasonably practicable.

+However, Recipient's obligations under this Agreement and any licenses

+granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement,

+but in order to avoid inconsistency the Agreement is copyrighted and

+may only be modified in the following manner. The Agreement Steward

+reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement

+Steward has the right to modify this Agreement. The Eclipse Foundation

+is the initial Agreement Steward. The Eclipse Foundation may assign the

+responsibility to serve as the Agreement Steward to a suitable separate

+entity. Each new version of the Agreement will be given a distinguishing

+version number. The Program (including Contributions) may always be

+Distributed subject to the version of the Agreement under which it was

+received. In addition, after a new version of the Agreement is published,

+Contributor may elect to Distribute the Program (including its

+Contributions) under the new version.

+

+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient

+receives no rights or licenses to the intellectual property of any

+Contributor under this Agreement, whether expressly, by implication,

+estoppel or otherwise. All rights in the Program not expressly granted

+under this Agreement are reserved. Nothing in this Agreement is intended

+to be enforceable by any entity that is not a Contributor or Recipient.

+No third-party beneficiary rights are created under this Agreement.

+

+Exhibit A - Form of Secondary Licenses Notice

+

+"This Source Code may also be made available under the following 

+Secondary Licenses when the conditions for such availability set forth 

+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),

+version(s), and exceptions or additional permissions here}."

+

+  Simply including a copy of this Agreement, including this Exhibit A

+  is not sufficient to license the Source Code under Secondary Licenses.

+

+  If it is not possible or desirable to put the notice in a particular

+  file, then You may include the notice in a location (such as a LICENSE

+  file in a relevant directory) where a recipient would be likely to

+  look for such a notice.

+

+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf.transfromRequirements/META-INF/MANIFEST.MF b/org.eclipse.opencert.epf.transfromRequirements/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f6038e7
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: Transformation

+Bundle-SymbolicName: org.eclipse.opencert.epf.transfromRequirements;singleton:=true

+Bundle-Version: 1.0.0.qualifier

+Bundle-Activator: org.eclipse.opencert.epf.transformRequirements.transformation.Activator

+Require-Bundle: org.eclipse.ui,

+ org.eclipse.core.runtime,

+ org.eclipse.core.resources,

+ org.eclipse.epsilon.eol.engine;bundle-version="1.4.0",

+ org.eclipse.epsilon.etl.engine;bundle-version="1.4.0",

+ org.eclipse.epsilon.emc.emf;bundle-version="1.4.0",

+ org.eclipse.epf.uma;bundle-version="1.5.0",

+ org.eclipse.gmf.runtime.emf.core,

+ org.eclipse.gmf.runtime.emf.commands.core,

+ org.eclipse.gmf.runtime.diagram.core,

+ org.eclipse.emf.cdo.dawn.util,

+ org.eclipse.emf.cdo.dawn.ui,

+ org.eclipse.gmf.runtime.diagram.ui,

+ org.eclipse.emf.cdo.dawn,

+ org.eclipse.emf.cdo.dawn.gmf;bundle-version="2.1.300",

+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="1.7.0",

+ org.eclipse.opencert.apm.baseline,

+ org.eclipse.opencert.apm.baseline.diagram,

+ org.eclipse.jface,

+ org.eclipse.emf.ecore,

+ org.eclipse.epf.library,

+ org.eclipse.epf.xml.uma,

+ org.eclipse.opencert.pam.procspec,

+ org.eclipse.epf.library.edit

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Bundle-ActivationPolicy: lazy

+Import-Package: org.eclipse.emf.cdo.dawn.preferences,

+ org.eclipse.uml2.uml

+

diff --git a/org.eclipse.opencert.epf.transfromRequirements/build.properties b/org.eclipse.opencert.epf.transfromRequirements/build.properties
new file mode 100644
index 0000000..eb04107
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .

+jre.compilation.profile = JavaSE-1.7

diff --git a/org.eclipse.opencert.epf.transfromRequirements/epsilon/epf2Baseline.etl b/org.eclipse.opencert.epf.transfromRequirements/epsilon/epf2Baseline.etl
new file mode 100644
index 0000000..946b257
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/epsilon/epf2Baseline.etl
@@ -0,0 +1,287 @@
+// EPF -> REQ;

+// OpenCert -> BASELINE;

+

+

+pre {

+  'Running ETL'.println();

+ 

+  

+   	 	var contentpackage : REQ!ContentPackage;

+		contentpackage =  REQ!ContentPackage.allInstances().first();

+		var strp = "ContentPackage: " +contentpackage;

+		strp.println();	

+	

+	  	var processComponent : LIB!ProcessComponent;

+      	processComponent =  LIB!ProcessComponent.allInstances().first;

+

+	  	var name = "ProcessComponent: " +processComponent.name;

+	  	name.println();

+

+}

+

+

+post{

+

+	

+	"Post: Finished EPF2Baseline ETL ".println();

+} 

+

+

+    rule ContentPackage2BaseFramework

+	transform cp : REQ!ContentPackage //pc: LIB!ProcessComponent

+	to baseline : Baseline!BaseFramework, process:PRO!ProcessModel{	

+	

+	  guard : cp.name = "CoreContent"

+	  

+	  

+	    	baseline.id=cp.id;

+			baseline.name=" ContentPackage " +cp.name; 

+			

+			var strcp = "ContentPackage: " +baseline.name;

+			strcp.println(); 

+			var strcp2 = "ProcessModel: " +process.name;

+			//strcp2.println();

+

+			

+			for (pra in REQ!Practice.allInstances()){	

+								

+				if(isMainPractice(pra) = true){

+			

+			baseline.ownedActivities.add(pra.equivalent());

+				

+			

+			} 

+				

+		}

+					

+   }		

+	

+	

+	

+	rule Practice2BaseActivity

+	transform pra : REQ!Practice 

+	to bac : Baseline!BaseActivity

+	{

+	

+	guard: isMainPractice(pra) = true

+

+	var strpra = "After guard Practice: " +pra.name;

+		//strpra.println();

+		bac.id=pra.id;

+		bac.name="Practice: " +pra.name;

+	

+			//Getting design_and_implementation,staffing_plan and tool_qualification_plan

+			for(sp1 in pra.subPractices){

+

+				 var ba1 = new Baseline!BaseActivity; 

+				 

+					ba1.id=sp1.id;

+					ba1.name="Practice: " +sp1.name; 

+					bac.subActivity.add(ba1); 

+					    

+			//Getting Phase Practices		    

+			for(sp2 in sp1.subPractices){

+

+			 	var stringsp = "sp2 Practice: " +sp2.name;

+					 //stringsp.println();

+				 var ba2 = new Baseline!BaseActivity;

+				 	ba2.id=sp2.id;

+					ba2.name="Practice: " +sp2.name; 

+					ba1.subActivity.add(ba2);

+					//ba1.precedingActivity.add(ba2);

+	

+			//getting Reference linked phase 		    

+			for(arct in sp2.activityReferences){

+

+				var eProxyURI = "arph ct activityReferences:  " +arct.eProxyURI;//.eClass.name;

+					//eProxyURI.println(); 

+				var arctid =  eProxyURI.substring((eProxyURI.indexOf('#'))+1);

+					//arctid.println();

+			for(ph in LIB!Phase.allInstances()){

+				var stringph = "Phase: " +ph.name;

+					//stringph.println();		

+				var ab = "Phase name: "+ph.name;

+					//ab.println();

+					 

+				if(ph.id = arctid){

+					 

+				var cd = "After Match: Phase name: "+ph.name;

+					//cd.println();

+					var act = new PRO!Activity;

+						act.id="Ph"+ph.id;

+						act.name="Phase: "+ph.name;

+					process.ownedActivity.add(act);

+				

+				    		}

+						}

+					}		    

+	

+				

+			//Getting linked Roles	

+				

+			for(cr in sp2.contentReferences){

+

+				var eProxyURI = "contentReferences:  " +cr.eProxyURI;

+					//eProxyURI.println(); 

+				var crid =  eProxyURI.substring((eProxyURI.indexOf('#'))+1);

+					//crid.println();

+

+			for(role in ROL!Role.allInstances()){

+					

+				var ab = "Role name: "+role.name;

+					//ab.println();

+					 

+				if(role.id = crid){

+					 

+				var cd = "After Match: Role name: "+role.name;

+					//cd.println();

+				var pr = new PRO!Person;

+  	    			pr.name="Role: "+role.name;

+					pr.id="Rd"+role.id;

+				process.ownedParticipant.add(pr);   

+					    

+					    	}

+					  	 }

+			for(tool in ROL!Tool.allInstances()){

+					

+				var ab = "Tool name: "+tool.name;

+					//ab.println(); 

+						

+				 if(tool.id = crid){		

+						

+				var cd = "After Match: Tool name: "+tool.name;

+					//cd.println();		

+				var tl = new PRO!Tool; 

+					

+					tl.name="Tool: "+tool.name;

+					tl.id="tl"+tool.id;

+				var cd = "After transform: Tool name: "+tool.name;

+					//cd.println();

+				process.ownedParticipant.add(tl);		

+						

+					  	 

+					  	} 

+					 } 

+				}

+		    

+			//Getting Activity, 

+				   

+		 for(sp3 in sp2.subPractices){

+		 	

+				var stringsp = "sp3 Practice: " +sp3.name;

+					//stringsp.println();

+				var ba3 = new Baseline!BaseActivity;

+				 

+					ba3.id=sp3.id;

+					ba3.name="Practice: " +sp3.name; 

+					ba2.subActivity.add(ba3);  

+					//ba2.precedingActivity.add(ba3);

+					    

+			//getting linked Activities

+			for(arsbc in sp3.activityReferences){

+

+				var eProxyURI = "sbc activityReferences:  " +arsbc.eProxyURI;

+					//eProxyURI.println(); 

+				var arsbcid =  eProxyURI.substring((eProxyURI.indexOf('#'))+1);

+					//arsbcid.println();

+								

+			for(act in LIB!Activity.allInstances()){

+			

+				var stringact = "Activity: " +act.name;

+					//stringact.println();	

+								

+				if(act.id = arsbcid){

+					 

+			//var cd1 = "After Match: Activity name: "+act.name;

+				//cd1.println();

+					

+				var act1 = new PRO!Activity;

+					act1.id="act"+act.id;

+					act1.name="Activity: "+act.name;

+				var cd1 = "After transform: Activity name: "+act1.name;

+					// cd1.println();

+				process.ownedActivity.add(act1);

+				

+				    		}

+							

+						 }

+					}  

+					    	    

+			//Getting  Task practices	    

+			for(sp4 in sp3.subPractices){

+	

+			 var stringsp = "sp4 Practice: " +sp4.name;

+				//stringsp.println();     

+			var br = new Baseline!BaseRequirement;

+				br.id=sp4.id;

+				br.name="Practice: " +sp4.name; 

+				ba3.ownedRequirement.add(br);  

+					    

+			//Getting linked Roles	

+				

+			for(cr in sp4.contentReferences){

+

+				var eProxyURI = "contentReferences:  " +cr.eProxyURI;

+					//eProxyURI.println(); 

+				var crid =  eProxyURI.substring((eProxyURI.indexOf('#'))+1);

+					//crid.println();

+

+			for(task in ROL!Task.allInstances()){

+					

+				var ab = "Task name: "+task.name;

+					//ab.println();

+					 

+				if(task.id = crid){

+					 

+				var cd = "After Match: Task name: "+task.name;

+					//cd.println();

+					

+				var actd = new PRO!Activity;

+					actd.id="Task"+task.id;

+					actd.name="Task: "+task.name;

+				process.ownedActivity.add(actd);  

+					    

+					    	} 

+					  	 }

+					}

+

+

+

+						}//sp4

+					}//sp3

+			 	}//sp2

+			

+			}//sp1

+		}//Rule	

+				

+

+	

+

+operation isMainPractice(pra:REQ!Practice) : Boolean {

+

+		var endop = ".........Start op..........";

+			//endop.println();

+		for(ar in pra.activityReferences){

+				

+			var eProxyURI = "activityReferences:  " +ar.eProxyURI;

+			   	//eProxyURI.println(); 

+			var arid =  eProxyURI.substring((eProxyURI.indexOf('#'))+1);

+				//arid.println();

+		for(dp in LIB!DeliveryProcess.allInstances()){

+					

+			var ab = "DeliveryProcess name  : "+dp.name;

+				//ab.println();   

+		if(dp.id = arid){

+					 

+			var cd = "After Match practice name:  "+pra.name;

+			    //cd.println();

+			var srtop = ".........End op..........";

+				//srtop.println();

+			   return true;

+			}

+ 		}

+	} 	

+

+return false;

+	

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssetsPackage.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssuranceProject.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssuranceProject.gif
new file mode 100644
index 0000000..c4b1624
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/AssuranceProject.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/BaselineConfig.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/PermissionConfig.gif b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/icons/full/obj16/PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf.transfromRequirements/plugin.properties b/org.eclipse.opencert.epf.transfromRequirements/plugin.properties
new file mode 100644
index 0000000..52274c3
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/plugin.properties
@@ -0,0 +1,40 @@
+#

+

+pluginName = Assuranceproject Edit Support

+providerName = Tecnalia

+

+_UI_CreateChild_text = {0}

+_UI_CreateChild_text2 = {1} {0}

+_UI_CreateChild_text3 = {1}

+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature

+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.

+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.

+

+_UI_PropertyDescriptor_description = The {0} of the {1}

+

+_UI_AssuranceProject_type = Assurance Project

+_UI_PermissionConfig_type = Permission Config

+_UI_AssetsPackage_type = Assets Package

+_UI_BaselineConfig_type = Baseline Config

+_UI_Unknown_type = Object

+

+_UI_Unknown_datatype= Value

+

+_UI_AssuranceProject_createdBy_feature = Created By

+_UI_AssuranceProject_responsible_feature = Responsible

+_UI_AssuranceProject_date_feature = Date

+_UI_AssuranceProject_version_feature = Version

+_UI_AssuranceProject_assetsPackage_feature = Assets Package

+_UI_AssuranceProject_permissionConf_feature = Permission Conf

+_UI_AssuranceProject_baselineConfig_feature = Baseline Config

+_UI_AssuranceProject_subProject_feature = Sub Project

+_UI_PermissionConfig_isActive_feature = Is Active

+_UI_AssetsPackage_isActive_feature = Is Active

+_UI_AssetsPackage_artefactsModel_feature = Artefacts Model

+_UI_AssetsPackage_argumentationModel_feature = Argumentation Model

+_UI_AssetsPackage_processModel_feature = Process Model

+_UI_BaselineConfig_complianceMapGroup_feature = Compliance Map Group

+_UI_BaselineConfig_isActive_feature = Is Active

+_UI_BaselineConfig_refFramework_feature = Ref Framework

+_UI_Unknown_feature = Unspecified

+

diff --git a/org.eclipse.opencert.epf.transfromRequirements/plugin.xml b/org.eclipse.opencert.epf.transfromRequirements/plugin.xml
new file mode 100644
index 0000000..b4e71d4
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/plugin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+

+   <extension

+         point="org.eclipse.ui.popupMenus">

+      <objectContribution

+            objectClass="org.eclipse.epf.uma.ContentPackage"

+            id="transformation.contribution1">

+         <menu

+               label="Transformation"

+               path="additions"

+               id="transformation.menu1">

+            <separator

+                  name="group1">

+            </separator>

+         </menu>

+         <action

+               label="Generate Baseline Model (OpenCert)"

+               class="org.eclipse.opencert.epf.transformRequirements.transformation.popup.action.BaselineTransformationHandler"

+               menubarPath="transformation.menu1/group1"

+               enablesFor="1"

+               id="transformation.newAction3">

+         </action>

+      </objectContribution>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/Activator.java b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/Activator.java
new file mode 100644
index 0000000..74e9f16
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/Activator.java
@@ -0,0 +1,77 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Samina Kanwal, Faiz Ul Muram and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.transformRequirements.transformation;

+

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "transformation"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	/**

+	 * Returns an image descriptor for the image file at the given

+	 * plug-in relative path

+	 *

+	 * @param path the path

+	 * @return the image descriptor

+	 */

+	public static ImageDescriptor getImageDescriptor(String path) {

+		return imageDescriptorFromPlugin(PLUGIN_ID, path);

+	}

+}

diff --git a/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineGUI.java b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineGUI.java
new file mode 100644
index 0000000..3c56eed
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineGUI.java
@@ -0,0 +1,138 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Samina Kanwal, Faiz Ul Muram and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.transformRequirements.transformation.popup.action;

+

+import java.util.HashMap;

+

+import org.eclipse.emf.cdo.dawn.ui.composites.CDOResourceNodeSelectionWidget;

+import org.eclipse.emf.cdo.eresource.CDOResourceFolder;

+import org.eclipse.emf.cdo.eresource.CDOResourceNode;

+import org.eclipse.emf.cdo.view.CDOView;

+import org.eclipse.jface.dialogs.Dialog;

+import org.eclipse.jface.dialogs.IDialogConstants;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.window.IShellProvider;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Button;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Shell;

+

+public class BaselineGUI extends Dialog{

+	

+	CDOResourceFolder assuranceprojectFolder;

+	CDOResourceFolder baselineFolder;

+	

+	

+	HashMap<Object, Object> options = new HashMap<Object, Object>();

+

+	private Label baselineLabel;

+	private String resourceName;

+	private CDOResourceNodeSelectionWidget chooser;

+	private Shell shell;

+	

+	public BaselineGUI(Shell parentShell, CDOView view) {

+		super(parentShell);

+		this.shell=parentShell;

+	}

+	public BaselineGUI(IShellProvider parentShell) {

+		super(parentShell);

+	}

+	

+	@Override

+	protected void createButtonsForButtonBar(Composite parent) {

+	    super.createButtonsForButtonBar(parent);

+

+	    Button ok = getButton(IDialogConstants.OK_ID);

+	    setButtonLayoutData(ok);

+

+	    chooser.addSelectionChangedListener(new ISelectionChangedListener(){

+

+			@Override

+			public void selectionChanged(SelectionChangedEvent event) {

+

+				if(event.getSelection() instanceof IStructuredSelection){

+

+					IStructuredSelection selection = (IStructuredSelection) event.getSelection();

+					Object element = selection.getFirstElement();

+					if(element instanceof CDOResourceNode){

+						resourceName = ((CDOResourceNode)element).getName();

+					}

+				}

+			}

+			

+		});

+	    

+	    Button cancel = getButton(IDialogConstants.CANCEL_ID);

+	    

+	    setButtonLayoutData(cancel);

+	 }

+	

+	@Override

+	protected Control createDialogArea(final Composite parent) {

+

+		Composite contents = (Composite) super.createDialogArea(parent);

+		

+		GridData contentsGridData2 = (GridData) contents.getLayoutData();

+		contentsGridData2.horizontalAlignment = SWT.FILL;

+		contentsGridData2.verticalAlignment = SWT.FILL;

+		contentsGridData2.minimumHeight = 300;

+		contentsGridData2.minimumWidth = 300;

+		

+		baselineLabel = new Label(contents, SWT.NONE);

+		baselineLabel.setText("Please select your assurance project folder:");

+		GridData argLabelGridData = new GridData();		

+		argLabelGridData.horizontalAlignment = SWT.FILL;

+		argLabelGridData.verticalAlignment = SWT.FILL;

+		GridLayout layoutLabel = new GridLayout();

+		layoutLabel.marginHeight = 20;

+		layoutLabel.marginWidth = 0;

+		baselineLabel.setLayoutData(argLabelGridData);

+		

+		GridLayout layout = new GridLayout();

+		layout.marginHeight = 5;

+		layout.marginWidth = 0;

+			

+		chooser = new CDOResourceNodeSelectionWidget(contents,SWT.FILL);

+		chooser.setLayoutData(contentsGridData2);

+		chooser.setLayout(layout);

+		

+		contents.setData(chooser);

+		

+		return contents;

+	}

+

+	public String resourceName(){

+		return resourceName;

+	}

+	

+	@Override

+	protected void cancelPressed(){

+		MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 

+	}

+	@Override

+	protected void configureShell(Shell newShell) {

+		super.configureShell(newShell);

+		newShell.setText("Assurance project selection");

+	}

+}

diff --git a/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformation.java b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformation.java
new file mode 100644
index 0000000..3ee20f0
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformation.java
@@ -0,0 +1,312 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Samina Kanwal, Faiz Ul Muram and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf.transformRequirements.transformation.popup.action;

+

+import java.io.File;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IWorkspaceRoot;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+//import org.eclipse.core.runtime.Platform;

+import org.eclipse.epf.library.edit.LibraryEditPlugin;

+import org.eclipse.epf.uma.Activity;

+import org.eclipse.epf.uma.ContentElement;

+import org.eclipse.epf.uma.Practice;

+import org.eclipse.epf.uma.impl.ContentPackageImpl;

+import org.eclipse.epf.uma.impl.DeliveryProcessImpl;

+import org.eclipse.epsilon.emc.emf.EmfModel;

+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;

+import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;

+import org.eclipse.epsilon.etl.EtlModule;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.TreeSelection;

+import org.eclipse.ui.IWorkbenchPage;

+

+

+public class BaselineTransformation {

+

+	private IWorkbenchPage page;

+	private String name;

+	

+

+

+	public BaselineTransformation(IWorkbenchPage page){

+		this.page=page;

+	}

+

+	public void execute(IProgressMonitor monitor ){

+

+		EtlModule etlModule = new EtlModule();

+		

+		//Get the current  ContentPackageImpl

+		ISelection sel = page.getSelection();

+		TreeSelection tree = (TreeSelection) sel;

+	

+		

+		ContentPackageImpl contentElements = (ContentPackageImpl) tree.getFirstElement();

+		

+		name = contentElements.getName();

+	

+		//Get the needed model files

+		String pluginPathWS = contentElements.eContainer().eResource().getURI().toFileString();

+		

+		File plugin2 = new File(pluginPathWS); //REQ 

+		String configPath = null;

+		

+		//<-----------New---------->

+		

+		List<ContentElement> contentElements1 = contentElements.getContentElements();

+	

+		for(ContentElement contentElement: contentElements1){

+			//Get the Practice

+			if(contentElement instanceof Practice){

+				Practice practice = (Practice) contentElement;

+				//Get Activity Reference, DeliveryProcess

+				List<Activity> dpreference = practice.getActivityReferences();

+		for(Activity dpreferences: dpreference){

+			if(dpreferences instanceof DeliveryProcessImpl){

+				String dpreferenceElement =  dpreferences.eResource().getURI().toFileString();

+				int deliveryprocess = dpreferenceElement.indexOf("deliveryprocesses");

+				String procPluginPath = dpreferenceElement.substring(0,deliveryprocess);

+	

+		File Plugin1 = new File(procPluginPath+"/plugin.xmi"); //ROL

+		File deliveryProcess = new File(dpreferenceElement); //LIB

+	

+		// new path jar path

+		

+		String spluginPath = LibraryEditPlugin.getPlugin().getBundle().getLocation();

+		if(spluginPath.contains("plugins")) // Yes, in jar mode.

+		{			

+			String pluginPath = spluginPath.substring(15, spluginPath.indexOf("plugins"));

+			configPath = pluginPath + "configuration";

+			

+			try {

+				String etlPath = configPath + "/" + "epsilon" +"/" + "epf2Baseline.etl";

+				etlModule.parse(new File(etlPath));

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+			

+			monitor.worked(2);						

+		}

+		

+		String modelPath = configPath + "/" + "model" +"/" + "uma.ecore";

+		

+		//Create the source models

+		EmfModel reqModel = createEMFSourceModel("REQ", modelPath, plugin2, true, false);//REQ 

+		EmfModel rolModel = createEMFSourceModel("ROL", modelPath, Plugin1, true, false);//ROL

+		EmfModel libModel = createEMFSourceModel("LIB", modelPath, deliveryProcess, true, false);//LIB

+		

+		//Create the project into the workspace

+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

+		IProject project = root.getProject("Baseline");

+		String projectLocation = root.getLocation().toString()+"/Baseline";

+		if(project.exists()){

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}else{

+			try {

+				project.create(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}

+		

+		//Create the Process project into the workspace

+		IWorkspaceRoot root1 = ResourcesPlugin.getWorkspace().getRoot();

+		IProject project1 = root1.getProject("Process");

+		String projectLocation1 = root1.getLocation().toString()+"/Process";

+		if(project1.exists()){

+			try {

+				project1.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}else{

+			try {

+				project1.create(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+			try {

+				project1.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}

+

+		monitor.worked(3);

+		//Model paths

+		String modelPath_ = configPath + "/" + "model" +"/" + "baseline.ecore";

+		String modelPath__ = configPath + "/" + "model" +"/" + "process.ecore"; 

+		//Create the target model

+		EmfModel baselineModel = createEMFTargetModel("Baseline","http://baseline/1.0", modelPath_, projectLocation+"/"+name+".baseline", false, true);

+		//Create the target model

+		EmfModel procModel = createEMFTargetModel("PRO","http://process/1.0", modelPath__, projectLocation1+"/"+name+".process", false, true);

+

+	

+		etlModule.getContext().getModelRepository().addModel(baselineModel);

+		etlModule.getContext().getModelRepository().addModel(procModel);

+		etlModule.getContext().getModelRepository().addModel(reqModel);

+		etlModule.getContext().getModelRepository().addModel(rolModel);

+		etlModule.getContext().getModelRepository().addModel(libModel);

+

+		//Running the transformation

+		try {

+			etlModule.execute();

+		} catch (EolRuntimeException e) {

+			e.printStackTrace();

+		}

+		

+		monitor.worked(4);

+		

+		baselineModel.dispose();

+		procModel.dispose();

+		reqModel.dispose();

+		rolModel.dispose();

+		libModel.dispose();

+

+		etlModule.getContext().getModelRepository().dispose();	

+

+							}	

+						}

+					}

+				}

+			}

+		

+	protected EmfModel createEMFSourceModel(String name, String sourceMetaModelFilePath,

+			File sourceModelFilePath, Boolean sourceReadOnLoad, Boolean sourceStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+		

+		if(sourceMetaModelFilePath != null && !sourceMetaModelFilePath.isEmpty()) { 

+			if(sourceMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = sourceMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(sourceMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(sourceModelFilePath.getAbsolutePath());

+		emfModel.setReadOnLoad(sourceReadOnLoad);

+		emfModel.setStoredOnDisposal(sourceStoreOnDisposal);

+		

+		// MCP

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		// MCP

+		try {

+			emfModel.load();

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel;

+	}

+	

+	

+	protected EmfModel createEMFTargetModel(String name, String targetMetaModelURI, String targetMetaModelFilePath,

+			String targetModelFilePath, Boolean targetReadOnLoad, Boolean targetStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+

+		if(targetMetaModelURI != null && !targetMetaModelURI.isEmpty()) 

+		{ 

+			if(targetMetaModelURI.contains(","))

+			{

+				String[] metaModelURIs = targetMetaModelURI.split(",");

+				List<String> uris =new ArrayList<String>(metaModelURIs.length);

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					uris.add(metaModelURIs[i].trim());

+				};

+				emfModel.setMetamodelUris(uris);

+			}

+			else

+			{

+				emfModel.setMetamodelUri(targetMetaModelURI);

+			}

+		}

+		

+		if(targetMetaModelFilePath != null && !targetMetaModelFilePath.isEmpty()) { 

+			if(targetMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = targetMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(targetMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(targetModelFilePath);

+		emfModel.setReadOnLoad(targetReadOnLoad);

+		emfModel.setStoredOnDisposal(targetStoreOnDisposal);

+		

+		// MCP

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		// MCP

+		try {

+			emfModel.load(); //254

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel; 

+						

+	}

+}

+		

+

+

diff --git a/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformationHandler.java b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformationHandler.java
new file mode 100644
index 0000000..716fe54
--- /dev/null
+++ b/org.eclipse.opencert.epf.transfromRequirements/src/org/eclipse/opencert/epf/transformRequirements/transformation/popup/action/BaselineTransformationHandler.java
@@ -0,0 +1,565 @@
+/*******************************************************************************
+ * Copyright (c) 2018, MDH 
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ *   Contributors:
+ *   Samina Kanwal, Faiz Ul Muram and Muhammad Atif Javed
+ *   Initial API and implementation and/or initial documentation
+ *******************************************************************************/
+/**
+ */
+package org.eclipse.opencert.epf.transformRequirements.transformation.popup.action;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+//import org.eclipse.opencert.apm.baseline.baseline.BaselinePackage;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.edit.parts.BaseActivityBaseActivitySubActivityCompartment2EditPart;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.edit.parts.BaseActivityBaseActivitySubActivityCompartmentEditPart;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.edit.parts.BaseFrameworkEditPart;
+//import org.eclipse.opencert.apm.baseline.baseline.diagram.edit.policies.BaseFrameworkCanonicalEditPolicy;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.edit.policies.BaseFrameworkPersistedCanonicalEditPolicy;
+//import org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineDiagramEditor;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineDiagramEditorPlugin;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineDiagramEditorUtil;
+//import org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineDiagramEditorUtil;//
+import org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineVisualIDRegistry;
+//import org.eclipse.opencert.apm.baseline.baseline.diagram.part.DawnBaselineDiagramEditor;
+import org.eclipse.opencert.apm.baseline.baseline.diagram.part.Messages;
+import org.eclipse.opencert.epf.transformRequirements.transformation.popup.action.BaselineGUI;
+import org.eclipse.opencert.epf.transformRequirements.transformation.popup.action.BaselineTransformation;
+
+//import org.eclipse.opencert.sam.arg.arg.diagram.edit.parts.CaseEditPart;
+//import org.eclipse.opencert.sam.arg.arg.diagram.edit.policies.CasePersistedCanonicalEditPolicy;
+//import org.eclipse.opencert.sam.arg.arg.diagram.part.*;
+//org.eclipse.opencert.apm.baseline.diagram.dawn/src/org/eclipse/opencert/apm/baseline/baseline/diagram/part/DawnBaselineDiagramEditor.java
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.LinkedList;
+//import java.util.Iterator;
+//import java.util.LinkedList;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.util.ConcurrentAccessException;
+import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EObject;
+//import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.epf.uma.impl.ContentPackageImpl;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.notation.Diagram;
+
+
+
+
+public class BaselineTransformationHandler implements IObjectActionDelegate {
+
+	private Shell shell;
+	private IWorkbenchPage page;
+	private IWorkbenchWindow window;
+
+	private URI domainModelURI;
+	private EObject diagramRoot=null;
+	private boolean transfDiagramOk=false;
+	private Resource diagramResource;
+	private IProgressMonitor monitor2;
+	private String name;
+	
+	/**
+	 * Constructor for Action1.
+	 */
+	public BaselineTransformationHandler() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		shell = targetPart.getSite().getShell();
+		page = targetPart.getSite().getPage();
+		window = targetPart.getSite().getWorkbenchWindow();	
+	} 
+
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		
+		
+		MessageDialog dg = new MessageDialog(
+	            shell,
+	            "Select directory",
+	            null,
+	            "Please select the target assurance project from the CDO Repository",
+	            MessageDialog.INFORMATION,
+	            new String[]{
+	                "Browse...", 
+	                IDialogConstants.CANCEL_LABEL},
+	            -1//SWT.CLOSE
+	            );
+	    
+if(dg.open()==0){
+			
+			//Connect to the CDO Repository
+			CDOConnectionUtil.instance.init(
+					PreferenceConstants.getRepositoryName(),
+					PreferenceConstants.getProtocol(),
+					PreferenceConstants.getServerName());
+			CDOSession session = CDOConnectionUtil.instance.getCurrentSession();
+			CDOView view = session.openView();
+			CDOTransaction transaction = session.openTransaction();
+			
+			BaselineGUI gui = new BaselineGUI(shell,view);
+			gui.create();
+			gui.open();
+			
+			String selection = gui.resourceName();
+	
+			if(selection != null){
+				
+				
+				//Get the current contentElements
+				ISelection sel = page.getSelection();
+				TreeSelection tree = (TreeSelection) sel;
+				ContentPackageImpl contentElements = (ContentPackageImpl) tree.getFirstElement();
+						
+				name = contentElements.getName();	
+				
+
+				//Invoke transformation
+				BaselineTransformation transformation = new BaselineTransformation(page);
+			
+				ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+				dialog.open();
+				IProgressMonitor monitor = dialog.getProgressMonitor();
+				monitor.beginTask("Generating Baseline Requirement Model ... ", 15);
+				monitor.worked(1);
+				monitor.subTask("Performing the transformation...");
+	
+				transformation.execute(monitor);  
+				
+				monitor.worked(5);
+				monitor.subTask("Creating CDO Resources...");
+
+				
+				//Create the model CDO Resource
+				CDOResource baselineModel;
+				if (transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/BASELINE/"+name+".baseline").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					baselineModel = transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline");
+				}else{
+					baselineModel = transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline");
+				}
+				
+				String baselineModelFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Baseline/"+name+".baseline";
+				URI baselineXmiUri = URI.createFileURI(baselineModelFile);
+				URI baselineCDOUri = baselineModel.getURI();
+				
+				ResourceSet resourceSet = new ResourceSetImpl();
+				resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+			
+				Resource baselineXmiResource1 = resourceSet.createResource(baselineXmiUri);
+				File newFile = new File(baselineModelFile);
+				
+				monitor.worked(6);
+				monitor.subTask("Loading model to CDO Repository...");
+	
+				//Load the model contents into the created resource
+				try {
+					FileInputStream baselineFileInStream = new FileInputStream(newFile);
+					baselineXmiResource1.load(baselineFileInStream,Collections.EMPTY_MAP);
+					baselineXmiResource1.setURI(baselineXmiUri);	
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			
+				EMFUtil.safeResolveAll(resourceSet);
+			
+				CDOResource baselineCDOResource = transaction.getOrCreateResource(baselineCDOUri.path());
+				baselineCDOResource.getContents().addAll(baselineXmiResource1.getContents());
+	
+				EMFUtil.safeResolveAll(resourceSet);
+				
+				monitor.worked(7);
+			
+				try {
+					baselineCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				
+				
+				// Create the Process model CDO Resource
+				
+				
+				CDOResource procModel;
+				if (transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/PROCESSES/"+name+".process").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					procModel = transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process");
+				}else{
+					procModel = transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process");
+				}
+				
+				String procModelFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Process/"+name+".process";
+				URI procXmiUri = URI.createFileURI(procModelFile);
+				URI procCDOUri = procModel.getURI();
+				
+				ResourceSet resourceSet1 = new ResourceSetImpl();
+				resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+			
+				Resource procXmiResource1 = resourceSet1.createResource(baselineXmiUri);
+				File newFile1 = new File(procModelFile);
+				
+				monitor.worked(6);
+				monitor.subTask("Loading model to CDO Repository...");
+	
+				//Load the model contents into the created resource
+				try {
+					FileInputStream procFileInStream = new FileInputStream(newFile1);
+					procXmiResource1.load(procFileInStream,Collections.EMPTY_MAP);
+					procXmiResource1.setURI(procXmiUri);	
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			
+				EMFUtil.safeResolveAll(resourceSet);
+			
+				CDOResource procCDOResource = transaction.getOrCreateResource(procCDOUri.path());
+				procCDOResource.getContents().addAll(procXmiResource1.getContents());
+	
+				EMFUtil.safeResolveAll(resourceSet1);
+				
+				monitor.worked(7);
+			
+				try {
+					procCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}		
+					
+				
+				
+				monitor.worked(8);
+				monitor.subTask("Creating diagram...");
+				
+				//Create diagram
+				createbaselineDiagram();
+			
+				
+				monitor.worked(9);
+				monitor.subTask("Creating CDO Resources...");
+				
+			
+
+				//Create the diagram CDO Resource
+			
+				CDOResource baselineDiagram;
+				
+				if (transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline_diagram").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/BASELINE/"+name+".baseline_diagram").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					baselineDiagram = transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline_diagram");
+				}else{
+					baselineDiagram = transaction.getOrCreateResource("/"+selection+"/BASELINE/"+name+".baseline_diagram");
+				}
+				
+				monitor.worked(10);
+				
+				//Load the diagram contents into the created resource
+				String baselineDiagramFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Baseline/"+name+".baseline_diagram";
+				URI baselineDiagUri = URI.createFileURI(baselineDiagramFile);
+			    URI baselineDiagCdoURI = baselineDiagram.getURI(); 
+				
+				ResourceSet resourceSet2 = new ResourceSetImpl();
+				resourceSet2.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+				
+				Resource baselineDiagramXmiResource = resourceSet.createResource(baselineDiagUri);
+				File newFile2 = new File(baselineDiagramFile);
+				
+				monitor.worked(11);
+				monitor.subTask("Loading diagram to CDO Repository...");
+				
+				try {
+					FileInputStream baselineFileInStream2 = new FileInputStream(newFile2);
+					baselineDiagramXmiResource.load(baselineFileInStream2,Collections.EMPTY_MAP);
+					baselineDiagramXmiResource.setURI(baselineDiagUri);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				EMFUtil.safeResolveAll(resourceSet2);
+				
+				CDOResource baselineDiagramCDOResource = transaction.getOrCreateResource(baselineDiagCdoURI.path());
+				baselineDiagramCDOResource.getContents().addAll(baselineDiagramXmiResource.getContents());
+				
+				EMFUtil.safeResolveAll(resourceSet2);
+				
+				monitor.worked(12);
+				
+				try {
+					baselineDiagramCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				monitor.worked(13);
+				
+				//Commit the transaction
+				try {
+					transaction.commit();
+				} catch (ConcurrentAccessException e) {
+					e.printStackTrace();
+				} catch (CommitException e) {
+					e.printStackTrace();
+				}
+				
+				
+				monitor.worked(14);
+				monitor.done();
+				dialog.close();
+				
+				//if(transfDiagramOk == true){
+					try{
+						MessageDialog.openInformation(shell, "Transformation completed", 
+									"The Baseline Diagram and Model is generated under:\n\n"
+									+"    - BASELINE folders of the project "+selection+" in the CDO Repository\n"
+									+"    -  project in the current workspace");
+					}catch(Exception e){
+						System.out.println("Hello");
+					}
+				}
+					
+				
+				ProgressMonitorDialog dialog2 = new ProgressMonitorDialog(shell);
+				dialog2.open();
+				monitor2 = dialog2.getProgressMonitor();
+				monitor2.beginTask("Opening diagram... ", 6);
+				monitor2.worked(1);
+				
+				//Change the perspective
+				if (PlatformUI.getWorkbench() != null) {
+					IPerspectiveDescriptor descriptor = window.getWorkbench()
+					    .getPerspectiveRegistry().findPerspectiveWithId("org.eclipse.ui.resourcePerspective");
+		
+		    		PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+					    .getActivePage().setPerspective(descriptor);
+		        }
+				
+				monitor2.worked(2); 
+				
+				generateDiagram(new NullProgressMonitor());
+				
+				monitor2.worked(5);
+				monitor2.done();
+				dialog2.close();
+			
+			}else{
+				MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 
+			}
+		}
+	//}
+	
+	/* Copied and modified from org.eclipse.opencert.apm.baseline.baseline.diagram.part.BaselineNewDiagramFileWizard.java */
+	public void createbaselineDiagram(){
+		IPath workspace = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+		domainModelURI = URI.createPlatformResourceURI("Baseline/"+name+".baseline", true);
+		LinkedList<IFile> affectedFiles = new LinkedList<IFile>();
+		File file = new File(workspace+"/Baseline/"+name+".baseline_diagram");
+		
+		try {
+			file.createNewFile();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		
+		IPath location= Path.fromOSString(file.getPath()); 
+		IFile diagramFile= ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(location);
+		BaselineDiagramEditorUtil.setCharset(diagramFile);
+		affectedFiles.add(diagramFile);
+		URI diagramModelURI = URI.createPlatformResourceURI("Baseline/"+name+".baseline_diagram", true);
+		
+		TransactionalEditingDomain myEditingDomain = GMFEditingDomainFactory.INSTANCE
+				.createEditingDomain();
+		ResourceSet resourceSet = myEditingDomain.getResourceSet();
+		
+		try {
+			Resource resource = resourceSet.getResource(domainModelURI, true);
+			diagramRoot = (EObject) resource.getContents().get(0);
+		} catch (WrappedException ex) {
+			BaselineDiagramEditorPlugin.getInstance().logError(
+					"Unable to load resource: " + domainModelURI, ex); //$NON-NLS-1$
+		}
+	
+			diagramResource = resourceSet.createResource(diagramModelURI);
+		AbstractTransactionalCommand command = new AbstractTransactionalCommand(
+				myEditingDomain,
+				Messages.BaselineNewDiagramFileWizard_InitDiagramCommand,
+				affectedFiles) {
+
+			protected CommandResult doExecuteWithResult(
+					IProgressMonitor monitor, IAdaptable info)
+					throws ExecutionException {
+				int diagramVID = BaselineVisualIDRegistry
+						.getDiagramVisualID(diagramRoot);
+				if (diagramVID != BaseFrameworkEditPart.VISUAL_ID) {
+					return CommandResult
+							.newErrorCommandResult(Messages.BaselineNewDiagramFileWizard_IncorrectRootError);
+				}
+				Diagram diagram = ViewService.createDiagram(
+						diagramRoot,
+						BaseFrameworkEditPart.MODEL_ID,
+						BaselineDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
+				diagramResource.getContents().add(diagram);
+				return CommandResult.newOKCommandResult();
+			}
+		}; //done
+		try {
+			OperationHistoryFactory.getOperationHistory().execute(command,
+					new NullProgressMonitor(), null);
+			diagramResource.save(BaselineDiagramEditorUtil.getSaveOptions());
+			BaselineDiagramEditorUtil.openDiagram(diagramResource);
+
+		} catch (ExecutionException e) {
+			BaselineDiagramEditorPlugin.getInstance().logError(
+					"Unable to create model and diagram", e); //$NON-NLS-1$
+		} catch (IOException ex) {
+			BaselineDiagramEditorPlugin.getInstance().logError(
+					"Save operation failed for: " + diagramModelURI, ex); //$NON-NLS-1$
+		} catch (PartInitException ex) {
+			BaselineDiagramEditorPlugin.getInstance().logError(
+					"Unable to open editor", ex);
+		}	
+		
+		transfDiagramOk = true;
+	}
+	
+	
+	public void generateDiagram(IProgressMonitor monitor) {
+		try {
+			generateDiagram0(monitor);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	} 
+	
+	
+	
+	public void generateDiagram0(IProgressMonitor monitor) throws IOException {
+		
+		if (diagramResource != null) {
+			try {
+				BaselineDiagramEditorUtil.openDiagram(diagramResource);
+
+				IEditorPart editorPart = PlatformUI.getWorkbench()
+						.getActiveWorkbenchWindow().getActivePage()
+						.getActiveEditor();
+				if (editorPart instanceof IDiagramWorkbenchPart) {
+					DiagramEditPart  editp = ((IDiagramWorkbenchPart) editorPart).getDiagramEditPart();
+				editp.removeEditPolicy(EditPolicyRoles.CANONICAL_ROLE);
+				editp.installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+						new BaseFrameworkPersistedCanonicalEditPolicy());
+				
+				
+				
+
+ 					
+ 					monitor2.worked(4);
+ 					
+ 					DiagramEditor dawnEditorPart = (DiagramEditor)editorPart;
+	        		dawnEditorPart.doSave(monitor); 
+
+
+
+	        		BaseActivityBaseActivitySubActivityCompartmentEditPart.NOT_FROM_REFFRAMEWORK = 1;
+					BaseActivityBaseActivitySubActivityCompartment2EditPart.NOT_FROM_REFFRAMEWORK = 1;
+					//BaselinePackage.Literals.BASE_REQUIREMENT__OWNED_REL = 1;
+					
+				
+				}
+
+				}catch (PartInitException e) {
+				System.out.println(e);
+			}
+		}
+	} 
+	
+
+
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+
+	}
+
+
+	}
+	
diff --git a/org.eclipse.opencert.epf2OpenCert/.classpath b/org.eclipse.opencert.epf2OpenCert/.classpath
new file mode 100644
index 0000000..b1dabee
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.opencert.epf2OpenCert/.project b/org.eclipse.opencert.epf2OpenCert/.project
new file mode 100644
index 0000000..08540f7
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.opencert.epf2OpenCert</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.PluginNature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.opencert.epf2OpenCert/LICENSE b/org.eclipse.opencert.epf2OpenCert/LICENSE
new file mode 100644
index 0000000..3534f2f
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0

+

+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE

+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION

+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+  a) in the case of the initial Contributor, the initial content

+     Distributed under this Agreement, and

+

+  b) in the case of each subsequent Contributor:

+     i) changes to the Program, and

+     ii) additions to the Program;

+  where such changes and/or additions to the Program originate from

+  and are Distributed by that particular Contributor. A Contribution

+  "originates" from a Contributor if it was added to the Program by

+  such Contributor itself or anyone acting on such Contributor's behalf.

+  Contributions do not include changes or additions to the Program that

+  are not Modified Works.

+

+"Contributor" means any person or entity that Distributes the Program.

+

+"Licensed Patents" mean patent claims licensable by a Contributor which

+are necessarily infringed by the use or sale of its Contribution alone

+or when combined with the Program.

+

+"Program" means the Contributions Distributed in accordance with this

+Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement

+or any Secondary License (as applicable), including Contributors.

+

+"Derivative Works" shall mean any work, whether in Source Code or other

+form, that is based on (or derived from) the Program and for which the

+editorial revisions, annotations, elaborations, or other modifications

+represent, as a whole, an original work of authorship.

+

+"Modified Works" shall mean any work in Source Code or other form that

+results from an addition to, deletion from, or modification of the

+contents of the Program, including, for purposes of clarity any new file

+in Source Code form that contains any contents of the Program. Modified

+Works shall not include works that contain only declarations,

+interfaces, types, classes, structures, or files of the Program solely

+in each case in order to link to, bind by name, or subclass the Program

+or Modified Works thereof.

+

+"Distribute" means the acts of a) distributing or b) making available

+in any manner that enables the transfer of a copy.

+

+"Source Code" means the form of a Program preferred for making

+modifications, including but not limited to software source code,

+documentation source, and configuration files.

+

+"Secondary License" means either the GNU General Public License,

+Version 2.0, or any later versions of that license, including any

+exceptions or additional permissions as identified by the initial

+Contributor.

+

+2. GRANT OF RIGHTS

+

+  a) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free copyright

+  license to reproduce, prepare Derivative Works of, publicly display,

+  publicly perform, Distribute and sublicense the Contribution of such

+  Contributor, if any, and such Derivative Works.

+

+  b) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free patent

+  license under Licensed Patents to make, use, sell, offer to sell,

+  import and otherwise transfer the Contribution of such Contributor,

+  if any, in Source Code or other form. This patent license shall

+  apply to the combination of the Contribution and the Program if, at

+  the time the Contribution is added by the Contributor, such addition

+  of the Contribution causes such combination to be covered by the

+  Licensed Patents. The patent license shall not apply to any other

+  combinations which include the Contribution. No hardware per se is

+  licensed hereunder.

+

+  c) Recipient understands that although each Contributor grants the

+  licenses to its Contributions set forth herein, no assurances are

+  provided by any Contributor that the Program does not infringe the

+  patent or other intellectual property rights of any other entity.

+  Each Contributor disclaims any liability to Recipient for claims

+  brought by any other entity based on infringement of intellectual

+  property rights or otherwise. As a condition to exercising the

+  rights and licenses granted hereunder, each Recipient hereby

+  assumes sole responsibility to secure any other intellectual

+  property rights needed, if any. For example, if a third party

+  patent license is required to allow Recipient to Distribute the

+  Program, it is Recipient's responsibility to acquire that license

+  before distributing the Program.

+

+  d) Each Contributor represents that to its knowledge it has

+  sufficient copyright rights in its Contribution, if any, to grant

+  the copyright license set forth in this Agreement.

+

+  e) Notwithstanding the terms of any Secondary License, no

+  Contributor makes additional grants to any Recipient (other than

+  those set forth in this Agreement) as a result of such Recipient's

+  receipt of the Program under the terms of a Secondary License

+  (if permitted under the terms of Section 3).

+

+3. REQUIREMENTS

+

+3.1 If a Contributor Distributes the Program in any form, then:

+

+  a) the Program must also be made available as Source Code, in

+  accordance with section 3.2, and the Contributor must accompany

+  the Program with a statement that the Source Code for the Program

+  is available under this Agreement, and informs Recipients how to

+  obtain it in a reasonable manner on or through a medium customarily

+  used for software exchange; and

+

+  b) the Contributor may Distribute the Program under a license

+  different than this Agreement, provided that such license:

+     i) effectively disclaims on behalf of all other Contributors all

+     warranties and conditions, express and implied, including

+     warranties or conditions of title and non-infringement, and

+     implied warranties or conditions of merchantability and fitness

+     for a particular purpose;

+

+     ii) effectively excludes on behalf of all other Contributors all

+     liability for damages, including direct, indirect, special,

+     incidental and consequential damages, such as lost profits;

+

+     iii) does not attempt to limit or alter the recipients' rights

+     in the Source Code under section 3.2; and

+

+     iv) requires any subsequent distribution of the Program by any

+     party to be under a license that satisfies the requirements

+     of this section 3.

+

+3.2 When the Program is Distributed as Source Code:

+

+  a) it must be made available under this Agreement, or if the

+  Program (i) is combined with other material in a separate file or

+  files made available under a Secondary License, and (ii) the initial

+  Contributor attached to the Source Code the notice described in

+  Exhibit A of this Agreement, then the Program may be made available

+  under the terms of such Secondary Licenses, and

+

+  b) a copy of this Agreement must be included with each copy of

+  the Program.

+

+3.3 Contributors may not remove or alter any copyright, patent,

+trademark, attribution notices, disclaimers of warranty, or limitations

+of liability ("notices") contained within the Program from any copy of

+the Program which they Distribute, provided that Contributors may add

+their own appropriate notices.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities

+with respect to end users, business partners and the like. While this

+license is intended to facilitate the commercial use of the Program,

+the Contributor who includes the Program in a commercial product

+offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes

+the Program in a commercial product offering, such Contributor

+("Commercial Contributor") hereby agrees to defend and indemnify every

+other Contributor ("Indemnified Contributor") against any losses,

+damages and costs (collectively "Losses") arising from claims, lawsuits

+and other legal actions brought by a third party against the Indemnified

+Contributor to the extent caused by the acts or omissions of such

+Commercial Contributor in connection with its distribution of the Program

+in a commercial product offering. The obligations in this section do not

+apply to any claims or Losses relating to any actual or alleged

+intellectual property infringement. In order to qualify, an Indemnified

+Contributor must: a) promptly notify the Commercial Contributor in

+writing of such claim, and b) allow the Commercial Contributor to control,

+and cooperate with the Commercial Contributor in, the defense and any

+related settlement negotiations. The Indemnified Contributor may

+participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial

+product offering, Product X. That Contributor is then a Commercial

+Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance

+claims and warranties are such Commercial Contributor's responsibility

+alone. Under this section, the Commercial Contributor would have to

+defend claims against the other Contributors related to those performance

+claims and warranties, and if a court requires any other Contributor to

+pay any damages as a result, the Commercial Contributor must pay

+those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"

+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR

+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF

+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR

+PURPOSE. Each Recipient is solely responsible for determining the

+appropriateness of using and distributing the Program and assumes all

+risks associated with its exercise of rights under this Agreement,

+including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs

+or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS

+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST

+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE

+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE

+POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under

+applicable law, it shall not affect the validity or enforceability of

+the remainder of the terms of this Agreement, and without further

+action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity

+(including a cross-claim or counterclaim in a lawsuit) alleging that the

+Program itself (excluding combinations of the Program with other software

+or hardware) infringes such Recipient's patent(s), then such Recipient's

+rights granted under Section 2(b) shall terminate as of the date such

+litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it

+fails to comply with any of the material terms or conditions of this

+Agreement and does not cure such failure in a reasonable period of

+time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use

+and distribution of the Program as soon as reasonably practicable.

+However, Recipient's obligations under this Agreement and any licenses

+granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement,

+but in order to avoid inconsistency the Agreement is copyrighted and

+may only be modified in the following manner. The Agreement Steward

+reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement

+Steward has the right to modify this Agreement. The Eclipse Foundation

+is the initial Agreement Steward. The Eclipse Foundation may assign the

+responsibility to serve as the Agreement Steward to a suitable separate

+entity. Each new version of the Agreement will be given a distinguishing

+version number. The Program (including Contributions) may always be

+Distributed subject to the version of the Agreement under which it was

+received. In addition, after a new version of the Agreement is published,

+Contributor may elect to Distribute the Program (including its

+Contributions) under the new version.

+

+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient

+receives no rights or licenses to the intellectual property of any

+Contributor under this Agreement, whether expressly, by implication,

+estoppel or otherwise. All rights in the Program not expressly granted

+under this Agreement are reserved. Nothing in this Agreement is intended

+to be enforceable by any entity that is not a Contributor or Recipient.

+No third-party beneficiary rights are created under this Agreement.

+

+Exhibit A - Form of Secondary Licenses Notice

+

+"This Source Code may also be made available under the following 

+Secondary Licenses when the conditions for such availability set forth 

+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),

+version(s), and exceptions or additional permissions here}."

+

+  Simply including a copy of this Agreement, including this Exhibit A

+  is not sufficient to license the Source Code under Secondary Licenses.

+

+  If it is not possible or desirable to put the notice in a particular

+  file, then You may include the notice in a location (such as a LICENSE

+  file in a relevant directory) where a recipient would be likely to

+  look for such a notice.

+

+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/org.eclipse.opencert.epf2OpenCert/META-INF/MANIFEST.MF b/org.eclipse.opencert.epf2OpenCert/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..76d8944
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: Transformation

+Bundle-SymbolicName: org.eclipse.opencert.epf2OpenCert;singleton:=true

+Bundle-Version: 1.0.0.qualifier

+Bundle-Activator: org.eclipse.opencert.epf2OpenCert.transformation.Activator

+Require-Bundle: org.eclipse.ui,

+ org.eclipse.core.runtime,

+ org.eclipse.core.resources,

+ org.eclipse.epsilon.eol.engine;bundle-version="1.4.0",

+ org.eclipse.epsilon.etl.engine;bundle-version="1.4.0",

+ org.eclipse.epsilon.emc.emf;bundle-version="1.4.0",

+ org.eclipse.epf.uma;bundle-version="1.5.0",

+ org.eclipse.gmf.runtime.emf.core,

+ org.eclipse.opencert.sam.arg.diagram;bundle-version="1.0.0",

+ org.eclipse.gmf.runtime.emf.commands.core,

+ org.eclipse.gmf.runtime.diagram.core,

+ org.eclipse.emf.cdo.dawn.util,

+ org.eclipse.emf.cdo.dawn.ui,

+ org.eclipse.gmf.runtime.diagram.ui,

+ org.eclipse.emf.cdo.dawn,

+ org.eclipse.emf.cdo.dawn.gmf;bundle-version="2.1.300",

+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="1.7.0",

+ org.eclipse.epf.library;bundle-version="1.5.0"

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Bundle-ActivationPolicy: lazy

+Import-Package: org.eclipse.emf.cdo.dawn.preferences

+

diff --git a/org.eclipse.opencert.epf2OpenCert/build.properties b/org.eclipse.opencert.epf2OpenCert/build.properties
new file mode 100644
index 0000000..eb04107
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .

+jre.compilation.profile = JavaSE-1.7

diff --git a/org.eclipse.opencert.epf2OpenCert/epsilon/epf2OpenCert.etl b/org.eclipse.opencert.epf2OpenCert/epsilon/epf2OpenCert.etl
new file mode 100644
index 0000000..3147994
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/epsilon/epf2OpenCert.etl
@@ -0,0 +1,417 @@
+// EPF -> LIB;CONF

+// OpenCert -> ART;PRO;AA

+

+

+pre {

+  'Running ETL'.println();

+

+  var processComponent : LIB!ProcessComponent;

+  processComponent =  LIB!ProcessComponent.allInstances().first;

+

+	var name = "ProcessComponent: "+processComponent.name;

+	name.println();

+}

+

+//PC to PM, AM

+	rule ProcessComponent2ProcessModel

+	transform pc : LIB!ProcessComponent

+	to process : PRO!ProcessModel,artm:ART!ArtefactModel{ 

+	

+	guard : pc.process.isTypeOf(LIB!DeliveryProcess) 

+	

+		process.name="ProcessComponent: "+pc.name;

+		process.id="pc"+pc.id;

+		process.description="ProcessComponent: "+pc.briefDescription;

+

+		artm.id="pc"+pc.id;

+		artm.name="ProcessComponent: "+pc.name;

+		artm.description="ProcessComponent"+pc.briefDescription;

+		

+		var strar = "ArtefactModel: " + artm.name;

+			//strar.println();

+		var strp = "ProcessComponent: " + process.name;

+			//strp.println();

+	

+		

+		

+		   		for (cap in LIB!CapabilityPattern.allInstances()){

+		   		

+					process.ownedActivity.add(cap.equivalent());

+					

+			

+		} 

+	}

+					

+	

+	rule CapabilityPattern2Activity

+	transform cap : LIB!CapabilityPattern

+	to act:PRO!Activity{

+	

+	

+		act.id="cap"+cap.id;

+		act.name="CapabilityPattern: " +cap.name;

+		act.description=cap.briefDescription;

+		

+		var strcap = "CapabilityPattern: " + cap.name;

+			//strcap.println();

+		

+		 

+	    if(cap.breakdownElements.selectOne(ite|ite.isTypeOf(LIB!Iteration))<>null){

+	  				   

+		for (ite in cap.breakdownElements.selectOne(ite|ite.isTypeOf(LIB!Iteration))){

+		

+		

+			var strite = "Iteration: " + ite.name;

+				//strite.println();

+		

+			var actt = new PRO!Activity;

+				actt.id="ite"+ite.id;

+				actt.name="Iteration: "+ite.name;

+				actt.description="Iteration: "+ite.briefDescription;

+			act.subActivity.add(actt);

+		

+		if(ite.getMilestones(ite.breakdownElements) <>null){

+					

+		for(mil in ite.getMilestones(ite.breakdownElements)){

+		

+			var strmil = "Milestone: " + mil.name;

+				//strmil.println();

+		

+			var actmil = new PRO!Activity;

+				actmil.id="mil"+ite.id;

+				actmil.name="Milestone: "+mil.name;

+				actmil.description="Milestone"+mil.briefDescription;			

+			actt.subActivity.add(actmil);

+			

+				}

+			}

+						

+		if(ite.getTeamProfile(ite.breakdownElements) <>null){	

+			

+		for(tp in ite.getTeamProfile(ite.breakdownElements)){

+		

+			var strmil = "TeamProfile: " + tp.name;

+				//strmil.println();

+		

+			var orgtp = new PRO!Organization;

+				orgtp.id="tp"+tp.id;

+				orgtp.name="TeamProfile: "+tp.name;

+				orgtp.description="TeamProfile"+tp.briefDescription;

+			process.ownedParticipant.add(orgtp); 

+

+					}

+				}		

+			}

+		}

+				

+		

+		if(cap.breakdownElements.select(ph|ph.isTypeOf(LIB!Phase))<>null){

+		

+		for (ph in cap.breakdownElements.select(ph|ph.isTypeOf(LIB!Phase))){

+		

+		

+			var strph = "Phase: " + ph.name;

+				//strph.println();

+			var act1 = new PRO!Activity;

+				act1.id="Ph"+ph.id;

+				act1.name="Phase: "+ph.name;

+				act1.description="Phase"+ph.briefDescription;

+			act.subActivity.add(act1); 

+		

+		

+		

+		if(ph.getActivities(ph.breakdownElements)<>null){

+		for(act in ph.getActivities(ph.breakdownElements)){ 

+		

+			var strph = "Activity: " + act.name;

+				//strph.println();

+		

+			var act2 = new PRO!Activity;

+				act2.id="Ac"+act.id; 

+				act2.name="Activity: "+ act.name; 

+				act2.description="Activity: "+ act.briefDescription;

+			act1.subActivity.add(act2); 

+

+	  if(act.getTaskDescriptors(act.breakdownElements) <>null){

+	  

+	  	var stra1 = "Task name: " + act.name;

+			//stra1.println();

+	    

+	   for (td in act.getTaskDescriptors(act.breakdownElements)){

+			

+			var stratd = "TaskDescriptor: " + td.name;

+				//stratd.println();

+			var actd = new PRO!Activity;

+				actd.id="Td"+td.id;

+				actd.name="TaskDescriptor: "+td.name;

+				actd.description="TaskDescriptor"+td.briefDescription;

+			act2.subActivity.add(actd); 

+  		

+  				/*Role Descriptors -> attached to Task Descriptor*/

+  		if(td.getTaskParticipants() <> null){

+  				

+			var strrrd1 = " td.name: " + td.name;

+				//strrrd1.println();

+

+		for(rd in td.getTaskParticipants()){

+					

+			var strrd = "Role Descriptor: " + rd.name;

+				//strrd.println(); 

+			var pr = new PRO!Person;

+  	    		pr.id="Rd "+rd.id;

+  	    		pr.name="RoleDescriptor: "+rd.name;

+				pr.description="RoleDescriptor: "+rd.briefDescription;	

+			process.ownedParticipant.add(pr); 

+		

+		// WorkProduct Descriptors -> attached to Task Descriptor 

+	

+		if(td.getWorkProducts() <>null){

+	

+		for(wp in td.getWorkProducts()){

+			

+			var strr2 = "WorkProduct Descriptor: " + wp.name;

+				//strr2.println(); 

+	

+			var artd = new ART!ArtefactDefinition;

+				//var art = new ART!Artefact;

+				artd.id="Wp"+wp.id;

+				artd.name="WorkProductDescriptor: "+wp.name;

+				artd.description="WorkProductDescriptor: "+wp.briefDescription;

+			artm.artefact.add(artd);

+			 	

+			var art = new ART!Artefact;

+				art.id="Wp"+wp.id;

+				art.name="WorkProductDescriptor: "+wp.name;

+				art.description="WorkProductDescriptor: "+wp.briefDescription;

+			//artm.artefact.add(art);

+				

+

+		} 

+	} 

+				

+		if(td.Task<>null){

+		

+			var task = REQ!Task.allInstances.selectOne(task|task.name=td.name);				

+			var strrtask = "Task: " + task.name;

+				//strrtask.println();			

+			

+	//Guideline -> attached to Tasks

+

+		if(task.guidelines <> null){

+		for(gu in task.guidelines){

+				

+			var strrgu = "Guideline: " + gu.name;

+				//strrgu.println();

+

+			var tech = new PRO!Technique; 

+				tech.id="gu"+gu.id;

+				tech.name="Guideline: "+gu.name;

+				tech.description="Guideline: "+gu.briefDescription;

+		 	process.ownedTechnique.add(tech);

+		 		}

+		 	}

+				

+	// ToolMentor -> attached to Task  

+				 

+		if(task.toolMentors <> null){	

+							

+		for(tm in task.toolMentors){

+			

+			var strrtm = "toolMentor: " + tm.name;

+				//strrtm.println();

+			var tool = new PRO!Tool; 	

+				tool.id="gu"+tm.id;

+				tool.name="ToolMentor: "+tm.name;

+				tool.description=" ToolMentor: "+tm.briefDescription;	

+			process.ownedParticipant.add(tool);

+				}

+			}

+		}		    

+		 

+	  				  

+						

+

+								}	

+							}

+	  					}

+					}

+				}

+			}

+		}

+	}

+

+

+

+

+//Getting practices 

+		if(REQ!Practice.allInstances()<>null){//.selectOne(pra|pra.isTypeOf(LIB!Practice))<>null){

+	 	for (pra in REQ!Practice.allInstances()){//.selectOne(pra|pra.isTypeOf(LIB!Practice))){

+ 

+	    	var strrpra = "Practices: " +pra.name;

+	  			//strrpra.println(); 

+	  	    var techp = new PRO!Technique;

+	  			techp.id="pra"+pra.id; 

+	  			techp.name="Practice: "+pra.name;

+				techp.description="Practice: "+pra.briefDescription;

+		    process.ownedTechnique.add(techp);

+	/*	for(sp in pra.subPractices){

+

+			var strrpra = "Sub Practices: " +sp.name;

+	  			//strrpra.println(); 

+	  	    var techsp = new PRO!Technique;

+	  			techsp.id="pra"+sp.id; 

+	  			techsp.name="Sub-Practice: "+sp.name;

+				techsp.description="Practice: "+sp.briefDescription;

+		    process.ownedTechnique.add(techsp);

+					

+					} */

+		    

+		    	}

+		    }

+			if(REQ!RoleSet.allInstances.selectOne(roleset|roleset.isTypeOf(LIB!RoleSet))<>null){	    

+		 for (roleset in REQ!RoleSet.allInstances.selectOne(roleset|roleset.isTypeOf(LIB!RoleSet))){

+				  

+			var strr = "RoleSet: " +roleset.name;

+	  			//strr.println();	   

+	  		var org = new PRO!Organization; 

+				org.name="RoleSet: "+roleset.name;

+				org.id="rs"+roleset.id;

+				org.description="RoleSet: "+roleset.briefDescription;

+			process.ownedParticipant.add(org);

+	  				}

+	  			}	  

+

+

+

+

+

+}//Rule End

+

+

+

+operation Any getActivities(source : Set(LIB!BreakdownElement)):Set(LIB!Activity){

+	return source.select(act|act.isTypeOf(LIB!Activity));

+	//act.id.println();

+}

+

+operation Any getTaskDescriptors(source : Set(LIB!BreakdownElement)):Set(LIB!TaskDescriptor){

+	return source.select(td|td.isTypeOf(LIB!TaskDescriptor));

+	//td.id.println();

+}

+

+operation LIB!TaskDescriptor getTaskParticipants():Set(LIB!RoleDescriptor){

+	var res=new Set(LIB!RoleDescriptor);

+	  		

+	// performedPrimarilyBy; additionallyPerformedBy; assistedBy

+	for(p in self.performedPrimarilyBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=p.id));

+	}

+	for(a in self.additionallyPerformedBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=a.id));

+		//var strr3 = "a = " + a;

+		//strr3.println();

+	}

+	for(asi in self.assistedBy){

+		res.add(LIB!RoleDescriptor.allInstances.selectOne(role|role.id=asi.id));

+		//var strr4 = "asi = " + asi;

+		//strr4.println();

+	}

+	return res;

+}

+

+operation LIB!RoleDescriptor getSkills(name:String):Sequence{

+	var rolesDescriptions : Sequence = ROL!RoleDescription.allInstances();				

+			

+}	

+

+operation LIB!TaskDescriptor getGuidelines():Set(LIB!Guideline){

+	var res=new Set(LIB!Guideline);

+			for(gu in self.guideline){

+			res.add(LIB!Guideline.allInstances.selectOne(guideline|guideline.id=gu));

+					//var strr6 = "guid = " + gu;

+					//strr6.println();

+	}

+	return res;

+}

+

+operation LIB!TaskDescriptor getWorkProducts():Set(LIB!WorkProductDescriptor){

+	var res=new Set(LIB!WorkProductDescriptor);

+	  		

+	// externalInput; optionalInput; mandatoryInput; output

+	for(ei in self.externalInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=ei));

+		//var strr6 = "ei = " + ei;

+		//strr6.println();

+	}

+	for(oi in self.optionalInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=oi));

+		//var strr3 = "oi = " + oi;

+		//strr3.println();

+	}

+	for(mi in self.mandatoryInput){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=mi));

+		//var strr4 = "mi = " + mi;

+		//strr4.println();

+	}

+	

+	for(o in self.output){

+		res.add(LIB!WorkProductDescriptor.allInstances.selectOne(workProduct|workProduct.id=o.id));

+		//var strr5 = "o = " + o;

+		//strr5.println();

+	}

+	

+	return res;

+}

+

+operation LIB!Task gettoolMentors():Set(LIB!ToolMentor){

+	var res=new Set(LIB!ToolMentor);

+			for(tm in self.toolMentor){

+			res.add(LIB!ToolMentor.allInstances.selectOne(toolMentor|toolMentor.id=tm));

+				//var strt6 = "TM = " + tm;

+				//strt6.println();

+			}

+

+	return res;

+	//res.printlin();

+}

+

+operation LIB!Task gettoolMentors():Set(LIB!ToolMentor){

+	var res=new Set(LIB!ToolMentor);

+			for(tm in self.toolMentor){

+			res.add(LIB!ToolMentor.allInstances.selectOne(toolMentor|toolMentor.id=tm));

+				

+			}

+

+	return res;

+	//res.printlin();

+}

+

+operation LIB!Task getPractices():Set(REQ!Practice){

+	var res=new Set(REQ!Practice);

+			for(sp in self.subPractices){

+			res.add(REQ!Practice.allInstances.selectOne(subPractices|subPractices.id=sp));

+				//var strt6 = "Practice " + sp;

+				//strt6.println();

+			}

+

+	return res;

+	//res.printlin();

+}

+

+operation Any getMilestones(source : Set(LIB!BreakdownElement)):Set(LIB!Milestone){

+	return source.select(mil|mil.isTypeOf(LIB!Milestone));

+	//mil.id.println();

+}

+

+operation Any getTeamProfile(source : Set(LIB!BreakdownElement)):Set(LIB!TeamProfile){

+	return source.select(tp|tp.isTypeOf(LIB!TeamProfile));

+	//tp.id.println();

+}

+

+

+post{

+"End of transformation".println();

+}

+

+

+

diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_assetsPackage_AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_baselineConfig_BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/ctool16/CreateAssuranceProject_permissionConf_PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssetsPackage.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssetsPackage.gif
new file mode 100644
index 0000000..b21501f
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssetsPackage.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssuranceProject.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssuranceProject.gif
new file mode 100644
index 0000000..c4b1624
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/AssuranceProject.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/BaselineConfig.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/BaselineConfig.gif
new file mode 100644
index 0000000..2d12d60
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/BaselineConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/PermissionConfig.gif b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/PermissionConfig.gif
new file mode 100644
index 0000000..e82d660
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/icons/full/obj16/PermissionConfig.gif
Binary files differ
diff --git a/org.eclipse.opencert.epf2OpenCert/plugin.properties b/org.eclipse.opencert.epf2OpenCert/plugin.properties
new file mode 100644
index 0000000..52274c3
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/plugin.properties
@@ -0,0 +1,40 @@
+#

+

+pluginName = Assuranceproject Edit Support

+providerName = Tecnalia

+

+_UI_CreateChild_text = {0}

+_UI_CreateChild_text2 = {1} {0}

+_UI_CreateChild_text3 = {1}

+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature

+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.

+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.

+

+_UI_PropertyDescriptor_description = The {0} of the {1}

+

+_UI_AssuranceProject_type = Assurance Project

+_UI_PermissionConfig_type = Permission Config

+_UI_AssetsPackage_type = Assets Package

+_UI_BaselineConfig_type = Baseline Config

+_UI_Unknown_type = Object

+

+_UI_Unknown_datatype= Value

+

+_UI_AssuranceProject_createdBy_feature = Created By

+_UI_AssuranceProject_responsible_feature = Responsible

+_UI_AssuranceProject_date_feature = Date

+_UI_AssuranceProject_version_feature = Version

+_UI_AssuranceProject_assetsPackage_feature = Assets Package

+_UI_AssuranceProject_permissionConf_feature = Permission Conf

+_UI_AssuranceProject_baselineConfig_feature = Baseline Config

+_UI_AssuranceProject_subProject_feature = Sub Project

+_UI_PermissionConfig_isActive_feature = Is Active

+_UI_AssetsPackage_isActive_feature = Is Active

+_UI_AssetsPackage_artefactsModel_feature = Artefacts Model

+_UI_AssetsPackage_argumentationModel_feature = Argumentation Model

+_UI_AssetsPackage_processModel_feature = Process Model

+_UI_BaselineConfig_complianceMapGroup_feature = Compliance Map Group

+_UI_BaselineConfig_isActive_feature = Is Active

+_UI_BaselineConfig_refFramework_feature = Ref Framework

+_UI_Unknown_feature = Unspecified

+

diff --git a/org.eclipse.opencert.epf2OpenCert/plugin.xml b/org.eclipse.opencert.epf2OpenCert/plugin.xml
new file mode 100644
index 0000000..7963d64
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/plugin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+

+   <extension

+         point="org.eclipse.ui.popupMenus">

+      <objectContribution

+            objectClass="org.eclipse.epf.uma.ProcessComponent"

+            id="transformation.contribution1">

+         <menu

+               label="Transformation"

+               path="additions"

+               id="transformation.menu1">

+            <separator

+                  name="group1">

+            </separator>

+         </menu>

+         <action

+               label="Generate Process and Evidence Models (OpenCert)"

+               class="org.eclipse.opencert.epf2OpenCert.transformation.popup.action.ProcEvidTransformationHandler"

+               menubarPath="transformation.menu1/group1"

+               enablesFor="1"

+               id="transformation.newAction2">

+         </action>

+      </objectContribution>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/Activator.java b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/Activator.java
new file mode 100644
index 0000000..2329aa6
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/Activator.java
@@ -0,0 +1,77 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram, Samina Kanwal and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf2OpenCert.transformation;

+

+import org.eclipse.jface.resource.ImageDescriptor;

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "transformation"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+	/**

+	 * Returns an image descriptor for the image file at the given

+	 * plug-in relative path

+	 *

+	 * @param path the path

+	 * @return the image descriptor

+	 */

+	public static ImageDescriptor getImageDescriptor(String path) {

+		return imageDescriptorFromPlugin(PLUGIN_ID, path);

+	}

+}

diff --git a/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidGUI.java b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidGUI.java
new file mode 100644
index 0000000..a34c326
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidGUI.java
@@ -0,0 +1,141 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram, Samina Kanwal and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf2OpenCert.transformation.popup.action;

+

+import java.util.HashMap;

+

+import org.eclipse.emf.cdo.dawn.ui.composites.CDOResourceNodeSelectionWidget;

+import org.eclipse.emf.cdo.eresource.CDOResourceFolder;

+import org.eclipse.emf.cdo.eresource.CDOResourceNode;

+import org.eclipse.emf.cdo.view.CDOView;

+import org.eclipse.jface.dialogs.Dialog;

+import org.eclipse.jface.dialogs.IDialogConstants;

+import org.eclipse.jface.dialogs.MessageDialog;

+import org.eclipse.jface.viewers.ISelectionChangedListener;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.SelectionChangedEvent;

+import org.eclipse.jface.window.IShellProvider;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Button;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Shell;

+

+public class ProcEvidGUI extends Dialog{

+	

+	CDOResourceFolder assuranceprojectFolder;

+	CDOResourceFolder procFolder;

+	CDOResourceFolder eviFolder;

+	//CDOResourceFolder argFolder;

+	

+	HashMap<Object, Object> options = new HashMap<Object, Object>();

+

+	//private Label argLabel;

+	private Label procLabel;

+	//private Label eviLabel;

+	private String resourceName;

+	private CDOResourceNodeSelectionWidget chooser;

+	private Shell shell;

+	

+	public ProcEvidGUI(Shell parentShell, CDOView view) {

+		super(parentShell);

+		this.shell=parentShell;

+	}

+	public ProcEvidGUI(IShellProvider parentShell) {

+		super(parentShell);

+	}

+	

+	@Override

+	protected void createButtonsForButtonBar(Composite parent) {

+	    super.createButtonsForButtonBar(parent);

+

+	    Button ok = getButton(IDialogConstants.OK_ID);

+	    setButtonLayoutData(ok);

+

+	    chooser.addSelectionChangedListener(new ISelectionChangedListener(){

+

+			@Override

+			public void selectionChanged(SelectionChangedEvent event) {

+

+				if(event.getSelection() instanceof IStructuredSelection){

+

+					IStructuredSelection selection = (IStructuredSelection) event.getSelection();

+					Object element = selection.getFirstElement();

+					if(element instanceof CDOResourceNode){

+						resourceName = ((CDOResourceNode)element).getName();

+					}

+				}

+			}

+			

+		});

+	    

+	    Button cancel = getButton(IDialogConstants.CANCEL_ID);

+	    

+	    setButtonLayoutData(cancel);

+	 }

+	

+	@Override

+	protected Control createDialogArea(final Composite parent) {

+

+		Composite contents = (Composite) super.createDialogArea(parent);

+		

+		GridData contentsGridData2 = (GridData) contents.getLayoutData();

+		contentsGridData2.horizontalAlignment = SWT.FILL;

+		contentsGridData2.verticalAlignment = SWT.FILL;

+		contentsGridData2.minimumHeight = 300;

+		contentsGridData2.minimumWidth = 300;

+		

+		procLabel = new Label(contents, SWT.NONE);

+		procLabel.setText("Please select your assurance project folder:");

+		GridData argLabelGridData = new GridData();		

+		argLabelGridData.horizontalAlignment = SWT.FILL;

+		argLabelGridData.verticalAlignment = SWT.FILL;

+		GridLayout layoutLabel = new GridLayout();

+		layoutLabel.marginHeight = 20;

+		layoutLabel.marginWidth = 0;

+		procLabel.setLayoutData(argLabelGridData);

+		

+		GridLayout layout = new GridLayout();

+		layout.marginHeight = 5;

+		layout.marginWidth = 0;

+			

+		chooser = new CDOResourceNodeSelectionWidget(contents,SWT.FILL);

+		chooser.setLayoutData(contentsGridData2);

+		chooser.setLayout(layout);

+		

+		contents.setData(chooser);

+		

+		return contents;

+	}

+

+	public String resourceName(){

+		return resourceName;

+	}

+	

+	@Override

+	protected void cancelPressed(){

+		MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 

+	}

+	@Override

+	protected void configureShell(Shell newShell) {

+		super.configureShell(newShell);

+		newShell.setText("Assurance project selection");

+	}

+}

diff --git a/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformation.java b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformation.java
new file mode 100644
index 0000000..6d738ad
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformation.java
@@ -0,0 +1,317 @@
+/*******************************************************************************

+ * Copyright (c) 2018, MDH 

+ *

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html

+ *

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ *   Contributors:

+ *   Faiz Ul Muram, Samina Kanwal and Muhammad Atif Javed

+ *   Initial API and implementation and/or initial documentation

+ *******************************************************************************/

+/**

+ */

+package org.eclipse.opencert.epf2OpenCert.transformation.popup.action;

+

+import java.io.File;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.IWorkspaceRoot;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.IProgressMonitor;

+import org.eclipse.core.runtime.NullProgressMonitor;

+import org.eclipse.epf.library.edit.LibraryEditPlugin;

+import org.eclipse.epf.uma.impl.ProcessComponentImpl;

+import org.eclipse.epsilon.emc.emf.EmfModel;

+import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;

+import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;

+import org.eclipse.epsilon.etl.EtlModule;

+

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.TreeSelection;

+import org.eclipse.ui.IWorkbenchPage;

+

+

+public class ProcEvidTransformation {

+

+	private IWorkbenchPage page;

+	private String name;

+

+	public ProcEvidTransformation(IWorkbenchPage page){

+		this.page=page;

+	}

+

+	public void execute(IProgressMonitor monitor){

+

+		EtlModule etlModule = new EtlModule();

+		

+		//Get the current delivery process

+		ISelection sel = page.getSelection();

+		TreeSelection tree = (TreeSelection) sel;

+		ProcessComponentImpl process = (ProcessComponentImpl) tree.getFirstElement();

+		

+		name = process.getName();

+		

+

+		String pluginPathWS = process.eContainer().eResource().getURI().toFileString();

+		File plugin = new File(pluginPathWS); //REQ

+		String directoryRootPlugin = plugin.getParent();

+		File deliveryProcess = new File(directoryRootPlugin+"/deliveryprocesses/"+ process.getName()+"/model.xmi"); //LIB

+		File deliveryProcess2 = new File(directoryRootPlugin+"/deliveryprocesses/"+ process.getName()+"/content.xmi"); //LIB2

+		File directoryRoles = new File(directoryRootPlugin+"/roles"); //ROL

+		File directoryTools = new File(directoryRootPlugin+"/tools"); //TOOL

+		

+		String[] listRoles = directoryRoles.list();

+		String[] listTools = directoryTools.list();

+		

+		

+		String configPath = null;

+

+		String spluginPath = LibraryEditPlugin.getPlugin().getBundle().getLocation();

+		if(spluginPath.contains("plugins")) // Yes, in jar mode.

+		{			

+			String pluginPath = spluginPath.substring(15, spluginPath.indexOf("plugins"));

+			configPath = pluginPath + "configuration";

+			

+			try {

+				String etlPath = configPath + "/" + "epsilon" +"/" + "epf2OpenCert.etl";

+				etlModule.parse(new File(etlPath));

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+			

+			monitor.worked(2);						

+		}

+

+		String modelPath = configPath + "/" + "model" +"/" + "uma.ecore";

+		

+		//Create the source models

+		EmfModel libModel = createEMFSourceModel("LIB", modelPath, deliveryProcess, true, false);

+		EmfModel libModel2 = createEMFSourceModel("LIB2", modelPath, deliveryProcess2, true, false);

+		

+		EmfModel reqModel = createEMFSourceModel("REQ", modelPath, plugin, true, false);

+		

+		

+		List<EmfModel> listModelsRoles = new ArrayList<EmfModel>();

+		for (int i=0;i<listRoles.length;i++){

+			File role = new File(directoryRoles+"/"+listRoles[i]);

+			EmfModel roleModel = createEMFSourceModel(listRoles[i], modelPath, role, true, false);

+			roleModel.getAliases().add("ROL");

+			listModelsRoles.add(roleModel);	

+		}

+		List<EmfModel> listModelsTools = new ArrayList<EmfModel>();

+		for (int i=0;i<listTools.length;i++){

+			File tool = new File(directoryTools+"/"+listTools[i]);

+			EmfModel toolModel = createEMFSourceModel(listTools[i], modelPath, tool, true, false);

+			toolModel.getAliases().add("TOOL");

+			listModelsRoles.add(toolModel);	

+		}

+		

+		//Create the Process project into the workspace

+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

+		IProject project = root.getProject("Process");

+		String projectLocation = root.getLocation().toString()+"/Process";

+		if(project.exists()){

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}else{

+			try {

+				project.create(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+			try {

+				project.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}

+		

+		//Create the Evidence project into the workspace

+		IWorkspaceRoot root1 = ResourcesPlugin.getWorkspace().getRoot();

+		IProject project1 = root1.getProject("Evidence");

+		String projectLocation1 = root1.getLocation().toString()+"/Evidence";

+		if(project1.exists()){

+			try {

+				project1.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}else{

+			try {

+				project1.create(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+			try {

+				project1.open(new NullProgressMonitor());

+			} catch (CoreException e1) {

+				e1.printStackTrace();

+			}

+		}

+		

+		monitor.worked(3);

+		

+		

+		String modelPath_ = configPath + "/" + "model" +"/" + "process.ecore";

+		//Create the target model

+		EmfModel procModel = createEMFTargetModel("PRO","http://process/1.0", modelPath_, projectLocation+"/"+name+".process", false, true);

+		//Create the target model

+		String modelPath_1 = configPath + "/" + "model" +"/" + "evidence.ecore";

+		EmfModel eviModel = createEMFTargetModel("ART","http://evidence/1.0", modelPath_1, projectLocation1+"/"+name+".evidence", false, true);

+		//Load the models into ETL module

+		etlModule.getContext().getModelRepository().addModel(libModel);

+		etlModule.getContext().getModelRepository().addModel(libModel2);

+		etlModule.getContext().getModelRepository().addModel(procModel);

+		etlModule.getContext().getModelRepository().addModel(eviModel);

+		etlModule.getContext().getModelRepository().addModel(reqModel);

+		

+		for(EmfModel model: listModelsRoles){

+			etlModule.getContext().getModelRepository().addModel(model);

+		}

+		for(EmfModel model: listModelsTools){

+			etlModule.getContext().getModelRepository().addModel(model);

+		}

+		

+		//Running the transformation

+		try {

+			etlModule.execute();

+		} catch (EolRuntimeException e) {

+			e.printStackTrace();

+		}

+		

+		monitor.worked(4);

+		

+		libModel.dispose();

+		procModel.dispose();

+		eviModel.dispose();

+		reqModel.dispose();

+		libModel2.dispose();

+		

+		

+		for(EmfModel modelRole: listModelsRoles){

+			modelRole.dispose();

+		}

+		

+		for(EmfModel modelTool: listModelsTools){

+			modelTool.dispose();

+		}	

+		

+		etlModule.getContext().getModelRepository().dispose();	

+	}

+	

+	

+	protected EmfModel createEMFSourceModel(String name, String sourceMetaModelFilePath,

+			File sourceModelFilePath, Boolean sourceReadOnLoad, Boolean sourceStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+		

+		if(sourceMetaModelFilePath != null && !sourceMetaModelFilePath.isEmpty()) { 

+			if(sourceMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = sourceMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(sourceMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(sourceModelFilePath.getAbsolutePath());

+		emfModel.setReadOnLoad(sourceReadOnLoad);

+		emfModel.setStoredOnDisposal(sourceStoreOnDisposal);

+		

+		// MCP

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		// MCP

+		try {

+			emfModel.load();

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel;

+	}

+	

+	

+	protected EmfModel createEMFTargetModel(String name, String targetMetaModelURI, String targetMetaModelFilePath,

+			String targetModelFilePath, Boolean targetReadOnLoad, Boolean targetStoreOnDisposal){

+		

+		EmfModel emfModel= new EmfModel();

+		emfModel.setName(name);

+

+		if(targetMetaModelURI != null && !targetMetaModelURI.isEmpty()) 

+		{ 

+			if(targetMetaModelURI.contains(","))

+			{

+				String[] metaModelURIs = targetMetaModelURI.split(",");

+				List<String> uris =new ArrayList<String>(metaModelURIs.length);

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					uris.add(metaModelURIs[i].trim());

+				};

+				emfModel.setMetamodelUris(uris);

+			}

+			else

+			{

+				emfModel.setMetamodelUri(targetMetaModelURI);

+			}

+		}

+		

+		if(targetMetaModelFilePath != null && !targetMetaModelFilePath.isEmpty()) { 

+			if(targetMetaModelFilePath.contains(",")) {

+				String[] metaModelURIs = targetMetaModelFilePath.split(",");

+				List<String> files = new ArrayList<String>(metaModelURIs.length);

+				

+				for(int i=0;i<metaModelURIs.length; i++)

+				{

+					files.add(metaModelURIs[i].trim());

+				};

+				

+				for(int i=0; i<metaModelURIs.length; i++){

+					files.add(metaModelURIs[i].trim());

+				}

+				emfModel.setMetamodelFiles(files);

+			}else {

+				emfModel.setMetamodelFile(targetMetaModelFilePath);

+			}

+		}

+			

+		emfModel.setModelFile(targetModelFilePath);

+		emfModel.setReadOnLoad(targetReadOnLoad);

+		emfModel.setStoredOnDisposal(targetStoreOnDisposal);

+		

+		// MCP

+		emfModel.setCachingEnabled(true);

+		emfModel.setExpand(true);

+		

+		// MCP

+		try {

+			emfModel.load(); //254

+		} catch (EolModelLoadingException e) {

+			e.printStackTrace();

+		} 

+		return emfModel; 

+						

+	}

+}

diff --git a/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformationHandler.java b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformationHandler.java
new file mode 100644
index 0000000..1428481
--- /dev/null
+++ b/org.eclipse.opencert.epf2OpenCert/src/org/eclipse/opencert/epf2OpenCert/transformation/popup/action/ProcEvidTransformationHandler.java
@@ -0,0 +1,344 @@
+/*******************************************************************************
+ * Copyright (c) 2018, MDH 
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ *   Contributors:
+ *   Faiz Ul Muram, Samina Kanwal and Muhammad Atif Javed
+ *   Initial API and implementation and/or initial documentation
+ *******************************************************************************/
+/**
+ */
+package org.eclipse.opencert.epf2OpenCert.transformation.popup.action;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.opencert.epf2OpenCert.transformation.popup.action.ProcEvidGUI;
+import org.eclipse.opencert.epf2OpenCert.transformation.popup.action.ProcEvidTransformation;
+import org.eclipse.swt.widgets.Shell;
+//import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IPerspectiveDescriptor;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+//import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+//import org.eclipse.opencert.sam.arg.arg.diagram.edit.parts.CaseEditPart;
+//import org.eclipse.opencert.sam.arg.arg.diagram.edit.policies.CasePersistedCanonicalEditPolicy;
+//import org.eclipse.opencert.sam.arg.arg.diagram.part.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Collections;
+//import java.util.LinkedList;
+
+//import org.eclipse.core.commands.ExecutionException;
+//import org.eclipse.core.commands.operations.OperationHistoryFactory;
+//import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+//import org.eclipse.core.runtime.IAdaptable;
+//import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+//import org.eclipse.core.runtime.NullProgressMonitor;
+//import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.cdo.common.model.EMFUtil;
+import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.util.ConcurrentAccessException;
+import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.emf.common.util.URI;
+//import org.eclipse.emf.common.util.WrappedException;
+//import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.epf.uma.impl.ProcessComponentImpl;
+
+
+
+public class ProcEvidTransformationHandler implements IObjectActionDelegate {
+
+	private Shell shell;
+	private IWorkbenchPage page;
+	private IWorkbenchWindow window;
+	private IProgressMonitor monitor2;
+	private String name;
+	
+	
+	/**
+	 * Constructor for Action1.
+	 */
+	public ProcEvidTransformationHandler() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		shell = targetPart.getSite().getShell();
+		page = targetPart.getSite().getPage();
+		window = targetPart.getSite().getWorkbenchWindow();	
+	}
+
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		
+		
+		MessageDialog dg = new MessageDialog(
+	            shell,
+	            "Select directory",
+	            null,
+	            "Please select the target assurance project from the CDO Repository",
+	            MessageDialog.INFORMATION,
+	            new String[]{
+	                "Browse...", 
+	                IDialogConstants.CANCEL_LABEL},
+	            -1//SWT.CLOSE
+	            );
+	    
+if(dg.open()==0){
+			
+			//Connect to the CDO Repository
+			CDOConnectionUtil.instance.init(
+					PreferenceConstants.getRepositoryName(),
+					PreferenceConstants.getProtocol(),
+					PreferenceConstants.getServerName());
+			CDOSession session = CDOConnectionUtil.instance.getCurrentSession();
+			CDOView view = session.openView();
+			CDOTransaction transaction = session.openTransaction();
+			
+			ProcEvidGUI gui = new ProcEvidGUI(shell,view);
+			gui.create();
+			gui.open();
+			
+			String selection = gui.resourceName();
+	
+			if(selection != null){
+				
+				//Get the current delivery process
+				ISelection sel = page.getSelection();
+				TreeSelection tree = (TreeSelection) sel;
+				ProcessComponentImpl process = (ProcessComponentImpl) tree.getFirstElement();
+						
+				name = process.getName();
+			
+				//Invoke transformation
+				ProcEvidTransformation transformation = new ProcEvidTransformation(page);
+			
+				ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+				dialog.open();
+				IProgressMonitor monitor = dialog.getProgressMonitor();
+				monitor.beginTask("Generating the Process and Evidence models ... ", 15);
+				monitor.worked(1);
+				monitor.subTask("Performing the transformation...");
+	
+				transformation.execute(monitor);  
+				
+				monitor.worked(5);
+				monitor.subTask("Creating CDO Resources...");
+
+				
+				//Create the model CDO Resource
+				CDOResource procModel;
+				if (transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/PROCESSES/"+name+".process").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					procModel = transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process");
+				}else{
+					procModel = transaction.getOrCreateResource("/"+selection+"/PROCESSES/"+name+".process");
+				}
+				
+				String procModelFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Process/"+name+".process";
+				URI procXmiUri = URI.createFileURI(procModelFile);
+				URI procCDOUri = procModel.getURI();
+			
+				ResourceSet resourceSet = new ResourceSetImpl();
+				resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+			
+				Resource procXmiResource1 = resourceSet.createResource(procXmiUri);
+				File newFile = new File(procModelFile);
+				
+				monitor.worked(6);
+				monitor.subTask("Loading model to CDO Repository...");
+	
+				//Load the model contents into the created resource
+				try {
+					FileInputStream procFileInStream = new FileInputStream(newFile);
+					procXmiResource1.load(procFileInStream,Collections.EMPTY_MAP);
+					procXmiResource1.setURI(procXmiUri);	
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			
+				EMFUtil.safeResolveAll(resourceSet);
+			
+				CDOResource procCDOResource = transaction.getOrCreateResource(procCDOUri.path());
+				procCDOResource.getContents().addAll(procXmiResource1.getContents());
+	
+				EMFUtil.safeResolveAll(resourceSet);
+				
+				monitor.worked(7);
+			
+				try {
+					procCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				
+				monitor.worked(8);
+				monitor.subTask("Creating Evidence Model...");
+			
+				
+				monitor.worked(9);
+				monitor.subTask("Creating CDO Resources...");
+				
+			
+				
+				//Create the model CDO Resource
+				CDOResource eviModel;
+				if (transaction.getOrCreateResource("/"+selection+"/EVIDENCE/"+name+".evidence").isExisting()) {
+					try {
+						transaction.getResource("/"+selection+"/EVIDENCE/"+name+".evidence").delete(Collections.EMPTY_MAP);
+						transaction.commit();
+					} catch (IOException | CommitException e) {
+						e.printStackTrace();
+					}
+	
+					eviModel = transaction.getOrCreateResource("/"+selection+"/EVIDENCE/"+name+".evidence");
+				}else{
+					eviModel = transaction.getOrCreateResource("/"+selection+"/EVIDENCE/"+name+".evidence");
+				}
+				
+				String eviModelFile = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+"/Evidence/"+name+".evidence";
+				URI eviXmiUri = URI.createFileURI(eviModelFile);
+				URI eviCDOUri = eviModel.getURI();
+			
+				ResourceSet resourceSet1 = new ResourceSetImpl();
+				resourceSet1.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
+			
+				Resource eviXmiResource1 = resourceSet1.createResource(eviXmiUri);
+
+				try {
+					FileInputStream eviFileInStream = new FileInputStream(newFile);
+					eviXmiResource1.load(eviFileInStream,Collections.EMPTY_MAP);
+					eviXmiResource1.setURI(eviXmiUri);	
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			
+				EMFUtil.safeResolveAll(resourceSet1);
+			
+				CDOResource eviCDOResource = transaction.getOrCreateResource(eviCDOUri.path());
+				eviCDOResource.getContents().addAll(eviXmiResource1.getContents());
+	
+				EMFUtil.safeResolveAll(resourceSet1);
+				
+				//monitor2.worked(4);
+			
+				try {
+					eviCDOResource.save(Collections.EMPTY_MAP);
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+				
+				
+				
+				monitor.worked(13);
+				
+				//Commit the transaction
+				try {
+					transaction.commit();
+				} catch (ConcurrentAccessException e) {
+					e.printStackTrace();
+				} catch (CommitException e) {
+					e.printStackTrace();
+				}
+				
+				
+				monitor.worked(14);
+				monitor.done();
+				dialog.close();
+				
+				//if(transfDiagramOk == true){
+					try{
+						MessageDialog.openInformation(shell, "Transformation completed", 
+									"The CACM Process and Evidence Models are generated under:\n\n"
+									+"    - PROCESSES AND EVIDENCE folders of the project "+selection+" in the CDO Repository\n"
+									+"    -  project in the current workspace");
+					}catch(Exception e){
+						System.out.println("Hola");
+					}
+				}
+					
+				
+				ProgressMonitorDialog dialog2 = new ProgressMonitorDialog(shell);
+				dialog2.open();
+				monitor2 = dialog2.getProgressMonitor();
+				monitor2.beginTask("Opening Evidence Model... ", 6);
+				monitor2.worked(1);
+				
+				//Change the perspective
+				if (PlatformUI.getWorkbench() != null) {
+					IPerspectiveDescriptor descriptor = window.getWorkbench()
+					    .getPerspectiveRegistry().findPerspectiveWithId("org.eclipse.ui.resourcePerspective");
+		
+		    		PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+					    .getActivePage().setPerspective(descriptor);
+		        }
+				
+				monitor2.worked(2); 
+				
+			
+				
+				monitor2.worked(5);
+				monitor2.done();
+				dialog2.close();
+			
+			}else{
+				MessageDialog.openError(shell, "Selection error", "An assurance project must be selected in order to perform the transformation"); 
+			}
+
+
+
+	
+		}
+	
+	
+
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+
+	}
+
+
+}
+