AMASS Dashboard, first draft implementation
diff --git a/.gitignore b/.gitignore
index 64d2f13..3d7fd4b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,5 @@
 [Bb]in/

 sonar-project.properties

 .settings/

-*.gradle

+build/

 

diff --git a/org.eclipse.emf.cdo.dawn.ui/src/org/eclipse/emf/cdo/dawn/ui/views/DawnExplorer.java b/org.eclipse.emf.cdo.dawn.ui/src/org/eclipse/emf/cdo/dawn/ui/views/DawnExplorer.java
index f0bdc51..8e24594 100644
--- a/org.eclipse.emf.cdo.dawn.ui/src/org/eclipse/emf/cdo/dawn/ui/views/DawnExplorer.java
+++ b/org.eclipse.emf.cdo.dawn.ui/src/org/eclipse/emf/cdo/dawn/ui/views/DawnExplorer.java
@@ -1,464 +1,491 @@
-/*
- * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Martin Fluegge - initial API and implementation
- *     Angel López (Tecnalia) - Modified according Opencert needs
- */
-package org.eclipse.emf.cdo.dawn.ui.views;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.cdo.CDOObjectReference;
-import org.eclipse.emf.cdo.dawn.internal.ui.bundle.OM;
-import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
-import org.eclipse.emf.cdo.dawn.ui.DawnEditorInput;
-import org.eclipse.emf.cdo.dawn.ui.helper.EditorDescriptionHelper;
-import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
-import org.eclipse.emf.cdo.internal.ui.views.CDOSessionsView;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.ui.CDOEditorInput;
-import org.eclipse.emf.cdo.ui.CDOEditorUtil;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.view.CDOView;
-import org.eclipse.emf.common.ui.URIEditorInput;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.net4j.Net4jUtil;
-import org.eclipse.net4j.connector.ConnectorException;
-import org.eclipse.net4j.connector.IConnector;
-import org.eclipse.net4j.util.container.IContainer;
-import org.eclipse.net4j.util.container.IPluginContainer;
-import org.eclipse.net4j.util.om.trace.ContextTracer;
-import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
-import org.eclipse.net4j.util.ui.views.IElementFilter;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @author Martin Fluegge
- * Modified by Tecnalia
- */
-public class DawnExplorer extends CDOSessionsView
-{
-  private static final String OPENCERT_REPO = "cdo://opencert";
-
-private static final String EXTENSION_DIAGRAM = "_diagram";
-
-private static final String PLEASE_DELETE_MANUALLY_THE_DIAGRAMS = "";
-
-private static final String DELETE_MODEL = "DELETE Model";
-
-  private static final String DELETE_FOLDER = "DELETE Folder";
-
-private static final String PROBLEM_DELETING_THE_MODEL = "Problem deleting the model";
-
-private static final String PROBLEM_DELETING_THE_FOLDER = "Problem deleting the folder";
-
-private static final int DEFAULT_SLEEP_INTERVAL = 5000;
-
-  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, DawnExplorer.class);
-
-  public static final String ID = "org.eclipse.emf.cdo.dawn.ui.views.DawnExplorer";
-
-  private CDOView view;
-
-  private CDOResource selectedModel;
-  private CDOResourceFolder selectedFolder; 
-  
-  
-  private String messageAboutDiagrams="Please Delete Manually the diagrams:\n";
-  private	boolean hasDiagrams=false;
-  public CDOView getView()
-  {
-    return view;
-  }
-
-  /**
-   * The constructor.
-   */
-  public DawnExplorer()
-  {
-    boolean initialize = false;//initialize();
-
-    if (!initialize)
-    {
-      Thread thread = new Thread(new Runnable()
-      {
-        public void run()
-        {
-          while (!initialize())
-          {
-            try
-            {
-              Thread.sleep(DEFAULT_SLEEP_INTERVAL);
-            }
-            catch (InterruptedException ex)
-            {
-              ex.printStackTrace();
-            }
-          }
-        }
-      });
-      thread.start();
-    }
-  }
-
-  /**
-   * Initializes the view of the DawnExplorer
-   */
-  private boolean initialize()
-  {
-    try
-    {
-     CDOConnectionUtil.instance.init(PreferenceConstants.getRepositoryName(), PreferenceConstants.getProtocol(),
-          PreferenceConstants.getServerName());
-      CDOSession session = CDOConnectionUtil.instance.getCurrentSession();
-      view = CDOConnectionUtil.instance.openView(session);
-	
-    }
-    catch (ConnectorException ex)
-    {
-      return false;
-    }
-    return true;
-  }
-
-  @Override
-  public void dispose()
-  {
-    // actually no one else should use this view
-    if(view != null){
-    	view.close();
-    }
-  }
-
-  @Override
-  protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()
-  {
-    return new DawnItemProvider(getSite().getPage(), this, new IElementFilter()
-    {
-      public boolean filter(Object element)
-      {
-        return element instanceof CDOSession;
-      }
-    });
-  }
-
-  @Override
-  protected void hookDoubleClick()
-  {
-    getViewer().addDoubleClickListener(new IDoubleClickListener()
-    {
-      public void doubleClick(DoubleClickEvent event)
-      {
-        Object obj = ((IStructuredSelection)event.getSelection()).getFirstElement();
-        if (obj instanceof CDOResource)
-        {
-          CDOResource resource = (CDOResource)obj;
-
-          if (TRACER.isEnabled())
-          {
-            TRACER.format("Opening CDOResource {0} ", resource); //$NON-NLS-1$
-          }
-
-          String editorID = EditorDescriptionHelper.getEditorIdForDawnEditor(resource.getName());
-
-          if (editorID != null && !editorID.equals(""))
-          {
-            try
-            {
-              DawnEditorInput editorInput = new DawnEditorInput(resource.getURI());
-              
-              DawnExplorer.this.getSite().getPage().openEditor(editorInput, editorID);
-            }
-            catch (PartInitException e)
-            {
-              e.printStackTrace();
-            }
-          }
-          else
-          {
-            CDOTransaction transaction = view.getSession().openTransaction();
-            CDOEditorInput editorInput = CDOEditorUtil.createCDOEditorInput(transaction, ((CDOResource)obj).getPath(),
-                true);
-            try
-            {
-              DawnExplorer.this.getSite().getPage().openEditor(editorInput, CDOEditorUtil.getEditorID());
-            }
-            catch (PartInitException e)
-            {
-              e.printStackTrace();
-            }
-          }
-        }
-      }
-    });
-  }
-
-/*
-@Override
-protected void hookContextMenu() {
-	//super.hookContextMenu();
-	// TODO Auto-generated method stub
-	final TreeViewer viewer= getViewer();
-	MenuManager menuMgr = new MenuManager("#PopupMenu");
-	menuMgr.setRemoveAllWhenShown(true);
-	menuMgr.addMenuListener(new IMenuListener() {
-		public void menuAboutToShow(IMenuManager manager) {
-			if (viewer.getSelection() instanceof IStructuredSelection) {
-				IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();               
-
-                if (selection.getFirstElement() instanceof CDOResource) {                	
-                	selectedModel=(CDOResource)selection.getFirstElement();
-                	
-                		DawnExplorer.this.fillContextMenu(manager);
-                	
-                }
-                if (selection.getFirstElement() instanceof CDOResourceFolder) {                	
-                	selectedFolder=(CDOResourceFolder)selection.getFirstElement();
-                	//If it is a "standard" model                	
-                		DawnExplorer.this.fillContextMenuFolder(manager);                	
-                }
-                
-			}
-			
-		}
-	});
-	Menu menu = menuMgr.createContextMenu(super.getViewer().getControl());
-	super.getViewer().getControl().setMenu(menu);
-	getSite().registerContextMenu(menuMgr, super.getViewer());
-}
-   /*
-//Modified by Tecnalia
-private void fillContextMenu(IMenuManager manager) {
-	Action action1 = new Action() {
-		public void run() {	
-			MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Delete Model Confirmation ", null,  "Do you want to delete the selected model?\r\n\r\n" , MessageDialog.CONFIRM, new String[] { "Accept",
-      	    "Refuse"}, 0);
-			int response = dialog.open();
-	        
-	        if(response==0){			        	
-	        	deleteModel();	
-	        	//showMessage(DELETE_EXECUTED_SUCCESSFULY);
-	        }							
-		}		
-	};
-	
-	action1.setText(DELETE_MODEL);
-	action1.setToolTipText(DELETE_MODEL);
-	action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
-			getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));
-	manager.add(new Separator());
-	manager.add(action1);
-	
-	//drillDownAdapter.addNavigationActions(manager);
-	// Other plug-ins can contribute there actions here
-	manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-	//super.hookContextMenu();
-}
-
-//Modified by Tecnalia
-private void fillContextMenuFolder(IMenuManager manager) {
-	Action action1 = new Action() {
-		public void run() {			
-			try {	
-				MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Delete Folder Confirmation ", null,  "Do you want to delete the selected folder and all its contents?\r\n\r\n" , MessageDialog.CONFIRM, new String[] { "Accept",
-	      	    "Refuse"}, 0);
-				int response = dialog.open();
-		        
-		        if(response==0){			        			        						
-					CDOTransaction transaction = view.getSession().openTransaction();
-					CDOResourceNode folderToDelete= transaction.getResourceNode(selectedFolder.getPath());
-					selectedFolder=(CDOResourceFolder)folderToDelete;
-					deleteFolderContents(selectedFolder);
-
-					//folderToDelete.delete(null);
-					transaction.commit();
-					transaction.close();
-					//showMessage(DELETE_EXECUTED_SUCCESSFULY);
-					
-		        }
-				
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				
-				e.printStackTrace();
-				showMessage(PROBLEM_DELETING_THE_FOLDER);		
-			}
-				
-		}
-
-		private  void deleteFolderContents(CDOResourceFolder cdoResourceFolder) throws IOException {
-			
-			
-			EList<CDOResourceNode> listN = cdoResourceFolder.getNodes();						
-			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(true);
-			while ( listN.size() > 0) {
-				if (listN.get(0) instanceof CDOResourceFolder) {
-					deleteFolderContents((CDOResourceFolder) listN.get(0));					
-				} else if (listN.get(0) instanceof CDOResource) {					
-					selectedModel = (CDOResource)listN.get(0);
-					if (!deleteModel()){
-						//break the while in case of error deleting one model
-						return;
-					}
-				}
-			}
-			cdoResourceFolder.delete(null);			
-		}
-	};
-	
-	action1.setText(DELETE_FOLDER);
-	action1.setToolTipText(DELETE_FOLDER);
-	action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
-			getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));
-	manager.add(new Separator());
-	manager.add(action1);
-	
-	//drillDownAdapter.addNavigationActions(manager);
-	// Other plug-ins can contribute there actions here
-	manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-	//super.hookContextMenu();
-}
-
-
-/*private void checkSubFolderContents(CDOResourceFolder cdoResourceFolder) throws IOException {
-	EList<CDOResourceNode> listN = cdoResourceFolder.getNodes();
-		
-	for(int i=0; i<listN.size();i++){
-		if (listN.get(i) instanceof CDOResource) {
-			String modelName = ((CDOResource)listN.get(i)).getPath();
-			if(modelName.contains(EXTENSION_DIAGRAM)){
-				messageAboutDiagrams += "   " + modelName + "\n";
-				hasDiagrams=true;
-				//listN.move(0, i);
-			}					
-		}
-		else if (listN.get(0) instanceof CDOResourceFolder) {
-			checkSubFolderContents((CDOResourceFolder)listN.get(i));
-		}
-	}
-	
-}*/
-
-
-private boolean deleteModel() {
-	try {	
-		
-		//Close the editor of the model to delete if opened to avoid after Error messages	
-		IEditorReference[] edi = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
-		for (IEditorReference editor : edi) {
-			IEditorInput input = editor.getEditorInput();
-			if(input !=null){
-				//When editors are re-opened automatically are URIEditorInput
-				String path = "";
-				if (input instanceof DawnEditorInput || input instanceof URIEditorInput) {
-					if (input instanceof DawnEditorInput){
-						path =((DawnEditorInput) input).getURI().toString();
-					}
-					else{
-						path =((URIEditorInput) input).getURI().toString();
-					}
-					if(path.equals(OPENCERT_REPO + selectedModel.getPath())){
-						//System.out.println("CERRAR " + path);
-						//boolean cerrado = activePage.closeEditor(editor, false);	
-						//editor						
-						//IEditorPart editorClose= editor.getEditor(false);	
-						//editorClose.getEditorSite().getPage().closeEditor(editorClose, false);
-						IEditorReference[] editorReferencesClose= new IEditorReference[1];
-						editorReferencesClose[0]=editor;
-						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeEditors(editorReferencesClose,false);
-						//Closed, exit for					
-						break;
-					}						
-				}
-								
-			}
-		}
-		
-		
-		CDOTransaction transaction = view.getSession().openTransaction();
-		CDOResource modelToDelete= transaction.getResource(selectedModel.getPath());
-		
-		//If the model is a diagram, delete directly because won't be related to other models
-		if(!modelToDelete.getPath().contains(EXTENSION_DIAGRAM)){			
-			for (Iterator<EObject> iter=modelToDelete.getContents().iterator();iter.hasNext();) {					
-				EObject aEObject= iter.next();
-				List<CDOObjectReference> rc = transaction.queryXRefs(CDOUtil.getCDOObject(aEObject), new EReference[] {});
-				for(CDOObjectReference oneRef:rc){
-					EcoreUtil.remove(oneRef.getSourceObject(),oneRef.getSourceFeature(),oneRef.getTargetObject());
-				}
-				if(aEObject.eContents().size()!=0){
-					deleteSubContents(aEObject,transaction);
-				}						
-			}				
-			modelToDelete.save(null);
-		}				
-		modelToDelete.delete(null);
-		transaction.commit();
-		transaction.close();
-				
-		return true;
-	} catch (Exception e) {
-		// TODO Auto-generated catch block
-		
-		e.printStackTrace();
-		showMessage(PROBLEM_DELETING_THE_MODEL + " " + OPENCERT_REPO + selectedModel.getPath());
-		return false;
-	}
-}
-
-private void deleteSubContents(EObject aEObject,CDOTransaction transaction) {						
-	try {			
-		//for (Iterator<EObject> iter=aEObject.eContents().iterator();iter.hasNext();) {
-		while(aEObject.eContents().size()>0){
-			EObject bEObject=aEObject.eContents().get(0);
-			List<CDOObjectReference> rc = transaction.queryXRefs(CDOUtil.getCDOObject(bEObject), new EReference[] {});
-			//Remove the reference in the source objects to avoid inconsistencies
-			for(CDOObjectReference oneRef:rc){
-				EcoreUtil.remove(oneRef.getSourceObject(),oneRef.getSourceFeature(),oneRef.getTargetObject());
-			}					
-			if(bEObject.eContents().size()!=0){
-				deleteSubContents(bEObject,transaction);
-			}		
-			//iter.remove();
-			EcoreUtil.delete(bEObject);
-		}
-		
-	} catch (Exception e) {
-		// TODO Auto-generated catch block
-		e.printStackTrace();
-	}
-}
-}
+/*

+ * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.

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

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

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Martin Fluegge - initial API and implementation

+ *     Angel López (Tecnalia) - Modified according Opencert needs

+ */

+package org.eclipse.emf.cdo.dawn.ui.views;

+

+import java.io.IOException;

+import java.util.Iterator;

+import java.util.List;

+

+import org.eclipse.emf.cdo.CDOObjectReference;

+import org.eclipse.emf.cdo.dawn.internal.ui.bundle.OM;

+import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;

+import org.eclipse.emf.cdo.dawn.ui.DawnEditorInput;

+import org.eclipse.emf.cdo.dawn.ui.helper.EditorDescriptionHelper;

+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;

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

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

+import org.eclipse.emf.cdo.internal.ui.views.CDOSessionsView;

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.cdo.transaction.CDOTransaction;

+import org.eclipse.emf.cdo.ui.CDOEditorInput;

+import org.eclipse.emf.cdo.ui.CDOEditorUtil;

+import org.eclipse.emf.cdo.util.CDOUtil;

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

+import org.eclipse.emf.common.ui.URIEditorInput;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.jface.action.Action;

+import org.eclipse.jface.action.IMenuListener;

+import org.eclipse.jface.action.IMenuManager;

+import org.eclipse.jface.action.MenuManager;

+import org.eclipse.jface.action.Separator;

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

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

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

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

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

+import org.eclipse.net4j.Net4jUtil;

+import org.eclipse.net4j.connector.ConnectorException;

+import org.eclipse.net4j.connector.IConnector;

+import org.eclipse.net4j.util.container.IContainer;

+import org.eclipse.net4j.util.container.IPluginContainer;

+import org.eclipse.net4j.util.om.trace.ContextTracer;

+import org.eclipse.net4j.util.security.NotAuthenticatedException;

+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;

+import org.eclipse.net4j.util.ui.views.IElementFilter;

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

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

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

+import org.eclipse.ui.IEditorInput;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IEditorReference;

+import org.eclipse.ui.ISharedImages;

+import org.eclipse.ui.IWorkbenchActionConstants;

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.PlatformUI;

+

+/**

+ * @author Martin Fluegge

+ * Modified by Tecnalia

+ */

+public class DawnExplorer extends CDOSessionsView

+{

+  private static final String OPENCERT_REPO = "cdo://opencert";

+

+private static final String EXTENSION_DIAGRAM = "_diagram";

+

+private static final String PLEASE_DELETE_MANUALLY_THE_DIAGRAMS = "";

+

+private static final String DELETE_MODEL = "DELETE Model";

+

+  private static final String DELETE_FOLDER = "DELETE Folder";

+

+private static final String PROBLEM_DELETING_THE_MODEL = "Problem deleting the model";

+

+private static final String PROBLEM_DELETING_THE_FOLDER = "Problem deleting the folder";

+

+private static final int DEFAULT_SLEEP_INTERVAL = 500;

+

+

+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, DawnExplorer.class);

+

+  public static final String ID = "org.eclipse.emf.cdo.dawn.ui.views.DawnExplorer";

+

+  private CDOView view;

+

+  private CDOResource selectedModel;

+  private CDOResourceFolder selectedFolder; 

+  

+  

+  private String messageAboutDiagrams="Please Delete Manually the diagrams:\n";

+  private	boolean hasDiagrams=false;

+  

+  private CDOSession session;

+  public CDOView getView()

+  {

+    return view;

+  }

+

+  /**

+   * The constructor.

+   */

+  public DawnExplorer()

+  {

+	  

+	 /* CDOConnectionUtil.instance.init(PreferenceConstants.getRepositoryName(), PreferenceConstants.getProtocol(),

+	          PreferenceConstants.getServerName());

+	       session = CDOConnectionUtil.instance.getCurrentSession();*/

+	      //view = CDOConnectionUtil.instance.openView(session);

+	      

+	  

+	  

+      Thread thread = new Thread(new Runnable()

+      {

+        public void run()

+        {                            

+            try

+            {            	

+            	Thread.sleep(DEFAULT_SLEEP_INTERVAL);

+            	if (initialize()){

+            		

+            		/*Display.getDefault().asyncExec(new Runnable() {

+            		    public void run() {

+            		    	MessageDialog.openInformation(new Shell(),"OK","OK");

+            		    }

+            		});    */        		            		

+            	}            	            

+            }

+           /* catch (NotAuthenticatedException ex)

+            {

+            	Display.getDefault().asyncExec(new Runnable() {

+        		    public void run() {

+        		    	MessageDialog.openInformation(new Shell(),"Error 1",ex.getMessage() + "-" + ex.toString());

+        		    }

+        		});   

+                ex.printStackTrace();

+            }*/

+            catch (Exception ex)

+            {

+            	Display.getDefault().asyncExec(new Runnable() {

+        		    public void run() {

+        		    	MessageDialog.openInformation(new Shell(),"Error ", "Error connecting to the server. Please review the configuration of the server connection.");

+        		    }

+        		});  

+                ex.printStackTrace(); 

+            }         

+        }

+      });

+      thread.start();

+    }

+

+  /**

+   * Initializes the view of the DawnExplorer

+   */

+  private boolean initialize()

+  {

+    try

+    {

+     CDOConnectionUtil.instance.init(PreferenceConstants.getRepositoryName(), PreferenceConstants.getProtocol(),

+          PreferenceConstants.getServerName());

+      CDOSession session = CDOConnectionUtil.instance.openSession();

+      view = CDOConnectionUtil.instance.openView(session);

+	

+    }

+    catch (ConnectorException ex)

+    {

+      return false;

+    }

+    return true;

+  }

+

+  @Override

+  public void dispose()

+  {

+    // actually no one else should use this view

+    if(view != null){

+    	view.close();

+    }

+  }

+

+  @Override

+  protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()

+  {

+    return new DawnItemProvider(getSite().getPage(), this, new IElementFilter()

+    {

+      public boolean filter(Object element)

+      {

+        return element instanceof CDOSession;

+      }

+    });

+  }

+

+  @Override

+  protected void hookDoubleClick()

+  {

+    getViewer().addDoubleClickListener(new IDoubleClickListener()

+    {

+      public void doubleClick(DoubleClickEvent event)

+      {

+        Object obj = ((IStructuredSelection)event.getSelection()).getFirstElement();

+        if (obj instanceof CDOResource)

+        {

+          CDOResource resource = (CDOResource)obj;

+

+          if (TRACER.isEnabled())

+          {

+            TRACER.format("Opening CDOResource {0} ", resource); //$NON-NLS-1$

+          }

+

+          String editorID = EditorDescriptionHelper.getEditorIdForDawnEditor(resource.getName());

+

+          if (editorID != null && !editorID.equals(""))

+          {

+            try

+            {

+              DawnEditorInput editorInput = new DawnEditorInput(resource.getURI());

+              

+              DawnExplorer.this.getSite().getPage().openEditor(editorInput, editorID);

+            }

+            catch (PartInitException e)

+            {

+              e.printStackTrace();

+            }

+          }

+          else

+          {

+            CDOTransaction transaction = view.getSession().openTransaction();

+            CDOEditorInput editorInput = CDOEditorUtil.createCDOEditorInput(transaction, ((CDOResource)obj).getPath(),

+                true);

+            try

+            {

+              DawnExplorer.this.getSite().getPage().openEditor(editorInput, CDOEditorUtil.getEditorID());

+            }

+            catch (PartInitException e)

+            {

+              e.printStackTrace();

+            }

+          }

+        }

+      }

+    });

+  }

+

+/*

+@Override

+protected void hookContextMenu() {

+	//super.hookContextMenu();

+	// TODO Auto-generated method stub

+	final TreeViewer viewer= getViewer();

+	MenuManager menuMgr = new MenuManager("#PopupMenu");

+	menuMgr.setRemoveAllWhenShown(true);

+	menuMgr.addMenuListener(new IMenuListener() {

+		public void menuAboutToShow(IMenuManager manager) {

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

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

+

+                if (selection.getFirstElement() instanceof CDOResource) {                	

+                	selectedModel=(CDOResource)selection.getFirstElement();

+                	

+                		DawnExplorer.this.fillContextMenu(manager);

+                	

+                }

+                if (selection.getFirstElement() instanceof CDOResourceFolder) {                	

+                	selectedFolder=(CDOResourceFolder)selection.getFirstElement();

+                	//If it is a "standard" model                	

+                		DawnExplorer.this.fillContextMenuFolder(manager);                	

+                }

+                

+			}

+			

+		}

+	});

+	Menu menu = menuMgr.createContextMenu(super.getViewer().getControl());

+	super.getViewer().getControl().setMenu(menu);

+	getSite().registerContextMenu(menuMgr, super.getViewer());

+}

+   /*

+//Modified by Tecnalia

+private void fillContextMenu(IMenuManager manager) {

+	Action action1 = new Action() {

+		public void run() {	

+			MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Delete Model Confirmation ", null,  "Do you want to delete the selected model?\r\n\r\n" , MessageDialog.CONFIRM, new String[] { "Accept",

+      	    "Refuse"}, 0);

+			int response = dialog.open();

+	        

+	        if(response==0){			        	

+	        	deleteModel();	

+	        	//showMessage(DELETE_EXECUTED_SUCCESSFULY);

+	        }							

+		}		

+	};

+	

+	action1.setText(DELETE_MODEL);

+	action1.setToolTipText(DELETE_MODEL);

+	action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().

+			getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));

+	manager.add(new Separator());

+	manager.add(action1);

+	

+	//drillDownAdapter.addNavigationActions(manager);

+	// Other plug-ins can contribute there actions here

+	manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));

+	//super.hookContextMenu();

+}

+

+//Modified by Tecnalia

+private void fillContextMenuFolder(IMenuManager manager) {

+	Action action1 = new Action() {

+		public void run() {			

+			try {	

+				MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Delete Folder Confirmation ", null,  "Do you want to delete the selected folder and all its contents?\r\n\r\n" , MessageDialog.CONFIRM, new String[] { "Accept",

+	      	    "Refuse"}, 0);

+				int response = dialog.open();

+		        

+		        if(response==0){			        			        						

+					CDOTransaction transaction = view.getSession().openTransaction();

+					CDOResourceNode folderToDelete= transaction.getResourceNode(selectedFolder.getPath());

+					selectedFolder=(CDOResourceFolder)folderToDelete;

+					deleteFolderContents(selectedFolder);

+

+					//folderToDelete.delete(null);

+					transaction.commit();

+					transaction.close();

+					//showMessage(DELETE_EXECUTED_SUCCESSFULY);

+					

+		        }

+				

+			} catch (Exception e) {

+				// TODO Auto-generated catch block

+				

+				e.printStackTrace();

+				showMessage(PROBLEM_DELETING_THE_FOLDER);		

+			}

+				

+		}

+

+		private  void deleteFolderContents(CDOResourceFolder cdoResourceFolder) throws IOException {

+			

+			

+			EList<CDOResourceNode> listN = cdoResourceFolder.getNodes();						

+			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(true);

+			while ( listN.size() > 0) {

+				if (listN.get(0) instanceof CDOResourceFolder) {

+					deleteFolderContents((CDOResourceFolder) listN.get(0));					

+				} else if (listN.get(0) instanceof CDOResource) {					

+					selectedModel = (CDOResource)listN.get(0);

+					if (!deleteModel()){

+						//break the while in case of error deleting one model

+						return;

+					}

+				}

+			}

+			cdoResourceFolder.delete(null);			

+		}

+	};

+	

+	action1.setText(DELETE_FOLDER);

+	action1.setToolTipText(DELETE_FOLDER);

+	action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().

+			getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE));

+	manager.add(new Separator());

+	manager.add(action1);

+	

+	//drillDownAdapter.addNavigationActions(manager);

+	// Other plug-ins can contribute there actions here

+	manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));

+	//super.hookContextMenu();

+}

+

+

+/*private void checkSubFolderContents(CDOResourceFolder cdoResourceFolder) throws IOException {

+	EList<CDOResourceNode> listN = cdoResourceFolder.getNodes();

+		

+	for(int i=0; i<listN.size();i++){

+		if (listN.get(i) instanceof CDOResource) {

+			String modelName = ((CDOResource)listN.get(i)).getPath();

+			if(modelName.contains(EXTENSION_DIAGRAM)){

+				messageAboutDiagrams += "   " + modelName + "\n";

+				hasDiagrams=true;

+				//listN.move(0, i);

+			}					

+		}

+		else if (listN.get(0) instanceof CDOResourceFolder) {

+			checkSubFolderContents((CDOResourceFolder)listN.get(i));

+		}

+	}

+	

+}*/

+

+

+private boolean deleteModel() {

+	try {	

+		

+		//Close the editor of the model to delete if opened to avoid after Error messages	

+		IEditorReference[] edi = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();

+		for (IEditorReference editor : edi) {

+			IEditorInput input = editor.getEditorInput();

+			if(input !=null){

+				//When editors are re-opened automatically are URIEditorInput

+				String path = "";

+				if (input instanceof DawnEditorInput || input instanceof URIEditorInput) {

+					if (input instanceof DawnEditorInput){

+						path =((DawnEditorInput) input).getURI().toString();

+					}

+					else{

+						path =((URIEditorInput) input).getURI().toString();

+					}

+					if(path.equals(OPENCERT_REPO + selectedModel.getPath())){

+						//System.out.println("CERRAR " + path);

+						//boolean cerrado = activePage.closeEditor(editor, false);	

+						//editor						

+						//IEditorPart editorClose= editor.getEditor(false);	

+						//editorClose.getEditorSite().getPage().closeEditor(editorClose, false);

+						IEditorReference[] editorReferencesClose= new IEditorReference[1];

+						editorReferencesClose[0]=editor;

+						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeEditors(editorReferencesClose,false);

+						//Closed, exit for					

+						break;

+					}						

+				}

+								

+			}

+		}

+		

+		

+		CDOTransaction transaction = view.getSession().openTransaction();

+		CDOResource modelToDelete= transaction.getResource(selectedModel.getPath());

+		

+		//If the model is a diagram, delete directly because won't be related to other models

+		if(!modelToDelete.getPath().contains(EXTENSION_DIAGRAM)){			

+			for (Iterator<EObject> iter=modelToDelete.getContents().iterator();iter.hasNext();) {					

+				EObject aEObject= iter.next();

+				List<CDOObjectReference> rc = transaction.queryXRefs(CDOUtil.getCDOObject(aEObject), new EReference[] {});

+				for(CDOObjectReference oneRef:rc){

+					EcoreUtil.remove(oneRef.getSourceObject(),oneRef.getSourceFeature(),oneRef.getTargetObject());

+				}

+				if(aEObject.eContents().size()!=0){

+					deleteSubContents(aEObject,transaction);

+				}						

+			}				

+			modelToDelete.save(null);

+		}				

+		modelToDelete.delete(null);

+		transaction.commit();

+		transaction.close();

+				

+		return true;

+	} catch (Exception e) {

+		// TODO Auto-generated catch block

+		

+		e.printStackTrace();

+		showMessage(PROBLEM_DELETING_THE_MODEL + " " + OPENCERT_REPO + selectedModel.getPath());

+		return false;

+	}

+}

+

+private void deleteSubContents(EObject aEObject,CDOTransaction transaction) {						

+	try {			

+		//for (Iterator<EObject> iter=aEObject.eContents().iterator();iter.hasNext();) {

+		while(aEObject.eContents().size()>0){

+			EObject bEObject=aEObject.eContents().get(0);

+			List<CDOObjectReference> rc = transaction.queryXRefs(CDOUtil.getCDOObject(bEObject), new EReference[] {});

+			//Remove the reference in the source objects to avoid inconsistencies

+			for(CDOObjectReference oneRef:rc){

+				EcoreUtil.remove(oneRef.getSourceObject(),oneRef.getSourceFeature(),oneRef.getTargetObject());

+			}					

+			if(bEObject.eContents().size()!=0){

+				deleteSubContents(bEObject,transaction);

+			}		

+			//iter.remove();

+			EcoreUtil.delete(bEObject);

+		}

+		

+	} catch (Exception e) {

+		// TODO Auto-generated catch block

+		e.printStackTrace();

+	}

+}

+}

diff --git a/org.eclipse.emf.cdo.dawn.util/.gitignore b/org.eclipse.emf.cdo.dawn.util/.gitignore
index ae3c172..3e2fcc7 100644
--- a/org.eclipse.emf.cdo.dawn.util/.gitignore
+++ b/org.eclipse.emf.cdo.dawn.util/.gitignore
@@ -1 +1 @@
-/bin/
+/bin/

diff --git a/org.eclipse.emf.cdo.dawn.util/META-INF/eclipse.inf b/org.eclipse.emf.cdo.dawn.util/META-INF/eclipse.inf
index 7864d3c..f7cabbb 100644
--- a/org.eclipse.emf.cdo.dawn.util/META-INF/eclipse.inf
+++ b/org.eclipse.emf.cdo.dawn.util/META-INF/eclipse.inf
@@ -1,3 +1,3 @@
-#Processed using Jarprocessor
-pack200.args = -E4
-pack200.conditioned = true
+#Processed using Jarprocessor

+pack200.args = -E4

+pack200.conditioned = true

diff --git a/org.eclipse.emf.cdo.dawn.util/plugin.properties b/org.eclipse.emf.cdo.dawn.util/plugin.properties
index b1e06bb..819db46 100644
--- a/org.eclipse.emf.cdo.dawn.util/plugin.properties
+++ b/org.eclipse.emf.cdo.dawn.util/plugin.properties
@@ -1,11 +1,11 @@
-# Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Martin Fluegge - initial API and implementation
-
-pluginName = CDO Dawn Utilities
-providerName = Eclipse Modeling Project
+# Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.

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

+# are made available under the terms of the Eclipse Public License v1.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v10.html

+#

+# Contributors:

+#    Martin Fluegge - initial API and implementation

+

+pluginName = CDO Dawn Utilities

+providerName = Eclipse Modeling Project

diff --git a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/internal/util/bundle/OM.java b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/internal/util/bundle/OM.java
index f55ed6d..3c37d5c 100644
--- a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/internal/util/bundle/OM.java
+++ b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/internal/util/bundle/OM.java
@@ -1,45 +1,45 @@
-/*
- * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Martin Fluegge - initial API and implementation
- */
-package org.eclipse.emf.cdo.dawn.internal.util.bundle;
-
-import org.eclipse.net4j.util.om.OMBundle;
-import org.eclipse.net4j.util.om.OMPlatform;
-import org.eclipse.net4j.util.om.OSGiActivator;
-import org.eclipse.net4j.util.om.log.OMLogger;
-import org.eclipse.net4j.util.om.trace.OMTracer;
-
-/**
- * @author Martin Fluegge
- */
-public abstract class OM
-{
-  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.dawn.util"; //$NON-NLS-1$
-
-  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);
-
-  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$
-
-  public static final OMTracer DEBUG_OBJECT = DEBUG.tracer("object"); //$NON-NLS-1$
-
-  public static final OMLogger LOG = BUNDLE.logger();
-
-  /**
-   * @author Martin Fluegge
-   * @since 1.0
-   */
-  public static final class Activator extends OSGiActivator
-  {
-    public Activator()
-    {
-      super(BUNDLE);
-    }
-  }
-}
+/*

+ * Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.

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

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

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Martin Fluegge - initial API and implementation

+ */

+package org.eclipse.emf.cdo.dawn.internal.util.bundle;

+

+import org.eclipse.net4j.util.om.OMBundle;

+import org.eclipse.net4j.util.om.OMPlatform;

+import org.eclipse.net4j.util.om.OSGiActivator;

+import org.eclipse.net4j.util.om.log.OMLogger;

+import org.eclipse.net4j.util.om.trace.OMTracer;

+

+/**

+ * @author Martin Fluegge

+ */

+public abstract class OM

+{

+  public static final String BUNDLE_ID = "org.eclipse.emf.cdo.dawn.util"; //$NON-NLS-1$

+

+  public static final OMBundle BUNDLE = OMPlatform.INSTANCE.bundle(BUNDLE_ID, OM.class);

+

+  public static final OMTracer DEBUG = BUNDLE.tracer("debug"); //$NON-NLS-1$

+

+  public static final OMTracer DEBUG_OBJECT = DEBUG.tracer("object"); //$NON-NLS-1$

+

+  public static final OMLogger LOG = BUNDLE.logger();

+

+  /**

+   * @author Martin Fluegge

+   * @since 1.0

+   */

+  public static final class Activator extends OSGiActivator

+  {

+    public Activator()

+    {

+      super(BUNDLE);

+    }

+  }

+}

diff --git a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/connection/CDOConnectionUtil.java b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/connection/CDOConnectionUtil.java
index 9e13a36..160663b 100644
--- a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/connection/CDOConnectionUtil.java
+++ b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/connection/CDOConnectionUtil.java
@@ -1,242 +1,243 @@
-/*
- * Copyright (c) 2010-2013, 2015 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Martin Fluegge - initial API and implementation
- *     Angel López (Tecnalia) - Modified according Opencert needs
- */
-package org.eclipse.emf.cdo.dawn.util.connection;
-
-import org.eclipse.emf.cdo.dawn.internal.util.bundle.OM;
-import org.eclipse.emf.cdo.dawn.util.exceptions.DawnInvalidIdException;
-import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
-import org.eclipse.emf.cdo.net4j.ReconnectingCDOSessionConfiguration;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.view.CDOAdapterPolicy;
-import org.eclipse.emf.cdo.view.CDOView;
-import org.eclipse.emf.cdo.view.CDOViewSet;
-
-import org.eclipse.net4j.Net4jUtil;
-import org.eclipse.net4j.connector.IConnector;
-import org.eclipse.net4j.tcp.TCPUtil;
-import org.eclipse.net4j.util.container.IPluginContainer;
-import org.eclipse.net4j.util.om.OMPlatform;
-import org.eclipse.net4j.util.om.trace.ContextTracer;
-import org.eclipse.net4j.util.security.CredentialsProviderFactory;
-import org.eclipse.net4j.util.security.IPasswordCredentialsProvider;
-
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.internal.cdo.session.CDOSessionFactory;
-import org.eclipse.emf.spi.cdo.InternalCDOView;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Martin Fluegge
- */
-public class CDOConnectionUtil
-{
-  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, CDOConnectionUtil.class);
-
-  public static CDOConnectionUtil instance = new CDOConnectionUtil();
-
-  private CDOSession currentSession;
-
-  private String repositoryName;
-
-  private String protocol;
-
-  private String host;
-  
-
-  private Map<String, CDOTransaction> transactions;
-
-  private IConnector connector;
- 
-  static
-  {
-    if (!OMPlatform.INSTANCE.isOSGiRunning())
-    {
-      Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);
-      TCPUtil.prepareContainer(IPluginContainer.INSTANCE);
-      CDONet4jUtil.prepareContainer(IPluginContainer.INSTANCE);
-    }
-  }
-  
-
-  public CDOConnectionUtil()
-  {
-  }
-
-  public void init(String repositoryName, String protocol, String host)
-  {
-    this.repositoryName = repositoryName;
-    this.protocol = protocol;
-    this.host = host;
-    setConnector(Net4jUtil.getConnector(IPluginContainer.INSTANCE, protocol, host));
-  }
-
-  public void registerPackages(List<EPackage> packages)
-  {
-    if (packages == null)
-    {
-      return;
-    }
-
-    for (EPackage pack : packages)
-    {
-      pack.eClass();
-    }
-  }
-
-  
-  
-  /**
-   * opens the session if it is not opened.
-   */
-  public CDOSession openSession()
-  {
-	 
-	
-  	 ReconnectingCDOSessionConfiguration sessionConfiguration = CDONet4jUtil.createReconnectingSessionConfiguration(host, repositoryName, IPluginContainer.INSTANCE);
-
-  	
- 
-  	 IPasswordCredentialsProvider credentialsProvider =
-				(IPasswordCredentialsProvider)IPluginContainer.INSTANCE.getElement(CredentialsProviderFactory.PRODUCT_GROUP,
-				"interactive", null);
-  	   
-  	
-  	 sessionConfiguration.setCredentialsProvider(credentialsProvider);
- 
- 
-  	
-  	 
-  	 currentSession = sessionConfiguration.openNet4jSession();	 	
-  	   	  	 
-   /*currentSession = (CDOSession)IPluginContainer.INSTANCE.getElement("org.eclipse.emf.cdo.sessions", "cdo",
-        protocol + "://" + host + "?repositoryName=" + repositoryName);*/
-  	 
-  	IPluginContainer.INSTANCE.putElement(CDOSessionFactory.PRODUCT_GROUP, "security", currentSession.toString(), currentSession);
-        
-    
-    return currentSession;
-  }
-
-  public void closeCurrentSession()
-  {
-    getCurrentSession().close();
-  }
-
-  /**
-   * opens a transaction on the given resourceSet
-   */
-  public CDOTransaction openCurrentTransaction(ResourceSet resourceSet, String id)
-  {
-    if (id == null)
-    {
-      throw new DawnInvalidIdException("The identifier '" + id + "' is invalid for openeing a transaction");
-    }
-
-    if (TRACER.isEnabled())
-    {
-      TRACER.format("Opening transaction for {0} on {1}", id, resourceSet); //$NON-NLS-1$
-    }
-
-    id = convert(id);
-    CDOTransaction transaction = getCurrentSession().openTransaction(resourceSet);
-    getTransactions().put(id, transaction);
-    return transaction;
-  }
-
-  public void setChangeSubscribtionPolicyForCurrentTransaction(CDOAdapterPolicy policy, String id)
-  {
-    id = convert(id);
-    getTransactions().get(id).options().addChangeSubscriptionPolicy(policy);
-  }
-
-  public CDOTransaction getCurrentTransaction(String id)
-  {
-    id = convert(id);
-    return getTransactions().get(id);
-  }
-
-  // TODO find a better way to solve this problem
-  private String convert(String id)
-  {
-    return id.replace("dawn", "cdo");
-  }
-
-  public CDOSession getCurrentSession()
-  {
-    if (currentSession == null)
-    {
-      currentSession = openSession();
-    }
-
-    return currentSession;
-  }
-
-  public Map<String, CDOTransaction> getTransactions()
-  {
-    if (transactions == null)
-    {
-      transactions = new HashMap<String, CDOTransaction>();
-    }
-
-    return transactions;
-  }
-
-  public CDOView openView(CDOSession session)
-  {
-    return session.openView();
-  }
-
-  public CDOTransaction openTransaction(CDOSession session)
-  {
-    return session.openTransaction();
-  }
-
-  @Deprecated
-  public static void closeSession(CDOSession session)
-  {
-    session.close();
-  }
-
-  @SuppressWarnings("deprecation")
-  public CDOTransaction getOrOpenCurrentTransaction(String id, ResourceSet resourceSet, String repositoryName)
-  {
-    CDOTransaction transaction = getCurrentTransaction(id);
-    CDOViewSet viewSet = CDOUtil.getViewSet(resourceSet);
-    if (viewSet != null)
-    {
-      return ((InternalCDOView)viewSet.resolveView(repositoryName)).toTransaction();
-    }
-
-    if (transaction == null)
-    {
-      transaction = openCurrentTransaction(resourceSet, id);
-    }
-
-    return transaction;
-  }
-
-  public void setConnector(IConnector connector)
-  {
-    this.connector = connector;
-  }
-
-  public IConnector getConnector()
-  {
-    return connector;
-  }
-}
+/*

+ * Copyright (c) 2010-2013, 2015 Eike Stepper (Berlin, Germany) and others.

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

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

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Martin Fluegge - initial API and implementation

+ *     Angel López (Tecnalia) - Modified according Opencert needs

+ */

+package org.eclipse.emf.cdo.dawn.util.connection;

+

+import org.eclipse.emf.cdo.dawn.internal.util.bundle.OM;

+import org.eclipse.emf.cdo.dawn.util.exceptions.DawnInvalidIdException;

+import org.eclipse.emf.cdo.net4j.CDONet4jUtil;

+import org.eclipse.emf.cdo.net4j.ReconnectingCDOSessionConfiguration;

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.cdo.transaction.CDOTransaction;

+import org.eclipse.emf.cdo.util.CDOUtil;

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

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

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

+

+import org.eclipse.net4j.Net4jUtil;

+import org.eclipse.net4j.connector.IConnector;

+import org.eclipse.net4j.tcp.TCPUtil;

+import org.eclipse.net4j.util.container.IPluginContainer;

+import org.eclipse.net4j.util.om.OMPlatform;

+import org.eclipse.net4j.util.om.trace.ContextTracer;

+import org.eclipse.net4j.util.security.CredentialsProviderFactory;

+import org.eclipse.net4j.util.security.IPasswordCredentialsProvider;

+import org.eclipse.net4j.util.security.PasswordCredentialsProvider;

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

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

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.internal.cdo.session.CDOSessionFactory;

+import org.eclipse.emf.spi.cdo.InternalCDOView;

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

+

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+/**

+ * @author Martin Fluegge

+ */

+public class CDOConnectionUtil

+{

+  private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, CDOConnectionUtil.class);

+

+  public static CDOConnectionUtil instance = new CDOConnectionUtil();

+

+  private CDOSession currentSession;

+

+  private String repositoryName;

+

+  private String protocol;

+

+  private String host;

+  

+

+  private Map<String, CDOTransaction> transactions;

+

+  private IConnector connector;

+ 

+  static

+  {

+    if (!OMPlatform.INSTANCE.isOSGiRunning())

+    {

+      Net4jUtil.prepareContainer(IPluginContainer.INSTANCE);

+      TCPUtil.prepareContainer(IPluginContainer.INSTANCE);

+      CDONet4jUtil.prepareContainer(IPluginContainer.INSTANCE);

+    }

+  }

+  

+

+  public CDOConnectionUtil()

+  {

+  }

+

+  public void init(String repositoryName, String protocol, String host)

+  {

+    this.repositoryName = repositoryName;

+    this.protocol = protocol;

+    this.host = host;

+    setConnector(Net4jUtil.getConnector(IPluginContainer.INSTANCE, protocol, host));

+  }

+

+  public void registerPackages(List<EPackage> packages)

+  {

+    if (packages == null)

+    {

+      return;

+    }

+

+    for (EPackage pack : packages)

+    {

+      pack.eClass();

+    }

+  }

+

+  

+  

+  /**

+   * opens the session if it is not opened.

+   */

+  public CDOSession openSession()

+  {

+	 

+	

+  	 ReconnectingCDOSessionConfiguration sessionConfiguration = CDONet4jUtil.createReconnectingSessionConfiguration(host, repositoryName, IPluginContainer.INSTANCE);

+

+  	

+  	//IPasswordCredentialsProvider credentialsProvider = new PasswordCredentialsProvider("Administrator","0000");

+  	 IPasswordCredentialsProvider credentialsProvider =

+				(IPasswordCredentialsProvider)IPluginContainer.INSTANCE.getElement(CredentialsProviderFactory.PRODUCT_GROUP,

+				"interactive", null);

+  	       	

+		sessionConfiguration.setCredentialsProvider(credentialsProvider);

+    

+	    currentSession = sessionConfiguration.openNet4jSession();

+    

+  	   	  	 

+   /*currentSession = (CDOSession)IPluginContainer.INSTANCE.getElement("org.eclipse.emf.cdo.sessions", "cdo",

+        protocol + "://" + host + "?repositoryName=" + repositoryName);*/

+  	 

+  	if(currentSession!=null){

+  		IPluginContainer.INSTANCE.putElement(CDOSessionFactory.PRODUCT_GROUP, "security", currentSession.toString(), currentSession);

+  	}

+    

+    return currentSession;

+  }

+

+  public void closeCurrentSession()

+  {

+    getCurrentSession().close();

+  }

+

+  /**

+   * opens a transaction on the given resourceSet

+   */

+  public CDOTransaction openCurrentTransaction(ResourceSet resourceSet, String id)

+  {

+    if (id == null)

+    {

+      throw new DawnInvalidIdException("The identifier '" + id + "' is invalid for openeing a transaction");

+    }

+

+    if (TRACER.isEnabled())

+    {

+      TRACER.format("Opening transaction for {0} on {1}", id, resourceSet); //$NON-NLS-1$

+    }

+

+    id = convert(id);

+    CDOTransaction transaction = getCurrentSession().openTransaction(resourceSet);

+    getTransactions().put(id, transaction);

+    return transaction;

+  }

+

+  public void setChangeSubscribtionPolicyForCurrentTransaction(CDOAdapterPolicy policy, String id)

+  {

+    id = convert(id);

+    getTransactions().get(id).options().addChangeSubscriptionPolicy(policy);

+  }

+

+  public CDOTransaction getCurrentTransaction(String id)

+  {

+    id = convert(id);

+    return getTransactions().get(id);

+  }

+

+  // TODO find a better way to solve this problem

+  private String convert(String id)

+  {

+    return id.replace("dawn", "cdo");

+  }

+

+  public CDOSession getCurrentSession()

+  {

+   /* if (currentSession == null)

+    {

+      currentSession = openSession();

+    }*/

+

+    return currentSession;

+  }

+

+  public Map<String, CDOTransaction> getTransactions()

+  {

+    if (transactions == null)

+    {

+      transactions = new HashMap<String, CDOTransaction>();

+    }

+

+    return transactions;

+  }

+

+  public CDOView openView(CDOSession session)

+  {

+    return session.openView();

+  }

+

+  public CDOTransaction openTransaction(CDOSession session)

+  {

+    return session.openTransaction();

+  }

+

+  @Deprecated

+  public static void closeSession(CDOSession session)

+  {

+    session.close();

+  }

+

+  @SuppressWarnings("deprecation")

+  public CDOTransaction getOrOpenCurrentTransaction(String id, ResourceSet resourceSet, String repositoryName)

+  {

+    CDOTransaction transaction = getCurrentTransaction(id);

+    CDOViewSet viewSet = CDOUtil.getViewSet(resourceSet);

+    if (viewSet != null)

+    {

+      return ((InternalCDOView)viewSet.resolveView(repositoryName)).toTransaction();

+    }

+

+    if (transaction == null)

+    {

+      transaction = openCurrentTransaction(resourceSet, id);

+    }

+

+    return transaction;

+  }

+

+  public void setConnector(IConnector connector)

+  {

+    this.connector = connector;

+  }

+

+  public IConnector getConnector()

+  {

+    return connector;

+  }

+}

diff --git a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/DawnInvalidIdException.java b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/DawnInvalidIdException.java
index ce1febc..0c2aeea 100644
--- a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/DawnInvalidIdException.java
+++ b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/DawnInvalidIdException.java
@@ -1,30 +1,30 @@
-/*
- * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Martin Fluegge - initial API and implementation
- */
-package org.eclipse.emf.cdo.dawn.util.exceptions;
-
-/**
- * @author Martin Fluegge
- */
-public class DawnInvalidIdException extends RuntimeException
-{
-
-  private static final long serialVersionUID = 1L;
-
-  public DawnInvalidIdException()
-  {
-    super();
-  }
-
-  public DawnInvalidIdException(String s)
-  {
-    super(s);
-  }
-}
+/*

+ * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others.

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

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

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Martin Fluegge - initial API and implementation

+ */

+package org.eclipse.emf.cdo.dawn.util.exceptions;

+

+/**

+ * @author Martin Fluegge

+ */

+public class DawnInvalidIdException extends RuntimeException

+{

+

+  private static final long serialVersionUID = 1L;

+

+  public DawnInvalidIdException()

+  {

+    super();

+  }

+

+  public DawnInvalidIdException(String s)

+  {

+    super(s);

+  }

+}

diff --git a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/EClassIncompatibleException.java b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/EClassIncompatibleException.java
index 62ebe7e..c5e0c45 100644
--- a/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/EClassIncompatibleException.java
+++ b/org.eclipse.emf.cdo.dawn.util/src/org/eclipse/emf/cdo/dawn/util/exceptions/EClassIncompatibleException.java
@@ -1,31 +1,31 @@
-/*
- * Copyright (c) 2010, 2011, 2013, 2015 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Martin Fl�uege - initial API and implementation
- */
-package org.eclipse.emf.cdo.dawn.util.exceptions;
-
-/**
- * @author Martin Fluegge
- * @since 1.0
- */
-public class EClassIncompatibleException extends Exception
-{
-
-  private static final long serialVersionUID = 1L;
-
-  public EClassIncompatibleException()
-  {
-    super();
-  }
-
-  public EClassIncompatibleException(String s)
-  {
-    super(s);
-  }
-}
+/*

+ * Copyright (c) 2010, 2011, 2013, 2015 Eike Stepper (Berlin, Germany) and others.

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

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

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     Martin Fl�uege - initial API and implementation

+ */

+package org.eclipse.emf.cdo.dawn.util.exceptions;

+

+/**

+ * @author Martin Fluegge

+ * @since 1.0

+ */

+public class EClassIncompatibleException extends Exception

+{

+

+  private static final long serialVersionUID = 1L;

+

+  public EClassIncompatibleException()

+  {

+    super();

+  }

+

+  public EClassIncompatibleException(String s)

+  {

+    super(s);

+  }

+}

diff --git a/org.eclipse.opencert.apm.assuranceassets/.gitignore b/org.eclipse.opencert.apm.assuranceassets/.gitignore
index ae3c172..d504c34 100644
--- a/org.eclipse.opencert.apm.assuranceassets/.gitignore
+++ b/org.eclipse.opencert.apm.assuranceassets/.gitignore
@@ -1 +1,2 @@
-/bin/
+/bin/

+/build/
diff --git a/org.eclipse.opencert.apm.assuranceassets/build.gradle b/org.eclipse.opencert.apm.assuranceassets/build.gradle
new file mode 100644
index 0000000..180335e
--- /dev/null
+++ b/org.eclipse.opencert.apm.assuranceassets/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.apm.assurproj.edit/META-INF/MANIFEST.MF b/org.eclipse.opencert.apm.assurproj.edit/META-INF/MANIFEST.MF
index 81cdf96..e4c4e16 100644
--- a/org.eclipse.opencert.apm.assurproj.edit/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.apm.assurproj.edit/META-INF/MANIFEST.MF
@@ -60,7 +60,6 @@
  org.eclipse.xsd,

  org.eclipse.opencert.evm.evidspec.editor;bundle-version="1.0.0",

  org.eclipse.opencert.impactanalysis,

- org.eclipse.emf.cdo.dawn.emf;bundle-version="2.0.300",

- org.eclipse.opencert.process2assurproj;bundle-version="1.0.0"

+ org.eclipse.emf.cdo.dawn.emf;bundle-version="2.0.300"

 Bundle-ActivationPolicy: lazy

 

diff --git a/org.eclipse.opencert.apm.assurproj.edit/src-gen/org/eclipse/opencert/apm/assurproj/assuranceproject/parts/forms/AssuranceProjectPropertiesEditionPartForm.java b/org.eclipse.opencert.apm.assurproj.edit/src-gen/org/eclipse/opencert/apm/assurproj/assuranceproject/parts/forms/AssuranceProjectPropertiesEditionPartForm.java
index 78c82c6..96f71e4 100644
--- a/org.eclipse.opencert.apm.assurproj.edit/src-gen/org/eclipse/opencert/apm/assurproj/assuranceproject/parts/forms/AssuranceProjectPropertiesEditionPartForm.java
+++ b/org.eclipse.opencert.apm.assurproj.edit/src-gen/org/eclipse/opencert/apm/assurproj/assuranceproject/parts/forms/AssuranceProjectPropertiesEditionPartForm.java
@@ -64,7 +64,6 @@
 import org.eclipse.opencert.apm.assurproj.assuranceproject.utils.CrossProjectUI;
 import org.eclipse.opencert.apm.assurproj.assuranceproject.utils.ImportFromEpfUI;
 import org.eclipse.opencert.apm.assurproj.assuranceproject.utils.ImportFromFileUI;
-import org.eclipse.opencert.process2assurproj.assuranceproject.utils.EPF2ARGUI;
 import org.eclipse.swt.SWT;

 import org.eclipse.swt.events.FocusAdapter;

 import org.eclipse.swt.events.FocusEvent;

@@ -119,7 +118,7 @@
 	//Start ARL HEO
 	protected Button buttonImportFromFile;
 	//End ARL HEO
-	protected Button buttonepf2arg;
+	//protected Button buttonepf2arg;
 	// End IRR
 	
 	
@@ -1153,7 +1152,7 @@
 				buttonCrossDomain.setEnabled(permission.isWritable());				
 				
 				buttonCrossDomain.setLayoutData(CMGridData);
-				buttonCrossDomain.setText("Cross Domain");
+				buttonCrossDomain.setText("Cross Standard");
 				buttonCrossDomain.addSelectionListener(new SelectionAdapter() {
 
 					/**
@@ -1295,7 +1294,7 @@
 			});
 			//End ARL HEO
 			//Start EPF2ArgTransformation
-			buttonepf2arg = new Button(group, 0);
+			/*buttonepf2arg = new Button(group, 0);
 			
 			buttonepf2arg.setEnabled(permission.isWritable());
 			
@@ -1308,7 +1307,7 @@
 				 * 
 				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
-				public void widgetSelected(SelectionEvent e) {
+				/*public void widgetSelected(SelectionEvent e) {
 
 					// Pregunta antes de salvar si es que se han hecho cambios
 					boolean pp = PlatformUI.getWorkbench().saveAllEditors(true);
@@ -1318,7 +1317,7 @@
 					EpfSet.open();
 																					
 				}
-			});
+			});*/
 			//End EPF2ArgTransformation
 			
 		}
diff --git a/org.eclipse.opencert.apm.assurproj.edit/src/org/eclipse/opencert/apm/assurproj/assuranceproject/utils/CrossDomainUI.java b/org.eclipse.opencert.apm.assurproj.edit/src/org/eclipse/opencert/apm/assurproj/assuranceproject/utils/CrossDomainUI.java
index 7062db0..862f639 100644
--- a/org.eclipse.opencert.apm.assurproj.edit/src/org/eclipse/opencert/apm/assurproj/assuranceproject/utils/CrossDomainUI.java
+++ b/org.eclipse.opencert.apm.assurproj.edit/src/org/eclipse/opencert/apm/assurproj/assuranceproject/utils/CrossDomainUI.java
@@ -2208,9 +2208,9 @@
 				///Create a compliance map between the target baseline and the evidence model to generate

 				BaseComplianceMap targetProjectCM= baselineFactory.createBaseComplianceMap();

 				targetProjectCM.setId(""+j);

-				targetProjectCM.setName("Cross Domain compliance "+j);

+				targetProjectCM.setName("Cross Standard compliance "+j);

 				MapJustification mj= mappingFactory.createMapJustification();

-				mj.setExplanation("Compliance generated automatically by Cross Domain");

+				mj.setExplanation("Compliance generated automatically by Cross Standard");

 				targetProjectCM.setMapJustification(mj);

 				targetProjectCM.getTarget().add((org.eclipse.opencert.evm.evidspec.evidence.Artefact)artefactObject);

 				targetProjectCM.setMapGroup(targetComplianceGroup);

@@ -2326,7 +2326,7 @@
 	@Override

 	protected void configureShell(Shell newShell) {

 		super.configureShell(newShell);

-		newShell.setText("Cross Domain");

+		newShell.setText("Cross Standard");

 	}

 	

 	@Override

@@ -2434,7 +2434,7 @@
 			if(onePCObject instanceof BaselineElement){

 				BaselineElement postcond= (BaselineElement)onePCObject;

 				postcond.setIsSelected(true);

-				postcond.setSelectionJustification("Automatically selected for being postCondition of a Cross Domain Reusing");

+				postcond.setSelectionJustification("Automatically selected for being postCondition of a Cross Standard Reusing");

 			}

 		}

 		

@@ -2454,8 +2454,17 @@
 					//Copy the ArtefactModelData to destination model If it's empty

 					

 					if(amT.getRepoUrl()==null || amT.getRepoUrl().equals("")){

-						amT.setId(amF.getId());

-						amT.setName(amF.getName());

+						if(amF.getId()!=null){

+							amT.setId(amF.getId());

+						}

+						if(amF.getName()!=null){

+							amT.setName(amF.getName());							

+						}

+						else if (amT.getName()==null){

+							amT.setName ("NoNameSpecified");

+						}

+						

+						

 						amT.setRepoLocalPath(amF.getRepoLocalPath());

 						amT.setRepoPassword(amF.getRepoPassword());

 						amT.setRepoUrl(amF.getRepoUrl());

@@ -2479,6 +2488,9 @@
 						artefactModelFolderPath.mkdir();

 			       }

 					

+					if(amT.getArtefact().get(0).getName()==null){

+						amT.getArtefact().get(0).setName ("NoNameSpecified");

+					}

 					

 					File artefactDefinitionFolderPath=new File(artefactModelFolderPath.getAbsolutePath() +"/" + amT.getArtefact().get(0).getName());

 					if(!artefactDefinitionFolderPath.exists()){	           		

@@ -2494,7 +2506,13 @@
 						//Copy the resource to target artefact

 						org.eclipse.opencert.evm.evidspec.evidence.Resource copy = evidenceFactory.createResource();

 						copy.setId(fromFile.getId());

-						copy.setName(fromFile.getName());

+						if (fromFile.getName()==null){

+							fromFile.setName ("NoNameSpecified");

+						}

+						else{

+							copy.setName(fromFile.getName());

+						}

+						

 						copy.setDescription(fromFile.getDescription());

 						copy.setFormat(fromFile.getFormat());

 						

@@ -2536,8 +2554,7 @@
 					

 					String artefactModelFolderPath = "";

 					if(!repoLibrary.existsFolderRepo(projectFolderPath+"/" + amT.getName())){

-						artefactModelFolderPath = repoLibrary.addFolderToRepo(projectFolderPath,amT.getName(), "");

-						//String ArtefactDefFolderPath = repoLibrary.addFolderToRepo(ArtefactModelFolderPath,am.getArtefact().get(0).getName(), "");

+						artefactModelFolderPath = repoLibrary.addFolderToRepo(projectFolderPath,amT.getName(), "");						

 					}

 					else{

 						artefactModelFolderPath =projectFolderPath+"/"+amT.getName();

@@ -2545,9 +2562,12 @@
 							

 					

 					String artefactDefinitionFolderPath = "";

+					if(amT.getArtefact().get(0).getName()==null){

+						amT.getArtefact().get(0).setName ("NoNameSpecified");

+					}

+					

 					if(!repoLibrary.existsFolderRepo(artefactModelFolderPath + "/" + amT.getArtefact().get(0).getName())){

-						artefactDefinitionFolderPath = repoLibrary.addFolderToRepo(artefactModelFolderPath,amT.getArtefact().get(0).getName(), "");

-						//String ArtefactDefFolderPath = repoLibrary.addFolderToRepo(ArtefactModelFolderPath,am.getArtefact().get(0).getName(), "");

+						artefactDefinitionFolderPath = repoLibrary.addFolderToRepo(artefactModelFolderPath,amT.getArtefact().get(0).getName(), "");						

 					}

 					else{

 						artefactDefinitionFolderPath =artefactModelFolderPath+"/"+amT.getArtefact().get(0).getName();

@@ -2557,7 +2577,7 @@
 					String artefactFolderPath="";

 					if(!repoLibrary.existsFolderRepo(artefactDefinitionFolderPath+"/" + artTo.getName())){

 						artefactFolderPath = repoLibrary.addFolderToRepo(artefactDefinitionFolderPath,artTo.getName(), "");

-						//String ArtefactDefFolderPath = repoLibrary.addFolderToRepo(ArtefactModelFolderPath,am.getArtefact().get(0).getName(), "");

+						

 					}

 					else{

 						artefactFolderPath =artefactDefinitionFolderPath+"/" + artTo.getName();

@@ -2567,7 +2587,14 @@
 						//Copy the resource to target artefact

 						org.eclipse.opencert.evm.evidspec.evidence.Resource copy = evidenceFactory.createResource();

 						copy.setId(fromFile.getId());

-						copy.setName(fromFile.getName());

+												

+						if (fromFile.getName()==null){

+							fromFile.setName ("NoNameSpecified");

+						}

+						else{

+							copy.setName(fromFile.getName());

+						}

+						

 						copy.setDescription(fromFile.getDescription());

 						copy.setFormat(fromFile.getFormat());

 						

diff --git a/org.eclipse.opencert.apm.assurproj.reuse/.gitignore b/org.eclipse.opencert.apm.assurproj.reuse/.gitignore
index ae3c172..3e2fcc7 100644
--- a/org.eclipse.opencert.apm.assurproj.reuse/.gitignore
+++ b/org.eclipse.opencert.apm.assurproj.reuse/.gitignore
@@ -1 +1 @@
-/bin/
+/bin/

diff --git a/org.eclipse.opencert.apm.assurproj.reuse/META-INF/MANIFEST.MF b/org.eclipse.opencert.apm.assurproj.reuse/META-INF/MANIFEST.MF
index 1f38b3e..847a51d 100644
--- a/org.eclipse.opencert.apm.assurproj.reuse/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.apm.assurproj.reuse/META-INF/MANIFEST.MF
@@ -1,30 +1,31 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Reuse
-Bundle-SymbolicName: org.eclipse.opencert.apm.assurproj.reuse;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Vendor: Tecnalia
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.ui,
- org.eclipse.jface.text,
- org.eclipse.ui.editors,
- org.eclipse.emf.cdo,
- org.eclipse.emf.cdo.dawn,
- org.eclipse.emf.cdo.dawn.emf,
- org.eclipse.emf.cdo.dawn.ui,
- org.eclipse.emf.cdo.dawn.util;bundle-version="2.0.300",
- org.eclipse.opencert.apm.assurproj,
- org.eclipse.opencert.apm.baseline;bundle-version="1.0.0",
- org.eclipse.opencert.sam.arg;bundle-version="1.0.0",
- org.eclipse.opencert.pam.procspec;bundle-version="1.0.0",
- org.eclipse.emf.edit.ui,
- org.eclipse.gmf.runtime.notation,
- org.eclipse.opencert.evm.evidspec.editor;bundle-version="1.0.0",
- org.eclipse.opencert.apm.assurproj.utils;bundle-version="1.0.0",
- org.eclipse.opencert.apm.assurproj.edit;bundle-version="1.0.0",
- org.eclipse.opencert.sam.arg.editor;bundle-version="1.0.0",
- org.eclipse.opencert.pam.procspec.editor;bundle-version="1.0.0",
- org.eclipse.opencert.apm.baseline.editor;bundle-version="1.0.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-Activator: org.eclipse.opencert.apm.assurproj.reuse.views.ReusePlugin
-Bundle-ActivationPolicy: lazy
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: Reuse

+Bundle-SymbolicName: org.eclipse.opencert.apm.assurproj.reuse;singleton:=true

+Bundle-Version: 1.0.0.qualifier

+Bundle-Vendor: Tecnalia

+Require-Bundle: org.eclipse.core.runtime,

+ org.eclipse.ui,

+ org.eclipse.jface.text,

+ org.eclipse.ui.editors,

+ org.eclipse.emf.cdo,

+ org.eclipse.emf.cdo.dawn,

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

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

+ org.eclipse.emf.cdo.dawn.util;bundle-version="2.0.300",

+ org.eclipse.opencert.apm.assurproj,

+ org.eclipse.opencert.apm.baseline;bundle-version="1.0.0",

+ org.eclipse.opencert.sam.arg;bundle-version="1.0.0",

+ org.eclipse.opencert.pam.procspec;bundle-version="1.0.0",

+ org.eclipse.emf.edit.ui,

+ org.eclipse.gmf.runtime.notation,

+ org.eclipse.opencert.evm.evidspec.editor;bundle-version="1.0.0",

+ org.eclipse.opencert.apm.assurproj.utils;bundle-version="1.0.0",

+ org.eclipse.opencert.apm.assurproj.edit;bundle-version="1.0.0",

+ org.eclipse.opencert.sam.arg.editor;bundle-version="1.0.0",

+ org.eclipse.opencert.pam.procspec.editor;bundle-version="1.0.0",

+ org.eclipse.opencert.apm.baseline.editor;bundle-version="1.0.0"

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Bundle-Activator: org.eclipse.opencert.apm.assurproj.reuse.views.ReusePlugin

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.opencert.apm.assurproj.reuse.views

diff --git a/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java b/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
index b5f40eb..c86c626 100644
--- a/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
+++ b/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
Binary files differ
diff --git a/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2argumentation.etl b/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2argumentation.etl
new file mode 100644
index 0000000..9a3904d
--- /dev/null
+++ b/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2argumentation.etl
@@ -0,0 +1,550 @@
+// EPF - Process -> OpenCert - ARG

+

+pre {

+  'Running ETL'.println();

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

+  

+    var processComponent : LIB!ProcessComponent;

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

+	

+}	

+	

+rule ProcessComponent2Case

+transform l : LIB!ProcessComponent

+	to arg : ARG!Case{

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

+	

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

+	str.println();

+	

+	for (act in LIB!Activity.allInstances.select(act|act.isTypeOf(LIB!Activity))){//l.getTaskDescriptors(l.process.breakdownElement)) {

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

+	}

+	

+}

+	

+	

+/*Transform Activity to Claim*/		

+

+rule Activity2Claim

+	transform act : LIB!Activity

+	to acl:ARG!Claim{

+	//guard :conSelection.contains(act.getContainerProcessComponent().id)

+

+		acl.id="G.Act"+act.id;

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

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

+		//act.name.println();

+		

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

+		//var stra1 = "Activity name  = " + act.name;

+		//stra1.println();

+					

+			

+			  

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

+			for(td in act.getTaskDescriptors(act.breakdownElement)){//act.breakdownElement

+			//var stra3 = "TD = " + td.name;

+			//stra3.println();

+			

+				var cltd = new ARG!Claim;

+				var cxa = new ARG!AssertedInference;

+			

+				cltd.id="G.Td"+td.id;

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

+				cltd.description=td.briefDescription;

+				//var stra4 = "Claim = " + cltd.name;

+				//stra4.println();

+

+				cxa.name = 'Act_Td'; 

+				cxa.source.add(acl);

+  		 		cxa.target.add(cltd);

+  		 		//var stra5 = "Source = " + cxa.source.name;

+				//stra5.println();

+				//var stra6 = "Target = " + cxa.target.name;

+				//stra6.println();

+

+  		 		arg.argument.add(cxa);

+				arg.argument.add(cltd);	

+

+					  		

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

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

+  				

+  					var ar = new ARG!ArgumentReasoning;

+  	    			arg.argument.add(ar);

+  	    			ar.id="Td.Rd"+td.id;

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

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

+  	

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

+					//var strr1 = "ArgumentReasoning = " + rd.id;

+					//strr1.println();

+				

+						var ca = new ARG!Claim;

+						var iec = new ARG!InformationElementCitation;

+						var x = new ARG!AssertedInference;

+						var y = new ARG!AssertedEvidence;

+				

+						//rd -> sub-claim

+						ca.name="Sub-Goal-Rd: "+rd.name;

+						ca.id="G"+td.id+".Rd"+rd.id;

+						ca.description=rd.briefDescription + rd.name + " should be certified";

+						// is certified.

+				

+  		 				//Asserted inference links Argument to Sub-Claim

+  		 				x.name = 'Ard_Crd'; 

+		 				x.source.add(ar);

+		 				x.target.add(ca);

+				

+						//rd -> solution

+						iec.name= rd.name+"'s certification will be available";

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

+						iec.description=rd.briefDescription+rd.name + "'s certification will be available";	

+						iec.type = ARG!InformationElementType#Solution;

+  						//iec.toBeInstantiated =false;

+				

+						//Asserted Evidence Links Sub-claim to Solution

+						y.name = 'Crd_Erd'; 

+						y.source.add(ca);

+  		 				y.target.add(iec);

+  		 		

+  		 				arg.argument.add(x);

+  		 				arg.argument.add(y);		

+  		 				arg.argument.add(ca);

+  		 				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() <>null){

+					var arw = new ARG!ArgumentReasoning;

+	  	    		arg.argument.add(arw);

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

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

+					arw.id="Td.Wp"+td.id;

+				

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

+				

+						var clw = new ARG!Claim;

+						var iew = new ARG!InformationElementCitation;

+						var xw = new ARG!AssertedInference;

+						var yw = new ARG!AssertedEvidence;

+					

+						//wp -> sub-claim

+						clw.name="Sub-Goal-Wp: "+wp.name;

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

+						clw.description=wp.name + " is planned";

+						//var strr21 = "Claim = " + wp.name;

+						//strr21.println();

+					

+	  		 			//Asserted inference links Argument to Sub-Claim

+	  		 			xw.name = 'Awp_Cwp'; 

+			 			xw.source.add(arw);

+			 			xw.target.add(clw);

+					

+						//wp -> solution

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

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

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

+						iew.type = ARG!InformationElementType#Solution;

+	  					//iew.toBeInstantiated =false;

+	  					//var str3 = "solution = " + iew.name;

+						//str3.println();

+					

+						// Asserted Evidence Links Sub-claim to Solution

+						yw.name = 'Cwp_Ewp'; 

+						yw.source.add(clw);

+	  		 			yw.target.add(iew);

+	  		 		

+	  		 			arg.argument.add(xw);

+	  		 			arg.argument.add(yw);		

+	  		 			arg.argument.add(clw);

+	  		 			arg.argument.add(iew);	

+					}

+			

+					var zw = new ARG!AssertedInference;

+	  		 		zw.name = "Cltd_Awp"; 

+			 		zw.source.add(cltd);

+			 		zw.target.add(arw);

+			 		arg.argument.add(zw);

+				}

+					

+				

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

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

+			

+					for(gu in td.getGuidelines()){

+			

+						var aguk = new ARG!ArgumentReasoning;

+		  	    		arg.argument.add(aguk);

+						aguk.id="Td.Gu."+td.id;

+						aguk.name="Argument over guidelines";

+						aguk.description="Argument over guidelines";

+						//var strr21 = "gui = " + gu.name;

+						//strr21.println();

+					

+						var clgk = new ARG!Claim;

+						var iegk = new ARG!InformationElementCitation;

+						var xgk = new ARG!AssertedInference;

+						var ygk = new ARG!AssertedEvidence;

+						

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

+						clgk.name="Sub-Goal-Gu: "+gu.name;

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

+						

+		  		 		//Asserted inference links Argument to Sub-Claim

+		  		 		xgk.name = 'Agu_Cgu'; 

+				 		xgk.source.add(aguk);

+				 		xgk.target.add(clgk);

+						

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

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

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

+						iegk.type = ARG!InformationElementType#Solution;

+		  				//iegk.toBeInstantiated =false;

+		  				//var str3 = "solution = " + ieg.name;

+						//str3.println();

+						

+						// Asserted Evidence Links Sub-claim to Solution

+						ygk.name = 'Cgu_Egu'; 

+						ygk.source.add(clgk);

+		  		 		ygk.target.add(iegk);

+		  		 		

+		  		 		arg.argument.add(xgk);

+		  		 		arg.argument.add(ygk);		

+		  		 		arg.argument.add(clgk);

+		  		 		arg.argument.add(iegk);

+		  		 		

+			  		 	var zgk = new ARG!AssertedInference;

+			  		 	zgk.name = "Cltd_Agu"; 

+					 	zgk.source.add(cltd);

+					 	zgk.target.add(aguk);

+					 	arg.argument.add(zgk);

+					}

+				} 

+				

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

+			

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

+	  	

+					for(che in td.getChecklists()){

+				

+						var arc = new ARG!ArgumentReasoning;

+			  	    	arg.argument.add(arc);

+			  	    	arc.id="Td.Ch"+td.id;

+						arc.name="Argument over checklists";

+						arc.description="Argument over checklists";

+					    //var strc1 = "checklist = " + che.name;

+						//strc1.println();

+						

+						var cc = new ARG!Claim;

+						var icc = new ARG!InformationElementCitation;

+						var xc = new ARG!AssertedInference;

+						var yc = new ARG!AssertedEvidence;

+						

+						//che -> sub-claim

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

+						cc.name="Sub-Goal-Ch: "+che.name;

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

+						

+		  		 		//Asserted inference links Argument to Sub-Claim

+		  		 		xc.name = 'Ach_Cch'; 

+				 		xc.source.add(arc);

+				 		xc.target.add(cc);

+						

+						//checklist -> solution

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

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

+						icc.description= che.briefDescription;	

+						icc.type = ARG!InformationElementType#Solution;

+		  				//icc.toBeInstantiated =false;

+		  				//var strc4 = "solution = " + icc.name;

+						//strc4.println();

+						

+						// Asserted Evidence Links Sub-claim to Solution

+						yc.name = 'Cch_Ech'; 

+						yc.source.add(cc);

+		  		 		yc.target.add(icc);

+		  		 		//yc.source.println();

+		  		 		

+		  		 		arg.argument.add(xc);

+		  		 		arg.argument.add(yc);		

+		  		 		arg.argument.add(cc);

+		  		 		arg.argument.add(icc);

+						

+						//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);

+					}

+				} 		

+		

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

+			

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

+	  	

+					for(exp in td.getExamples()){

+				

+						var are = new ARG!ArgumentReasoning;

+			  	    	arg.argument.add(are);

+			  	    	are.id="Td.Ex"+td.id;

+						are.name="Argument over examples";

+						are.description="Argument over examples";

+					    //var stre1 = "example = " + exp.name;

+						//stre1.println();

+						

+						var ce = new ARG!Claim;

+						var iee = new ARG!InformationElementCitation;

+						var xe = new ARG!AssertedInference;

+						var ye = new ARG!AssertedEvidence;

+						

+						//expample -> sub-claim

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

+						ce.name="Sub-Goal-Ex: "+exp.name;

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

+						

+		  		 		//Asserted inference links Argument to Sub-Claim

+		  		 		xe.name = 'Aex_Cex'; 

+				 		xe.source.add(are);

+				 		xe.target.add(ce);

+						//var stre3 = "AssertedInference = " + xe.target;

+						//stre3.println();

+						

+						//expample -> solution

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

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

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

+						iee.type = ARG!InformationElementType#Solution;

+		  				//iee.toBeInstantiated =false;

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

+						//stre4.println();

+						

+						// Asserted Evidence Links Sub-claim to Solution

+						ye.name = 'Cex_Eex'; 

+						ye.source.add(ce);

+		  		 		ye.target.add(iee);

+		  		 		//ye.source.println();

+		  		 		

+		  		 		arg.argument.add(xe);

+		  		 		arg.argument.add(ye);		

+		  		 		arg.argument.add(ce);

+		  		 		arg.argument.add(iee);

+						

+						//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);

+						

+					}

+				}

+			

+			

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

+			

+				if(td.task<>null){

+				var task=LIB!Task.allInstances.selectOne(task|task.id=td.task);

+				//var strt1 = "taskname " + task.name;

+				//strt1.println();

+				//var toolMentor;

+	

+					for (tm in task.gettoolMentors()){

+					//var strt2 = "toolMentorId " + tm.name;

+					//strt2.println();

+					//act.participant.add(LIB!ToolMentor.allInstances.selectOne(tm|tm.id=toolMentorId).equivalent());

+				

+						var art = new ARG!ArgumentReasoning;

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

+						art.id="Td.Tm"+td.id;

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

+						arg.argument.add(art);

+						

+						//var strr1 = "S = " + art.name;

+						//strr1.println();

+						

+						var clt = new ARG!Claim;

+						var iet = new ARG!InformationElementCitation;

+						var xt = new ARG!AssertedInference;

+						var yt = new ARG!AssertedEvidence;

+						

+					

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

+						clt.name="Sub-Goal-Tm: "+tm.name;

+						clt.description=tm.briefDescription + tm.name + " has to be qualified";

+						//var strr212 = "Claim = " + tm.name;

+						//strr212.println();

+		  		 		

+		  		 		xt.name = 'Atm_Ctm'; 

+				 		xt.source.add(art);

+				 		xt.target.add(clt);

+						

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

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

+						iet.description="E_"+tm.name+ "Â’s qualifications";	//"E_"+wp.name + 

+						iet.type = ARG!InformationElementType#Solution;

+		  				//iec.toBeInstantiated =false;

+		  		

+		  				//var stre3 = "solution = " + iet.name;

+						//stre3.println();

+						

+						yt.name = 'Ctm_Etm'; 

+						yt.source.add(clt);

+		  		 		yt.target.add(iet);	  		 		

+		  		 		

+		  		 		var ztm = new ARG!AssertedInference;

+		  		 		ztm.name = "Cltd_Atm"; 

+				 		ztm.source.add(cltd);

+				 		ztm.target.add(art);

+						//var stre5 = "AssertedInference = " + ztm.target.name;

+						//stre5.println();

+						//var stre6 = "AssertedInference = " + ztm.source.name;

+						//stre6.println();

+		  		 		

+		  		   		arg.argument.add(xt);

+		  		 		arg.argument.add(yt);		

+		  		 		arg.argument.add(clt);

+		  		 		arg.argument.add(iet);	

+		  		 		arg.argument.add(ztm);	

+					}	

+				}

+			

+					

+			}	

+			

+		

+		}

+

+		arg.argument.add(acl);

+	}

+	

+	

+	

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

+	//var res = source.select(act|act.isTypeOf(LIB!Activity));

+//}

+

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

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

+	td.id.println();

+}

+

+operation Any getTaskDescriptor(id:String):LIB!BreakdownElement{

+	return LIB!TaskDescriptor.allInstance.selectOne(td|td.id=id);

+}

+	

+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));

+	}

+	for(a in self.additionallyPerformedBy){

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

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

+		//strr3.println();

+	}

+	for(asi in self.assistedBy){

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

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

+		//strr4.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));

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

+		//strr5.println();

+	}

+	return res;

+}

+

+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 getChecklists():Set(LIB!Checklist){

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

+	for(che in self.checklist){

+		res.add(LIB!Checklist.allInstances.selectOne(checklist|checklist.id=che));

+		//var strr4 = "check = " + checklist;

+		//strr4.println();

+	}

+	return res;

+}

+

+operation LIB!TaskDescriptor getExamples():Set(LIB!Example){

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

+			for(exp in self.example){

+			res.add(LIB!Example.allInstances.selectOne(example|example.id=exp));

+					//var stre6 = "expl = " + exp;

+					//stre6.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!ToolMentor getTool():LIB!Tool{

+	return LIB!Tool.allInstances.selectOne(tool|tool.toolMentor.contains(self.id));

+}

+

+	

+

+post{	

+"End of transformation".println();

+}

+

+

+

+

diff --git a/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2assetspackage.etl b/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2assetspackage.etl
new file mode 100644
index 0000000..6246f89
--- /dev/null
+++ b/org.eclipse.opencert.apm.assurproj.wizards/epsilon/epf2assetspackage.etl
@@ -0,0 +1,686 @@
+// EPF -> LIB;CONF

+// OpenCert -> ART;PRO;AA

+

+

+pre {

+  'Running ETL'.println();

+  var conSelection;	

+  // We detect the situation in which there are more than one process component

+  var processComponentList=CONF!ProcessComponent.allInstances;

+  if (processComponentList.size()>1){

+  	// We need to inspect the opencert_export category

+  	var exportCategory=CONF!CustomCategory.allInstances.selectOne(cc|cc.name="opencert_export");

+  	var processId=exportCategory.categorizedElement.first();

+  	var containerProcessComponent=LIB!ProcessComponent.allInstances.selectOne(pc|pc.process.id=processId);

+  	conSelection=new Sequence;

+  	conSelection.add(containerProcessComponent.id);

+  	// We add the process component of the extended capability patterns

+  	for(patterns in containerProcessComponent.process.includesPattern){

+  		conSelection.add(LIB!ProcessComponent.allInstances.selectOne(pc|pc.process.id=patterns).id);

+  			

+  	} 

+  }else{

+  	var methodConfSelectionValue=CONF!MethodElementProperty.

+  		allInstances.selectOne(ite : CONF!MethodElementProperty | ite.name.equals("Config_doneLoadCheckPkgs")).value;

+  	conSelection=methodConfSelectionValue.split("/");	

+  }

+}

+

+rule ProcessComponent2ProcessModel

+	transform l : LIB!ProcessComponent

+	to p : PRO!ProcessModel,artm:ART!ArtefactModel{

+	guard :conSelection.includes(l.id) and l.process.isTypeOf(LIB!DeliveryProcess)

+		p.name=l.process.name;

+		p.id=l.process.id;

+		p.description=l.process.briefDescription;

+		artm.name=l.name;

+		artm.id=l.id;

+		artm.description=l.briefDescription;

+		

+		for (task in LIB!TaskDescriptor.allInstances.select(td|td.isPPEInConfiguration())){//l.getTaskDescriptors(l.process.breakdownElement)) {

+			//"Tasks".println();

+			//task.name.println();

+			p.ownedActivity.add(task.equivalent());

+		}

+		for(activity in LIB!Activity.allInstances.select(act|act.isPPEInConfiguration() and act.isTypeOf(LIB!Activity))){//l.getActivities(l.process.breakdownElement)){

+			//activity.name.println();

+			p.ownedActivity.add(activity.equivalent());

+		}

+		for(pattern in LIB!CapabilityPattern.allInstances.select(cp|cp.isCapabilityPatternInConfiguration() and (not cp.isOriginalCapabilityPattern()))){//l.getCapabilityPatterns(l.process.breakdownElement)){

+			//pattern.name.println();

+			p.ownedActivity.add(pattern.equivalent());

+		}

+		for(rd in LIB!RoleDescriptor.allInstances.select(r|r.isPPEInConfiguration())){//l.getRoleDescriptors(l.process.breakdownElement)){

+			//rd.name.println();

+			p.ownedParticipant.add(rd.equivalent());

+		}

+		

+		// Guidelines -> Techniques

+		for(guideline in LIB!Guideline.allInstances.select(gui|gui.isGuidelineInConfiguration())){

+			p.ownedTechnique.add(guideline.equivalent());

+		}

+		

+		// Practices -> Techniques

+		for(practice in LIB!Practice.allInstances.select(pra|pra.isPracticeInConfiguration())){

+			p.ownedTechnique.add(practice.equivalent());

+		}

+		

+		for(toolMentor in LIB!ToolMentor.allInstances.select(tm|tm.isToolMentorInConfiguration())){

+			p.ownedParticipant.add(toolMentor.equivalent());

+		}

+		

+		for(wpd in LIB!Artifact.allInstances){

+			artm.artefact.add(wpd.equivalent());

+		}

+		// Organizations can come from TeamProfiles and RoleSets

+		// Only rolesets with roles that are used in the process are added to the process model

+		for(rs in LIB!RoleSet.allInstances.select(ins|ins.isRoleSetInConfiguration())){

+			p.ownedParticipant.add(rs.equivalent());

+		}

+		// All TeamProfiles that are in the configuration can be an organization

+		for(tp in l.process.breakdownElement.select(be|be.isTypeOf(LIB!TeamProfile))){//LIB!TeamProfile.allInstances.select(tpins|tpins.isPPEInConfiguration())){

+			p.ownedParticipant.add(tp.equivalent());	

+		}

+			

+}

+

+rule Practice2Technique

+	transform pra:LIB!Practice

+	to te:PRO!Technique{

+		guard : pra.isPracticeInConfiguration()

+		te.id=pra.id;

+		te.name=pra.name;

+		te.description=pra.briefDescription;

+}

+

+rule TeamProfile2Organization

+	transform tp:LIB!TeamProfile

+	to org:PRO!Organization{

+		guard : tp.isPPEInConfiguration()

+		org.id=tp.id;

+		org.name=tp.name;

+		org.description=tp.briefDescription;

+		for(subTeam in tp.subTeam){

+			org.subOrganization.add(tp.getTeamProfile(subTeam).equivalent());

+		}	

+	}

+

+rule RoleSet2Organization

+	transform rs:LIB!RoleSet

+	to org:PRO!Organization{

+		guard :rs.isRoleSetInConfiguration()

+		//"El nombre del RoleSet es ".concat(rs.name).println();

+		org.id=rs.id;

+		org.name=rs.name;

+		org.description=rs.briefDescription;

+	}

+

+rule Artifact2ArtifactDefinition

+	transform arti:LIB!Artifact

+	to artDef:ART!ArtefactDefinition{

+		artDef.name=arti.name;

+		artDef.id=arti.id;

+		artDef.description=arti.briefDescription;

+		// obtenemos la referencia a todos los artefactos

+		var wpDescriptorList=LIB!WorkProductDescriptor.allInstances.select(wpd|wpd.workProduct=arti.id and wpd.isPPEInConfiguration());

+		for(wpi in wpDescriptorList){

+			//wpi.name.println();

+			artDef.artefact.add(wpi.equivalent());

+		}

+	}

+

+rule WorkProductDescriptor2Artefact

+	transform wp:LIB!WorkProductDescriptor

+	to art:ART!Artefact{

+		guard :(wp.isArtifact() and wp.isPPEInConfiguration())//conSelection.contains(wp.getContainerProcessComponent().id))

+		art.name=wp.name;

+		art.id=wp.id;

+		art.description=wp.briefDescription;

+}

+

+	

+rule Guideline2Technique

+	transform gu:LIB!Guideline

+	to tec:PRO!Technique{

+		guard :gu.isGuidelineInConfiguration()

+		tec.name=gu.name;

+		tec.id=gu.id;

+		tec.description=gu.briefDescription;

+	}

+

+rule RoleDescriptor2Person

+	transform rd:LIB!RoleDescriptor

+	to per:PRO!Person{

+		guard :rd.isPPEInConfiguration()

+		per.name=rd.name;

+		per.id=rd.id;

+		per.description=rd.briefDescription;

+		for(art in rd.getResponsibleForArtefacts()){

+			per.ownedArtefact.add(art.equivalent());

+		}

+		// Membership from organizations

+		// RoleSet -> If the Role associated to the RoleDescriptor is member of the organization

+		if(rd.role<>null){

+			for(rs in LIB!RoleSet.allInstances.select(roleSet|roleSet.role.includes(rd.role))){

+				per.organization.add(rs.equivalent());

+			}

+		}

+		// TeamProfile

+		for(tp in LIB!TeamProfile.allInstances.select(tpIns|tpIns.isPPEInConfiguration() and tpIns.role.includes(rd.id))){

+			per.organization.add(tp.equivalent());	

+		}

+}

+

+rule RoleSet2Organization

+	transform rs:LIB!RoleSet

+	to org:PRO!Organization{

+		guard : rs.isRoleSetInConfiguration()

+		org.name=rs.name;

+		org.id=rs.id;

+		org.description=rs.briefDescription;

+}

+

+rule TaskDescriptor2Activity

+	transform l: LIB!TaskDescriptor

+	to act:PRO!Activity{

+	guard :l.isPPEInConfiguration()//conSelection.contains(l.getContainerProcessComponent().id)

+		

+		act.name=l.name;

+		act.id=l.id;

+		act.description=l.briefDescription;

+		// Participants equivalent to roles

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

+			act.participant.add(rd.equivalent());

+		}

+		// Participant equivalent to tools

+		if(l.task<>null){

+			var task=LIB!Task.allInstances.selectOne(t|t.id=l.task);

+			var toolMentor;

+			for (toolMentorId in task.toolMentor){

+				act.participant.add(LIB!ToolMentor.allInstances.selectOne(tm|tm.id=toolMentorId).equivalent());

+			}

+		}

+		// artefacts required

+		// mandatoryInput, externalInput and optionalInput

+		for(id in l.externalInput){

+			act.requiredArtefact.add(LIB!WorkProductDescriptor.allInstances.selectOne(wpd|wpd.id=id).equivalent());

+		}

+		for(id in l.optionalInput){

+			act.requiredArtefact.add(LIB!WorkProductDescriptor.allInstances.selectOne(wpd|wpd.id=id).equivalent());

+		}

+		for(id in l.mandatoryInput){

+			act.requiredArtefact.add(LIB!WorkProductDescriptor.allInstances.selectOne(wpd|wpd.id=id).equivalent());

+		}

+		// artefacts produced

+		for(id in l.output){

+			act.producedArtefact.add(LIB!WorkProductDescriptor.allInstances.selectOne(wpd|wpd.id=id).equivalent());

+		}

+		// Techniques associated to this task can come from guidelines associated to the taskdescriptor

+		for(guid in l.guideline){

+			act.technique.add(l.getGuideline(guid).equivalent());

+		}

+		// precedent activities -> WorkOrder of the task

+		if(l.predecessor.size()>0){

+			for(pred in l.predecessor.select(p|p.linkType=LIB!WorkOrderType#finishToStart)){

+				act.precedingActivity.add(getWorkBreakdownElementById(pred.value).equivalent());

+			}		

+		}

+	}

+	

+

+	

+rule TooMentor2Tool

+	transform et:LIB!ToolMentor

+	to ot:PRO!Tool{

+	guard :et.isToolMentorInConfiguration()

+		var tool=et.getTool();

+		ot.id=tool.id;

+		ot.name=tool.name;

+		ot.description=tool.briefDescription;

+	}

+

+rule CapabilityPattern2Activity

+	transform cp: LIB!CapabilityPattern

+	to act:PRO!Activity{

+	guard : ((cp.isCapabilityPatternInConfiguration()) and (not cp.isExtendedCapabilityPattern())

+			and (not cp.isOriginalCapabilityPattern()))//not cp.isContainedInProcessComponent()

+		//cp.getProcessComponentName().println();

+		//"Se ejecuta original capability pattern".println();

+		act.name=cp.name;

+		act.id=cp.id;

+		for (task in cp.getTaskDescriptors(cp.breakdownElement)) {

+			act.subActivity.add(task.equivalent());

+		}

+		for(activity in cp.getActivities(cp.breakdownElement)){

+			//activity.name.println();

+			act.subActivity.add(activity.equivalent());

+		}

+		for (pattern in cp.getCapabilityPatterns(cp.breakdownElement)){

+			//pattern.name.println();

+			act.subActivity.add(pattern.equivalent());

+		}

+		// Techniques associated to this capability pattern can come from guidelines

+		for(guid in cp.guideline){

+			act.technique.add(l.getGuideline(guid).equivalent());

+		}

+		// precedent activities -> WorkOrder of the task

+		if(cp.predecessor.size()>0){

+			for(pred in cp.predecessor.select(p|p.linkType=LIB!WorkOrderType#finishToStart)){

+				act.precedingActivity.add(getWorkBreakdownElementById(pred.value).equivalent());

+			}		

+		}	

+	}

+

+rule ExtendedCapabilityPattern2Activity

+	transform cp: LIB!CapabilityPattern

+	to act:PRO!Activity{

+	guard : ((cp.isCapabilityPatternInConfiguration()) and (cp.isExtendedCapabilityPattern()) 

+	and (not cp.isOriginalCapabilityPattern()))

+		// We obtain the original capability pattern.

+		var originalCP=LIB!CapabilityPattern.allInstances.selectOne(ocp|ocp.id=cp.variabilityBasedOnElement);

+		act.name=cp.name;

+		act.id=cp.id;

+		var auxActivity;

+		for (task in originalCP.getTaskDescriptors(originalCP.breakdownElement)) {

+			act.subActivity.add(task.equivalent());

+		}

+		for(activity in originalCP.getActivities(originalCP.breakdownElement)){

+			//activity.name.println();

+			act.subActivity.add(activity.equivalent());

+		}

+		for (pattern in originalCP.getCapabilityPatterns(originalCP.breakdownElement)){

+			//pattern.name.println();

+			act.subActivity.add(pattern.equivalent());

+		}

+		// Techniques associated to this capability pattern can come from guidelines

+		for(guid in originalCP.guideline){

+			act.technique.add(cp.getGuideline(guid).equivalent());

+		}

+		// precedent activities -> WorkOrder of the task

+		if(cp.predecessor.size()>0){

+			for(pred in cp.predecessor.select(p|p.linkType=LIB!WorkOrderType#finishToStart)){

+				act.precedingActivity.add(getWorkBreakdownElementById(pred.value).equivalent());

+			}		

+		}	

+	}

+

+rule Activity2Activity

+	transform a : LIB!Activity

+	to act:PRO!Activity{

+	guard :conSelection.contains(a.getContainerProcessComponent().id)

+		//"Se aplica Activity2Activity a ".concat(a.name).println();

+		//l.name.println();

+		act.name=a.name;

+		act.id=a.id;

+		

+		for (task in a.getTaskDescriptors(a.breakdownElement)) {

+			act.subActivity.add(task.equivalent());

+		}

+		for(activity in a.getActivities(a.breakdownElement)){

+			//activity.name.println();

+			act.subActivity.add(activity.equivalent());

+		}

+		

+		for (pattern in a.getCapabilityPatterns(a.breakdownElement)){

+			//pattern.name.println();

+			act.subActivity.add(pattern.equivalent());

+		}

+		// Techniques associated to this capability pattern can come from guidelines aand practices

+		// definition

+		for(guid in a.guideline){

+			act.technique.add(a.getGuideline(guid).equivalent());

+		}

+		

+		// precedent activities -> WorkOrder of the task

+		if(a.predecessor.size()>0){

+			for(pred in a.predecessor.select(p|p.linkType=LIB!WorkOrderType#finishToStart)){

+				act.precedingActivity.add(getWorkBreakdownElementById(pred.value).equivalent());

+			}		

+		}

+	}

+	

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

+	var res = source.select(act|act.isTypeOf(LIB!TaskDescriptor));

+	//res.size().println();

+	return res;

+}

+

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

+	var res = source.select(act|act.isTypeOf(LIB!Activity));

+	//res.size().println();

+	return res;

+}	

+

+operation Any getCapabilityPatterns(source : Set(LIB!BreadkDownElement)):Set(LIB!CapabilityPattern) {

+	var res = source.select(act|act.isTypeOf(LIB!CapabilityPattern));

+	//res.size().println();

+	return res;

+}

+

+operation Any getRoleDescriptors(source : Set(LIB!BreadkDownElement)):Set(LIB!RoleDescriptor){

+	return source.select(rd|rd.isTypeOf(LIB!RoleDescriptor));

+}

+

+operation Any getWorkProductDescriptors(source : Set(LIB!BreadkDownElement)):Set(LIB!WorkProductDescriptor){

+	return source.select(rd|rd.isTypeOf(LIB!WorkProductDescriptor));

+}

+

+operation LIB!WorkProductDescriptor isArtifact():Boolean{

+	return LIB!Artifact.allInstances.exists(art|art.id=self.workProduct);

+}

+

+/*operation LIB!CapabilityPattern isContainedInProcessComponent():Boolean{

+	var res=LIB!ProcessComponent.allInstances.exists(pc|pc.process.id=self.id);

+	//self.name.println();

+	//res.println();

+	return res;

+}*/

+

+operation LIB!Process getProcessComponentName():String{

+	var pc=LIB!ProcessComponent.allInstances.select(pc|pc.process.id=self.id);

+	if(pc.isEmpty()){

+		return "No tiene processComponent";

+	}else{

+		return pc.first().id;

+	}

+}

+

+// A process element can be contained in a process in two ways

+// As a part of its list of processElement

+// As one of the breakdown elements included in its contained process.

+operation Any getContainerProcessComponent():LIB!ProcessComponent{

+	var res;

+	// 1. List of processElements of the process components included in the library.

+	res=LIB!ProcessComponent.allInstances.selectOne(pe|pe.processElement.includes(self));

+	if(res=null){

+	// Breakdown element

+		if (self.superActivity=null){

+			res=LIB!ProcessComponent.allInstances.selectOne(pc|pc.process.id=self.id);	

+		}else{

+			res=LIB!BreakdownElement.allInstances.selectOne(su|su.id=self.superActivity).getContainerProcessComponent();	

+		}

+	}

+	return res;

+}

+

+operation Any getRoleDescriptor(id:String):LIB!BreakdownElement{

+	return LIB!RoleDescriptor.allInstance.selectOne(rd|rd.id=id);

+}

+

+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));

+	}

+	for(a in self.additionallyPerformedBy){

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

+	}

+	for(asi in self.assistedBy){

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

+	}

+	return res;

+}

+

+operation LIB!RoleDescriptor getResponsibleForArtefacts():Set(LIB!WorkProductDescriptor){

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

+	var wp;

+	for(wp_id in self.responsibleFor){

+		wp=LIB!WorkProductDescriptor.allInstances.selectOne(ins|ins.id=wp_id);

+		if(wp.isArtifact()){

+			res.add(wp);

+		}

+	}

+	//res.size().println();

+	return res;

+}

+

+operation LIB!Process getGuidelines():Set(LIB!Guideline){

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

+	for(gId in self.guideline){

+		res.add(LIB!Guideline.allInstances.selectOne(guideline|guideline.id=gId));

+	}

+	return res;

+}

+

+operation Any getGuideline(guidelineId:String):LIB!Guideline{

+	return LIB!Guideline.allInstances.selectOne(guid|guid.id=guidelineId);

+}

+

+// Esto hay que modificarlo para tener en cuenta que una guideline puede estar contenida en cualquier tipo de elemento que desciende 

+// de breakdownelement

+// Una guideline está incluida en la configuración si esta enlazada a un elemento que está en la configuración.

+operation LIB!Guideline isGuidelineInConfiguration():Boolean{

+	var breakDownElements=LIB!BreakdownElement.allInstances.select(be|be.guideline.includes(self.id));

+	var res=false;

+	var i=0;

+	while(i<breakDownElements.size() and not res){

+		if(breakDownElements.at(i).isPPEInConfiguration()){

+			res=true;

+		}

+		i++;

+	}

+	return res;

+}

+

+operation LIB!ToolMentor isToolMentorInConfiguration():Boolean{

+	var taskSet=LIB!Task.allInstances.select(t|t.toolMentor.contains(self.id));

+	var taskSetString=new Set(String);

+	for(task in taskSet){

+		taskSetString.add(task.id);

+	}

+	// Se seleccionan todas las tareas que tienen referencia al task que incluye el toolMentor

+	var taskDescriptorSet=LIB!TaskDescriptor.allInstances.select(td|taskSetString.includes(td.task));

+	var res=false;

+	var i=0;

+	var pc;

+	// Si alguna de estos task descriptors está en la configuración -> el ToolMentor está en la configuración

+	while(i<taskDescriptorSet.size() and not res){

+		if(taskDescriptorSet.at(i).isPPEInConfiguration()){

+			res=true;

+		}

+		i++;

+	}

+	return res;

+}

+

+operation LIB!TaskDescriptor getTools():Set(LIB!Tool){

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

+	var candTool;

+	// 1. Encontramos la tarea asociada

+	var task=LIB!Task.allInstances.selectOne(t|t.id=self.task);

+	// 2. Encontramos todos los tools asociados a los tool mentors de la tarea

+	if(task<>null){

+		for(tool in LIB!Tool.allInstances){

+			for(toolMentor in task.toolMentor){

+				if(tool.toolMentor.includes(toolMentor)){

+					if(not res.incudes(tool)){

+						res.add(tool);

+					}

+				}

+			}

+		}

+	}

+	return res;

+}

+

+operation LIB!ToolMentor getTool():LIB!Tool{

+	return LIB!Tool.allInstances.selectOne(tool|tool.toolMentor.contains(self.id));

+}

+

+// This method returns true if the process element is part of the configuration that is passed as second model

+operation Any isPPEInConfiguration():Boolean{

+	//self.name.println();

+	var pc=self.getContainerProcessComponent();

+	return conSelection.contains(pc.id);

+}

+

+// This method determine if a RoleSet is involved in the process given in the 

+// configuration.

+// roleIdList is the list of the id of the Role used in the process

+operation LIB!RoleSet isRoleSetInConfiguration():Boolean{

+		var roleList=new Set(String);

+		roleList=self.getRolesFromConfiguration();

+		return self.role.exists(roleId|roleList.includes(roleId));

+}

+

+// A capability pattern can be part of the configuration in two cases

+// 1. It is contained in a process component that is the process component selected in the configuration.

+// 2. It is included in a process or other capability pattern which is part of the configuration.

+operation LIB!CapabilityPattern isCapabilityPatternInConfiguration():Boolean{

+	// The process component associated to the capability pattern is the process component of the configuration

+	var res=false;

+	if (LIB!ProcessComponent.allInstances.exists(pc|pc.process.id=self.id)){

+		if(conSelection.contains(LIB!ProcessComponent.allInstances.selectOne(pc|pc.process.id=self.id).id)){

+			res=true;

+		}		

+	}else{

+		res=self.isPPEInConfiguration();	

+	}

+	return res;	

+}

+

+// This operation obtain all the identifications fo the role defintions associated to the roledescriptors in the process passed in the configuration

+operation Any getRolesFromConfiguration():Set(String){

+	var roleIdList=new Set(String);

+	for(rd in LIB!RoleDescriptor.allInstances.select(r|r.isPPEInConfiguration())){//l.getRoleDescriptors(l.process.breakdownElement)){

+			if(rd.role<>null){

+				roleIdList.add(rd.role);

+			}

+		}

+	return roleIdList;

+}

+

+// Get the TeamProfile element with the id passed as argument.

+operation LIB!TeamProfile getTeamProfile(subTeamId:String):LIB!TeamProfile{

+	return LIB!TeamProfile.allInstances.selectOne(tp|tp.id=subTeamId);

+}

+

+// A practice is in a configuration if one of the elements of its reference section (for content or activities) is in the configuration

+operation LIB!Practice isPracticeInConfiguration():Boolean{

+	// First checking the activities

+	var res=false;

+	var activityReferenceList=self.activityReference.getListActivitiesById();

+	if(activityReferenceList.exists(ca|ca.isPPEInConfiguration())){

+		res=true;

+	// Checking method content elements and practices -> contentReference (Guidance is considered content element)

+	}else{

+		var i=0;

+		var descriptorList=getConfigurationDescriptors();

+		// Checking Descriptors -> Descriptor can be a WorkProductDescriptor or a RoleDescriptor 

+		while((not res) and (i<descriptorList.size())){

+			if(descriptorList.at(i).isTypeOf(LIB!WorkProductDescriptor)){

+				if(descriptorList.at(i).workProduct<>null){

+					res=self.contentReference.includes(descriptorList.at(i).workProduct);

+				}

+			}else{

+				if(descriptorList.at(i).role<>null){

+					res=self.contentReference.includes(descriptorList.at(i).role);

+				}

+			}

+			i++;

+		}

+		// Checking the taskdescriptors

+		if(not res){

+			var taskDescriptorList=getConfigurationTaskDescriptors();

+			i=0;

+			while((not res) and (i<taskDescriptorList.size())){

+				if(taskDescriptorList.at(i).task<>null){

+					res=self.contentReference.includes(taskDescriptorList.at(i).task);

+				}

+				i++;

+			}	

+		}

+		// Checking the guidelines, which is the only type of guidance of relevance for the process model.

+		// Practices are of relevance too but they cannot be attached to a process.

+		if(not res){

+			var configurationGuidelineList=getGuidelinesInConfiguration();

+			i=0;

+			while((not res) and (i<configurationGuidelineList.size())){

+				res=self.contentReference.includes(configurationGuidelineList.at(i).id);

+				i++;

+			}		

+		}

+			

+	}

+	return res;

+}

+

+// Get the content element with the id passed in self

+operation String getContentElementById():LIB!ContentElement{

+	return LIB!ContentElement.allInstances.selectOne(ce|ce.id=self);

+}

+

+// Get a list of content elements whose id is included in the list passed in self

+operation Set(String) getListContentElementById():Set(LIB!ContentElement){

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

+	for(ce in LIB!ContentElement.allInstances){

+		if(self.includes(ce.id)){

+			res.add(ce);

+		}

+	}

+	return res;

+}

+

+// Get a list of activities whose id is included in the list passed in Self

+operation Sequence(String) getListActivitiesById():Set(LIB!Activity){

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

+	for(act in LIB!Activity.allInstances){

+		if(self.includes(act.id)){

+			res.add(act);

+		}

+	}

+	return res;

+}

+

+operation getConfigurationDescriptors():Sequence(LIB!Descriptor){

+	return LIB!Descriptor.allInstances.select(des|des.isPPEInConfiguration());

+}

+

+operation getConfigurationTaskDescriptors():Sequence(LIB!TaskDescriptor){

+	return LIB!TaskDescriptor.allInstances.select(td|td.isPPEInConfiguration());

+}

+

+operation getGuidelinesInConfiguration():Sequence(LIB!Guideline){

+	return LIB!Guideline.allInstances.select(gui|gui.isGuidelineInConfiguration());

+}

+

+operation LIB!WorkOrder isWorkOrderInConfiguration():Boolean{

+	var res=false;

+	var workBreakdownInConf=LIB!WorkBreakdownElement.allInstances.select(wbe|wbe.isPPEInConfiguration);

+	var i=0;

+	while((not res) and (i<workBreakdownInConf.size())){

+		if(workBreakdownInConf.at(i).predecessor.includes(self)){

+			res=true;

+		}

+		i++;

+	}

+	return res;

+}

+

+operation getWorkBreakdownElementById(id : String):LIB!WorkBreakdownElement{

+	return LIB!WorkBreakdownElement.allInstances.selectOne(wbe|wbe.id=id);

+}

+

+operation LIB!CapabilityPattern isExtendedCapabilityPattern():Boolean{

+	return self.variabilityType<>LIB!VariabilityType#na and self.variabilityType<>LIB!VariabilityType#contributes

+		and self.variabilityType<>LIB!VariabilityType#replaces and self.variabilityType<>LIB!VariabilityType#localContribution

+		and self.variabilityType<>LIB!VariabilityType#localReplacement and self.variabilityType<>LIB!VariabilityType#extendsReplaces;

+}

+

+operation LIB!CapabilityPattern isOriginalCapabilityPattern():Boolean{

+	var res=false;

+	var processComponent=LIB!ProcessComponent.allInstances.selectOne(pc|pc.process.id=self.id);

+	if(processComponent<>null){

+		res=true;

+	}

+	return res;

+	

+}

+

+

+post{

+"End of transformation".println();

+}

+

+

diff --git a/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd b/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd
new file mode 100644
index 0000000..6c71b8e
--- /dev/null
+++ b/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd
@@ -0,0 +1,1447 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EPF UMA XML Data Interchange Schema -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:uma="http://www.eclipse.org/epf/uma/1.0.6" targetNamespace="http://www.eclipse.org/epf/uma/1.0.6">
+	<xsd:simpleType name="WorkOrderType">
+		<xsd:annotation>
+			<xsd:documentation>Represents a relationship between two Breakdown Element in which one Breakdown Element depends on the start or finish of another Breakdown Element 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:NCName">
+			<xsd:enumeration value="finishToStart"/>
+			<xsd:enumeration value="finishToFinish"/>
+			<xsd:enumeration value="startToStart"/>
+			<xsd:enumeration value="startToFinish"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:simpleType name="VariabilityType">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:NCName">
+			<xsd:enumeration value="na"/>
+			<xsd:enumeration value="contributes"/>
+			<xsd:enumeration value="extends"/>
+			<xsd:enumeration value="replaces"/>
+			<xsd:enumeration value="localContribution"/>
+			<xsd:enumeration value="localReplacement"/>
+			<xsd:enumeration value="extendsReplaces"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	<xsd:complexType name="Element">
+		<xsd:annotation>
+			<xsd:documentation>A UML 2.0 meta-class Element.</xsd:documentation>
+		</xsd:annotation>
+	</xsd:complexType>
+	<xsd:complexType name="NamedElement">
+		<xsd:annotation>
+			<xsd:documentation>A UML 2.0 meta-class Named Element.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Element">
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="PackageableElement">
+		<xsd:annotation>
+			<xsd:documentation>A UML 2.0 meta-class Packagable Element.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:NamedElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ApplicableMetaClassInfo">
+		<xsd:complexContent>
+			<xsd:extension base="uma:PackageableElement">
+				<xsd:attribute name="isPrimaryExtension" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="MethodElement">
+		<xsd:annotation>
+			<xsd:documentation>The root generalization for all UMA Method Elements.  Defines a common set of attributes inherited by all UMA Method Elements.  Method Element itself is derived from Packageable Element from the UML 2.0 Infrastructure.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:PackageableElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="OwnedRule" type="uma:Constraint">
+						<xsd:annotation>
+							<xsd:documentation>Defines the packaging rules for this Method Element.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="MethodElementProperty" type="uma:MethodElementProperty"/>
+				</xsd:choice>
+				<xsd:attribute name="id" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every instance of Method Element has a global unique id.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="briefDescription" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every instance of Method Element shall be briefly described with one or two sentences summarizing the element.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="suppressed" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="orderingGuide" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Used for CASE tool realizations of this model to contain information about layout and ordering of the method element and its parts.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="presentationName" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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 "rup_architecture_document" to differentiate from a "j2ee_architcture_document" whereas the external presentation would always be "Architecture Document".</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Constraint">
+		<xsd:annotation>
+			<xsd:documentation>A generalized 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:attribute name="mainDescription" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Stores the main definition of the constraint.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="MethodElementProperty">
+		<xsd:complexContent>
+			<xsd:extension base="uma:PackageableElement">
+				<xsd:attribute name="value" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Section">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:sequence>
+					<xsd:element name="SubSection" type="uma:Section" minOccurs="0"/>
+					<xsd:element name="Predecessor" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Description" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>This attributes store the description text for a Content Description's Section.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+				<xsd:attribute name="sectionName" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="variabilityType" type="uma:VariabilityType"/>
+				<xsd:attribute name="variabilityBasedOnElement" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="MethodUnit">
+		<xsd:annotation>
+			<xsd:documentation>A special Method Element that shall be maintained in a Method Library as a separate unit of control.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:sequence>
+					<xsd:element name="Copyright" type="xsd:string" minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="authors" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every Method Unit is being created and owned by an author or authoring team.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="changeDate" type="xsd:dateTime">
+					<xsd:annotation>
+						<xsd:documentation>The date the last change that resulted into this version has been made.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="changeDescription" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>The description of the last change that resulted into this version.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="version" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every Package has a version number used to track changes.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ContentDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized 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. </xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodUnit">
+				<xsd:sequence>
+					<xsd:element name="MainDescription" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Stores 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).</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="KeyConsiderations" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Provides advise and guidance of a critical nature for the content element as well as warnings, cautions, pitfalls, dangers.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Section" type="uma:Section" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="externalId" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>An external visible number that is used to reference this artifact. Used like a synonym.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="GuidanceDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Guidance.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:choice minOccurs="0">
+					<xsd:element name="Attachment" type="xsd:string">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="PracticeDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Practice.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:sequence>
+					<xsd:element name="AdditionalInfo" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Any additional Information not covered by the other attributes.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Application" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Describes how the Practice is being applied or introduced into the context described in background.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Background" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Elaboration on the background and the context in which the problem occurs and where the solution described by this Practice will fit in.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Goals" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>A summary of the overall goals to be addressed by the Practice.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="LevelsOfAdoption" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Outlines the different forms or variants in which the practice could be realized. (e.g. full adoption verus a partial adoption of the Practice)</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Problem" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>A description of the problem the Practice addresses.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkProductDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Work Product.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:sequence>
+					<xsd:element name="ImpactOfNotHaving" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Purpose" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Describes why the work product is produced and to what use it will be put.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="ReasonsForNotNeeding" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ArtifactDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Work Product Description that is used to store the textual description for an Artifact.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkProductDescription">
+				<xsd:sequence>
+					<xsd:element name="BriefOutline" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="RepresentationOptions" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Representation" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Notation" type="xsd:string" minOccurs="0"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DeliverableDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Work Product Description that is used to store the textual description for a Deliverable.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkProductDescription">
+				<xsd:sequence>
+					<xsd:element name="ExternalDescription" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="PackagingGuidance" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="RoleDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Role.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:sequence>
+					<xsd:element name="AssignmentApproaches" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Skills" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Lists of set of required skills a person needs to possess to fulfill that Role.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Synonyms" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="TaskDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Task.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:sequence>
+					<xsd:element name="Alternatives" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>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.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Purpose" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Summarizes the main reason for performing this Task and what is intended to be achieved.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DescribableElement">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.  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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:sequence>
+					<xsd:choice minOccurs="0">
+						<xsd:element name="Presentation" type="uma:ContentDescription"/>
+					</xsd:choice>
+					<xsd:element name="Fulfill" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="shapeicon" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="nodeicon" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>A reference to an icon that can be used in tree browser presentations and breakdown structures.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="isAbstract" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ContentElement">
+		<xsd:annotation>
+			<xsd:documentation>A Describable Element that represents an abstract generalization for all elements that are considered to be and managed as Method Content.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:DescribableElement">
+				<xsd:sequence>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="Checklist" type="xsd:string"/>
+						<xsd:element name="Concept" type="xsd:string"/>
+						<xsd:element name="Example" type="xsd:string"/>
+						<xsd:element name="Guideline" type="xsd:string"/>
+						<xsd:element name="ReusableAsset" type="xsd:string"/>
+						<xsd:element name="SupportingMaterial" type="xsd:string"/>
+						<xsd:element name="Whitepaper" type="xsd:string"/>
+					</xsd:choice>
+				</xsd:sequence>
+				<xsd:attribute name="variabilityType" type="uma:VariabilityType"/>
+				<xsd:attribute name="variabilityBasedOnElement" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Kind">
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement">
+				<xsd:sequence>
+					<xsd:element name="ApplicableMetaClassInfo" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Guidance">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Concept">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Checklist">
+		<xsd:annotation>
+			<xsd:documentation>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. </xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Example">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Guideline">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Estimate">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of Guidance that provides sizing measures, or standards for sizing the work effort associated with performing a particular piece of work and instructions for their successful use. It may be comprised of estimation considerations and estimation metrics.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="EstimationMetric" type="xsd:string"/>
+					<xsd:element name="EstimationConsiderations" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="EstimatingMetric">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of Guidance that describes a metric or measure that is associated with an element and which is used to calculate the size of the work effort as well as a range of potential labor.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="EstimationConsiderations">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of Guidance that qualifies the usage and application of estimation metrics in the development of an actual estimate.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Roadmap">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of Guidance 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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Report">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Template">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="SupportingMaterial">
+		<xsd:annotation>
+			<xsd:documentation>A 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ToolMentor">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Whitepaper">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Concept"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="TermDefinition">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of guidance that defines concepts and are used to build up the Glossary. TermDefinitions are not directly related to ContentElements, but their relationship is being derived when the Term is used in the ContentElements description text.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Practice">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of guidance that 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 "Manage Risks", "Continuously verify quality", "Architecture-centric and component-based development", etc.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ActivityReference" type="xsd:string"/>
+					<xsd:element name="ContentReference" type="xsd:string"/>
+					<xsd:element name="SubPractice" type="uma:Practice"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ReusableAsset">
+		<xsd:annotation>
+			<xsd:documentation>A specific type of guidance that 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
+how the asset should be used.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Guidance"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkProduct">
+		<xsd:annotation>
+			<xsd:documentation>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.
+A work product is an abstraction for descriptions of content elements that are used to define anything used, produced, or modified by a task.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Estimate" type="xsd:string"/>
+					<xsd:element name="EstimationConsiderations" type="xsd:string"/>
+					<xsd:element name="Report" type="xsd:string"/>
+					<xsd:element name="Template" type="xsd:string"/>
+					<xsd:element name="ToolMentor" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Artifact">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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 "own" 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkProduct">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ContainedArtifact" type="uma:Artifact"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Deliverable">
+		<xsd:annotation>
+			<xsd:documentation>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. </xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkProduct">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="DeliveredWorkProduct" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Outcome">
+		<xsd:annotation>
+			<xsd:documentation>A Work Product that 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkProduct"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Role">
+		<xsd:annotation>
+			<xsd:documentation>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.  
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ResponsibleFor" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Task">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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). 
+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. 
+For example, a Task such as "Develop Use Case Model" 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 "method" 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement">
+				<xsd:sequence>
+					<xsd:element name="Precondition" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Postcondition" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="PerformedBy" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="MandatoryInput" type="xsd:string"/>
+						<xsd:element name="Output" type="xsd:string"/>
+						<xsd:element name="AdditionallyPerformedBy" type="xsd:string"/>
+						<xsd:element name="OptionalInput" type="xsd:string"/>
+						<xsd:element name="Estimate" type="xsd:string"/>
+						<xsd:element name="EstimationConsiderations" type="xsd:string"/>
+						<xsd:element name="ToolMentor" type="xsd:string"/>
+					</xsd:choice>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkDefinition">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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).</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:sequence>
+					<xsd:element name="Precondition" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Postcondition" type="xsd:string" minOccurs="0"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ContentCategory">
+		<xsd:annotation>
+			<xsd:documentation>An abstract class generalizing content category types.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Discipline">
+		<xsd:annotation>
+			<xsd:documentation>A categorization of work (i.e. Tasks for Method Content), based upon similarity of concerns and cooperation of work effort.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Task" type="xsd:string"/>
+					<xsd:element name="SubDiscipline" type="uma:Discipline"/>
+					<xsd:element name="ReferenceWorkflow" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DisciplineGrouping">
+		<xsd:annotation>
+			<xsd:documentation>Used to group Disciplines.  For example, the Discipline Grouping "Software Disciplines" would be the group of all disciplines related to developing software such as "Requirements Management" or "Testing"; "IT Infrastructure Management" would be a Disciplines Grouping for disciplines such as "IT Operational Services", "IT Customer Relationships", or "IT Enabling Services".  Disciplines can be associated to more than one Discipline Grouping.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Discipline" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Domain">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="WorkProduct" type="xsd:string"/>
+					<xsd:element name="Subdomain" type="uma:Domain"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="RoleSet">
+		<xsd:annotation>
+			<xsd:documentation>Organizes Roles into categories.  It is used to group roles together that have certain commonalities.  For example, the "Analysts" Role Set could group the "Business Process Analyst", "System Analyst", as well as "Requirements Specifier" 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).</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Role" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="RoleSetGrouping">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="RoleSet" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Tool">
+		<xsd:annotation>
+			<xsd:documentation>A container/aggregate for ToolMentors.  It can also provide general descriptions of the tool and its general capabilities.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ToolMentor" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkProductType">
+		<xsd:annotation>
+			<xsd:documentation>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 "Class Diagram", which categorizes the Artifacts Analysis Model, Design Model, User Experience Model, or "Specification", 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="WorkProduct" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="CustomCategory">
+		<xsd:annotation>
+			<xsd:documentation>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 "Testing" 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentCategory">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="CategorizedElement" type="xsd:string"/>
+					<xsd:element name="SubCategory" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="MethodPackage">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ReusedPackage" type="xsd:string"/>
+					<xsd:element name="MethodPackage" type="uma:MethodPackage"/>
+				</xsd:choice>
+				<xsd:attribute name="global" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ContentPackage">
+		<xsd:annotation>
+			<xsd:documentation>A 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodPackage">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ContentElement" type="uma:ContentElement"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ContentCategoryPackage">
+		<xsd:annotation>
+			<xsd:documentation>A special Method Package that only contains Content Category Elements.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodPackage">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ContentCategory" type="uma:ContentCategory"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessElement">
+		<xsd:annotation>
+			<xsd:documentation>A Describable Element that represents an abstract generalization for all elements defined in the Process package.
+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. </xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:DescribableElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="PlanningData">
+		<xsd:annotation>
+			<xsd:documentation>A Process 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.
+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.
+(NOTE, THE ATTRIBUTES FOR THIS CLASS ARE NOT COMPLETE, YET)</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ProcessElement">
+				<xsd:attribute name="startDate" type="xsd:dateTime">
+					<xsd:annotation>
+						<xsd:documentation>The default start date for a planed Task.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="finishDate" type="xsd:dateTime">
+					<xsd:annotation>
+						<xsd:documentation>The default finish date for a planed Task.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="rank" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>The default rank for a planed Task.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="BreakdownElement">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ProcessElement">
+				<xsd:sequence>
+					<xsd:element name="PresentedAfter" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="PresentedBefore" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="PlanningData" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="SuperActivity" type="xsd:string" minOccurs="0"/>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="Checklist" type="xsd:string"/>
+						<xsd:element name="Concept" type="xsd:string"/>
+						<xsd:element name="Example" type="xsd:string"/>
+						<xsd:element name="Guideline" type="xsd:string"/>
+						<xsd:element name="ReusableAsset" type="xsd:string"/>
+						<xsd:element name="SupportingMaterial" type="xsd:string"/>
+						<xsd:element name="Whitepaper" type="xsd:string"/>
+					</xsd:choice>
+				</xsd:sequence>
+				<xsd:attribute name="prefix" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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. "SRA.Establish Requirements" with SRA indicating that this Activity belongs to the "Software Requirements Analysis" module.  Another common application for prefix is to qualify roles in Role Descriptors.  For example, "Customer.Architect" would define a "Customer" prefix for the Role Descriptor "Architect" expressing that this is an architect on the customer side and not the development team side.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="isPlanned" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.
+</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="hasMultipleOccurrences" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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 "Detail Use Case" 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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="isOptional" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkOrder">
+		<xsd:annotation>
+			<xsd:documentation>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.  
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:simpleContent>
+			<xsd:extension base="xsd:string">
+				<xsd:attribute name="id" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Defines a global unique id for a work order.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="linkType" type="uma:WorkOrderType">
+					<xsd:annotation>
+						<xsd:documentation>This attribute expresses the type of the Work Order relationship by assigning a value from the Work Order Type enumeration.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="properties" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>This attribute store method element property values associated with this work order</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:simpleContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkBreakdownElement">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Predecessor" type="uma:WorkOrder"/>
+				</xsd:choice>
+				<xsd:attribute name="isRepeatable" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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).</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="isOngoing" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="isEventDriven" type="xsd:boolean">
+					<xsd:annotation>
+						<xsd:documentation>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.
+</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Milestone">
+		<xsd:annotation>
+			<xsd:documentation>A special Breakdown Element that 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).</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkBreakdownElement">
+				<xsd:sequence>
+					<xsd:element name="RequiredResult" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Activity">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkBreakdownElement">
+				<xsd:sequence>
+					<xsd:element name="Precondition" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Postcondition" type="xsd:string" minOccurs="0"/>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="BreakdownElement" type="uma:BreakdownElement"/>
+						<xsd:element name="Roadmap" type="xsd:string"/>
+					</xsd:choice>
+				</xsd:sequence>
+				<xsd:attribute name="variabilityType" type="uma:VariabilityType"/>
+				<xsd:attribute name="variabilityBasedOnElement" type="xsd:string"/>
+				<xsd:attribute name="IsEnactable" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Phase">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Activity"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Iteration">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.)</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Activity"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="BreakdownElementDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Content Description that is used to store the textual description for a Breakdown Element.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ContentDescription">
+				<xsd:attribute name="usageGuidance" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ActivityDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Breakdown Element Description that is used to store the textual description for an Activity.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElementDescription">
+				<xsd:sequence>
+					<xsd:element name="Alternatives" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Comprises of summaries describing important exceptional and non-standard ways of doing the work of this Activity not covered by the Activity's Tasks.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="HowToStaff" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Provides background on who should be involved in this activity what are the required skills, experience,  and perhaps attitudes.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="Purpose" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Summarizes the main reason for performing this Activity, describes what the activity as a whole is intended to achieve.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DescriptorDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Breakdown Element Description that is used to store the textual description for a Descriptor.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElementDescription">
+				<xsd:choice minOccurs="0">
+					<xsd:element name="RefinedDescription" type="xsd:string">
+						<xsd:annotation>
+							<xsd:documentation>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. </xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Activity Description that is used to store the textual description for a Process.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ActivityDescription">
+				<xsd:sequence>
+					<xsd:element name="Scope" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Defines the scope of the Process, i.e. which types of projects does it address and which not.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="UsageNotes" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Any additional notes on how to apply and instantiate this process for a project.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DeliveryProcessDescription">
+		<xsd:annotation>
+			<xsd:documentation>A generalized Process Description that is used to store the textual description for a Delivery Process.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ProcessDescription">
+				<xsd:sequence>
+					<xsd:element name="Scale" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Outlines characteristics about the size of a typical project that performs this project expressed in team size, man years, etc.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="ProjectCharacteristics" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Characterizes the project that would typically perform this Process</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="RiskLevel" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Outlines typical project risks that are addressed with this process.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="EstimatingTechnique" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Describes the Estimation Techniques provided for this Process.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="ProjectMemberExpertise" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Provides a profile of a typical project team, the distribution of roles, skills required for a team performs a project based on this process.</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+					<xsd:element name="TypeOfContract" type="xsd:string" minOccurs="0">
+						<xsd:annotation>
+							<xsd:documentation>Provides background information about the coI'm chaI'm ntracts that need to be established between a project team that performs this process and a client (e.g. for an IGS engagement).</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Descriptor">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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. </xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElement">
+				<xsd:attribute name="isSynchronizedWithSource" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="WorkProductDescriptor">
+		<xsd:annotation>
+			<xsd:documentation>A special Descriptor that 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Descriptor">
+				<xsd:sequence>
+					<xsd:element name="WorkProduct" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="ResponsibleRole" type="xsd:string" minOccurs="0"/>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="ExternalInputTo" type="xsd:string"/>
+						<xsd:element name="ImpactedBy" type="xsd:string"/>
+						<xsd:element name="Impacts" type="xsd:string"/>
+						<xsd:element name="MandatoryInputTo" type="xsd:string"/>
+						<xsd:element name="OptionalInputTo" type="xsd:string"/>
+						<xsd:element name="OutputFrom" type="xsd:string"/>
+						<xsd:element name="DeliverableParts" type="xsd:string"/>
+					</xsd:choice>
+				</xsd:sequence>
+				<xsd:attribute name="activityEntryState" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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).  
+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].</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="activityExitState" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>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).
+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].</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="RoleDescriptor">
+		<xsd:annotation>
+			<xsd:documentation>A special Descriptor that 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Descriptor">
+				<xsd:sequence>
+					<xsd:element name="Role" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="ResponsibleFor" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="TaskDescriptor">
+		<xsd:annotation>
+			<xsd:documentation>A special Descriptor 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.
+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.
+</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:WorkBreakdownElement">
+				<xsd:sequence>
+					<xsd:element name="Task" type="xsd:string" minOccurs="0"/>
+					<xsd:choice minOccurs="0" maxOccurs="unbounded">
+						<xsd:element name="PerformedPrimarilyBy" type="xsd:string"/>					
+						<xsd:element name="AdditionallyPerformedBy" type="xsd:string"/>
+						<xsd:element name="AssistedBy" type="xsd:string"/>
+						<xsd:element name="ExternalInput" type="xsd:string"/>
+						<xsd:element name="MandatoryInput" type="xsd:string"/>
+						<xsd:element name="OptionalInput" type="xsd:string"/>
+						<xsd:element name="Output" type="xsd:string"/>
+					</xsd:choice>
+					<xsd:element name="Step" type="uma:Section" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="isSynchronizedWithSource" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="CompositeRole">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:RoleDescriptor">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="AggregatedRole" type="uma:Role"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="TeamProfile">
+		<xsd:annotation>
+			<xsd:documentation>A Breakdown Element that groups Role Descriptors or Resource Definitions defining a nested hierarchy of teams and team members.
+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).
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="Role" type="xsd:string"/>
+					<xsd:element name="SuperTeam" type="xsd:string"/>
+					<xsd:element name="SubTeam" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="Process">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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).</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Activity">
+				<xsd:sequence>
+					<xsd:element name="IncludesPattern" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="DefaultContext" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="ValidContext" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="diagramURI" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>The URI of the diagram file associated with the process.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="DeliveryProcess">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Process">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="CommunicationsMaterial" type="xsd:string"/>
+					<xsd:element name="EducationMaterial" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="CapabilityPattern">
+		<xsd:annotation>
+			<xsd:documentation>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.
+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:
+- 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.
+- 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).
+- 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Process"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessPlanningTemplate">
+		<xsd:annotation>
+			<xsd:documentation>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).
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:Process">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="BaseProcess" type="xsd:string"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessPackage">
+		<xsd:annotation>
+			<xsd:documentation>A special Method Package that contains Process Elements, only.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodPackage">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="ProcessElement" type="uma:ProcessElement"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessComponentInterface">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:BreakdownElement">
+				<xsd:choice minOccurs="0" maxOccurs="unbounded">
+					<xsd:element name="InterfaceSpecification" type="uma:TaskDescriptor"/>
+					<xsd:element name="InterfaceIO" type="uma:WorkProductDescriptor"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="ProcessComponent">
+		<xsd:annotation>
+			<xsd:documentation>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).
+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 "black box".  At any point during a project the component "realization" 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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:ProcessPackage">
+				<xsd:sequence>
+					<xsd:element name="Copyright" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="Interface" type="uma:ProcessComponentInterface" minOccurs="0"/>
+					<xsd:element name="Process" type="uma:Process"/>
+				</xsd:sequence>
+				<xsd:attribute name="authors" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every Method Unit is being created and owned by an author or authoring team.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="changeDate" type="xsd:dateTime">
+					<xsd:annotation>
+						<xsd:documentation>The date the last change that resulted into this version has been made.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="changeDescription" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>The description of the last change that resulted into this version.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+				<xsd:attribute name="version" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>Every Package has a version number used to track changes.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:complexType name="MethodPlugin">
+		<xsd:annotation>
+			<xsd:documentation>A special Method Unit 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.
+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.
+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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodUnit">
+				<xsd:sequence>
+					<xsd:element name="ReferencedMethodPlugin" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="MethodPackage" type="uma:MethodPackage" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="userChangeable" type="xsd:boolean"/>
+				<xsd:attribute name="supporting" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:element name="MethodPlugin" type="uma:MethodPlugin">
+		<xsd:annotation>
+			<xsd:documentation>A special Method Unit 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.
+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.
+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.</xsd:documentation>
+		</xsd:annotation>
+	</xsd:element>
+	<xsd:complexType name="MethodConfiguration">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodUnit">
+				<xsd:sequence>
+					<xsd:element name="BaseConfiguration" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="MethodPluginSelection" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="MethodPackageSelection" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="DefaultView" type="xsd:string" minOccurs="0"/>
+					<xsd:element name="ProcessView" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="SubtractedCategory" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="AddedCategory" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:element name="MethodConfiguration" type="uma:MethodConfiguration">
+		<xsd:annotation>
+			<xsd:documentation>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.</xsd:documentation>
+		</xsd:annotation>
+	</xsd:element>
+	<xsd:complexType name="MethodLibrary">
+		<xsd:annotation>
+			<xsd:documentation>A Method Library is a physical container for Method Plugins and Method Configuration definitions.  All Method Elements are stored in a Method Library.</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexContent>
+			<xsd:extension base="uma:MethodUnit">
+				<xsd:sequence>
+					<xsd:element name="MethodPlugin" type="uma:MethodPlugin" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="MethodConfiguration" type="uma:MethodConfiguration" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="tool" type="xsd:string">
+					<xsd:annotation>
+						<xsd:documentation>The tool that generated the XML file.</xsd:documentation>
+					</xsd:annotation>
+				</xsd:attribute>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	<xsd:element name="MethodLibrary" type="uma:MethodLibrary">
+		<xsd:annotation>
+			<xsd:documentation>A Method Library is a physical container for Method Plugins and Method Configuration definitions.  All Method Elements are stored in a Method Library.</xsd:documentation>
+		</xsd:annotation>
+	</xsd:element>
+</xsd:schema>
diff --git a/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd.ecore b/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd.ecore
new file mode 100644
index 0000000..cff50b9
--- /dev/null
+++ b/org.eclipse.opencert.apm.assurproj.wizards/model/EPFSchema.xsd.ecore
@@ -0,0 +1,2855 @@
+<?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="org.eclipse.epf.uma._1._0" nsURI="http://www.eclipse.org/epf/uma/1.0.6"

+    nsPrefix="_0">

+  <eClassifiers xsi:type="ecore:EClass" name="Activity" eSuperTypes="#//WorkBreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Activity"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="precondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Precondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="postcondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Postcondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group3" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:37"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//BreakdownElement" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="BreakdownElement"/>

+        <details key="group" value="#group:37"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="roadmap" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Roadmap"/>

+        <details key="group" value="#group:37"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isEnactable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="IsEnactable"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityBasedOnElement"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variabilityType" eType="#//VariabilityType"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityType"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ActivityDescription" eSuperTypes="#//BreakdownElementDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Breakdown Element Description that is used to store the textual description for an Activity."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ActivityDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="alternatives" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Alternatives"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="howToStaff" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="HowToStaff"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Purpose"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ApplicableMetaClassInfo" eSuperTypes="#//PackageableElement">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ApplicableMetaClassInfo"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPrimaryExtension" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isPrimaryExtension"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Artifact" eSuperTypes="#//WorkProduct">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Artifact"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group3" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Artifact" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ContainedArtifact"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ArtifactDescription" eSuperTypes="#//WorkProductDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Work Product Description that is used to store the textual description for an Artifact."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ArtifactDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="briefOutline" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="BriefOutline"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="RepresentationOptions"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="representation" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Representation"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="notation" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Notation"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="BreakdownElement" eSuperTypes="#//ProcessElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="BreakdownElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presentedAfter" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PresentedAfter"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presentedBefore" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PresentedBefore"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="planningData" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PlanningData"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="superActivity" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SuperActivity"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group1" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="checklist" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Checklist"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="concept" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Concept"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="example" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Example"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="guideline" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Guideline"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reusableAsset" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReusableAsset"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="supportingMaterial" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SupportingMaterial"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="whitepaper" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Whitepaper"/>

+        <details key="group" value="#group:18"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="hasMultipleOccurrences"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOptional" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isOptional"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPlanned" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="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;"/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isPlanned"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="prefix"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="BreakdownElementDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Breakdown Element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="BreakdownElementDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="usageGuidance" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="usageGuidance"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CapabilityPattern" eSuperTypes="#//Process">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CapabilityPattern"/>

+      <details key="kind" value="elementOnly"/>

+    </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 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Checklist"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CompositeRole" eSuperTypes="#//RoleDescriptor">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CompositeRole"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Role" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AggregatedRole"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Concept" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Concept"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Constraint" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Constraint"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mainDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Stores the main definition of the constraint."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="mainDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ContentCategory" eSuperTypes="#//ContentElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="An abstract class generalizing content category types."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ContentCategory"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ContentCategoryPackage" eSuperTypes="#//MethodPackage">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Method Package that only contains Content Category Elements."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ContentCategoryPackage"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:13"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//ContentCategory" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ContentCategory"/>

+        <details key="group" value="#group:13"/>

+      </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="A generalized 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ContentDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mainDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Stores 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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MainDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="keyConsiderations" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Provides advise and guidance of a critical nature for the content element as well as warnings, cautions, pitfalls, dangers."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="KeyConsiderations"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Section" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Section"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalId" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="An external visible number that is used to reference this artifact. Used like a synonym."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="externalId"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ContentElement" eSuperTypes="#//DescribableElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ContentElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group1" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="checklist" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Checklist"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="concept" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Concept"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="example" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Example"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="guideline" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Guideline"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reusableAsset" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReusableAsset"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="supportingMaterial" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SupportingMaterial"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="whitepaper" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Whitepaper"/>

+        <details key="group" value="#group:14"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityBasedOnElement"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variabilityType" eType="#//VariabilityType"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityType"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ContentPackage" eSuperTypes="#//MethodPackage">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ContentPackage"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:13"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//ContentElement" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ContentElement"/>

+        <details key="group" value="#group:13"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="CustomCategory" eSuperTypes="#//ContentCategory">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="CustomCategory"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="categorizedElement" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="CategorizedElement"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subCategory" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubCategory"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Deliverable" eSuperTypes="#//WorkProduct">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Deliverable"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group3" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deliveredWorkProduct" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="DeliveredWorkProduct"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DeliverableDescription" eSuperTypes="#//WorkProductDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Work Product Description that is used to store the textual description for a Deliverable."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DeliverableDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ExternalDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="packagingGuidance" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PackagingGuidance"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DeliveryProcess" eSuperTypes="#//Process">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DeliveryProcess"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group4" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:47"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="CommunicationsMaterial"/>

+        <details key="group" value="#group:47"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="educationMaterial" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EducationMaterial"/>

+        <details key="group" value="#group:47"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DeliveryProcessDescription" eSuperTypes="#//ProcessDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Process Description that is used to store the textual description for a Delivery Process."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DeliveryProcessDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scale" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Scale"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Characterizes the project that would typically perform this Process"/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ProjectCharacteristics"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="riskLevel" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Outlines typical project risks that are addressed with this process."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="RiskLevel"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="estimatingTechnique" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Describes the Estimation Techniques provided for this Process."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EstimatingTechnique"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ProjectMemberExpertise"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeOfContract" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Provides background information about the coI'm chaI'm ntracts that need to be established between a project team that performs this process and a client (e.g. for an IGS engagement)."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="TypeOfContract"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DescribableElement" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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.  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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DescribableElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="presentation" eType="#//ContentDescription"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Presentation"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fulfill" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Fulfill"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isAbstract" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isAbstract"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeicon" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="nodeicon"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="shapeicon" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="shapeicon"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Descriptor" eSuperTypes="#//BreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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. "/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Descriptor"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isSynchronizedWithSource"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DescriptorDescription" eSuperTypes="#//BreakdownElementDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Breakdown Element Description that is used to store the textual description for a Descriptor."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DescriptorDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="refinedDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="RefinedDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Discipline" eSuperTypes="#//ContentCategory">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Discipline"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="task" unique="false" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String" volatile="true"

+        transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Task"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Discipline" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubDiscipline"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="referenceWorkflow" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReferenceWorkflow"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="DisciplineGrouping" eSuperTypes="#//ContentCategory">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="DisciplineGrouping"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="discipline" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Discipline"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

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

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

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

+      <details key="kind" value="mixed"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"

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

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="elementWildcard"/>

+        <details key="name" value=":mixed"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

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

+        transient="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="xmlns:prefix"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

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

+        transient="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="xsi:schemaLocation"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodConfiguration" upperBound="-2"

+        eType="#//MethodConfiguration" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodConfiguration"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodLibrary" upperBound="-2"

+        eType="#//MethodLibrary" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodLibrary"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodPlugin" upperBound="-2"

+        eType="#//MethodPlugin" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A special Method Unit 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."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPlugin"/>

+        <details key="namespace" value="##targetNamespace"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Domain" eSuperTypes="#//ContentCategory">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Domain"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workProduct" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="WorkProduct"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Domain" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Subdomain"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

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

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A UML 2.0 meta-class Element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Element"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Estimate" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of Guidance that provides sizing measures, or standards for sizing the work effort associated with performing a particular piece of work and instructions for their successful use. It may be comprised of estimation considerations and estimation metrics."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Estimate"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="estimationMetric" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EstimationMetric"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EstimationConsiderations"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="EstimatingMetric" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of Guidance that describes a metric or measure that is associated with an element and which is used to calculate the size of the work effort as well as a range of potential labor."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="EstimatingMetric"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="EstimationConsiderations" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of Guidance that qualifies the usage and application of estimation metrics in the development of an actual estimate."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="EstimationConsiderations"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Example" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Example"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Guidance" 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Guidance"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="GuidanceDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Guidance."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="GuidanceDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attachment" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Attachment"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Guideline" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Guideline"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Iteration" eSuperTypes="#//Activity">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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.)"/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Iteration"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Kind" eSuperTypes="#//ContentElement">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Kind"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ApplicableMetaClassInfo"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodConfiguration" eSuperTypes="#//MethodUnit">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodConfiguration"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="baseConfiguration" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="BaseConfiguration"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPluginSelection"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPackageSelection"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultView" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="DefaultView"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="processView" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ProcessView"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subtractedCategory" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubtractedCategory"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="addedCategory" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AddedCategory"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodElement" eSuperTypes="#//PackageableElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="The root generalization for all UMA Method Elements.  Defines a common set of attributes inherited by all UMA Method Elements.  Method Element itself is derived from Packageable Element from the UML 2.0 Infrastructure."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" unique="false" upperBound="-1"

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

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:1"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Constraint" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Defines the packaging rules for this Method Element."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="OwnedRule"/>

+        <details key="group" value="#group:1"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="methodElementProperty"

+        upperBound="-1" eType="#//MethodElementProperty" volatile="true" transient="true"

+        derived="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodElementProperty"/>

+        <details key="group" value="#group:1"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="briefDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="briefDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Every instance of Method Element has a global unique id."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

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

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="orderingGuide" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Used for CASE tool realizations of this model to contain information about layout and ordering of the method element and its parts."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="orderingGuide"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presentationName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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;."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="presentationName"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="suppressed" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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 &quot;extends&quot; 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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="suppressed"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodElementProperty" eSuperTypes="#//PackageableElement">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodElementProperty"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

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

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodLibrary" eSuperTypes="#//MethodUnit">

+    <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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodLibrary"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

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

+        eType="#//MethodPlugin" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPlugin"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//MethodConfiguration" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodConfiguration"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tool" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The tool that generated the XML file."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="tool"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodPackage" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodPackage"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group1" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:9"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reusedPackage" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReusedPackage"/>

+        <details key="group" value="#group:9"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//MethodPackage" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPackage"/>

+        <details key="group" value="#group:9"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="global" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="global"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodPlugin" eSuperTypes="#//MethodUnit">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Method Unit 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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodPlugin"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReferencedMethodPlugin"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//MethodPackage" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MethodPackage"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="supporting" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="supporting"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="userChangeable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="userChangeable"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="MethodUnit" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Method Element that shall be maintained in a Method Library as a separate unit of control."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="MethodUnit"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyright" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Copyright"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="authors" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="authors"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="changeDate"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="changeDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Every Package has a version number used to track changes."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="version"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Milestone" eSuperTypes="#//WorkBreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Breakdown Element that 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Milestone"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="requiredResult" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="RequiredResult"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" eSuperTypes="#//Element">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A UML 2.0 meta-class Named Element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="NamedElement"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

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

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Outcome" eSuperTypes="#//WorkProduct">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A Work Product that 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Outcome"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PackageableElement" eSuperTypes="#//NamedElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A UML 2.0 meta-class Packagable Element."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="PackageableElement"/>

+      <details key="kind" value="empty"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Phase" eSuperTypes="#//Activity">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Phase"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PlanningData" eSuperTypes="#//ProcessElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A Process 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)"/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="PlanningData"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="finishDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The default finish date for a planed Task."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="finishDate"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rank" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The default rank for a planed Task."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="rank"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The default start date for a planed Task."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="startDate"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Practice" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of guidance that 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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Practice"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activityReference" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ActivityReference"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="contentReference" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ContentReference"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//Practice" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubPractice"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="PracticeDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Practice."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="PracticeDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="additionalInfo" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Any additional Information not covered by the other attributes."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AdditionalInfo"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="application" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Application"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="background" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Background"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="goals" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Goals"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="levelsOfAdoption" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="LevelsOfAdoption"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="problem" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="A description of the problem the Practice addresses."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Problem"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Process" eSuperTypes="#//Activity">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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)."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Process"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="includesPattern" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="IncludesPattern"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultContext" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="DefaultContext"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="validContext" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ValidContext"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diagramURI" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="The URI of the diagram file associated with the process."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="diagramURI"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ProcessComponent" eSuperTypes="#//ProcessPackage">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessComponent"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyright" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Copyright"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="interface" eType="#//ProcessComponentInterface"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Interface"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="process" lowerBound="1"

+        eType="#//Process" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Process"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="authors" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="authors"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="changeDate"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changeDescription" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="changeDescription"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Every Package has a version number used to track changes."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="version"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ProcessComponentInterface" eSuperTypes="#//BreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessComponentInterface"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="interfaceSpecification"

+        upperBound="-1" eType="#//TaskDescriptor" volatile="true" transient="true"

+        derived="true" containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="InterfaceSpecification"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//WorkProductDescriptor" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="InterfaceIO"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ProcessDescription" eSuperTypes="#//ActivityDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Activity Description that is used to store the textual description for a Process."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="scope" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Scope"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="usageNotes" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="UsageNotes"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ProcessElement" eSuperTypes="#//DescribableElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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. "/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ProcessPackage" eSuperTypes="#//MethodPackage">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessPackage"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:13"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//ProcessElement" volatile="true" transient="true" derived="true"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ProcessElement"/>

+        <details key="group" value="#group:13"/>

+      </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 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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ProcessPlanningTemplate"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group4" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:47"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="baseProcess" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="BaseProcess"/>

+        <details key="group" value="#group:47"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Report" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Report"/>

+      <details key="kind" value="elementOnly"/>

+    </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 specific type of guidance that 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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ReusableAsset"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Roadmap" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of Guidance 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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Roadmap"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Role" eSuperTypes="#//ContentElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Role"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="responsibleFor" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ResponsibleFor"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="RoleDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Role."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="RoleDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="assignmentApproaches" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AssignmentApproaches"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="skills" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Skills"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="synonyms" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Synonyms"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="RoleDescriptor" eSuperTypes="#//Descriptor">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Descriptor that 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="RoleDescriptor"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Role"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="responsibleFor" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ResponsibleFor"/>

+      </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="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)."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="RoleSet"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" unique="false" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String" volatile="true"

+        transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Role"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="RoleSetGrouping"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="roleSet" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="RoleSet"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Section" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Section"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="subSection" eType="#//Section"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubSection"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="predecessor" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Predecessor"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Description"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sectionName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="sectionName"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityBasedOnElement"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variabilityType" eType="#//VariabilityType"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="variabilityType"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="SupportingMaterial" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="SupportingMaterial"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Task" eSuperTypes="#//ContentElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Task"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="precondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Precondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="postcondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Postcondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="performedBy" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PerformedBy"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mandatoryInput" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MandatoryInput"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="output" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Output"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AdditionallyPerformedBy"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optionalInput" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="OptionalInput"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="estimate" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Estimate"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EstimationConsiderations"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toolMentor" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ToolMentor"/>

+        <details key="group" value="#group:27"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="TaskDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Task."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TaskDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="alternatives" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Alternatives"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Purpose"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="TaskDescriptor" eSuperTypes="#//WorkBreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Descriptor 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;"/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TaskDescriptor"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="task" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Task"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group3" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="performedPrimarilyBy" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="PerformedPrimarilyBy"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AdditionallyPerformedBy"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="assistedBy" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="AssistedBy"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalInput" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ExternalInput"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mandatoryInput" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MandatoryInput"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optionalInput" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="OptionalInput"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="output" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Output"/>

+        <details key="group" value="#group:36"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="step" upperBound="-1" eType="#//Section"

+        containment="true" resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Step"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isSynchronizedWithSource"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="TeamProfile" eSuperTypes="#//BreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TeamProfile"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="role" unique="false" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String" volatile="true"

+        transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Role"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="superTeam" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SuperTeam"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="subTeam" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="SubTeam"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Template" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Template"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="TermDefinition" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A specific type of guidance that defines concepts and are used to build up the Glossary. TermDefinitions are not directly related to ContentElements, but their relationship is being derived when the Term is used in the ContentElements description text."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="TermDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </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 container/aggregate for ToolMentors.  It can also provide general descriptions of the tool and its general capabilities."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Tool"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toolMentor" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ToolMentor"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="ToolMentor" eSuperTypes="#//Guidance">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="ToolMentor"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

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

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="VariabilityType"/>

+    </eAnnotations>

+    <eLiterals name="na"/>

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

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

+    <eLiterals name="replaces" value="3"/>

+    <eLiterals name="localContribution" value="4"/>

+    <eLiterals name="localReplacement" value="5"/>

+    <eLiterals name="extendsReplaces" value="6"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="VariabilityTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="VariabilityType:Object"/>

+      <details key="baseType" value="VariabilityType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Whitepaper" eSuperTypes="#//Concept">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="Whitepaper"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkBreakdownElement" eSuperTypes="#//BreakdownElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkBreakdownElement"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        eType="#//WorkOrder" volatile="true" transient="true" derived="true" containment="true"

+        resolveProxies="false">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Predecessor"/>

+        <details key="group" value="#group:30"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isEventDriven" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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;"/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isEventDriven"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isOngoing" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isOngoing"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isRepeatable" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"

+        unsettable="true">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="isRepeatable"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkDefinition" eSuperTypes="#//MethodElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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)."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkDefinition"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="precondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Precondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="postcondition" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Postcondition"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

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

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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;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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkOrder"/>

+      <details key="kind" value="simple"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="name" value=":0"/>

+        <details key="kind" value="simple"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="Defines a global unique id for a work order."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

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

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="linkType" eType="#//WorkOrderType"

+        unsettable="true">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="linkType"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="properties" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+        <details key="documentation" value="This attribute store method element property values associated with this work order"/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="properties"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

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

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="Represents a relationship between two Breakdown Element in which one Breakdown Element depends on the start or finish of another Breakdown Element 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkOrderType"/>

+    </eAnnotations>

+    <eLiterals name="finishToStart"/>

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

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

+    <eLiterals name="startToFinish" value="3"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EDataType" name="WorkOrderTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkOrderType:Object"/>

+      <details key="baseType" value="WorkOrderType"/>

+    </eAnnotations>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkProduct" eSuperTypes="#//ContentElement">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkProduct"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="estimate" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Estimate"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

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

+        unique="false" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="EstimationConsiderations"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="report" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Report"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="template" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Template"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="toolMentor" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ToolMentor"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductDescription" eSuperTypes="#//ContentDescription">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A generalized Content Description that is used to store the textual description for a Work Product."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkProductDescription"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="impactOfNotHaving" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ImpactOfNotHaving"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="purpose" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Purpose"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="reasonsForNotNeeding" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ReasonsForNotNeeding"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductDescriptor" eSuperTypes="#//Descriptor">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="A special Descriptor that 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>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkProductDescriptor"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workProduct" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="WorkProduct"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="responsibleRole" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ResponsibleRole"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="externalInputTo" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ExternalInputTo"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="impactedBy" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="ImpactedBy"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="impacts" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="Impacts"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mandatoryInputTo" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="MandatoryInputTo"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optionalInputTo" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="OptionalInputTo"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="outputFrom" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="OutputFrom"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="deliverableParts" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="DeliverableParts"/>

+        <details key="group" value="#group:33"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activityEntryState" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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]."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="activityEntryState"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="activityExitState" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">

+      <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]."/>

+      </eAnnotations>

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="attribute"/>

+        <details key="name" value="activityExitState"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="WorkProductType" eSuperTypes="#//ContentCategory">

+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">

+      <details key="documentation" value="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."/>

+    </eAnnotations>

+    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+      <details key="name" value="WorkProductType"/>

+      <details key="kind" value="elementOnly"/>

+    </eAnnotations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="group"/>

+        <details key="name" value="group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workProduct" unique="false"

+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"

+        volatile="true" transient="true" derived="true">

+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">

+        <details key="kind" value="element"/>

+        <details key="name" value="WorkProduct"/>

+        <details key="group" value="#group:24"/>

+      </eAnnotations>

+    </eStructuralFeatures>

+  </eClassifiers>

+</ecore:EPackage>

diff --git a/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/Etl/EtlTransformation.java b/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/Etl/EtlTransformation.java
index 25d8e6d..f3de357 100644
--- a/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/Etl/EtlTransformation.java
+++ b/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/Etl/EtlTransformation.java
@@ -30,7 +30,7 @@
 import org.eclipse.core.runtime.Platform;

 import org.eclipse.epsilon.common.parse.problem.ParseProblem;

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

-import org.eclipse.epsilon.eol.IEolExecutableModule;

+import org.eclipse.epsilon.eol.IEolModule;

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

 import org.eclipse.epsilon.eol.exceptions.models.EolModelElementTypeNotFoundException;

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

@@ -76,7 +76,7 @@
 	{

 	}

 	  

-	private IEolExecutableModule createModule() {

+	private EtlModule createModule() {

 			return new EtlModule();

 	}

 	

diff --git a/org.eclipse.opencert.apm.assurproj/.gitignore b/org.eclipse.opencert.apm.assurproj/.gitignore
index ae3c172..d504c34 100644
--- a/org.eclipse.opencert.apm.assurproj/.gitignore
+++ b/org.eclipse.opencert.apm.assurproj/.gitignore
@@ -1 +1,2 @@
-/bin/
+/bin/

+/build/
diff --git a/org.eclipse.opencert.apm.assurproj/build.gradle b/org.eclipse.opencert.apm.assurproj/build.gradle
new file mode 100644
index 0000000..27524eb
--- /dev/null
+++ b/org.eclipse.opencert.apm.assurproj/build.gradle
@@ -0,0 +1,20 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.evm.evidspec')

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.pam.procspec')

+    compile project(':org.eclipse.opencert.sam.arg')

+    compile project(':org.eclipse.opencert.apm.baseline')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.apm.baseline/.gitignore b/org.eclipse.opencert.apm.baseline/.gitignore
index ae3c172..d504c34 100644
--- a/org.eclipse.opencert.apm.baseline/.gitignore
+++ b/org.eclipse.opencert.apm.baseline/.gitignore
@@ -1 +1,2 @@
-/bin/
+/bin/

+/build/
diff --git a/org.eclipse.opencert.apm.baseline/build.gradle b/org.eclipse.opencert.apm.baseline/build.gradle
new file mode 100644
index 0000000..778a1de
--- /dev/null
+++ b/org.eclipse.opencert.apm.baseline/build.gradle
@@ -0,0 +1,19 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.infra.mappings')

+    compile project(':org.eclipse.opencert.pkm.refframework')

+    compile project(':org.eclipse.opencert.apm.assuranceassets')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.build/.classpath b/org.eclipse.opencert.build/.classpath
new file mode 100644
index 0000000..46a7d40
--- /dev/null
+++ b/org.eclipse.opencert.build/.classpath
@@ -0,0 +1,5 @@
+<?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="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.opencert.build/.project b/org.eclipse.opencert.build/.project
index 7b9774a..0a0e323 100644
--- a/org.eclipse.opencert.build/.project
+++ b/org.eclipse.opencert.build/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<projectDescription>

-	<name>org.eclipse.opencert.build</name>

-	<comment></comment>

-	<projects>

-	</projects>

-	<buildSpec>

-		<buildCommand>

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

-			<arguments>

-			</arguments>

-		</buildCommand>

-	</buildSpec>

-	<natures>

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

-	</natures>

-</projectDescription>

+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.opencert.build</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.opencert.build/conf-opencert/opencert-properties.xml b/org.eclipse.opencert.build/conf-opencert/opencert-properties.xml
new file mode 100644
index 0000000..74553b4
--- /dev/null
+++ b/org.eclipse.opencert.build/conf-opencert/opencert-properties.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

+<properties>

+<entry key="serverAddress">localhost:2036</entry>

+<entry key="dbPort">5432</entry>

+<entry key="dbUser">postgres</entry>

+<entry key="dbName">tue_final</entry>

+<entry key="dbPassword">postgres</entry>

+<entry key="dbHost">localhost</entry>

+</properties>

diff --git a/org.eclipse.opencert.build/devloader/DevloaderTomcat7.jar b/org.eclipse.opencert.build/devloader/DevloaderTomcat7.jar
new file mode 100644
index 0000000..6f1aa79
--- /dev/null
+++ b/org.eclipse.opencert.build/devloader/DevloaderTomcat7.jar
Binary files differ
diff --git a/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/build.gradle b/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/build.gradle
new file mode 100644
index 0000000..f347780
--- /dev/null
+++ b/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/build.gradle
@@ -0,0 +1,19 @@
+defaultTasks 'buildWars'
+
+if (hasProperty('jtest.jtesthome')) {
+   apply from: property('jtest.jtesthome') + '/integration/gradle/jtest.gradle'
+}
+
+allprojects {
+
+    apply plugin: 'java'
+    
+    sourceCompatibility = 1.8
+    targetCompatibility = 1.8
+    
+    tomcatHome='D:/Proyectos/Amass/apache-tomcat-7.0.73' 
+}
+
+task buildWars (dependsOn: [':org.eclipse.opencert.webapp.reports:war', ':org.eclipse.opencert.webapp.cdo:war']) {
+    
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/settings.gradle b/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/settings.gradle
new file mode 100644
index 0000000..879f17a
--- /dev/null
+++ b/org.eclipse.opencert.build/gradleCopyToWorkspaceRoot/settings.gradle
@@ -0,0 +1,27 @@
+if(new File(rootDir, 'common').canRead()) {
+  new File(rootDir, 'common').eachDir { dir ->
+    if(new File(dir, 'build.gradle').canRead()) {
+      def modulePath = ":${dir.name}"
+      include "${modulePath}"
+      def subproject = project("${modulePath}")
+      subproject.setProjectDir(dir)
+    }
+  }
+  new File(rootDir, 'prototype/plugins').eachDir { dir ->
+    if(new File(dir, 'build.gradle').canRead()) {
+      def modulePath = ":${dir.name}"
+      include "${modulePath}"
+      def subproject = project("${modulePath}")
+      subproject.setProjectDir(dir)
+    }
+  }
+} else {
+  rootDir.eachDir { dir ->
+    if(new File(dir, 'build.gradle').canRead()) {
+      def modulePath = ":${dir.name}"
+      include "${modulePath}"
+      def subproject = project("${modulePath}")
+      subproject.setProjectDir(dir)
+    }
+  }
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.build/launchConfigurations/org.opencert.webapps.launch b/org.eclipse.opencert.build/launchConfigurations/org.opencert.webapps.launch
new file mode 100644
index 0000000..bdde1d8
--- /dev/null
+++ b/org.eclipse.opencert.build/launchConfigurations/org.opencert.webapps.launch
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">

+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">

+<listEntry value="/org.eclipse.opencert.webapp.cdo"/>

+</listAttribute>

+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">

+<listEntry value="4"/>

+</listAttribute>

+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>

+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;folder nest=&amp;quot;false&amp;quot; path=&amp;quot;/org.eclipse.opencert.webapp.evidencemgr/src&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.folder&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;folder nest=&amp;quot;false&amp;quot; path=&amp;quot;/org.eclipse.opencert.webapp.processmgr/src&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.folder&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.webapp.reports&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=org.eclipse.opencert.storage.cdo/lib\/org.eclipse.emf.common_2.9.1.v20130827-0309.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=org.eclipse.opencert.storage.cdo/lib\/org.eclipse.emf.ecore_2.9.1.v20130827-0309.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.build&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=org.eclipse.opencert.storage.cdo/lib\/org.eclipse.net4j.util_3.3.0.v20130601-1611.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.apm.assuranceassets&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.apm.assurproj&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.apm.baseline&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.evm.evidspec&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.infra.general&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.infra.mappings&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.infra.properties&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.pam.procspec&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.pkm.refframework&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.sam.arg&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;org.eclipse.opencert.storage.cdo&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=org.eclipse.opencert.storage.cdo/lib\/org.eclipse.emf.cdo_4.2.1.v20130913-0613.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=org.eclipse.opencert.storage.cdo/lib\/org.eclipse.emf.cdo.common_4.2.1.v20130910-0507.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;default/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>

+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>

+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">

+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7&quot; javaProject=&quot;org.eclipse.opencert.evidencemgr&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>

+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.variableClasspathEntry&quot;&gt;&#13;&#10;&lt;memento path=&quot;3&quot; variableString=&quot;${tomcat_home}/bin/bootstrap.jar&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>

+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.variableClasspathEntry&quot;&gt;&#13;&#10;&lt;memento path=&quot;3&quot; variableString=&quot;${tomcat_home}/bin/tomcat-juli.jar&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>

+</listAttribute>

+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>

+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.catalina.startup.Bootstrap"/>

+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="start"/>

+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.opencert.webapp.cdo"/>

+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dcatalina.home=${tomcat_home} -Djava.endorsed.dirs=${tomcat_home}/endorsed -Dcatalina.base=${tomcat_home} -Djava.io.tmpdir=${tomcat_home}/temp -Xms512m -Xmx1024m"/>

+</launchConfiguration>

diff --git a/org.eclipse.opencert.build/tomcat/conf/server.xml b/org.eclipse.opencert.build/tomcat/conf/server.xml
new file mode 100644
index 0000000..f3305e2
--- /dev/null
+++ b/org.eclipse.opencert.build/tomcat/conf/server.xml
@@ -0,0 +1,156 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server port="8005" shutdown="SHUTDOWN">
+  <!-- Security listener. Documentation at /docs/config/listeners.html
+  <Listener className="org.apache.catalina.security.SecurityListener" />
+  -->
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
+  <Listener className="org.apache.catalina.core.JasperListener" />
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+  </GlobalNamingResources>
+
+  <!-- A "Service" is a collection of one or more "Connectors" that share
+       a single "Container" Note:  A "Service" is not itself a "Container",
+       so you may not define subcomponents such as "Valves" at this level.
+       Documentation at /docs/config/service.html
+   -->
+  <Service name="Catalina">
+
+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
+    <!--
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="150" minSpareThreads="4"/>
+    -->
+
+
+    <!-- A "Connector" represents an endpoint by which requests are received
+         and responses are returned. Documentation at :
+         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
+         Java AJP  Connector: /docs/config/ajp.html
+         APR (HTTP/AJP) Connector: /docs/apr.html
+         Define a non-SSL HTTP/1.1 Connector on port 8080
+    -->
+    <Connector port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    <!-- A "Connector" using the shared thread pool-->
+    <!--
+    <Connector executor="tomcatThreadPool"
+               port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    -->
+    <!-- Define a SSL HTTP/1.1 Connector on port 8443
+         This connector uses the JSSE configuration, when using APR, the
+         connector should be using the OpenSSL style configuration
+         described in the APR documentation -->
+    <!--
+    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
+               maxThreads="150" scheme="https" secure="true"
+               clientAuth="false" sslProtocol="TLS" />
+    -->
+
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
+
+
+    <!-- An Engine represents the entry point (within Catalina) that processes
+         every request.  The Engine implementation for Tomcat stand alone
+         analyzes the HTTP headers included with the request, and passes them
+         on to the appropriate Host (virtual host).
+         Documentation at /docs/config/engine.html -->
+
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
+    -->
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <!--For clustering, please take a look at documentation at:
+          /docs/cluster-howto.html  (simple how to)
+          /docs/config/cluster.html (reference documentation) -->
+      <!--
+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
+      -->
+
+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
+           via a brute-force attack -->
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <!-- This Realm uses the UserDatabase configured in the global JNDI
+             resources under the key "UserDatabase".  Any edits
+             that are performed against this UserDatabase are immediately
+             available for use by the Realm.  -->
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/>
+      </Realm>
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+
+        <!-- SingleSignOn valve, share authentication between web applications
+             Documentation at: /docs/config/valve.html -->
+        <!--
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+        -->
+
+        <!-- Access log processes all example.
+             Documentation at: /docs/config/valve.html
+             Note: The pattern used is equivalent to using pattern="common" -->
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+               prefix="localhost_access_log." suffix=".txt"
+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+	       	
+	
+	<Context path="cdo" reloadable="true" docBase="D:\workspaceWeb\org.eclipse.opencert.webapp.cdo\webapp"
+		     workDir="D:\workspaceWeb\org.eclipse.opencert.webapp.cdo\work">
+                <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
+		<Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />
+    </Context>
+        
+    
+    <Context path="opencert-reports" reloadable="true" docBase="D:\workspaceWeb\org.eclipse.opencert.webapp.reports\webapp"
+		     workDir="D:\workspaceWeb\org.eclipse.opencert.webapp.reports\work">
+                <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
+		<Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />
+    </Context>  
+	
+      </Host>
+    </Engine>
+  </Service>
+</Server>
diff --git a/org.eclipse.opencert.build/tomee/conf/server.xml b/org.eclipse.opencert.build/tomee/conf/server.xml
new file mode 100644
index 0000000..0ab7143
--- /dev/null
+++ b/org.eclipse.opencert.build/tomee/conf/server.xml
@@ -0,0 +1,165 @@
+<?xml version='1.0' encoding='utf-8'?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one or more

+  contributor license agreements.  See the NOTICE file distributed with

+  this work for additional information regarding copyright ownership.

+  The ASF licenses this file to You under the Apache License, Version 2.0

+  (the "License"); you may not use this file except in compliance with

+  the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing, software

+  distributed under the License is distributed on an "AS IS" BASIS,

+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+  See the License for the specific language governing permissions and

+  limitations under the License.

+-->

+<!-- Note:  A "Server" is not itself a "Container", so you may not

+     define subcomponents such as "Valves" at this level.

+     Documentation at /docs/config/server.html

+ -->

+<Server port="8005" shutdown="SHUTDOWN">

+  <!-- TomEE plugin for Tomcat -->

+  <Listener className="org.apache.tomee.catalina.ServerListener" />

+  <!-- Security listener. Documentation at /docs/config/listeners.html

+  <Listener className="org.apache.catalina.security.SecurityListener" />

+  -->

+  <!--APR library loader. Documentation at /docs/apr.html -->

+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

+  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->

+  <Listener className="org.apache.catalina.core.JasperListener" />

+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->

+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

+

+  <!-- Global JNDI resources

+       Documentation at /docs/jndi-resources-howto.html

+  -->

+  <GlobalNamingResources>

+    <!-- Editable user database that can also be used by

+         UserDatabaseRealm to authenticate users

+    -->

+    <Resource name="UserDatabase" auth="Container"

+              type="org.apache.catalina.UserDatabase"

+              description="User database that can be updated and saved"

+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

+              pathname="conf/tomcat-users.xml" />

+  </GlobalNamingResources>

+

+  <!-- A "Service" is a collection of one or more "Connectors" that share

+       a single "Container" Note:  A "Service" is not itself a "Container",

+       so you may not define subcomponents such as "Valves" at this level.

+       Documentation at /docs/config/service.html

+   -->

+  <Service name="Catalina">

+

+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->

+    <!--

+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

+        maxThreads="150" minSpareThreads="4"/>

+    -->

+

+

+    <!-- A "Connector" represents an endpoint by which requests are received

+         and responses are returned. Documentation at :

+         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)

+         Java AJP  Connector: /docs/config/ajp.html

+         APR (HTTP/AJP) Connector: /docs/apr.html

+         Define a non-SSL HTTP/1.1 Connector on port 8080

+    -->

+    <Connector port="8080" protocol="HTTP/1.1"

+               connectionTimeout="20000"

+               redirectPort="8443" />

+    <!-- A "Connector" using the shared thread pool-->

+    <!--

+    <Connector executor="tomcatThreadPool"

+               port="8080" protocol="HTTP/1.1"

+               connectionTimeout="20000"

+               redirectPort="8443" />

+    -->

+    <!-- Define a SSL HTTP/1.1 Connector on port 8443

+         This connector uses the JSSE configuration, when using APR, the

+         connector should be using the OpenSSL style configuration

+         described in the APR documentation -->

+    <!--

+    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

+               maxThreads="150" scheme="https" secure="true"

+               clientAuth="false" sslProtocol="TLS" />

+    -->

+

+    <!-- Define an AJP 1.3 Connector on port 8009 -->

+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

+

+

+    <!-- An Engine represents the entry point (within Catalina) that processes

+         every request.  The Engine implementation for Tomcat stand alone

+         analyzes the HTTP headers included with the request, and passes them

+         on to the appropriate Host (virtual host).

+         Documentation at /docs/config/engine.html -->

+

+    <!-- You should set jvmRoute to support load-balancing via AJP ie :

+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

+    -->

+    <Engine name="Catalina" defaultHost="localhost">

+

+      <!--For clustering, please take a look at documentation at:

+          /docs/cluster-howto.html  (simple how to)

+          /docs/config/cluster.html (reference documentation) -->

+      <!--

+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

+      -->

+

+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords

+           via a brute-force attack -->

+      <Realm className="org.apache.catalina.realm.LockOutRealm">

+        <!-- This Realm uses the UserDatabase configured in the global JNDI

+             resources under the key "UserDatabase".  Any edits

+             that are performed against this UserDatabase are immediately

+             available for use by the Realm.  -->

+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

+               resourceName="UserDatabase"/>

+      </Realm>

+

+      <Host name="localhost"  appBase="webapps"

+            unpackWARs="true" autoDeploy="true">

+

+        <!-- SingleSignOn valve, share authentication between web applications

+             Documentation at: /docs/config/valve.html -->

+        <!--

+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

+        -->

+

+        <!-- Access log processes all example.

+             Documentation at: /docs/config/valve.html

+             Note: The pattern used is equivalent to using pattern="common" -->

+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

+               prefix="localhost_access_log." suffix=".txt"

+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

+	       

+	<Context path="opencert-em" reloadable="true"

+                 docBase="D:/workspaceWeb/org.eclipse.opencert.webapp.evidencemgr/webapp"

+                 workDir="D:/workspaceWeb/org.eclipse.opencert.webapp.evidencemgr/work">

+          <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>

+          <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />

+        </Context>

+	

+	<Context path="cdo" reloadable="true" docBase="D:/workspaceWeb/org.eclipse.opencert.webapp.cdo/webapp"

+		     workDir="D:/workspaceWeb/org.eclipse.opencert.webapp.cdo/work">

+                <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>

+		<Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />

+        </Context>

+        

+    <Context path="opencert-pm"

+             reloadable="true"

+             docBase="D:/workspaceWeb/org.eclipse.opencert.webapp.processmgr/webapp"

+		     workDir="D:/workspaceWeb/org.eclipse.opencert.webapp.processmgr/work">

+                <Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>

+		<Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1" useSystemClassLoaderAsParent="false" />

+        </Context>

+

+      </Host>

+    </Engine>

+  </Service>

+</Server>

diff --git a/org.eclipse.opencert.chess.argumentGenerator/META-INF/MANIFEST.MF b/org.eclipse.opencert.chess.argumentGenerator/META-INF/MANIFEST.MF
old mode 100644
new mode 100755
index 7e86118..ba680ef
--- a/org.eclipse.opencert.chess.argumentGenerator/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.chess.argumentGenerator/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2

 Bundle-Name: CHESS Contracts Argument Generator

 Bundle-SymbolicName: org.eclipse.opencert.chess.argumentGenerator;singleton:=true

-Bundle-Version: 0.1.1.qualifier

+Bundle-Version: 0.2.0.qualifier

 Bundle-Activator: org.eclipse.opencert.chess.argumentGenerator.Activator

 Bundle-Vendor: MDH

 Require-Bundle: org.eclipse.core.runtime,

@@ -67,6 +67,7 @@
  org.polarsys.chess.core,

  org.polarsys.chess.core.util,

  org.polarsys.chess.core.util.uml,

+ org.polarsys.chess.patterns.profile.PatternsProfile,

  org.polarsys.chess.service.gui.utils,

  org.polarsys.chess.validator.command

 

diff --git a/org.eclipse.opencert.chess.argumentGenerator/src/org/eclipse/opencert/chess/argumentGenerator/argumentation/CHESSContract2OpencertArgumentGenerator.java b/org.eclipse.opencert.chess.argumentGenerator/src/org/eclipse/opencert/chess/argumentGenerator/argumentation/CHESSContract2OpencertArgumentGenerator.java
old mode 100644
new mode 100755
index be782f2..1408296
--- a/org.eclipse.opencert.chess.argumentGenerator/src/org/eclipse/opencert/chess/argumentGenerator/argumentation/CHESSContract2OpencertArgumentGenerator.java
+++ b/org.eclipse.opencert.chess.argumentGenerator/src/org/eclipse/opencert/chess/argumentGenerator/argumentation/CHESSContract2OpencertArgumentGenerator.java
@@ -63,6 +63,8 @@
 import org.eclipse.papyrus.sysml.requirements.Requirement;

 import org.eclipse.uml2.uml.Association;

 import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Collaboration;

+import org.eclipse.uml2.uml.CollaborationUse;

 import org.eclipse.uml2.uml.Connector;

 import org.eclipse.uml2.uml.Constraint;

 import org.eclipse.uml2.uml.DataType;

@@ -72,6 +74,7 @@
 import org.eclipse.uml2.uml.Parameter;

 import org.eclipse.uml2.uml.Port;

 import org.eclipse.uml2.uml.Property;

+import org.eclipse.uml2.uml.Stereotype;

 import org.polarsys.chess.contracts.profile.chesscontract.ComponentInstance;

 import org.polarsys.chess.contracts.profile.chesscontract.Contract;

 import org.polarsys.chess.contracts.profile.chesscontract.ContractProperty;

@@ -80,6 +83,9 @@
 import org.polarsys.chess.contracts.profile.chesscontract.DataTypes.Concerns;

 import org.polarsys.chess.contracts.profile.chesscontract.DataTypes.ContractStatus;

 import org.polarsys.chess.contracts.profile.chesscontract.DataTypes.ContractTypes;

+import org.polarsys.chess.patterns.profile.PatternsProfile.Pattern;

+import org.polarsys.chess.patterns.profile.PatternsProfile.PatternApplication;

+import org.polarsys.chess.patterns.profile.PatternsProfile.PatternRole;

 

 public class CHESSContract2OpencertArgumentGenerator {

 	

@@ -111,6 +117,9 @@
 	private static final String BOUNDEDSUBTYPE = "MARTE::MARTE_Annexes::VSL::DataTypes::BoundedSubtype";

 	private static final String COLLECTIONTYPE = "MARTE::MARTE_Annexes::VSL::DataTypes::CollectionType";

 	public static final String REQUIREMENT = "SysML::Requirements::Requirement";

+	private static final String PATTERN_APPLICATION = "PatternsProfile::PatternApplication";

+	private static final String PATTERN_ROLE = "PatternsProfile::PatternRole";

+	private static final String PATTERN = "PatternsProfile::Pattern";

 

 	private List<Class> allBlocks = new ArrayList<Class>();

 	private List<Class> allComps = new ArrayList<Class>();

@@ -128,7 +137,10 @@
 	private List<ComponentArgumentationElementLink> allCompClaimLinks= new ArrayList<ComponentArgumentationElementLink>();

 	private List<ContractClaimLink> allContClaimLinks= new ArrayList<ContractClaimLink>();

 	private List<FormalPropertyClaimLink> allPropClaimLinks= new ArrayList<FormalPropertyClaimLink>();

-	

+	private List<CollaborationUse> allPatternApplications= new ArrayList<CollaborationUse>();

+	private List<Pattern> allPatterns= new ArrayList<Pattern>();

+	private List<Element> allPatternRoles= new ArrayList<Element>();//type Element since different elements can have patternRoles

+

 	public CHESSContract2OpencertArgumentGenerator(IProgressMonitor monitor,CDOResourceFolder argFolder,Model model, String systemQN,Boolean weakContracts) {

 	

 		CDOConnectionUtil.instance.init(

@@ -153,34 +165,50 @@
 		for (Iterator<Class> it = sysBlock.iterator();it.hasNext();)

 		{

 			Class block= it.next();

-			generateSingleArgumentFragment(block,null);			

+			generateSingleArgumentFragment(block);			

 		}

 		//then generate argument fragments for each component instance

 

 		for (Iterator<Property> it = allCompInst.iterator();it.hasNext();)

 		{

 			Property prop= it.next();

-			generateSingleArgumentFragment(null,prop);			

+			generateSingleArgumentFragment(prop);			

 		}

-				

-	}

-		private void generateSingleArgumentFragment(Class block, Property part)

+		

+		for (Iterator<CollaborationUse> it = allPatternApplications.iterator();it.hasNext();)

 		{

-			

-			

+			CollaborationUse coll= it.next();

+			generateSingleArgumentFragment(coll);			

+		}		

+	}

+	private void generateSingleArgumentFragment(Element elem)//Class block, Property part)

+	{		

 		CDOTransaction transaction = view.getSession().openTransaction();

 		//System.out.println(argFolder.getPath());

 		String projectPath=argFolder.getPath().substring(0, argFolder.getPath().lastIndexOf("/"));

 		CDOResourceFolder assuranceprojectFolder= transaction.getResourceFolder(projectPath);

-		

-		String componentName;

-		if(block!=null)

+		Class block=null;

+		Property part=null;

+		CollaborationUse patternApp=null;

+		String componentName="";

+		if(elem instanceof Class)

+		{

+			block=(Class) elem;

 			componentName=block.getName(); 

-		else 

-			{

-				block=(Class) part.getType();

-				componentName=block.getName()+"-"+part.getName();;

-			}

+		}

+		else if (elem instanceof Property)

+		{

+			part=(Property) elem;	

+			block=(Class) part.getType();

+			componentName=block.getName()+"-"+part.getName();

+		}

+		else if (elem instanceof CollaborationUse)

+		{

+			patternApp=(CollaborationUse) elem;

+			block=(Class) patternApp.getOwner();

+			componentName=block.getName()+"-"+patternApp.getName();

+		}

+		else return;

 

 		try {

 		CDOResource argResourceDiagramDelete  = transaction.getOrCreateResource(argFolder.getPath() + "/" + componentName + ARGUMENTATION_NsPrefix + "_diagram");

@@ -209,7 +237,10 @@
     		targetModelURI = targetModelResource.getURI();

 

     		//build the argument fragment case and add it to the target components arg case to be committed to cdo

-    		targetModelResource.getContents().add(buildComponentArgumentFragment(block,part));

+    		if(patternApp!=null)

+    			targetModelResource.getContents().add(buildPatternArgumentFragment(patternApp));

+    		else

+    			targetModelResource.getContents().add(buildComponentArgumentFragment(block,part));

     

 			transaction.commit();

 	        }

@@ -351,6 +382,7 @@
 		Package sysView = null;

 		Package compView = null;

 		Package reqView = null;

+		getPatternElements(model);

 		for (Package pkg : model.getNestedPackages()) {

 			if(pkg.getAppliedStereotype(SYSVIEW) != null){

 				sysView = pkg;

@@ -383,6 +415,12 @@
 				if (elem.getAppliedStereotype(COMPINST) != null ) {

 					allCompInst.add((Property) elem);

 				}

+				if (elem.getAppliedStereotype(PATTERN_APPLICATION) != null ) {

+					allPatternApplications.add((CollaborationUse) elem);

+					}

+				if (elem.getAppliedStereotype(PATTERN_ROLE) != null ) {

+					allPatternRoles.add(elem);

+				}

 				if (elem instanceof Property){

 					if (elem.getAppliedStereotype(FLOWPORT) != null || elem.getAppliedStereotype(FLOWPORTMARTE) != null){

 						allFlowPorts.add((Port) elem);

@@ -446,7 +484,7 @@
 					allReqs.add((Class) elem);

 				}

 			}

-		

+

 		/*for(Class elem:sysBlock)

 		{

 			System.out.println(elem.getName());

@@ -462,6 +500,23 @@
 

 	}

 	

+	private void getPatternElements(Package pkg) {

+		for(Element el : pkg.getMembers()) {

+			if(el instanceof Collaboration){

+				Stereotype stereo = el.getAppliedStereotype(PATTERN);

+				if(stereo != null){

+					Pattern pattern = (Pattern) el.getStereotypeApplication(stereo);

+					if(pattern != null && !allPatterns.contains(pattern)){

+						allPatterns.add(pattern);

+					}

+				}

+			}

+			if(el instanceof Package) {

+				getPatternElements((Package)el);

+			}

+		}

+	}

+	

 	private Case buildComponentArgumentFragment(Class block, Property part)

 	{

 		String compName;

@@ -482,13 +537,16 @@
 		else 

 			compName=block.getName(); 

 

+		List <Property> ownContracts;

+		ownContracts=getOwnedContractsFromBlock(block);

+		

 		Case arggCase =	ArgFactory.eINSTANCE.createCase();

 		String topClaimDescription=null;

 		if(part!=null)

 			topClaimDescription="The contracts of the component "+compName+" are validated with sufficient confidence in the system context";

 		else

 			topClaimDescription="The system contracts are validated with sufficient confidence";

-		Claim top=instantiateClaim(compName+"_conf",topClaimDescription	,false,false,false);

+		Claim top=instantiateClaim(compName+"_conf",topClaimDescription,false,ownContracts.isEmpty(),ownContracts.isEmpty());

 		arggCase.getArgument().add(top);

 		

 			try{

@@ -498,8 +556,7 @@
 				e.printStackTrace();

 			}

 		

-		List <Property> ownContracts;

-		ownContracts=getOwnedContractsFromBlock(block);

+		

 		for (Property prop:ownContracts)

 		{

 			Contract theContract=null;

@@ -649,6 +706,138 @@
 		}

 		return arggCase;

 	}

+	

+	

+	private Case buildPatternArgumentFragment(CollaborationUse patternApplication)

+	{

+		if (patternApplication==null)

+		try {

+			throw new Exception("Something went wrong.");

+		} catch (Exception e1) {

+			// TODO Auto-generated catch block

+			e1.printStackTrace();

+		}

+		String compName="";

+		Collaboration el1 = patternApplication.getType();

+		Pattern patternObject = (Pattern) el1.getStereotypeApplication(el1.getAppliedStereotype(PATTERN));

+		Class patternAppOwner=(Class)patternApplication.getOwner();

+

+		compName=patternAppOwner.getName();

+	

+		Case arggCase =	ArgFactory.eINSTANCE.createCase();

+		String topClaimDescription=null;

+		//where to get the sysProblem from?, associating the pattern application with a requirement?

+		topClaimDescription="The corresponding system problem is adequately addressed by applying "+patternObject.getPatternName();

+		

+		

+		Claim topClaim=instantiateClaim(patternApplication.getName(),topClaimDescription,false,false,false);

+		arggCase.getArgument().add(topClaim);

+		

+		InformationElementCitation systemProblemContext = instantiateInformationElement( patternApplication.getName()+"_context", "Define the system problem being addressed by applying this pattern",InformationElementType.CONTEXT);

+		arggCase.getArgument().add(systemProblemContext);

+		arggCase.getArgument().add(attachContext(topClaim,systemProblemContext));

+		

+			try{

+				createComponentAndClaimLink(patternAppOwner, topClaim);

+				} catch (Exception e) {

+				// TODO Auto-generated catch block

+				e.printStackTrace();

+			}

+			

+			//ASSUMPTIONS

+			Claim patternAssumptionsClaim=instantiateClaim(patternObject.getPatternName()+"_assumptions", "The pattern assumptions are satisfied with sufficient confidence",false,false,false);

+			arggCase.getArgument().add(patternAssumptionsClaim);

+			arggCase.getArgument().add(connectTwoClaims(topClaim, patternAssumptionsClaim));

+			

+			EList<String> assumptions=patternObject.getPatternAssumptions();

+			for (String patAssumption:assumptions)

+			{	

+				Claim patternAssumptionClaim=instantiateClaim(patternObject.getPatternName()+"_assumption_"+assumptions.indexOf(patAssumption), 

+						"\""+patAssumption+"\"is satisfied",false,true,true);

+				arggCase.getArgument().add(patternAssumptionClaim);

+				arggCase.getArgument().add(connectTwoClaims(patternAssumptionsClaim,patternAssumptionClaim));

+

+			}

+

+			//GUARANTEES

+			Claim patternGuaranteesClaim=instantiateClaim(patternObject.getPatternName()+"_guarantees", "The pattern guarantees meet the relevant assumptions",false,false,false);

+			arggCase.getArgument().add(patternGuaranteesClaim);

+			arggCase.getArgument().add(connectTwoClaims(topClaim, patternGuaranteesClaim));

+

+			EList<String> gaurantees=patternObject.getPatternGuarantees();

+			for (String patGuarantee:gaurantees)

+			{	

+				Claim patternGuaranteeClaim=instantiateClaim(patternObject.getPatternName()+"_guarantee_"+gaurantees.indexOf(patGuarantee), 

+						"\""+patGuarantee+"\"meets the relevant requirements",false,true,true);

+				arggCase.getArgument().add(patternGuaranteeClaim);

+				arggCase.getArgument().add(connectTwoClaims(patternGuaranteesClaim,patternGuaranteeClaim));

+

+				InformationElementCitation guaranteeContext = instantiateInformationElement( patternObject.getPatternName()+"_guarantee_"+gaurantees.indexOf(patGuarantee)+"_context", 

+						"List of the relevant requirements",InformationElementType.CONTEXT);

+				arggCase.getArgument().add(guaranteeContext);

+				arggCase.getArgument().add(attachContext(patternGuaranteeClaim,guaranteeContext));

+			}

+

+			//IMPLEMENTATION

+			Claim patternImplementationClaim=instantiateClaim(patternObject.getPatternName()+"_implementation", "The pattern application correctly implements the pattern",false,true,true);

+			arggCase.getArgument().add(patternImplementationClaim);

+			arggCase.getArgument().add(connectTwoClaims(topClaim, patternImplementationClaim));

+

+			EList<String> patternImplementation=patternObject.getImplementation();

+			for (String patImpl:patternImplementation)

+			{

+				InformationElementCitation implementationContext = instantiateInformationElement( patternObject.getPatternName()+"_implementation_context", 

+						patImpl,InformationElementType.CONTEXT);

+			arggCase.getArgument().add(implementationContext);

+			arggCase.getArgument().add(attachContext(patternImplementationClaim,implementationContext));

+			}

+			

+			//RATIONALE

+			Claim patternRationaleClaim=instantiateClaim(patternObject.getPatternName()+"_rationale", patternObject.getPatternName()+" is adequate to resolve the particular system problem",false,false,false);

+			arggCase.getArgument().add(patternRationaleClaim);

+			arggCase.getArgument().add(connectTwoClaims(topClaim, patternRationaleClaim));

+

+			//-->Consequences

+			Claim patternConsequencesClaim=instantiateClaim(patternObject.getPatternName()+"_consequences", patternObject.getPatternName()+" consequences are acceptable in the context of the system",false,true,true);

+			arggCase.getArgument().add(patternConsequencesClaim);

+			arggCase.getArgument().add(connectTwoClaims(patternRationaleClaim,patternConsequencesClaim));

+

+			EList<String> patternConsequences=patternObject.getConsequences();

+			for (String patCons:patternConsequences)

+			{

+				InformationElementCitation consequencesContext = instantiateInformationElement( patternObject.getPatternName()+"_consequences_context", 

+						patCons,InformationElementType.CONTEXT);

+			arggCase.getArgument().add(consequencesContext);

+			arggCase.getArgument().add(attachContext(patternConsequencesClaim,consequencesContext));

+			}

+			

+			//-->Intent

+			Claim patternIntentClaim=instantiateClaim(patternObject.getPatternName()+"_intent", patternObject.getPatternName()+" intent is suitable to address the system problem",false,false,false);

+			arggCase.getArgument().add(patternIntentClaim);

+			arggCase.getArgument().add(connectTwoClaims(patternRationaleClaim,patternIntentClaim));

+

+			//-->Intent-->problem

+			Claim patternProblemClaim=instantiateClaim(patternObject.getPatternName()+"_problem", "The problem that "+patternObject.getPatternName()+" is design to address matches the system problem",false,true,true);

+			arggCase.getArgument().add(patternProblemClaim);

+			arggCase.getArgument().add(connectTwoClaims(patternIntentClaim,patternProblemClaim));

+			

+			InformationElementCitation problemContext = instantiateInformationElement( patternObject.getPatternName()+"_problem_context", 

+					patternObject.getProblem(),InformationElementType.CONTEXT);

+			arggCase.getArgument().add(problemContext);

+			arggCase.getArgument().add(attachContext(patternProblemClaim,problemContext));

+		

+			//-->Intent-->Solution

+			Claim patternSolutionClaim=instantiateClaim(patternObject.getPatternName()+"_solution", "The solution that "+patternObject.getPatternName()+" provides is suitable to address the system problem",false,true,true);

+			arggCase.getArgument().add(patternSolutionClaim);

+			arggCase.getArgument().add(connectTwoClaims(patternIntentClaim,patternSolutionClaim));

+			

+			InformationElementCitation solutionContext = instantiateInformationElement( patternObject.getPatternName()+"_solution_context", 

+					patternObject.getSolution(),InformationElementType.CONTEXT);

+			arggCase.getArgument().add(solutionContext);

+			arggCase.getArgument().add(attachContext(patternSolutionClaim,solutionContext));

+			

+		return arggCase;

+	}

 	private List<Property> getOwnedContractsFromBlock(Class block)

 	{

 		List <Property> result = new ArrayList<Property>();

diff --git a/org.eclipse.opencert.chess.contracts.validation/src/org/eclipse/opencert/chess/contracts/validation/constraints/OpenCertConstraints.java b/org.eclipse.opencert.chess.contracts.validation/src/org/eclipse/opencert/chess/contracts/validation/constraints/OpenCertConstraints.java
index 967c0ab..5d926c5 100644
--- a/org.eclipse.opencert.chess.contracts.validation/src/org/eclipse/opencert/chess/contracts/validation/constraints/OpenCertConstraints.java
+++ b/org.eclipse.opencert.chess.contracts.validation/src/org/eclipse/opencert/chess/contracts/validation/constraints/OpenCertConstraints.java
@@ -45,7 +45,7 @@
 import org.polarsys.chess.contracts.profile.chesscontract.Contract;

 import org.polarsys.chess.contracts.profile.chesscontract.FormalProperty;

 import org.polarsys.chess.contracts.profile.chesscontract.util.Constants;

-import org.polarsys.chess.contracts.profile.chesscontract.util.ContractEntityUtil;

+import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;

 

 public class OpenCertConstraints extends AbstractModelConstraint {

 

@@ -217,7 +217,7 @@
 		

 		for (Constraint formalProp : allFormalProps) {

 	

-			FormalProperty fp = ContractEntityUtil.getInstance().getFormalProperty(formalProp);

+			FormalProperty fp = EntityUtil.getInstance().getFormalProperty(formalProp);

 					

 			claims = null;

 			if (fp != null){

diff --git a/org.eclipse.opencert.chess.feature/feature.xml b/org.eclipse.opencert.chess.feature/feature.xml
index 9965cce..e948bf1 100644
--- a/org.eclipse.opencert.chess.feature/feature.xml
+++ b/org.eclipse.opencert.chess.feature/feature.xml
@@ -2,10 +2,10 @@
 <feature

       id="org.eclipse.opencert.chess.feature"

       label="CHESS Feature for Opencert"

-      version="2.3">

+      version="2.4">

 

    <description>

-      Chess feature for Opencert Client version 2.3

+      Chess feature for Opencert Client version 2.4

    </description>

 

    <copyright>

diff --git a/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ComponentArgumentationElementLinkAdapter.java b/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ComponentArgumentationElementLinkAdapter.java
index b696351..fe5a2a1 100644
--- a/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ComponentArgumentationElementLinkAdapter.java
+++ b/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ComponentArgumentationElementLinkAdapter.java
@@ -28,6 +28,8 @@
 import org.eclipse.opencert.chess.tracemodel.OpenCertTraceLinkMetaModel.OpenCertTraceLinkMetaModelPackage;

 import org.eclipse.opencert.sam.arg.arg.ArgumentationElement;

 import org.eclipse.uml2.uml.Class;

+import org.eclipse.uml2.uml.Element;

+import org.polarsys.chess.contracts.profile.chesscontract.util.ContractEntityUtil;

 

 /**

  * This adapter provides access to ComponentArgumentationElementLink traces.

@@ -76,7 +78,7 @@
 		if (sources.isEmpty() || targets.isEmpty())

 			return false;

 		for (EObject obj : sources) {

-			if (!(obj instanceof Class))

+			if (!(obj instanceof Class) || !(obj instanceof Element) || ContractEntityUtil.getInstance().isContract((Element) obj))

 				return false;

 		}

 		for (EObject obj : targets) {

@@ -114,7 +116,8 @@
 

 	@Override

 	public String getLabelForEObject(EObject eobject) {

-		// TODO Auto-generated method stub

-		return null;

+		if (eobject instanceof Class)

+			return ((Class)eobject).getName();

+		return eobject.toString();

 	}

 }

diff --git a/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ContractClaimLinkAdapter.java b/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ContractClaimLinkAdapter.java
index 4bf26d1..b8fa640 100644
--- a/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ContractClaimLinkAdapter.java
+++ b/org.eclipse.opencert.chess.tracemodel/src/org/eclipse/opencert/aida/tracemodel/ContractClaimLinkAdapter.java
@@ -21,13 +21,19 @@
 import org.eclipse.capra.core.CapraException;

 import org.eclipse.capra.core.adapters.TraceLinkAdapter;

 import org.eclipse.capra.core.util.TraceLinkAttribute;

+import org.eclipse.emf.common.util.URI;

 import org.eclipse.emf.ecore.EClass;

 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.opencert.chess.tracemodel.OpenCertTraceLinkMetaModel.ContractClaimLink;

 import org.eclipse.opencert.chess.tracemodel.OpenCertTraceLinkMetaModel.OpenCertTraceLinkMetaModelFactory;

 import org.eclipse.opencert.chess.tracemodel.OpenCertTraceLinkMetaModel.OpenCertTraceLinkMetaModelPackage;

 import org.eclipse.opencert.sam.arg.arg.Claim;

+import org.eclipse.uml2.uml.Classifier;

+import org.eclipse.uml2.uml.Element;

+import org.eclipse.uml2.uml.Stereotype;

 import org.polarsys.chess.contracts.profile.chesscontract.Contract;

+import org.polarsys.chess.contracts.profile.chesscontract.util.ContractEntityUtil;

+import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;

 

 /**

  * This adapter provides access to GenericTraceLink traces.

@@ -78,7 +84,7 @@
 		if (sources.isEmpty() || targets.isEmpty())

 			return false;

 		for (EObject obj : sources) {

-			if (!(obj instanceof Contract))

+			if (!(obj instanceof Contract) && (!(obj instanceof Element) || !ContractEntityUtil.getInstance().isContract((Element) obj)))

 				return false;

 		}

 		for (EObject obj : targets) {

@@ -90,7 +96,15 @@
 

 	public EObject createLink(List<EObject> sources, List<EObject> targets) {

 		ContractClaimLink traceLink = OpenCertTraceLinkMetaModelFactory.eINSTANCE.createContractClaimLink();

-		traceLink.setSources((Contract) sources.get(0));

+		

+		if( sources.get(0) instanceof Contract)

+			traceLink.setSources((Contract) sources.get(0));

+		else{

+			if(ContractEntityUtil.getInstance().isContract((Element) sources.get(0))){

+			Stereotype contr = ((Element) sources.get(0)).getApplicableStereotype(ContractEntityUtil.getInstance().CONTRACT);

+			traceLink.setSources((Contract)((Element) sources.get(0)).getStereotypeApplication(contr));

+			}

+		}

 		// for (EObject obj : sources){

 		// traceLink.getSources().add((Contract) obj);

 		// }

@@ -115,7 +129,20 @@
 

 	@Override

 	public String getLabelForEObject(EObject eobject) {

-		// TODO Auto-generated method stub

+		

+		URI uri = null;

+		if (eobject != null && eobject.eResource() !=null)

+			uri = eobject.eResource().getURI();

+

+		if (eobject instanceof Contract){

+			Contract contr = (Contract) eobject;

+			return (uri!=null ? contr.getBase_Class().getName() + " ("+uri+")" : contr.getBase_Class().getName());

+			

+		}

+		if (eobject instanceof Claim){

+			Claim claim = (Claim) eobject;

+			return (uri != null ? ((Claim)eobject).getName() + " ("+uri+")" : ((Claim)eobject).getName());

+		}

 		return null;

 	}

 }

diff --git a/org.eclipse.opencert.elastic.cdo/.classpath b/org.eclipse.opencert.elastic.cdo/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/org.eclipse.opencert.elastic.cdo/.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.elastic.cdo/.project b/org.eclipse.opencert.elastic.cdo/.project
new file mode 100644
index 0000000..6f70293
--- /dev/null
+++ b/org.eclipse.opencert.elastic.cdo/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.opencert.elastic.cdo</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.elastic.cdo/META-INF/MANIFEST.MF b/org.eclipse.opencert.elastic.cdo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7653521
--- /dev/null
+++ b/org.eclipse.opencert.elastic.cdo/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CDO Extensions for Elasticsearch Integration
+Bundle-SymbolicName: org.eclipse.opencert.elastic.cdo;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: ANSYS medini Technologies
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.emf.cdo;bundle-version="4.5.0";visibility:=reexport,
+ org.eclipse.opencert.elastic;bundle-version="1.0.0";visibility:=reexport
+Export-Package: org.eclipse.opencert.elastic.cdo
diff --git a/org.eclipse.opencert.elastic.cdo/build.properties b/org.eclipse.opencert.elastic.cdo/build.properties
new file mode 100644
index 0000000..41eb6ad
--- /dev/null
+++ b/org.eclipse.opencert.elastic.cdo/build.properties
@@ -0,0 +1,4 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .

diff --git a/org.eclipse.opencert.elastic.cdo/src/org/eclipse/opencert/elastic/cdo/CDOObjectResolver.java b/org.eclipse.opencert.elastic.cdo/src/org/eclipse/opencert/elastic/cdo/CDOObjectResolver.java
new file mode 100644
index 0000000..5524dff
--- /dev/null
+++ b/org.eclipse.opencert.elastic.cdo/src/org/eclipse/opencert/elastic/cdo/CDOObjectResolver.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.cdo;

+

+import org.eclipse.emf.cdo.CDOObject;

+import org.eclipse.emf.cdo.common.id.CDOID;

+import org.eclipse.emf.cdo.common.id.CDOIDUtil;

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

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.opencert.elastic.search.ObjectResolver;

+

+public class CDOObjectResolver implements ObjectResolver<CDOObject> {

+

+	@Override

+	public CDOObject resolve(String objectId, Object context) {

+		// the only context we can handle at the moment is a CDOView

+		if (context instanceof CDOView) {

+			try {

+				URI uri = URI.createURI(objectId);

+				CDOID id = CDOIDUtil.read(uri.fragment());

+				CDOView view = (CDOView) context;

+				CDOObject object = view.getObject(id, true);

+				return object;

+			} catch (Exception e) {

+				// ignore

+			}

+		}

+

+		return null;

+	}

+}

diff --git a/org.eclipse.opencert.elastic.site/.gitignore b/org.eclipse.opencert.elastic.site/.gitignore
new file mode 100644
index 0000000..07a9072
--- /dev/null
+++ b/org.eclipse.opencert.elastic.site/.gitignore
@@ -0,0 +1,5 @@
+/artifacts.jar
+/content.jar
+/features/
+/org.eclipse.opencert.elastic.site.zip
+/plugins/
diff --git a/org.eclipse.opencert.elastic.test/META-INF/MANIFEST.MF b/org.eclipse.opencert.elastic.test/META-INF/MANIFEST.MF
index ef27ebe..77a8122 100644
--- a/org.eclipse.opencert.elastic.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.elastic.test/META-INF/MANIFEST.MF
@@ -6,6 +6,6 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit,
  org.eclipse.opencert.elastic;bundle-version="1.0.0",
- org.eclipse.uml2;bundle-version="5.0.0",
+ org.eclipse.opencert.elastic.cdo;bundle-version="1.0.0",
  org.eclipse.uml2.uml;bundle-version="5.0.0"
 Bundle-Vendor: ANSYS medini Technologies
diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/AllTests.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/AllTests.java
index e4f9671..6d23e7f 100644
--- a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/AllTests.java
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/AllTests.java
@@ -16,9 +16,8 @@
 import org.junit.runners.Suite;

 import org.junit.runners.Suite.SuiteClasses;

 

-@SuppressWarnings("javadoc")

 @RunWith(Suite.class)

-@SuiteClasses({ ElasticClientTest.class, EObjectToJsonTest.class })

+@SuiteClasses({ ElasticClientTest.class, ElasticFinderTest.class, EObjectToJsonTest.class, HitResolutionTest.class })

 public class AllTests {

 	// empty by intention

 }

diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/EObjectToJsonTest.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/EObjectToJsonTest.java
index 3417dc2..5c6408a 100644
--- a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/EObjectToJsonTest.java
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/EObjectToJsonTest.java
@@ -12,12 +12,14 @@
  ******************************************************************************/

 package org.eclipse.opencert.elastic;

 

+import java.util.Iterator;

+

+import org.eclipse.emf.ecore.EObject;

 import org.junit.Assert;

 import org.junit.Test;

 

 import com.google.gson.JsonObject;

 

-@SuppressWarnings({ "javadoc" })

 public class EObjectToJsonTest {

 

 	@Test

@@ -33,4 +35,13 @@
 		Assert.assertNotNull(json);

 		System.out.println(json.toString());

 	}

+	

+	@Test

+	public void testUML() {

+		Iterator<EObject> it = TestData.uml();

+		EObject elem = it.next();

+		JsonObject json = EObjectToJson.INSTANCE.convert(elem);

+		Assert.assertNotNull(json);

+		System.out.println(json.toString());

+	}

 }

diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticClientTest.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticClientTest.java
index 4ecf8ae..9fa7f39 100644
--- a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticClientTest.java
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticClientTest.java
@@ -12,23 +12,34 @@
  ******************************************************************************/

 package org.eclipse.opencert.elastic;

 

+import java.util.List;

 import org.eclipse.uml2.uml.Component;

 import org.junit.Test;

 

-@SuppressWarnings({ "nls", "javadoc" })

 public class ElasticClientTest {

 

 	@Test

 	public void testPing() throws Exception {

 		System.out.println("Send a ping to local Elastic server...");

-		ElasticClientImpl.on("localhost", 9200, "http").ping();

+		ElasticClientImpl.on("localhost", 9200, "http").ping().close();

 		System.out.println("Done. Server seems to be alive.");

 	}

 

 	@Test

 	public void testSend() throws Exception {

 		Component object = TestData.createComponent();

-		ElasticDocument document = EObjectToDocument.INSTANCE.convert(object, "amass-test");

-		ElasticClientImpl.on("localhost", 9200, "http").store(document);

+		ElasticDocument document = EObjectToDocument.INSTANCE.convert(object, "client-test");

+		ElasticClientImpl.on("localhost", 9200, "http").store(document).close();

+	}

+

+	@Test

+	public void testDelete() throws Exception {

+		ElasticClientImpl.on("localhost", 9200, "http").delete("client-test").close();

+	}

+	

+	@Test

+	public void testSendMany() throws Exception {

+		List<ElasticDocument> documents = EObjectToDocument.INSTANCE.convert(TestData.uml(50), "client-test");

+		ElasticClientImpl.on("localhost", 9200, "http").storeAll(documents.iterator()).close();

 	}

 }

diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticFinderTest.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticFinderTest.java
new file mode 100644
index 0000000..142089b
--- /dev/null
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/ElasticFinderTest.java
@@ -0,0 +1,156 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic;

+

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.Set;

+

+import org.eclipse.opencert.elastic.search.ElasticFinder;

+import org.eclipse.opencert.elastic.search.ElasticFinderImpl;

+import org.eclipse.opencert.elastic.search.Hit;

+import org.eclipse.uml2.uml.Component;

+import org.junit.Assert;

+import org.junit.BeforeClass;

+import org.junit.Ignore;

+import org.junit.Test;

+

+public class ElasticFinderTest {

+

+	@BeforeClass

+	public static void setup() throws Exception {

+		ElasticClient client = ElasticClientImpl.on("localhost", 9200, "http");

+		try {

+			client.indexStatus("uml");

+		} catch (Exception e) {

+			// index not yet there

+			System.out.println("Indexing UML classes...");

+			List<ElasticDocument> documents = EObjectToDocument.INSTANCE.convert(TestData.umlClasses(), "uml");

+			client.storeAll(documents.iterator()).close();

+		}

+	}

+	

+	@Test

+	@Ignore

+	public void testDeleteTestIndices() throws Exception {

+		ElasticClientImpl.on("localhost", 9200, "http").delete("uml");

+		ElasticClientImpl.on("localhost", 9200, "http").delete("finder-test");

+	}

+	

+	@Test

+	public void testSendAndSearch() throws Exception {

+		Component object = TestData.createComponent();

+		ElasticDocument document = EObjectToDocument.INSTANCE.convert(object, "finder-test");

+		ElasticClient client = ElasticClientImpl.on("localhost", 9200, "http")/*.delete("finder-test")*/.store(document);

+		

+		ElasticFinder finder = ElasticFinderImpl.onClient(client);

+		Set<Hit> hits = finder.within("finder-test").search(null, null);

+		Assert.assertEquals(1, hits.size());

+		//

+		hits = finder.search("foobar", null);

+		Assert.assertEquals(0, hits.size());

+		client.close();

+	}

+	

+	@Test

+	public void testSearch() throws Exception {

+		ElasticClient client = ElasticClientImpl.on("localhost", 9200, "http");

+		Set<Hit> hits = ElasticFinderImpl.onClient(client).search("this AND that OR thus", null);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertTrue("empty set expected", hits.isEmpty());

+	}

+

+	@Test

+	public void testDefaultClient() throws Exception {

+		Set<Hit> hits = ElasticFinderImpl.onDefaultClient().search("this AND that OR thus", null);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertTrue("empty set expected", hits.isEmpty());

+	}

+

+	@Test

+	public void testNoHit() throws Exception {

+		testNoHit(ElasticFinderImpl.onDummy(TestData.uml()));

+		// we use indexed UML meta model for testing

+		testNoHit(ElasticFinderImpl.onDefaultClient());

+	}

+	

+	private void testNoHit(ElasticFinder finder) throws Exception {

+		// there is no "Requirement" in UML

+		Set<Hit> hits = finder.search("Requirement", null);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertTrue("empty set expected", hits.isEmpty());

+	}

+

+	@Test

+	public void testHit() throws Exception {

+		// we use UML dummy meta model for testing

+		testHit(ElasticFinderImpl.onDummy(TestData.uml()));

+		// we use indexed UML meta model for testing

+		testHit(ElasticFinderImpl.onDefaultClient());

+	}

+	

+	private void testHit(ElasticFinder finder) throws Exception {

+		// we should find the "Component" class

+		Set<Hit> hits = finder.search("Component", null);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertFalse("filled set expected", hits.isEmpty());

+

+		Hit firstHit = hits.iterator().next();

+		Assert.assertTrue("score must be > 0", firstHit.score > 0);

+	}

+	

+	@Test

+	public void testHitWithExpression() throws Exception {

+		testHitWithExpression(ElasticFinderImpl.onDummy(TestData.uml()));

+		testHitWithExpression(ElasticFinderImpl.onDefaultClient());

+	}

+	

+	private void testHitWithExpression(ElasticFinder finder) throws Exception {

+		Set<Hit> hits = finder.search(".*ompon.*", null);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertFalse("filled set expected", hits.isEmpty());

+	}

+

+	@Test

+	public void testHitWithNegativeFilter() throws Exception {

+		testHitWithNegativeFilter(ElasticFinderImpl.onDummy(TestData.uml()));

+		testHitWithNegativeFilter(ElasticFinderImpl.onDefaultClient());

+	}

+

+	private void testHitWithNegativeFilter(ElasticFinder finder) throws Exception {

+		Map<String, Object> filters = new HashMap<>();

+		filters.put("abstract", Boolean.TRUE);

+		Set<Hit> hits = finder.search("Component", filters);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertTrue("empty set expected - Component is not abstract", hits.isEmpty());

+	}

+

+	@Test

+	public void testHitWithPositiveFilter() throws Exception {

+		testHitWithPositiveFilter(ElasticFinderImpl.onDummy(TestData.uml()));

+		testHitWithPositiveFilter(ElasticFinderImpl.onDefaultClient());

+	}

+	

+	private void testHitWithPositiveFilter(ElasticFinder finder) throws Exception {

+		Map<String, Object> filters = new HashMap<>();

+		filters.put("abstract", Boolean.FALSE);

+		filters.put("interface", Boolean.FALSE);

+		Set<Hit> hits = finder.search("Component", filters);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertFalse("filled set expected - Component is not abstract", hits.isEmpty());

+

+		Hit firstHit = hits.iterator().next();

+		Assert.assertTrue("score must be > 1 (due to filters matched)", firstHit.score > 1);

+	}

+}

diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/HitResolutionTest.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/HitResolutionTest.java
new file mode 100644
index 0000000..d3d83ff
--- /dev/null
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/HitResolutionTest.java
@@ -0,0 +1,60 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic;

+

+import java.util.HashMap;

+import java.util.Map;

+import java.util.Set;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.opencert.elastic.cdo.CDOObjectResolver;

+import org.eclipse.opencert.elastic.search.DummyObjectResolver;

+import org.eclipse.opencert.elastic.search.EMFObjectResolver;

+import org.eclipse.opencert.elastic.search.ElasticFinder;

+import org.eclipse.opencert.elastic.search.ElasticFinderImpl;

+import org.eclipse.opencert.elastic.search.Hit;

+import org.eclipse.opencert.elastic.search.HitResolution;

+import org.eclipse.opencert.elastic.search.ObjectResolver;

+import org.junit.Assert;

+import org.junit.Test;

+

+public class HitResolutionTest {

+

+	@Test

+	public void testHitAndResolve() throws Exception {

+		testHitAndResolve(ElasticFinderImpl.onDummy(TestData.umlClasses()), new DummyObjectResolver());

+		testHitAndResolve(ElasticFinderImpl.onDefaultClient().within("uml"), new EMFObjectResolver());

+	}

+	

+	private void testHitAndResolve(ElasticFinder finder, ObjectResolver<? extends Object> resolver) throws Exception {

+		Map<String, Object> filters = new HashMap<>();

+		filters.put("abstract", Boolean.FALSE);

+		filters.put("interface", Boolean.FALSE);

+		Set<Hit> hits = finder.search(".*Component.*", filters);

+		Assert.assertNotNull("set expected", hits);

+		Assert.assertEquals("2 hits expected", 2, hits.size());

+

+		HitResolution<Object> res = HitResolution.on(TestData.uml()).using(resolver);

+		Set<Object> resolved = res.resolve(hits, 2);

+		Assert.assertNotNull("set expected", resolved);

+		Assert.assertEquals("2 hits expected", 2, resolved.size());

+	}

+	

+	@Test

+	public void testCDOAPIFits() throws Exception {

+		// just to make sure the CDO extension fits the other API

+		HitResolution<EObject> resolution = HitResolution.on(null);

+		resolution.using(new CDOObjectResolver());

+	}

+	

+}

diff --git a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/TestData.java b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/TestData.java
index c57472f..d6619fb 100644
--- a/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/TestData.java
+++ b/org.eclipse.opencert.elastic.test/src/org/eclipse/opencert/elastic/TestData.java
@@ -12,10 +12,17 @@
  ******************************************************************************/

 package org.eclipse.opencert.elastic;

 

+import java.util.ArrayList;

+import java.util.Iterator;

+import java.util.List;

+

 import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

 import org.eclipse.emf.ecore.resource.impl.ResourceImpl;

 import org.eclipse.uml2.uml.Component;

 import org.eclipse.uml2.uml.UMLFactory;

+import org.eclipse.uml2.uml.UMLPackage;

 import org.eclipse.uml2.uml.VisibilityKind;

 

 /**

@@ -23,23 +30,58 @@
  * 

  * @author mauersberger

  */

-@SuppressWarnings({ "nls" })

 public class TestData {

 

 	static Component createComponent() {

 		return createComponent(false);

 	}

-	

+

 	static Component createComponent(boolean inResource) {

 		Component comp = UMLFactory.eINSTANCE.createComponent();

 		comp.setName("Component A");

 		comp.setVisibility(VisibilityKind.PUBLIC_LITERAL);

-		

+

 		if (inResource) {

 			ResourceImpl res = new ResourceImpl(URI.createURI("custom:somewhere"));

 			res.getContents().add(comp);

 		}

-		

+

 		return comp;

 	}

+

+	static Iterator<EObject> uml() {

+		return UMLPackage.eINSTANCE.eAllContents();

+	}

+

+	static Iterator<EObject> umlClasses() {

+		List<EObject> classes = new ArrayList<>();

+		Iterator<EObject> it = uml();

+		while (it.hasNext()) {

+			EObject object = (EObject) it.next();

+			if (object instanceof EClass) {

+				classes.add(object);

+			}

+		}

+		

+		System.out.println("Classes: " + classes.size());

+		return classes.iterator();

+	}

+	

+	static Iterator<EObject> uml(final int max) {

+		return new Iterator<EObject>() {

+			private Iterator<EObject> delegate = UMLPackage.eINSTANCE.eAllContents();

+			private long i = 0;

+

+			@Override

+			public boolean hasNext() {

+				return i < max && delegate.hasNext();

+			}

+

+			@Override

+			public EObject next() {

+				i++;

+				return delegate.next();

+			}

+		};

+	}

 }

diff --git a/org.eclipse.opencert.elastic.ui/META-INF/MANIFEST.MF b/org.eclipse.opencert.elastic.ui/META-INF/MANIFEST.MF
index d159bae..21adf99 100644
--- a/org.eclipse.opencert.elastic.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.elastic.ui/META-INF/MANIFEST.MF
@@ -15,3 +15,4 @@
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.opencert.elastic.ui.Activator
 Bundle-Vendor: ANSYS medini Technologies
+Export-Package: org.eclipse.opencert.elastic.ui
diff --git a/org.eclipse.opencert.elastic/.classpath b/org.eclipse.opencert.elastic/.classpath
index 85996cd..8fd28eb 100644
--- a/org.eclipse.opencert.elastic/.classpath
+++ b/org.eclipse.opencert.elastic/.classpath
@@ -1,5 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <classpath>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/lucene-queryparser-6.6.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/log4j-core-2.11.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/hppc-0.7.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/joda-time-2.9.5.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/jackson-core-2.8.6.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/log4j-api-2.11.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/lucene-core-6.6.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/elasticsearch-5.6.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/elasticsearch-rest-high-level-client-5.6.1.jar"/>

+	<classpathentry exported="true" kind="lib" path="lib/elastic/elasticsearch-rest-client-5.6.1.jar"/>

 	<classpathentry exported="true" kind="lib" path="lib/gson/gson-2.2.4.jar"/>

 	<classpathentry exported="true" kind="lib" path="lib/elastic/commons-codec-1.10.jar"/>

 	<classpathentry exported="true" kind="lib" path="lib/elastic/commons-logging-1.1.3.jar"/>

@@ -7,7 +17,6 @@
 	<classpathentry exported="true" kind="lib" path="lib/elastic/httpclient-4.5.2.jar"/>

 	<classpathentry exported="true" kind="lib" path="lib/elastic/httpcore-4.4.5.jar"/>

 	<classpathentry exported="true" kind="lib" path="lib/elastic/httpcore-nio-4.4.5.jar"/>

-	<classpathentry exported="true" kind="lib" path="lib/elastic/rest-5.2.2.jar"/>

 	<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"/>

diff --git a/org.eclipse.opencert.elastic/.gitignore b/org.eclipse.opencert.elastic/.gitignore
index ae3c172..2a02dc2 100644
--- a/org.eclipse.opencert.elastic/.gitignore
+++ b/org.eclipse.opencert.elastic/.gitignore
@@ -1 +1,2 @@
 /bin/
+/plugin.xml
diff --git a/org.eclipse.opencert.elastic/META-INF/MANIFEST.MF b/org.eclipse.opencert.elastic/META-INF/MANIFEST.MF
index 2abf95e..91aaaf9 100644
--- a/org.eclipse.opencert.elastic/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.elastic/META-INF/MANIFEST.MF
@@ -8,13 +8,25 @@
 Bundle-ClassPath: .,
  lib/elastic/commons-codec-1.10.jar,
  lib/elastic/commons-logging-1.1.3.jar,
+ lib/elastic/log4j-api-2.11.1.jar,
+ lib/elastic/log4j-core-2.11.1.jar,
  lib/elastic/httpasyncclient-4.1.2.jar,
  lib/elastic/httpclient-4.5.2.jar,
  lib/elastic/httpcore-4.4.5.jar,
  lib/elastic/httpcore-nio-4.4.5.jar,
- lib/elastic/rest-5.2.2.jar,
- lib/gson/gson-2.2.4.jar
+ lib/gson/gson-2.2.4.jar,
+ lib/elastic/lucene-core-6.6.1.jar,
+ lib/elastic/lucene-queryparser-6.6.1.jar,
+ lib/elastic/jackson-core-2.8.6.jar,
+ lib/elastic/joda-time-2.9.5.jar,
+ lib/elastic/hppc-0.7.1.jar,
+ lib/elastic/elasticsearch-5.6.1.jar,
+ lib/elastic/elasticsearch-rest-client-5.6.1.jar,
+ lib/elastic/elasticsearch-rest-high-level-client-5.6.1.jar
 Require-Bundle: org.eclipse.emf;bundle-version="2.6.0",
  org.eclipse.emf.ecore
 Export-Package: com.google.gson,
- org.eclipse.opencert.elastic
+ org.apache.http,
+ org.eclipse.opencert.elastic,
+ org.eclipse.opencert.elastic.search,
+ org.elasticsearch.client
diff --git a/org.eclipse.opencert.elastic/lib/elastic/NOTICE.txt b/org.eclipse.opencert.elastic/lib/elastic/NOTICE.txt
index c99b958..09b3ab8 100644
--- a/org.eclipse.opencert.elastic/lib/elastic/NOTICE.txt
+++ b/org.eclipse.opencert.elastic/lib/elastic/NOTICE.txt
@@ -1,5 +1,3632 @@
 Elasticsearch
-Copyright 2009-2016 Elasticsearch
+Copyright 2009-2017 Elasticsearch
 
-This product includes software developed by The Apache Software
-Foundation (http://www.apache.org/).
+This product includes software developed by The Apache Software Foundation
+(http://www.apache.org/).
+
+
+================================================================================
+HdrHistogram LICENSE
+================================================================================
+The code in this repository code was Written by Gil Tene, Michael Barker,
+and Matt Warren, and released to the public domain, as explained at
+http://creativecommons.org/publicdomain/zero/1.0/
+
+For users of this code who wish to consume it under the "BSD" license
+rather than under the public domain or CC0 contribution text mentioned
+above, the code found under this directory is *also* provided under the
+following license (commonly referred to as the BSD 2-Clause License). This
+license does not detract from the above stated release of the code into
+the public domain, and simply represents an additional license granted by
+the Author.
+
+-----------------------------------------------------------------------------
+** Beginning of "BSD 2-Clause License" text. **
+
+ Copyright (c) 2012, 2013, 2014 Gil Tene
+ Copyright (c) 2014 Michael Barker
+ Copyright (c) 2014 Matt Warren
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+
+================================================================================
+antlr4-runtime LICENSE
+================================================================================
+[The "BSD license"]
+Copyright (c) 2015 Terence Parr, Sam Harwell
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+================================================================================
+asm LICENSE
+================================================================================
+Copyright (c) 2012 France Télécom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+
+================================================================================
+compiler LICENSE
+================================================================================
+Copyright 2010 RightTime, Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+================================================================================
+groovy NOTICE
+================================================================================
+Apache Groovy
+Copyright 2003-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+
+================================================================================
+groovy LICENSE
+================================================================================
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+ 
+
+================================================================================
+hppc NOTICE
+================================================================================
+ACKNOWLEDGEMENT
+===============
+
+HPPC borrowed code, ideas or both from:
+
+ * Apache Lucene, http://lucene.apache.org/
+   (Apache license)
+ * Fastutil, http://fastutil.di.unimi.it/
+   (Apache license)
+ * Koloboke, https://github.com/OpenHFT/Koloboke
+   (Apache license)
+
+
+================================================================================
+hppc LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2010-2013, Carrot Search s.c., Boznicza 11/56, Poznan, Poland
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+================================================================================
+jcodings NOTICE
+================================================================================
+JCodings is released under the MIT License.
+
+================================================================================
+jcodings LICENSE
+================================================================================
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+================================================================================
+jna LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+================================================================================
+joda-time NOTICE
+================================================================================
+=============================================================================
+= NOTICE file corresponding to section 4d of the Apache License Version 2.0 =
+=============================================================================
+This product includes software developed by
+Joda.org (http://www.joda.org/).
+
+
+================================================================================
+joda-time LICENSE
+================================================================================
+

+                                 Apache License

+                           Version 2.0, January 2004

+                        http://www.apache.org/licenses/

+

+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

+

+   1. Definitions.

+

+      "License" shall mean the terms and conditions for use, reproduction,

+      and distribution as defined by Sections 1 through 9 of this document.

+

+      "Licensor" shall mean the copyright owner or entity authorized by

+      the copyright owner that is granting the License.

+

+      "Legal Entity" shall mean the union of the acting entity and all

+      other entities that control, are controlled by, or are under common

+      control with that entity. For the purposes of this definition,

+      "control" means (i) the power, direct or indirect, to cause the

+      direction or management of such entity, whether by contract or

+      otherwise, or (ii) ownership of fifty percent (50%) or more of the

+      outstanding shares, or (iii) beneficial ownership of such entity.

+

+      "You" (or "Your") shall mean an individual or Legal Entity

+      exercising permissions granted by this License.

+

+      "Source" form shall mean the preferred form for making modifications,

+      including but not limited to software source code, documentation

+      source, and configuration files.

+

+      "Object" form shall mean any form resulting from mechanical

+      transformation or translation of a Source form, including but

+      not limited to compiled object code, generated documentation,

+      and conversions to other media types.

+

+      "Work" shall mean the work of authorship, whether in Source or

+      Object form, made available under the License, as indicated by a

+      copyright notice that is included in or attached to the work

+      (an example is provided in the Appendix below).

+

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

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

+      editorial revisions, annotations, elaborations, or other modifications

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

+      of this License, Derivative Works shall not include works that remain

+      separable from, or merely link (or bind by name) to the interfaces of,

+      the Work and Derivative Works thereof.

+

+      "Contribution" shall mean any work of authorship, including

+      the original version of the Work and any modifications or additions

+      to that Work or Derivative Works thereof, that is intentionally

+      submitted to Licensor for inclusion in the Work by the copyright owner

+      or by an individual or Legal Entity authorized to submit on behalf of

+      the copyright owner. For the purposes of this definition, "submitted"

+      means any form of electronic, verbal, or written communication sent

+      to the Licensor or its representatives, including but not limited to

+      communication on electronic mailing lists, source code control systems,

+      and issue tracking systems that are managed by, or on behalf of, the

+      Licensor for the purpose of discussing and improving the Work, but

+      excluding communication that is conspicuously marked or otherwise

+      designated in writing by the copyright owner as "Not a Contribution."

+

+      "Contributor" shall mean Licensor and any individual or Legal Entity

+      on behalf of whom a Contribution has been received by Licensor and

+      subsequently incorporated within the Work.

+

+   2. Grant of Copyright License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      copyright license to reproduce, prepare Derivative Works of,

+      publicly display, publicly perform, sublicense, and distribute the

+      Work and such Derivative Works in Source or Object form.

+

+   3. Grant of Patent License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      (except as stated in this section) patent license to make, have made,

+      use, offer to sell, sell, import, and otherwise transfer the Work,

+      where such license applies only to those patent claims licensable

+      by such Contributor that are necessarily infringed by their

+      Contribution(s) alone or by combination of their Contribution(s)

+      with the Work to which such Contribution(s) was submitted. If You

+      institute patent litigation against any entity (including a

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

+      or a Contribution incorporated within the Work constitutes direct

+      or contributory patent infringement, then any patent licenses

+      granted to You under this License for that Work shall terminate

+      as of the date such litigation is filed.

+

+   4. Redistribution. You may reproduce and distribute copies of the

+      Work or Derivative Works thereof in any medium, with or without

+      modifications, and in Source or Object form, provided that You

+      meet the following conditions:

+

+      (a) You must give any other recipients of the Work or

+          Derivative Works a copy of this License; and

+

+      (b) You must cause any modified files to carry prominent notices

+          stating that You changed the files; and

+

+      (c) You must retain, in the Source form of any Derivative Works

+          that You distribute, all copyright, patent, trademark, and

+          attribution notices from the Source form of the Work,

+          excluding those notices that do not pertain to any part of

+          the Derivative Works; and

+

+      (d) If the Work includes a "NOTICE" text file as part of its

+          distribution, then any Derivative Works that You distribute must

+          include a readable copy of the attribution notices contained

+          within such NOTICE file, excluding those notices that do not

+          pertain to any part of the Derivative Works, in at least one

+          of the following places: within a NOTICE text file distributed

+          as part of the Derivative Works; within the Source form or

+          documentation, if provided along with the Derivative Works; or,

+          within a display generated by the Derivative Works, if and

+          wherever such third-party notices normally appear. The contents

+          of the NOTICE file are for informational purposes only and

+          do not modify the License. You may add Your own attribution

+          notices within Derivative Works that You distribute, alongside

+          or as an addendum to the NOTICE text from the Work, provided

+          that such additional attribution notices cannot be construed

+          as modifying the License.

+

+      You may add Your own copyright statement to Your modifications and

+      may provide additional or different license terms and conditions

+      for use, reproduction, or distribution of Your modifications, or

+      for any such Derivative Works as a whole, provided Your use,

+      reproduction, and distribution of the Work otherwise complies with

+      the conditions stated in this License.

+

+   5. Submission of Contributions. Unless You explicitly state otherwise,

+      any Contribution intentionally submitted for inclusion in the Work

+      by You to the Licensor shall be under the terms and conditions of

+      this License, without any additional terms or conditions.

+      Notwithstanding the above, nothing herein shall supersede or modify

+      the terms of any separate license agreement you may have executed

+      with Licensor regarding such Contributions.

+

+   6. Trademarks. This License does not grant permission to use the trade

+      names, trademarks, service marks, or product names of the Licensor,

+      except as required for reasonable and customary use in describing the

+      origin of the Work and reproducing the content of the NOTICE file.

+

+   7. Disclaimer of Warranty. Unless required by applicable law or

+      agreed to in writing, Licensor provides the Work (and each

+      Contributor provides its Contributions) 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. You are solely responsible for determining the

+      appropriateness of using or redistributing the Work and assume any

+      risks associated with Your exercise of permissions under this License.

+

+   8. Limitation of Liability. In no event and under no legal theory,

+      whether in tort (including negligence), contract, or otherwise,

+      unless required by applicable law (such as deliberate and grossly

+      negligent acts) or agreed to in writing, shall any Contributor be

+      liable to You for damages, including any direct, indirect, special,

+      incidental, or consequential damages of any character arising as a

+      result of this License or out of the use or inability to use the

+      Work (including but not limited to damages for loss of goodwill,

+      work stoppage, computer failure or malfunction, or any and all

+      other commercial damages or losses), even if such Contributor

+      has been advised of the possibility of such damages.

+

+   9. Accepting Warranty or Additional Liability. While redistributing

+      the Work or Derivative Works thereof, You may choose to offer,

+      and charge a fee for, acceptance of support, warranty, indemnity,

+      or other liability obligations and/or rights consistent with this

+      License. However, in accepting such obligations, You may act only

+      on Your own behalf and on Your sole responsibility, not on behalf

+      of any other Contributor, and only if You agree to indemnify,

+      defend, and hold each Contributor harmless for any liability

+      incurred by, or claims asserted against, such Contributor by reason

+      of your accepting any such warranty or additional liability.

+

+   END OF TERMS AND CONDITIONS

+

+   APPENDIX: How to apply the Apache License to your work.

+

+      To apply the Apache License to your work, attach the following

+      boilerplate notice, with the fields enclosed by brackets "[]"

+      replaced with your own identifying information. (Don't include

+      the brackets!)  The text should be enclosed in the appropriate

+      comment syntax for the file format. We also recommend that a

+      file or class name and description of purpose be included on the

+      same "printed page" as the copyright notice for easier

+      identification within third-party archives.

+

+   Copyright [yyyy] [name of copyright owner]

+

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+
+
+================================================================================
+joni NOTICE
+================================================================================
+Joni is released under the MIT License.
+
+
+================================================================================
+joni LICENSE
+================================================================================
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+================================================================================
+jopt-simple LICENSE
+================================================================================
+/*
+ The MIT License
+
+ Copyright (c) 2004-2015 Paul R. Holser, Jr.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+
+================================================================================
+jts LICENSE
+================================================================================
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
+
+================================================================================
+log4j NOTICE
+================================================================================
+Apache log4j
+Copyright 2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+================================================================================
+log4j LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 1999-2005 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+log4j-api NOTICE
+================================================================================
+Apache log4j
+Copyright 2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+================================================================================
+log4j-api LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 1999-2005 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+log4j-core NOTICE
+================================================================================
+Apache log4j
+Copyright 2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+================================================================================
+log4j-core LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 1999-2005 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+lucene NOTICE
+================================================================================
+Apache Lucene
+Copyright 2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Includes software from other Apache Software Foundation projects,
+including, but not limited to:
+ - Apache Ant
+ - Apache Jakarta Regexp
+ - Apache Commons
+ - Apache Xerces
+
+ICU4J, (under analysis/icu) is licensed under an MIT styles license
+and Copyright (c) 1995-2008 International Business Machines Corporation and others
+
+Some data files (under analysis/icu/src/data) are derived from Unicode data such
+as the Unicode Character Database. See http://unicode.org/copyright.html for more
+details.
+
+Brics Automaton (under core/src/java/org/apache/lucene/util/automaton) is 
+BSD-licensed, created by Anders Møller. See http://www.brics.dk/automaton/
+
+The levenshtein automata tables (under core/src/java/org/apache/lucene/util/automaton) were
+automatically generated with the moman/finenight FSA library, created by
+Jean-Philippe Barrette-LaPierre. This library is available under an MIT license,
+see http://sites.google.com/site/rrettesite/moman and 
+http://bitbucket.org/jpbarrette/moman/overview/
+
+The class org.apache.lucene.util.WeakIdentityMap was derived from
+the Apache CXF project and is Apache License 2.0.
+
+The Google Code Prettify is Apache License 2.0.
+See http://code.google.com/p/google-code-prettify/
+
+JUnit (junit-4.10) is licensed under the Common Public License v. 1.0
+See http://junit.sourceforge.net/cpl-v10.html
+
+This product includes code (JaspellTernarySearchTrie) from Java Spelling Checkin
+g Package (jaspell): http://jaspell.sourceforge.net/
+License: The BSD License (http://www.opensource.org/licenses/bsd-license.php)
+
+The snowball stemmers in
+  analysis/common/src/java/net/sf/snowball
+were developed by Martin Porter and Richard Boulton.
+The snowball stopword lists in
+  analysis/common/src/resources/org/apache/lucene/analysis/snowball
+were developed by Martin Porter and Richard Boulton.
+The full snowball package is available from
+  http://snowball.tartarus.org/
+
+The KStem stemmer in
+  analysis/common/src/org/apache/lucene/analysis/en
+was developed by Bob Krovetz and Sergio Guzman-Lara (CIIR-UMass Amherst)
+under the BSD-license.
+
+The Arabic,Persian,Romanian,Bulgarian, and Hindi analyzers (common) come with a default
+stopword list that is BSD-licensed created by Jacques Savoy.  These files reside in:
+analysis/common/src/resources/org/apache/lucene/analysis/ar/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/fa/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/ro/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/bg/stopwords.txt,
+analysis/common/src/resources/org/apache/lucene/analysis/hi/stopwords.txt
+See http://members.unine.ch/jacques.savoy/clef/index.html.
+
+The German,Spanish,Finnish,French,Hungarian,Italian,Portuguese,Russian and Swedish light stemmers
+(common) are based on BSD-licensed reference implementations created by Jacques Savoy and
+Ljiljana Dolamic. These files reside in:
+analysis/common/src/java/org/apache/lucene/analysis/de/GermanLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/de/GermanMinimalStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/es/SpanishLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fi/FinnishLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fr/FrenchLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/fr/FrenchMinimalStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/hu/HungarianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/it/ItalianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/pt/PortugueseLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/ru/RussianLightStemmer.java
+analysis/common/src/java/org/apache/lucene/analysis/sv/SwedishLightStemmer.java
+
+The Stempel analyzer (stempel) includes BSD-licensed software developed 
+by the Egothor project http://egothor.sf.net/, created by Leo Galambos, Martin Kvapil,
+and Edmond Nolan.
+
+The Polish analyzer (stempel) comes with a default
+stopword list that is BSD-licensed created by the Carrot2 project. The file resides
+in stempel/src/resources/org/apache/lucene/analysis/pl/stopwords.txt.
+See http://project.carrot2.org/license.html.
+
+The SmartChineseAnalyzer source code (smartcn) was
+provided by Xiaoping Gao and copyright 2009 by www.imdict.net.
+
+WordBreakTestUnicode_*.java (under modules/analysis/common/src/test/) 
+is derived from Unicode data such as the Unicode Character Database. 
+See http://unicode.org/copyright.html for more details.
+
+The Morfologik analyzer (morfologik) includes BSD-licensed software
+developed by Dawid Weiss and Marcin Miłkowski (http://morfologik.blogspot.com/).
+
+Morfologik uses data from Polish ispell/myspell dictionary
+(http://www.sjp.pl/slownik/en/) licenced on the terms of (inter alia)
+LGPL and Creative Commons ShareAlike.
+
+Morfologic includes data from BSD-licensed dictionary of Polish (SGJP)
+(http://sgjp.pl/morfeusz/)
+
+Servlet-api.jar and javax.servlet-*.jar are under the CDDL license, the original
+source code for this can be found at http://www.eclipse.org/jetty/downloads.php
+
+===========================================================================
+Kuromoji Japanese Morphological Analyzer - Apache Lucene Integration
+===========================================================================
+
+This software includes a binary and/or source version of data from
+
+  mecab-ipadic-2.7.0-20070801
+
+which can be obtained from
+
+  http://atilika.com/releases/mecab-ipadic/mecab-ipadic-2.7.0-20070801.tar.gz
+
+or
+
+  http://jaist.dl.sourceforge.net/project/mecab/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz
+
+===========================================================================
+mecab-ipadic-2.7.0-20070801 Notice
+===========================================================================
+
+Nara Institute of Science and Technology (NAIST),
+the copyright holders, disclaims all warranties with regard to this
+software, including all implied warranties of merchantability and
+fitness, in no event shall NAIST be liable for
+any special, indirect or consequential damages or any damages
+whatsoever resulting from loss of use, data or profits, whether in an
+action of contract, negligence or other tortuous action, arising out
+of or in connection with the use or performance of this software.
+
+A large portion of the dictionary entries
+originate from ICOT Free Software.  The following conditions for ICOT
+Free Software applies to the current dictionary as well.
+
+Each User may also freely distribute the Program, whether in its
+original form or modified, to any third party or parties, PROVIDED
+that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+on, or be attached to, the Program, which is distributed substantially
+in the same form as set out herein and that such intended
+distribution, if actually made, will neither violate or otherwise
+contravene any of the laws and regulations of the countries having
+jurisdiction over the User or the intended distribution itself.
+
+NO WARRANTY
+
+The program was produced on an experimental basis in the course of the
+research and development conducted during the project and is provided
+to users as so produced on an experimental basis.  Accordingly, the
+program is provided without any warranty whatsoever, whether express,
+implied, statutory or otherwise.  The term "warranty" used herein
+includes, but is not limited to, any warranty of the quality,
+performance, merchantability and fitness for a particular purpose of
+the program and the nonexistence of any infringement or violation of
+any right of any third party.
+
+Each user of the program will agree and understand, and be deemed to
+have agreed and understood, that there is no warranty whatsoever for
+the program and, accordingly, the entire risk arising from or
+otherwise connected with the program is assumed by the user.
+
+Therefore, neither ICOT, the copyright holder, or any other
+organization that participated in or was otherwise related to the
+development of the program and their respective officials, directors,
+officers and other employees shall be held liable for any and all
+damages, including, without limitation, general, special, incidental
+and consequential damages, arising out of or otherwise in connection
+with the use or inability to use the program or any product, material
+or result produced or otherwise obtained by using the program,
+regardless of whether they have been advised of, or otherwise had
+knowledge of, the possibility of such damages at any time during the
+project or thereafter.  Each user will be deemed to have agreed to the
+foregoing by his or her commencement of use of the program.  The term
+"use" as used herein includes, but is not limited to, the use,
+modification, copying and distribution of the program and the
+production of secondary products from the program.
+
+In the case where the program, whether in its original form or
+modified, was distributed or delivered to or received by a user from
+any person, organization or entity other than ICOT, unless it makes or
+grants independently of ICOT any specific warranty to the user in
+writing, such person, organization or entity, will also be exempted
+from and not be held liable to the user for any such damages as noted
+above as far as the program is concerned.
+
+
+================================================================================
+lucene LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was
+derived from unicode conversion examples available at
+http://www.unicode.org/Public/PROGRAMS/CVTUTF.  Here is the copyright
+from those sources:
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ * 
+ * Disclaimer
+ * 
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ * 
+ * Limitations on Rights to Redistribute This Code
+ * 
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+
+Some code in core/src/java/org/apache/lucene/util/ArrayUtil.java was
+derived from Python 2.4.2 sources available at
+http://www.python.org. Full license is here:
+
+  http://www.python.org/download/releases/2.4.2/license/
+
+Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was
+derived from Python 3.1.2 sources available at
+http://www.python.org. Full license is here:
+
+  http://www.python.org/download/releases/3.1.2/license/
+
+Some code in core/src/java/org/apache/lucene/util/automaton was
+derived from Brics automaton sources available at
+www.brics.dk/automaton/. Here is the copyright from those sources:
+
+/*
+ * Copyright (c) 2001-2009 Anders Moeller
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+The levenshtein automata tables in core/src/java/org/apache/lucene/util/automaton 
+were automatically generated with the moman/finenight FSA package.
+Here is the copyright for those sources:
+
+# Copyright (c) 2010, Jean-Philippe Barrette-LaPierre, <jpb@rrette.com>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+Some code in core/src/java/org/apache/lucene/util/UnicodeUtil.java was
+derived from ICU (http://www.icu-project.org)
+The full license is available here: 
+  http://source.icu-project.org/repos/icu/icu/trunk/license.html
+
+/*
+ * Copyright (C) 1999-2010, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy 
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights 
+ * to use, copy, modify, merge, publish, distribute, and/or sell copies of the 
+ * Software, and to permit persons to whom the Software is furnished to do so, 
+ * provided that the above copyright notice(s) and this permission notice appear 
+ * in all copies of the Software and that both the above copyright notice(s) and
+ * this permission notice appear in supporting documentation.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE 
+ * LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR 
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder shall not 
+ * be used in advertising or otherwise to promote the sale, use or other 
+ * dealings in this Software without prior written authorization of the 
+ * copyright holder.
+ */
+ 
+The following license applies to the Snowball stemmers:
+
+Copyright (c) 2001, Dr Martin Porter
+Copyright (c) 2002, Richard Boulton
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    * this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+    * notice, this list of conditions and the following disclaimer in the
+    * documentation and/or other materials provided with the distribution.
+    * Neither the name of the copyright holders nor the names of its contributors
+    * may be used to endorse or promote products derived from this software
+    * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The following license applies to the KStemmer:
+
+Copyright © 2003,
+Center for Intelligent Information Retrieval,
+University of Massachusetts, Amherst.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+3. The names "Center for Intelligent Information Retrieval" and
+"University of Massachusetts" must not be used to endorse or promote products
+derived from this software without prior written permission. To obtain
+permission, contact info@ciir.cs.umass.edu.
+
+THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF MASSACHUSETTS AND OTHER CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+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 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+The following license applies to the Morfologik project:
+
+Copyright (c) 2006 Dawid Weiss
+Copyright (c) 2007-2011 Dawid Weiss, Marcin Miłkowski
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+    this list of conditions and the following disclaimer.
+    
+    * Redistributions in binary form must reproduce the above copyright notice, 
+    this list of conditions and the following disclaimer in the documentation 
+    and/or other materials provided with the distribution.
+    
+    * Neither the name of Morfologik nor the names of its contributors 
+    may be used to endorse or promote products derived from this software 
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---
+
+The dictionary comes from Morfologik project. Morfologik uses data from 
+Polish ispell/myspell dictionary hosted at http://www.sjp.pl/slownik/en/ and 
+is licenced on the terms of (inter alia) LGPL and Creative Commons 
+ShareAlike. The part-of-speech tags were added in Morfologik project and
+are not found in the data from sjp.pl. The tagset is similar to IPI PAN
+tagset.
+
+---
+
+The following license applies to the Morfeusz project,
+used by org.apache.lucene.analysis.morfologik.
+
+BSD-licensed dictionary of Polish (SGJP)
+http://sgjp.pl/morfeusz/
+
+Copyright © 2011 Zygmunt Saloni, WÅ‚odzimierz GruszczyÅ„ski, 
+             Marcin Woliński, Robert Wołosz
+
+All rights reserved.
+
+Redistribution and  use in  source and binary  forms, with  or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS “AS IS” AND ANY EXPRESS
+OR  IMPLIED WARRANTIES,  INCLUDING, BUT  NOT LIMITED  TO,  THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT  SHALL COPYRIGHT  HOLDERS OR  CONTRIBUTORS BE
+LIABLE FOR  ANY DIRECT,  INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES  (INCLUDING, BUT NOT LIMITED  TO, PROCUREMENT OF
+SUBSTITUTE  GOODS OR  SERVICES;  LOSS  OF USE,  DATA,  OR PROFITS;  OR
+BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+================================================================================
+netty NOTICE
+================================================================================
+
+                            The Netty Project
+                            =================
+
+Please visit the Netty web site for more information:
+
+  * http://netty.io/
+
+Copyright 2011 The Netty Project
+
+The Netty Project licenses this file to you under the Apache License,
+version 2.0 (the "License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations
+under the License.
+
+Also, please refer to each LICENSE.<component>.txt file, which is located in
+the 'license' directory of the distribution file, for the license terms of the
+components that this product depends on.
+
+-------------------------------------------------------------------------------
+This product contains the extensions to Java Collections Framework which has
+been derived from the works by JSR-166 EG, Doug Lea, and Jason T. Greene:
+
+  * LICENSE:
+    * license/LICENSE.jsr166y.txt (Public Domain)
+  * HOMEPAGE:
+    * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/
+    * http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/
+
+This product contains a modified version of Robert Harder's Public Domain
+Base64 Encoder and Decoder, which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.base64.txt (Public Domain)
+  * HOMEPAGE:
+    * http://iharder.sourceforge.net/current/java/base64/
+
+This product contains a modified version of 'JZlib', a re-implementation of
+zlib in pure Java, which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.jzlib.txt (BSD Style License)
+  * HOMEPAGE:
+    * http://www.jcraft.com/jzlib/
+
+This product contains a modified version of 'Webbit', a Java event based
+WebSocket and HTTP server:
+
+  * LICENSE:
+    * license/LICENSE.webbit.txt (BSD License)
+  * HOMEPAGE:
+    * https://github.com/joewalnes/webbit
+
+This product optionally depends on 'Protocol Buffers', Google's data
+interchange format, which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.protobuf.txt (New BSD License)
+  * HOMEPAGE:
+    * http://code.google.com/p/protobuf/
+
+This product optionally depends on 'Bouncy Castle Crypto APIs' to generate
+a temporary self-signed X.509 certificate when the JVM does not provide the
+equivalent functionality.  It can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.bouncycastle.txt (MIT License)
+  * HOMEPAGE:
+    * http://www.bouncycastle.org/
+
+This product optionally depends on 'SLF4J', a simple logging facade for Java,
+which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.slf4j.txt (MIT License)
+  * HOMEPAGE:
+    * http://www.slf4j.org/
+
+This product optionally depends on 'Apache Commons Logging', a logging
+framework, which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.commons-logging.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * http://commons.apache.org/logging/
+
+This product optionally depends on 'Apache Log4J', a logging framework,
+which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.log4j.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * http://logging.apache.org/log4j/
+
+This product optionally depends on 'JBoss Logging', a logging framework,
+which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.jboss-logging.txt (GNU LGPL 2.1)
+  * HOMEPAGE:
+    * http://anonsvn.jboss.org/repos/common/common-logging-spi/
+
+This product optionally depends on 'Apache Felix', an open source OSGi
+framework implementation, which can be obtained at:
+
+  * LICENSE:
+    * license/LICENSE.felix.txt (Apache License 2.0)
+  * HOMEPAGE:
+    * http://felix.apache.org/
+
+
+================================================================================
+netty LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+securesm LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+snakeyaml NOTICE
+================================================================================
+***The art of simplicity is a puzzle of complexity.***
+
+## Overview ##
+[YAML](http://yaml.org) is a data serialization format designed for human readability and interaction with scripting languages.
+
+SnakeYAML is a YAML processor for the Java Virtual Machine.
+
+## SnakeYAML features ##
+
+* a **complete** [YAML 1.1 processor](http://yaml.org/spec/1.1/current.html). In particular, SnakeYAML can parse all examples from the specification.
+* Unicode support including UTF-8/UTF-16 input/output.
+* high-level API for serializing and deserializing native Java objects.
+* support for all types from the [YAML types repository](http://yaml.org/type/index.html).
+* relatively sensible error messages.
+
+## Info ##
+ * [Changes](https://bitbucket.org/asomov/snakeyaml/wiki/Changes)
+ * [Documentation](https://bitbucket.org/asomov/snakeyaml/wiki/Documentation)
+
+## Contribute ##
+* Mercurial DVCS is used to dance with the [source code](https://bitbucket.org/asomov/snakeyaml/src).
+* If you find a bug in SnakeYAML, please [file a bug report](https://bitbucket.org/asomov/snakeyaml/issues?status=new&status=open).
+* You may discuss SnakeYAML at
+[the mailing list](http://groups.google.com/group/snakeyaml-core).
+
+================================================================================
+snakeyaml LICENSE
+================================================================================
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+================================================================================
+spatial4j NOTICE
+================================================================================
+Eclipse Foundation Software User Agreement
+
+April 9, 2014
+
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE 
+PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR 
+THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE
+THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT
+AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY
+NOT USE THE CONTENT.
+
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and 
+conditions of the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this Content and is
+also available at http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the 
+Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as
+downloadable archives ("Downloads").
+
+*   Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. 
+    Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+*   Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
+*   A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged
+    as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list 
+    of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+*   Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may 
+    contain a list of the names and version numbers of Included Features.
+
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). 
+The terms and conditions governing Features and Included Features should be contained in files named "license.html" 
+("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but
+not limited to the following locations:
+
+*   The top-level (root) directory
+*   Plug-in and Fragment directories
+*   Inside Plug-ins and Fragments packaged as JARs
+*   Sub-directories of the directory named "src" of certain Plug-ins
+*   Feature directories
+
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined 
+below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains 
+Included Features, the Feature Update License should either provide you with the terms and conditions governing the 
+Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" 
+property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update 
+Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the 
+associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR 
+TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+*   Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v10.html)
+*   Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+*   Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+*   Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+*   Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature
+License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and 
+conditions govern that particular Content.
+
+### Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and 
+the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software,
+documentation, information and/or other materials (collectively "Installable Software"). This capability is provided
+with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging
+Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for
+enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the
+users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a
+manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the
+acquisition of all necessary rights to permit the following:
+
+1.  A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a
+    machine ("Target Machine") with the intent of installing, extending or updating the functionality of an 
+    Eclipse-based product.
+2.  During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion
+    thereof to be accessed and copied to the Target Machine.
+3.  Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the
+    Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed 
+    from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the
+    user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in
+    the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the
+    provisioning Technology will complete installation of the Installable Software.
+
+Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, 
+possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of
+encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries,
+or both.
+
+================================================================================
+spatial4j LICENSE
+================================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+================================================================================
+t-digest NOTICE
+================================================================================
+The code for the t-digest was originally authored by Ted Dunning
+
+A number of small but very helpful changes have been contributed by Adrien Grand (https://github.com/jpountz)
+
+
+
+================================================================================
+t-digest LICENSE
+================================================================================
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
diff --git a/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-5.6.1.jar b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-5.6.1.jar
new file mode 100644
index 0000000..d2b6a42
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-5.6.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-client-5.6.1.jar b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-client-5.6.1.jar
new file mode 100644
index 0000000..57c8aeb
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-client-5.6.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-high-level-client-5.6.1.jar b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-high-level-client-5.6.1.jar
new file mode 100644
index 0000000..4524134
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/elasticsearch-rest-high-level-client-5.6.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/hppc-0.7.1.jar b/org.eclipse.opencert.elastic/lib/elastic/hppc-0.7.1.jar
new file mode 100644
index 0000000..ed318de
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/hppc-0.7.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/jackson-core-2.8.6.jar b/org.eclipse.opencert.elastic/lib/elastic/jackson-core-2.8.6.jar
new file mode 100644
index 0000000..2b10bf3
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/jackson-core-2.8.6.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/joda-time-2.9.5.jar b/org.eclipse.opencert.elastic/lib/elastic/joda-time-2.9.5.jar
new file mode 100644
index 0000000..2567cbd
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/joda-time-2.9.5.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/log4j-api-2.11.1.jar b/org.eclipse.opencert.elastic/lib/elastic/log4j-api-2.11.1.jar
new file mode 100644
index 0000000..96362a6
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/log4j-api-2.11.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/log4j-core-2.11.1.jar b/org.eclipse.opencert.elastic/lib/elastic/log4j-core-2.11.1.jar
new file mode 100644
index 0000000..310fa62
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/log4j-core-2.11.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/lucene-core-6.6.1.jar b/org.eclipse.opencert.elastic/lib/elastic/lucene-core-6.6.1.jar
new file mode 100644
index 0000000..9f68822
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/lucene-core-6.6.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/lucene-queryparser-6.6.1.jar b/org.eclipse.opencert.elastic/lib/elastic/lucene-queryparser-6.6.1.jar
new file mode 100644
index 0000000..4ce539c
--- /dev/null
+++ b/org.eclipse.opencert.elastic/lib/elastic/lucene-queryparser-6.6.1.jar
Binary files differ
diff --git a/org.eclipse.opencert.elastic/lib/elastic/rest-5.2.2.jar b/org.eclipse.opencert.elastic/lib/elastic/rest-5.2.2.jar
deleted file mode 100644
index 665a46e..0000000
--- a/org.eclipse.opencert.elastic/lib/elastic/rest-5.2.2.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToDocument.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToDocument.java
index e0c8f1d..9212ec1 100644
--- a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToDocument.java
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToDocument.java
@@ -12,6 +12,11 @@
  ******************************************************************************/

 package org.eclipse.opencert.elastic;

 

+import java.util.ArrayList;

+import java.util.Iterator;

+import java.util.List;

+

+import org.apache.commons.codec.digest.DigestUtils;

 import org.eclipse.emf.ecore.EClass;

 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.emf.ecore.resource.Resource;

@@ -32,22 +37,39 @@
 	public final static EObjectToDocument INSTANCE = new EObjectToDocument();

 

 	/**

-	 * Converts the given {@link EObject} to an {@link ElasticDocument} using {@link EObjectToJson}.

+	 * Converts the given {@link EObject} to an {@link ElasticDocument} using

+	 * {@link EObjectToJson}.

 	 *

 	 * @param object

 	 * @param index

 	 * @return the {@link ElasticDocument} never <code>null</code>

 	 * @see EObjectToJson

 	 */

-	@SuppressWarnings("nls")

 	public ElasticDocument convert(EObject object, String index) {

 		EClass type = object.eClass();

 		Resource resource = object.eResource();

 

 		JsonObject source = EObjectToJson.INSTANCE.convert(object);

-		ElasticDocument doc =

-			new ElasticDocument(source, index, type != null ? type.getName() : "EObject",

-				resource != null ? resource.getURIFragment(object) : "null");

+		ElasticDocument doc = new ElasticDocument(source, index, type != null ? type.getName() : "EObject",

+				resource != null ? DigestUtils.md5Hex(resource.getURIFragment(object)) : "null");

 		return doc;

 	}

+

+	/**

+	 * Converts the given list of {@link EObject} to a list of

+	 * {@link ElasticDocument} using {@link EObjectToJson}.

+	 *

+	 * @param object

+	 * @param index

+	 * @return the list of {@link ElasticDocument} never <code>null</code>

+	 * @see EObjectToJson

+	 */

+	public List<ElasticDocument> convert(Iterator<EObject> objects, String index) {

+		List<ElasticDocument> list = new ArrayList<>();

+		while (objects.hasNext()) {

+			EObject object = (EObject) objects.next();

+			list.add(convert(object, index));

+		}

+		return list;

+	}

 }

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToJson.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToJson.java
index f755130..24775ad 100644
--- a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToJson.java
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/EObjectToJson.java
@@ -14,9 +14,11 @@
 

 import org.eclipse.emf.common.util.EList;

 import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EAnnotation;

 import org.eclipse.emf.ecore.EAttribute;

 import org.eclipse.emf.ecore.EClass;

 import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl;

 import org.eclipse.emf.ecore.resource.Resource;

 

 import com.google.gson.JsonObject;

@@ -83,7 +85,17 @@
 		// add the URI all the time

 		Resource resource = object.eResource();

 		if (resource != null) {

-			URI uri = resource.getURI().appendFragment(resource.getURIFragment(object));

+			String fragment = resource.getURIFragment(object);

+			if (object instanceof EAnnotation) {

+				// TODO We have problems with annotations

+				fragment = "/#";

+			}

+			else if (object instanceof EStringToStringMapEntryImpl) {

+				// TODO We have problems with these maps

+				fragment = "/#";

+			}

+			

+			URI uri = resource.getURI().appendFragment(fragment);

 			String uriString = uri.toString();

 			jsonObject.addProperty("uri", uriString);

 

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClient.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClient.java
index 345c1a1..a8e6c5c 100644
--- a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClient.java
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClient.java
@@ -12,12 +12,16 @@
  ******************************************************************************/

 package org.eclipse.opencert.elastic;

 

+import java.io.Closeable;

+import java.util.Iterator;

+import org.apache.http.HttpHost;

+

 /**

  * Simple client side interface to talk to an Elastic server via REST.

  * 

  * @author mauersberger

  */

-public interface ElasticClient {

+public interface ElasticClient extends Closeable {

 

 	/**

 	 * Store the given {@link de.ikv.analyze.census.elasticsearch.ElasticDocument}

@@ -29,6 +33,16 @@
 	ElasticClient store(ElasticDocument document) throws Exception;

 

 	/**

+	 * Store the given {@link java.util.List} of

+	 * {@link de.ikv.analyze.census.elasticsearch.ElasticDocument}

+	 * 

+	 * @param documents

+	 * @return this

+	 * @throws Exception

+	 */

+	ElasticClient storeAll(Iterator<ElasticDocument> documents) throws Exception;

+	

+	/**

 	 * Attempt to ping the client

 	 *

 	 * @return this on success

@@ -58,6 +72,14 @@
 	String version() throws Exception;

 

 	/**

+	 * Returns the communication end point for this client, i.e. the connection

+	 * settings used to speak with the server.

+	 * 

+	 * @return the {@link HttpHost} having the settings, never <code>null</code>

+	 */

+	HttpHost endPoint();

+

+	/**

 	 * Retrieves the status of the index with the given name.

 	 *

 	 * @param indexName

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClientImpl.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClientImpl.java
index ebe45cd..b2a2405 100644
--- a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClientImpl.java
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/ElasticClientImpl.java
@@ -17,6 +17,7 @@
 import java.io.InputStreamReader;

 import java.util.Collections;

 import java.util.Date;

+import java.util.Iterator;

 

 import org.apache.http.HttpEntity;

 import org.apache.http.HttpHost;

@@ -34,11 +35,17 @@
  * 

  * @author mauersberger

  */

-public class ElasticClientImpl implements ElasticClient {

+public class ElasticClientImpl implements ElasticClient, AutoCloseable {

 

 	// the "real" client

 	private RestClient restClient;

 

+	// the communication end point

+	private HttpHost endPoint;

+

+	@SuppressWarnings("unused")

+	private int lastStatus;

+

 	/**

 	 * Factory method to create a new {@link ElasticClient}.

 	 * 

@@ -52,7 +59,8 @@
 	 */

 	public static ElasticClient on(String host, int port, String scheme) {

 		ElasticClientImpl client = new ElasticClientImpl();

-		client.restClient = RestClient.builder(new HttpHost(host, port, scheme)).build();

+		client.endPoint = new HttpHost(host, port, scheme);

+		client.restClient = RestClient.builder(client.endPoint).build();

 		return client;

 	}

 

@@ -66,25 +74,37 @@
 	@Override

 	public ElasticClient store(ElasticDocument document) throws IOException {

 		HttpEntity entity = new NStringEntity(document.source.toString(), ContentType.APPLICATION_JSON);

-		this.restClient.performRequest("PUT", document.getEndPoint(), Collections.emptyMap(), entity); //$NON-NLS-1$

+		Response response = this.restClient.performRequest("PUT", document.getEndPoint(), Collections.emptyMap(), entity); //$NON-NLS-1$

+		lastStatus = response.getStatusLine().getStatusCode();

+		return this;

+	}

+

+	@Override

+	public ElasticClient storeAll(Iterator<ElasticDocument> documents) throws IOException {

+		while (documents.hasNext()) {

+			store (documents.next());

+		}

 		return this;

 	}

 

 	@Override

 	public ElasticClient ping() throws Exception {

-		this.restClient.performRequest("GET", "/"); //$NON-NLS-1$ //$NON-NLS-2$

+		Response response = this.restClient.performRequest("GET", "/"); //$NON-NLS-1$ //$NON-NLS-2$

+		lastStatus = response.getStatusLine().getStatusCode();

 		return this;

 	}

 

 	@Override

 	public ElasticClient delete(String indexName) throws Exception {

-		this.restClient.performRequest("DELETE", "/" + indexName, Collections.emptyMap()); //$NON-NLS-1$ //$NON-NLS-2$

+		Response response = this.restClient.performRequest("DELETE", "/" + indexName, Collections.emptyMap()); //$NON-NLS-1$ //$NON-NLS-2$

+		lastStatus = response.getStatusLine().getStatusCode();

 		return this;

 	}

 

 	@Override

 	public String version() throws IOException {

 		Response response = this.restClient.performRequest("GET", "/"); //$NON-NLS-1$ //$NON-NLS-2$

+		lastStatus = response.getStatusLine().getStatusCode();

 

 		// we assume its a JSON response

 		try (InputStream content = response.getEntity().getContent()) {

@@ -97,8 +117,14 @@
 	}

 

 	@Override

+	public HttpHost endPoint() {

+		return this.endPoint;

+	}

+	

+	@Override

 	public String indexStatus(String indexName) throws Exception {

 		Response response = this.restClient.performRequest("GET", "/" + indexName); //$NON-NLS-1$ //$NON-NLS-2$

+		lastStatus = response.getStatusLine().getStatusCode();

 

 		// we assume its a JSON response

 		try (InputStream content = response.getEntity().getContent()) {

@@ -114,4 +140,13 @@
 			throw new IOException("Unable to ping index", exception); //$NON-NLS-1$

 		}

 	}

+

+	@Override

+	public void close() throws IOException {

+		if (restClient != null) {

+			restClient.close();

+			restClient = null;

+			// we keep the end point so it can be sued even after this client was closed

+		}

+	}

 }

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyData.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyData.java
new file mode 100644
index 0000000..cedf96b
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyData.java
@@ -0,0 +1,76 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Iterator;

+import java.util.List;

+

+import org.apache.commons.codec.digest.DigestUtils;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+

+/**

+ * XXX Dummy hack - TO BE REMOVED LATER

+ * 

+ * @author mauersberger

+ */

+class DummyData {

+

+	static DummyData INSTANCE = new DummyData();

+

+	@SuppressWarnings("unchecked")

+	Collection<Object> convert(Object data) {

+		// some EMF support first

+		if (data instanceof Resource) {

+			data = ((Resource) data).getAllContents();

+		} else if (data instanceof ResourceSet) {

+			data = ((ResourceSet) data).getAllContents();

+		} else if (data instanceof EObject) {

+			data = ((EObject) data).eAllContents();

+		}

+		

+		//

+		if (data instanceof Iterator) {

+			Iterator<Object> it = (Iterator<Object>) data;

+			List<Object> collector = new ArrayList<>();

+			while (it.hasNext()) {

+				collector.add(it.next());

+			}

+			return collector;

+		} else if (data instanceof Iterable) {

+			List<Object> collector = new ArrayList<>();

+			for (Object object : (Iterable<Object>) data) {

+				collector.add(object);

+			}

+			return collector;

+		} else if (data instanceof Collection) {

+			return (Collection<Object>) data;

+		} else if (data instanceof Object[]) {

+			return Arrays.asList((Object[]) data);

+		} else {

+			return null;

+		}

+	}

+

+	String asDocument(Object object) {

+		return object.toString();

+	}

+

+	String getId(String document) {

+		return DigestUtils.md5Hex(document);

+	}

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyObjectResolver.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyObjectResolver.java
new file mode 100644
index 0000000..e94ae95
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/DummyObjectResolver.java
@@ -0,0 +1,40 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.Collection;

+

+/**

+ * XXX Dummy hack - TO BE REMOVED LATER

+ * 

+ * @author mauersberger

+ *

+ */

+public class DummyObjectResolver implements ObjectResolver<Object> {

+

+	@Override

+	public Object resolve(String objectId, Object context) {

+		// XXX hack

+		@SuppressWarnings("unchecked")

+		Collection<Object> data = (Collection<Object>) context;

+		for (Object object : data) {

+			String document = DummyData.INSTANCE.asDocument(object);

+			String id = DummyData.INSTANCE.getId(document);

+			if (objectId.equals(id)) {

+				return object;

+			}

+		}

+		return null;

+	}

+

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/EMFObjectResolver.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/EMFObjectResolver.java
new file mode 100644
index 0000000..e643dec
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/EMFObjectResolver.java
@@ -0,0 +1,63 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.Iterator;

+

+import org.apache.commons.codec.digest.DigestUtils;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+

+/**

+ * Generic {@link ObjectResolver} that tries to resolve against the object URI.

+ * 

+ * @author mauersberger

+ *

+ */

+public class EMFObjectResolver implements ObjectResolver<EObject> {

+

+	@Override

+	public EObject resolve(String objectId, Object context) {

+		if (context instanceof Resource) {

+			context = ((Resource) context).getAllContents();

+		}

+

+		if (context instanceof Iterator) {

+			@SuppressWarnings("unchecked")

+			Iterator<Object> it = (Iterator<Object>) context;

+			while (it.hasNext()) {

+				Object next = (Object) it.next();

+				if (next instanceof EObject) {

+					EObject object = (EObject) next;

+					Resource resource = object.eResource();

+					if (resource != null && objectId.equals(DigestUtils.md5Hex(resource.getURIFragment(object)))) {

+						return object;

+					}

+				}

+			}

+		} else if (context instanceof Iterable) {

+			for (Object next : (Iterable<?>) context) {

+				if (next instanceof EObject) {

+					EObject object = (EObject) next;

+					Resource resource = object.eResource();

+					if (resource != null && objectId.equals(DigestUtils.md5Hex(resource.getURIFragment(object)))) {

+						return object;

+					}

+				}

+			}

+		}

+

+		// TODO Auto-generated method stub

+		return null;

+	}

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinder.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinder.java
new file mode 100644
index 0000000..ab49c42
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinder.java
@@ -0,0 +1,46 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.Map;

+import java.util.Set;

+

+/**

+ * Access interface to start search queries against Elastic.

+ *

+ * @author mauersberger

+ */

+public interface ElasticFinder {

+

+	/**

+	 * Search all indexes with the given query and additional attribute filters that

+	 * must match.

+	 * 

+	 * @param query

+	 *            string following the Elastic query syntax (see

+	 *            https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)

+	 * @param filters

+	 *            a set of filters, might be empty or <code>null</code>

+	 * @return zero or more hits, never <code>null</code>

+	 */

+	Set<Hit> search(String query, Map<String, Object> filters);

+

+	/**

+	 * Limit this finder to the given index.

+	 * 

+	 * @param index

+	 *            name of the index, or "_all" or <code>null</code> for all indexes

+	 * @return this

+	 */

+	ElasticFinder within(String index);

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinderImpl.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinderImpl.java
new file mode 100644
index 0000000..d160b7a
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ElasticFinderImpl.java
@@ -0,0 +1,223 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.Collection;

+import java.util.Collections;

+import java.util.HashSet;

+import java.util.Map;

+import java.util.Set;

+

+import org.apache.http.HttpHost;

+import org.eclipse.opencert.elastic.ElasticClient;

+import org.eclipse.opencert.elastic.ElasticDocument;

+import org.elasticsearch.action.search.SearchRequest;

+import org.elasticsearch.action.search.SearchResponse;

+import org.elasticsearch.client.RestClient;

+import org.elasticsearch.client.RestHighLevelClient;

+import org.elasticsearch.index.query.BoolQueryBuilder;

+import org.elasticsearch.index.query.QueryBuilder;

+import org.elasticsearch.index.query.QueryBuilders;

+import org.elasticsearch.index.query.QueryStringQueryBuilder;

+import org.elasticsearch.index.query.TermQueryBuilder;

+import org.elasticsearch.search.SearchHit;

+import org.elasticsearch.search.SearchHits;

+import org.elasticsearch.search.builder.SearchSourceBuilder;

+

+import com.google.gson.JsonObject;

+

+/**

+ * Factory for the {@link ElasticFinder}.

+ *

+ * @author mauersberger

+ */

+public class ElasticFinderImpl implements ElasticFinder {

+

+	// XXX hack to get some API tests running

+	private Collection<Object> dummyData = null;

+

+	private RestClient client;

+	

+	private String index = "_all";

+	

+	@SuppressWarnings("unused")

+	private int lastStatus;

+	

+	/**

+	 * Factory method to create a new {@link ElasticFinder}. XXX This is an

+	 * intermediate feature.

+	 * 

+	 * @param data

+	 * @return

+	 */

+	public static ElasticFinder onDummy(Object data) {

+		ElasticFinderImpl impl = new ElasticFinderImpl();

+		impl.dummyData = DummyData.INSTANCE.convert(data);

+		return impl;

+	}

+

+	public static ElasticFinder onDefaultClient() {

+		RestClient client = RestClient.builder(new HttpHost("localhost", 9200, "http")).build();

+		return onClient(client);

+	}

+

+	public static ElasticFinder onClient(RestClient client) {

+		ElasticFinderImpl impl = new ElasticFinderImpl();

+		impl.client = client;

+		return impl;

+	}

+

+	public static ElasticFinder onClient(ElasticClient client) {

+		ElasticFinderImpl impl = new ElasticFinderImpl();

+		impl.client = RestClient.builder(client.endPoint()).build();;

+		return impl;

+	}

+

+	/*

+	 * Intentionally private.

+	 */

+	private ElasticFinderImpl() {

+		// just to avoid instantiation, force using the factory API

+	}

+

+	@Override

+	public ElasticFinder within(String index) {

+		this.index = (index != null ? index : "_all");

+		return this;

+	}

+	

+	@Override

+	public Set<Hit> search(String query, Map<String, Object> filters) {

+		if (dummyData != null) {

+			return searchInDummyData(query, filters);

+		}

+		

+		try {

+			Set<Hit> hits = new HashSet<>();

+			Set<ElasticDocument> documents = this.searchInElastic(index, query, filters);

+			for (ElasticDocument document : documents) {

+				Hit hit = new Hit();

+				// we count 1 for string match + number of filters

+				hit.score = 1 + (filters != null ? filters.size() : 0);

+				hit.objectId = document.id;

+				// HACK Extract the URI from the document

+				if (document.source != null && document.source.has("uri")) {

+					hit.uri = document.source.get("uri").getAsString();

+				}

+				hits.add(hit);

+			}

+			return hits;

+		} catch (Exception e) {

+			e.printStackTrace();

+			return Collections.emptySet();

+		}

+	}

+

+	private Set<ElasticDocument> searchInElastic(String indexName, String queryString, Map<String, Object> filters)  throws Exception {

+		RestHighLevelClient highLevel = new RestHighLevelClient(this.client);

+		SearchRequest searchRequest = new SearchRequest(indexName);

+		// see example at https://dzone.com/articles/java-high-level-rest-client-elasticsearch

+		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

+		searchRequest.source(sourceBuilder);

+		// find the best query builder depending on the arguments

+		QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();

+		if (queryString != null) {

+			queryString = queryString.replaceAll("\\.\\*", "*");

+			QueryStringQueryBuilder stringQuery = QueryBuilders.queryStringQuery(queryString);

+			stringQuery.allowLeadingWildcard(true);

+			queryBuilder = stringQuery;

+		}

+		

+		// for each filter we add a separate query that MUST match

+		if (filters != null && filters.size() > 0) {

+			// add the original query

+			BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

+			boolQuery.must(queryBuilder);

+			

+			// now create and add a quers for each field

+			Set<String> keys = filters.keySet();

+			for (String key : keys) {

+				Object value = filters.get(key);

+				TermQueryBuilder termQuery = QueryBuilders.termQuery(key, value);

+				boolQuery.must(termQuery);

+			}

+			assert boolQuery.must().size() == 1 + filters.size();

+			queryBuilder = boolQuery;

+		}

+		

+		sourceBuilder.query(queryBuilder);

+		// each SearchHit be returned with an explanation of the hit (ranking)

+		sourceBuilder.explain(true);

+		

+		SearchResponse response = highLevel.search(searchRequest);

+		lastStatus = response.status().getStatus();

+

+		Set<ElasticDocument> result = new HashSet<>();

+		SearchHits hits = response.getHits();

+		// Note: total hits might be much bigger 

+		for (SearchHit hit : hits.getHits()) {

+			// convert Hit to Json

+			JsonObject json = new JsonObject();

+			

+			// put all source information back into JSON

+			Map<String, Object> fields = hit.getSource();

+			Set<String> keys = fields.keySet();

+			for (String key : keys) {

+				Object field = fields.get(key);

+				json.addProperty(key, (String) field.toString()); 

+			}

+			

+			ElasticDocument doc = new ElasticDocument(json, hit.getIndex(), hit.getType(), hit.getId());

+			result.add(doc);

+		}

+		

+		return result;

+	}

+	

+	/*

+	 * XXX Hack

+	 */

+	private Set<Hit> searchInDummyData(String query, Map<String, Object> filters) {

+		Set<Hit> hits = new HashSet<>();

+		for (Object data : dummyData) {

+			String document = DummyData.INSTANCE.asDocument(data);

+			if ((document.contains(query) || document.matches(query)) && matchFilters(document, filters)) {

+				Hit hit = new Hit();

+				// we count 1 for string match + number of filters

+				hit.score = 1 + (filters != null ? filters.size() : 0);

+				hit.objectId = DummyData.INSTANCE.getId(document);

+				hits.add(hit);

+			}

+		}

+		return hits;

+	}

+

+	/*

+	 * XXX Hack

+	 */

+	private boolean matchFilters(String document, Map<String, Object> filters) {

+		// check filters

+		if (filters == null || filters.isEmpty()) {

+			return true;

+		}

+

+		for (String name : filters.keySet()) {

+			String filter = name + ": " + filters.get(name).toString();

+			if (!document.contains(filter)) {

+				return false;

+			}

+		}

+		// all filters passed

+		return true;

+	}

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/Hit.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/Hit.java
new file mode 100644
index 0000000..21eb2e1
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/Hit.java
@@ -0,0 +1,48 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+/**

+ * Simple structure that holds search hits, combining an identifier to the found

+ * document, a score number as well as an object identifier to the original

+ * object that was indexed.

+ *

+ * @author mauersberger

+ */

+public class Hit {

+

+	/**

+	 * A URL to the document.

+	 */

+	public String document;

+

+	/**

+	 * A score value returned by elastic.

+	 */

+	public int score;

+

+	/**

+	 * The object identifier i.e. a unique elastic search ID

+	 */

+	public String objectId;

+

+	/**

+	 * The object URI e.g. a EMF URI or a CDO URI

+	 */

+	public String uri;

+

+	@Override

+	public String toString() {

+		return "Hit (score=" + score + ", objectId=" + objectId + ", uri=" + uri + ", document=" + document + ")";

+	}

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/HitResolution.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/HitResolution.java
new file mode 100644
index 0000000..8d408e1
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/HitResolution.java
@@ -0,0 +1,102 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.HashSet;

+import java.util.Set;

+

+/**

+ * Abstraction layer to resolve any "Hit" back to an object using an

+ * {@link ObjectResolver} within a given context.

+ *

+ * @author mauersberger

+ */

+public class HitResolution<T> {

+

+	// the context we are working on, e.g. a list of objects or a tree or a database

+	private Object context;

+

+	// the resolver to do the real job

+	private ObjectResolver<? extends T> objectResolver;

+

+	/**

+	 * Factory to create a new {@link HitResolution} object working on the given

+	 * context

+	 *

+	 * @param context

+	 *            an arbitrary context that can be interpreted by the

+	 *            {@link ObjectResolver}

+	 * @return the new {@link HitResolution}

+	 */

+	public static <T> HitResolution<T> on(Object context) {

+		return on(context, true);

+	}

+

+	/**

+	 * Factory to create a new {@link HitResolution} object working on the given

+	 * context

+	 *

+	 * @param context

+	 *            an arbitrary context that can be interpreted by the

+	 *            {@link ObjectResolver}

+	 * @param resolve

+	 * @return the new {@link HitResolution}

+	 */

+	public static <T> HitResolution<T> on(Object context, boolean resolve) {

+		HitResolution<T> resolution = new HitResolution<>();

+		// XXX hack

+		resolution.context = (resolve ? DummyData.INSTANCE.convert(context) : context);

+		return resolution;

+	}

+

+	/**

+	 * Use the given {@link ObjectResolver} when resolving a hit.

+	 *

+	 * @param resolver

+	 *            the resolver (should match the context)

+	 * @return this

+	 */

+	public HitResolution<T> using(ObjectResolver<? extends T> resolver) {

+		objectResolver = resolver;

+		return this;

+	}

+

+	public T resolve(Hit hit) {

+		if (objectResolver == null) {

+			throw new IllegalStateException("an object resolver is missing - use with(...) before"); //$NON-NLS-1$

+		}

+		T resolved = objectResolver.resolve(hit.objectId, context);

+		if (resolved == null) {

+			// try URI

+			resolved = objectResolver.resolve(hit.uri, context);

+		}

+		return resolved;

+	}

+

+	public Set<T> resolve(Set<Hit> hits, int minScore) {

+		Set<T> resolvedAll = new HashSet<>();

+		for (Hit hit : hits) {

+			if (hit.score < minScore) {

+				// filter hits with low score

+				continue;

+			}

+

+			T resolved = this.resolve(hit);

+			if (resolved != null) {

+				resolvedAll.add(resolved);

+			}

+		}

+

+		return resolvedAll;

+	}

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ObjectResolver.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ObjectResolver.java
new file mode 100644
index 0000000..3a67e4d
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/ObjectResolver.java
@@ -0,0 +1,25 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+/**

+ * A generic resolution interface to resolve an arbitrary object identifier

+ * (e.g. a CDI ID or a generic EMF resource URI) to an object in a given

+ * context.

+ *

+ * @author mauersberger

+ */

+public interface ObjectResolver<T> {

+

+	T resolve(String objectId, Object context);

+}

diff --git a/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/SampleApp.java b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/SampleApp.java
new file mode 100644
index 0000000..f752d45
--- /dev/null
+++ b/org.eclipse.opencert.elastic/src/org/eclipse/opencert/elastic/search/SampleApp.java
@@ -0,0 +1,51 @@
+/*******************************************************************************

+ * Copyright (C) 2018 ANSYS medini Technologies AG

+ * 

+ * This program and the accompanying materials are made

+ * available under the terms of the Eclipse Public License 2.0

+ * which is available at https://www.eclipse.org/legal/epl-2.0/

+ * 

+ * SPDX-License-Identifier: EPL-2.0

+ * 

+ * Contributors: 

+ * 	ANSYS medini Technologies AG - initial API and implementation

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

+package org.eclipse.opencert.elastic.search;

+

+import java.util.HashMap;

+import java.util.Map;

+import java.util.Set;

+

+import org.eclipse.emf.ecore.EObject;

+

+/**

+ * Sample application that shows how to use the API - it's NOT designed to

+ * really work, just to show the API usage.

+ *

+ * @author mauersberger

+ */

+public class SampleApp {

+

+	public void testAPI() throws Exception {

+		// the user input

+		String query = "Hazard Ana*";

+

+		// have some fake data

+		EObject[] fakeData = { null }; // TODO use some structure in CDO as fake data

+

+		// get the finder

+		ElasticFinder finder = ElasticFinderImpl.onDummy(fakeData);

+

+		Map<String, Object> filters = new HashMap<>();

+		filters.put("_type", "Artifact");

+		filters.put("asil", "A");

+

+		Set<Hit> hits = finder.search(query, filters);

+		HitResolution<EObject> resolution = HitResolution.on(fakeData);

+		resolution.using(new EMFObjectResolver());

+

+		// resolve all hits with score >= 2

+		Set<EObject> resolved = resolution.resolve(hits, 2);

+		System.out.println(resolved);

+	}

+}

diff --git a/org.eclipse.opencert.evm.evidspec.editor/.gitignore b/org.eclipse.opencert.evm.evidspec.editor/.gitignore
index ae3c172..3e2fcc7 100644
--- a/org.eclipse.opencert.evm.evidspec.editor/.gitignore
+++ b/org.eclipse.opencert.evm.evidspec.editor/.gitignore
@@ -1 +1 @@
-/bin/
+/bin/

diff --git a/org.eclipse.opencert.evm.evidspec.editor/META-INF/MANIFEST.MF b/org.eclipse.opencert.evm.evidspec.editor/META-INF/MANIFEST.MF
index fa7ef17..4142872 100644
--- a/org.eclipse.opencert.evm.evidspec.editor/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.evm.evidspec.editor/META-INF/MANIFEST.MF
@@ -18,5 +18,10 @@
  org.eclipse.opencert.apm.assuranceassets.edit;visibility:=reexport,

  org.eclipse.opencert.infra.general.edit;visibility:=reexport,

  org.eclipse.opencert.infra.properties.edit;visibility:=reexport,

- org.eclipse.opencert.apm.assurproj.utils;bundle-version="1.0.0"

+ org.eclipse.opencert.apm.assurproj.utils;bundle-version="1.0.0",

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

+ org.eclipse.opencert.elastic;bundle-version="1.0.0",

+ org.eclipse.opencert.elastic.ui;bundle-version="1.0.0"

 Bundle-ActivationPolicy: lazy

+Import-Package: org.eclipse.opencert.apm.baseline.baseline,

+ org.eclipse.opencert.elastic.cdo

diff --git a/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/EvidenceEditor.java b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/EvidenceEditor.java
index 53b06da..5168bb8 100644
--- a/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/EvidenceEditor.java
+++ b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/EvidenceEditor.java
@@ -19,14 +19,9 @@
  */

 package org.eclipse.opencert.evm.evidspec.evidence.presentation;

 

-

-

-

-

-

-

 import java.io.IOException;

 import java.io.InputStream;

+import java.rmi.activation.Activator;

 import java.util.ArrayList;

 import java.util.Collection;

 import java.util.Collections;

@@ -36,7 +31,9 @@
 import java.util.LinkedHashMap;

 import java.util.List;

 import java.util.Map;

+import java.util.Set;

 

+import org.apache.http.HttpHost;

 import org.eclipse.core.resources.IFile;

 import org.eclipse.core.resources.IMarker;

 import org.eclipse.core.resources.IResource;

@@ -49,6 +46,8 @@
 import org.eclipse.core.runtime.IPath;

 import org.eclipse.core.runtime.IProgressMonitor;

 import org.eclipse.core.runtime.NullProgressMonitor;

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

+import org.eclipse.jface.action.Action;

 import org.eclipse.jface.action.IMenuListener;

 import org.eclipse.jface.action.IMenuManager;

 import org.eclipse.jface.action.IStatusLineManager;

@@ -74,8 +73,17 @@
 import org.eclipse.jface.viewers.TableViewer;

 import org.eclipse.jface.viewers.TreeViewer;

 import org.eclipse.jface.viewers.Viewer;

+import org.eclipse.opencert.apm.assuranceassets.assuranceasset.AssuranceAsset;

 import org.eclipse.opencert.apm.assuranceassets.assuranceasset.provider.AssuranceassetItemProviderAdapterFactory;

 import org.eclipse.opencert.apm.assurproj.utils.widget.CheckboxTreeViewerExt;

+import org.eclipse.opencert.apm.baseline.baseline.BaseCriticalityLevel;

+import org.eclipse.opencert.elastic.ElasticClient;

+import org.eclipse.opencert.elastic.cdo.CDOObjectResolver;

+import org.eclipse.opencert.elastic.search.ElasticFinder;

+import org.eclipse.opencert.elastic.search.ElasticFinderImpl;

+import org.eclipse.opencert.elastic.search.Hit;

+import org.eclipse.opencert.elastic.search.HitResolution;

+import org.eclipse.opencert.elastic.search.ObjectResolver;

 import org.eclipse.opencert.infra.general.general.provider.GeneralItemProviderAdapterFactory;

 import org.eclipse.opencert.infra.properties.property.provider.PropertyItemProviderAdapterFactory;

 import org.eclipse.swt.SWT;

@@ -88,7 +96,9 @@
 import org.eclipse.swt.graphics.Point;

 import org.eclipse.swt.layout.FillLayout;

 import org.eclipse.swt.widgets.Composite;

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

 import org.eclipse.swt.widgets.Menu;

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

 import org.eclipse.swt.widgets.Table;

 import org.eclipse.swt.widgets.TableColumn;

 import org.eclipse.swt.widgets.Tree;

@@ -113,6 +123,12 @@
 import org.eclipse.ui.views.properties.PropertySheetPage;

 import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;

 import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;

+import org.elasticsearch.client.RestClient;

+import org.eclipse.emf.cdo.CDOObject;

+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.view.CDOView;

 import org.eclipse.emf.common.command.BasicCommandStack;

 import org.eclipse.emf.common.command.Command;

 import org.eclipse.emf.common.command.CommandStack;

@@ -125,9 +141,9 @@
 import org.eclipse.emf.common.ui.viewer.IViewerProvider;

 import org.eclipse.emf.common.util.BasicDiagnostic;

 import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.EList;

 import org.eclipse.emf.common.util.URI;

-

-

+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.util.EContentAdapter;

@@ -150,7 +166,9 @@
 import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;

 import org.eclipse.emf.edit.ui.util.EditUIUtil;

 import org.eclipse.emf.eef.runtime.ui.notify.OpenWizardOnDoubleClick;

+import org.eclipse.opencert.evm.evidspec.evidence.Artefact;

 import org.eclipse.opencert.evm.evidspec.evidence.provider.EvidenceItemProviderAdapterFactory;

+import org.eclipse.opencert.evm.evidspec.evidence.search.OslcKmQueryCDOHandler;

 import org.eclipse.ui.actions.WorkspaceModifyOperation;

 

 

@@ -279,13 +297,16 @@
 	 * @not generated

 	 */

 	protected CheckboxTreeViewerExt treeViewerWithCheck;

-	

+				

 	//Begin ALC

 	/**	

 	 * Checkbox tree autoselection Flag 

 	 * @not generated

 	 */

 	protected boolean firstTime=true;

+	

+	private CDOResource baselineResource;

+	

 	//End ALC

 

 	/**

@@ -555,6 +576,7 @@
 				}

 			}

 		};

+	

 

 	/**

 	 * Handles activation of the editor or it's associated views.

@@ -1264,8 +1286,175 @@
 //						results = modelViewer.getCheckedElements();

 

 					}

-				};

+				};								

 				

+				

+				MenuManager contextMenu = new MenuManager("#PopupMenu"); //$NON-NLS-1$

+			    contextMenu.setRemoveAllWhenShown(true);

+			    contextMenu.addMenuListener(new IMenuListener() {

+			        @Override

+			        public void menuAboutToShow(IMenuManager mgr) {

+			        	mgr.add(new Action("Search with OSLC-KM") {

+			                @Override

+			                public void run() {

+			                	SearchCriteria search = new SearchCriteria(getSite().getShell(),baselineResource);

+			                	search.open();

+			                	

+			                	ArrayList<BaseCriticalityLevel> critLevels = search.getCritLevel();

+			                	

+			                	String searchCriteria = search.getText();

+			                	

+			                	for(BaseCriticalityLevel onCrit:critLevels){

+			                		searchCriteria= searchCriteria + " " + onCrit.getName();

+			                	}

+			                	

+			                	//OslcKmQueryCDOHandler.RunQuery(searchCriteria, CDOConnectionUtil.instance.getCurrentSession());

+			                	

+			                	List<CDOObject> foundObjects =  OslcKmQueryCDOHandler.RunQuery(searchCriteria, CDOConnectionUtil.instance.getCurrentSession()); 

+			                	

+			                	//new <CDOObject>ArrayList();

+			    							                				                				                				                	

+			    				Tree modifyTree =treeViewerWithCheck.getTree();

+			    				TreeItem[] rootNodes = modifyTree.getItems();

+			    				

+			    				//foundObjects.add((CDOObject) rootNodes[0].getItem(0).getData());

+			    				//foundObjects.add((CDOObject) rootNodes[0].getItem(1).getData());

+			    				//foundObjects.add((CDOObject) rootNodes[0].getItem(1).getItem(0).getData());

+			    				//foundObjects.add((CDOObject) rootNodes[0].getItem(1).getItem(0).getItem(4).getData());

+			    				

+			    				

+			    				boolean found =false;

+

+			    				for(TreeItem root:rootNodes){

+									for(int x=0; x <root.getItems().length;x++){

+										TreeItem  oneItem = root.getItems()[x];

+										resetTreeColor(oneItem);

+									}

+			    				}

+			    				

+			    				for (CDOObject onFound:foundObjects){								

+			    					//Search the equivalence Artefacts in the treeview showing the  evidence model of the source project																																																																	

+			    					for(TreeItem root:rootNodes){

+										for(int x=0; x <root.getItems().length;x++){

+											TreeItem  oneItem = root.getItems()[x];

+											found = searchInTreeNodes(onFound,oneItem,search.isAutoselect());				

+											if (found) break;

+										}

+

+										if (found) break;

+									}																																		

+			    				}

+			    				

+			    				for(TreeItem root:rootNodes){

+			    					for(int x=0; x <root.getItems().length;x++){

+										TreeItem  oneItem = root.getItems()[x];

+										SelectedTreeNodesRed(oneItem,search.isAutoselect());														

+									}			    					

+			    				}

+			                }

+			            });

+			        	mgr.add(new Action("Search with Elastic Search") {

+			                @Override

+			                public void run() {

+			                	SearchCriteria search = new SearchCriteria(getSite().getShell(),baselineResource);

+			                	search.open();

+			                	

+			                	String address= org.eclipse.opencert.elastic.ui.Activator.getDefault().getPreferenceStore().getString(org.eclipse.opencert.elastic.ui.ElasticPreferences.SERVER_ADDRESS);

+			                	//ElasticFinder finder = ElasticFinderImpl.onDefaultClient();// .onDummy(editingDomain.getResourceSet().getResources().get(0).getAllContents());

+			                	

+			                	/*ElasticClient client = new 

+			                			ElasticFinderImpl.*/			                	

+			                	

+			                	String server_host= address.substring(address.lastIndexOf("/")+1,address.lastIndexOf(":")); 	

+			                	String port= address.substring(address.lastIndexOf(":")+1); 

+			                		

+			                	RestClient client = RestClient.builder(new HttpHost(server_host, Integer.parseInt(port), "http")).build();

+			                	ElasticFinder finder = ElasticFinderImpl.onClient(client);

+			                				                	

+			                	

+			                	Map<String, Object> filters = new HashMap<>();

+			            		//filters.put("_type", "Artefact");

+			            		//filters.put("asil", "A");

+			            		String query = search.getText();

+			            		

+			            		Set<Hit> hits = finder.search(query, filters);

+			            		

+			            		/*Hit h1 = new Hit();

+			            		h1.document="";

+			            		h1.objectId=((CDOObject)treeViewerWithCheck.getTree().getItem(0).getItem(0).getData()).cdoID().toString();

+			            		h1.score=3;

+			            		hits.add(h1);

+			            		

+			            		

+			            		Hit h2 = new Hit();

+			            		h2.document="";

+			            		h2.objectId=((CDOObject)treeViewerWithCheck.getTree().getItem(0).getItem(1).getData()).cdoID().toString();

+			            		h2.score=3;

+			            		hits.add(h2);

+			            		

+			            		Hit h3 = new Hit();

+			            		h3.document="";

+			            		h3.objectId=((CDOObject)treeViewerWithCheck.getTree().getItem(0).getItem(2).getData()).cdoID().toString();

+			            		h3.score=3;			            	

+			            		hits.add(h3);*/

+			            		

+			            		//HitResolution<EObject> resolution = HitResolution.on(editingDomain.getResourceSet().getResources().get(0).getAllContents());

+			            		CDOSession sessionCDO = CDOConnectionUtil.instance.getCurrentSession();

+			        			CDOView view = sessionCDO.openView();

+			        			

+			        			HitResolution<EObject> resolution = HitResolution.on(view,false);

+			        			CDOObjectResolver cor= new CDOObjectResolver();

+			            		resolution.using(cor);

+			            		

+			            		//HitResolution<EObject> resolution = HitResolution.on(view);

+			            		// resolve all hits with score >= 2

+			            		//String hit = ;

+			            		Set<EObject> resolved = resolution.resolve(hits, 1);

+			            		

+			            		Tree modifyTree =treeViewerWithCheck.getTree();

+			    				TreeItem[] rootNodes = modifyTree.getItems();

+			    				

+			    				for(TreeItem root:rootNodes){

+									for(int x=0; x <root.getItems().length;x++){

+										TreeItem  oneItem = root.getItems()[x];

+										resetTreeColor(oneItem);

+									}

+			    				}

+			    				

+			            		boolean found =false;

+			            		

+			    				for (EObject onFound:resolved){								

+			    					//Search the equivalence Artefacts in the treeview showing the  evidence model of the source project																																																																	

+			    					

+			    					if(onFound instanceof CDOObject){

+			    						CDOObject cdoFound = (CDOObject)onFound;

+			    						

+				    					for(TreeItem root:rootNodes){

+											for(int x=0; x <root.getItems().length;x++){

+												TreeItem  oneItem = root.getItems()[x];

+												found = searchInTreeNodes(cdoFound,oneItem,search.isAutoselect());				

+												if (found) break;

+											}

+	

+											if (found) break;

+										}			

+			    					}

+			    				}

+			    				

+			    				for(TreeItem root:rootNodes){

+			    					for(int x=0; x <root.getItems().length;x++){

+										TreeItem  oneItem = root.getItems()[x];

+										SelectedTreeNodesRed(oneItem,search.isAutoselect());														

+									}			    					

+			    				}

+			                }

+			            });

+			        }

+			    });

+

+			    Menu menu = contextMenu.createContextMenu(treeViewerWithCheck.getControl());

+			    treeViewerWithCheck.getControl().setMenu(menu);

+			    			    											

 				treeViewerWithCheck.addCheckStateListener(checkStateListener);

 				treeViewerWithCheck.addDoubleClickListener(new OpenWizardOnDoubleClick(editingDomain, adapterFactory));

 				// End of: Changed to Checkbox Tree by HEO

@@ -1908,5 +2097,82 @@
 		return true;

 	}

 	

+	

+	private boolean searchInTreeNodes(CDOObject searchObject, TreeItem root, boolean autoselect) {

+		Object dataObject = root.getData();

+		

+		if(((CDOObject)dataObject).cdoID().equals(searchObject.cdoID())){

+			if(root.getChecked()){

+				root.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));

+			}	

+			else{

+				root.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));

+				if(autoselect){

+					root.setChecked(true);

+				}

+			}

+			return true;

+		}

+		

+		

+		for(int x=0; x <root.getItems().length;x++){

+			TreeItem  oneItem = root.getItems()[x];

+			

+			/*dataObject = oneItem.getData();

+			

+				if(((CDOObject)dataObject).cdoID()==searchObject.cdoID()){

+					if(oneItem.getChecked()){

+						oneItem.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));

+					}	

+					else{

+						oneItem.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));

+					}

+					return true;

+				}

+			

+			

+			if(oneItem.getItems().length>0){*/

+				boolean found=searchInTreeNodes( searchObject,  oneItem, autoselect);

+				if (found) return true;

+			//}					

+		}

+		return false;

+	}	

+	

+	private void SelectedTreeNodesRed(TreeItem root,boolean autoselect) {

+		

+		if(root.getChecked() && root.getBackground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE))){

+			root.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));

+			if(autoselect){

+				root.setChecked(false);

+			}

+		}	

+		else if(root.getChecked() && root.getBackground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_RED))){

+			//root.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));

+			if(autoselect){

+				root.setChecked(false);

+			}

+		}

+		else if(!root.getChecked() && root.getBackground().equals(Display.getCurrent().getSystemColor(SWT.COLOR_RED))){

+			root.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));			

+		}

+		

+		for(int x=0; x <root.getItems().length;x++){

+			TreeItem  oneItem = root.getItems()[x];

+			SelectedTreeNodesRed(oneItem, autoselect);

+		}		

+	}

+	

+	private void resetTreeColor(TreeItem root){

+		TreeItem[] treeNodes =root.getItems();

+		for(TreeItem oneItem:treeNodes){

+			oneItem.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));

+			resetTreeColor(oneItem);

+		}

+	}

 

+	public void setBaselineResource(CDOResource baselineResource) {

+		// TODO Auto-generated method stub

+		this.baselineResource=baselineResource;

+	}		

 }

diff --git a/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/SearchCriteria.java b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/SearchCriteria.java
new file mode 100644
index 0000000..66ecbf2
--- /dev/null
+++ b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/presentation/SearchCriteria.java
@@ -0,0 +1,411 @@
+/*******************************************************************************

+ * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ *

+ * 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:

+ *   Huascar Espinoza - initial API and implementation

+ *   Alejandra Ruíz - initial API and implementation

+ *   Idoya Del Río - initial API and implementation

+ *   Mari Carmen Palacios - initial API and implementation

+ *   Angel López - initial API and implementation

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

+package org.eclipse.opencert.evm.evidspec.evidence.presentation;

+

+import java.util.ArrayList;

+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.view.CDOView;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

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

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

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

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

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

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

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

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

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

+import org.eclipse.opencert.apm.assurproj.utils.widget.CheckboxTreeViewerExt;

+import org.eclipse.opencert.apm.baseline.baseline.BaseApplicabilityLevel;

+import org.eclipse.opencert.apm.baseline.baseline.BaseCriticalityLevel;

+import org.eclipse.opencert.apm.baseline.baseline.BaseFramework;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.ModifyEvent;

+import org.eclipse.swt.events.ModifyListener;

+import org.eclipse.swt.events.SelectionAdapter;

+import org.eclipse.swt.events.SelectionEvent;

+import org.eclipse.swt.graphics.Color;

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

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

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

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

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

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

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

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

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

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

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

+import org.eclipse.ui.IEditorPart;

+

+

+public class SearchCriteria extends Dialog {

+

+	protected IEditorPart editor;

+	protected URI resourceURI;	

+		

+	protected Table tableHistory;

+	

+	protected Text txtJustify;

+	

+	protected ListViewer targetsList;

+	

+	protected org.eclipse.swt.widgets.Combo refList;

+	protected ArrayList<String> refListDirMap;

+	

+

+	

+

+	protected Button btnAutoselect;

+	

+	protected Button btnSearch;

+	

+	protected String qref;

+	protected CDOResource baselineResource;

+	protected Color green;

+	protected Color orange;

+	protected Color red;

+	

+	private Text searchText;

+	

+	private static final String CRITICALITY_SELECTION = "Select the Criticality level:";

+	private static final String APPLICABILITY_SELECTION = "Select the Applicability level:";

+	protected CheckboxTreeViewerExt criticalityViewer;

+	protected CheckboxTreeViewerExt aplicabilityViewer;

+	//protected BaseCriticalityLevel[] critState;

+	

+	

+	

+	private BaseCriticalityLevel selectedCrit;

+    private BaseApplicabilityLevel selectAplic;

+    private boolean autoselect;

+    private String searchingText;

+    

+    private ArrayList critLevels = new ArrayList<BaseCriticalityLevel>();

+	boolean writePermission=false;

+	

+	

+	

+	public SearchCriteria(Shell parentShell, CDOResource baselineResource) {

+		super(parentShell);

+

+				

+		//System.out.println("MODEL _used: " + .g resourceURI.toString());

+						

+		this.baselineResource=baselineResource;

+		setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);

+	}

+	

+	/*public ComplianceTable(Shell parentShell,URI resourceURI) {

+		super(parentShell);

+

+		

+		this.resourceURI = resourceURI;

+		

+		//System.out.println("MODELO _usar: " + resourceURI.toString());

+		

+		

+		CDOConnectionUtil.instance.init(

+				PreferenceConstants.getRepositoryName(),

+				PreferenceConstants.getProtocol(),

+				PreferenceConstants.getServerName());

+		sessionCDO = CDOConnectionUtil.instance.getCurrentSession();

+		viewCDO = CDOConnectionUtil.instance.openView(sessionCDO);

+		transaction = sessionCDO.openTransaction();

+

+		setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);

+	}*/

+	

+	public boolean isAutoselect() {

+		return autoselect;

+	}

+	

+	public String getText() {

+		return searchingText;

+	}

+	

+	public ArrayList getCritLevel(){

+		return critLevels;

+	}

+	

+	@Override

+	protected void constrainShellSize() {

+		// TODO Auto-generated method stub

+		super.constrainShellSize();

+		//getShell().setMaximized(true);

+	}

+	

+	@Override

+	protected Control createDialogArea(final Composite parent) {						

+

+		ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(

+				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+		

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

+		

+		GridLayout contentsGridLayout = (GridLayout) contents.getLayout();

+		contentsGridLayout.numColumns = 1;

+		

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

+		contentsGridData.horizontalAlignment = SWT.FILL;

+		//contentsGridData.heightHint =500;

+		createSearchArea(contents);			

+		

+		return contents;

+	}

+

+	protected void createSearchArea(final Composite contents) {

+

+		/*Composite controlSearch = new Composite(contents, SWT.NONE);

+		{

+			GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);

+			data.horizontalAlignment = SWT.END;

+			data.horizontalAlignment = SWT.FILL;

+			data.verticalAlignment= SWT.FILL;

+			data.horizontalSpan=2;

+			controlSearch.setLayoutData(data);

+			GridLayout layout = new GridLayout();

+			layout.marginHeight = 0;

+			layout.marginWidth = 0;

+			layout.numColumns = 3; 

+			controlSearch.setLayout(layout);

+		}*/

+

+		/*Composite controlMapping = new Composite(contents, SWT.NONE);

+		{

+			GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);

+			data.horizontalAlignment = SWT.END;

+			data.horizontalAlignment = SWT.FILL;

+			data.verticalAlignment= SWT.FILL;

+			controlMapping.setLayoutData(data);

+			GridLayout layout = new GridLayout();

+			layout.marginHeight = 0;

+			layout.marginWidth = 0;

+			layout.numColumns = 1; 

+			controlMapping.setLayout(layout);

+		}*/

+			

+		Label groupFilter = new Label(contents, SWT.NULL);

+		

+		groupFilter.setLayoutData(new GridData(SWT.FILL,SWT.NONE,false,true,1,1));

+		groupFilter.setText("Search Text");

+		GridLayout filterLayout= new GridLayout();		

+		

+		searchText = new Text(contents, SWT.SEARCH);

+		searchText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));						

+		

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

+		

+		

+		

+		

+		

+		criticalityLabel.setText(CRITICALITY_SELECTION); 

+	    criticalityViewer = new CheckboxTreeViewerExt(contents, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);

+		criticalityViewer.getTree().setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,1,1));

+	    criticalityViewer.expandAll();

+

+		ComposedAdapterFactory critAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+		criticalityViewer.setContentProvider(new AdapterFactoryContentProvider(critAdapterFactory));

+		criticalityViewer.setLabelProvider(new AdapterFactoryLabelProvider(critAdapterFactory));

+		

+		CreateCriticalModelFromFile(criticalityViewer);

+		ICheckStateListener checkCritStateListener = new ICheckStateListener(){

+			public void checkStateChanged (CheckStateChangedEvent event){

+				Object changedElement = event.getElement();

+				boolean status = criticalityViewer.getChecked(changedElement);

+				boolean isExpanded = criticalityViewer.getExpandedState(changedElement);

+				criticalityViewer.expandToLevel(changedElement, AbstractTreeViewer.ALL_LEVELS);

+				criticalityViewer.setSubtreeChecked(changedElement, status);

+				if (!isExpanded){

+					criticalityViewer.collapseToLevel(changedElement, AbstractTreeViewer.ALL_LEVELS);

+				}

+				if (status){

+					criticalityViewer.setParentsChecked(changedElement,true);

+				}

+				//critState=(BaseCriticalityLevel[]) criticalityViewer.getCheckedElements();

+				

+			}

+

+		};

+		

+		

+		criticalityViewer.addCheckStateListener(checkCritStateListener);

+		

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

+		aplicabilityLabel.setText(APPLICABILITY_SELECTION); 

+		aplicabilityViewer = new CheckboxTreeViewerExt(contents, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);

+		aplicabilityViewer.getTree().setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false,1,1));

+		aplicabilityViewer.expandAll();

+

+		ComposedAdapterFactory appliAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

+		aplicabilityViewer.setContentProvider(new AdapterFactoryContentProvider(appliAdapterFactory));

+		aplicabilityViewer.setLabelProvider(new AdapterFactoryLabelProvider(appliAdapterFactory));

+		CreateApplicabilityList (aplicabilityViewer);

+		

+		ICheckStateListener checkAppStateListener = new ICheckStateListener(){

+			public void checkStateChanged (CheckStateChangedEvent event){

+				Object changedElement = event.getElement();

+				boolean status = aplicabilityViewer.getChecked(changedElement);

+				boolean isExpanded = aplicabilityViewer.getExpandedState(changedElement);

+

+				aplicabilityViewer.expandToLevel(changedElement, AbstractTreeViewer.ALL_LEVELS);

+				aplicabilityViewer.setSubtreeChecked(changedElement, status);

+				if (!isExpanded){

+					aplicabilityViewer.collapseToLevel(changedElement, AbstractTreeViewer.ALL_LEVELS);

+				}

+				if (status){

+					aplicabilityViewer.setParentsChecked(changedElement,true);

+				}

+				

+			}

+

+		};

+		

+		aplicabilityViewer.addCheckStateListener(checkAppStateListener);

+		

+		

+		

+		//Label autoSelect = new Label(contents, SWT.NULL);

+		

+		//groupFilter.setLayoutData(new GridData(SWT.FILL,SWT.NONE,false,true,1,1));

+		//autoSelect.setText("Modify selection according search results");

+		//filterLayout= new GridLayout();		

+		

+		btnAutoselect = new Button(contents, SWT.CHECK);

+		btnAutoselect.setText("Modify selection according search results");

+		searchText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

+		

+		

+		

+		btnSearch = new Button(contents, SWT.PUSH);

+		btnSearch.setText("  SEARCH  ");

+		btnSearch.setVisible(false);

+		btnSearch.addSelectionListener(new SelectionAdapter() {

+		

+			public void widgetSelected(SelectionEvent e) {	

+				

+			}

+		});

+		

+	}		

+		

+	@Override

+	protected void configureShell(Shell newShell) {

+		super.configureShell(newShell);

+		newShell.setText("Search criteria for reusable assets");

+	}

+

+

+	@Override

+	protected void okPressed() {	

+		this.autoselect=btnAutoselect.getSelection();	

+		this.searchingText=searchText.getText();

+		

+		Object[] selectedCrit =  criticalityViewer.getCheckedElements();

+		

+		

+		for(Object oneCrit:selectedCrit){

+			if(oneCrit instanceof BaseCriticalityLevel){

+				critLevels.add((BaseCriticalityLevel)oneCrit);

+			}			

+		}

+		

+		super.okPressed();

+	}

+

+	@Override

+	public boolean close() {		

+		return super.close();

+	}

+

+	@Override

+	protected Button createButton(Composite parent, int id,

+	        String label, boolean defaultButton) {

+	    if (id == IDialogConstants.CANCEL_ID) return null;

+	    return super.createButton(parent, id, label, defaultButton);

+	}

+	

+	public Boolean getResult() {

+		return true;

+	}

+

+	

+	public void CreateCriticalModelFromFile(CheckboxTreeViewerExt tviewer){					   

+			try {				

+				tviewer.setInput(null);

+				tviewer.setInput(baselineResource);

+				

+			    final ViewerFilter modelFilter = new ViewerFilter() {

+			        public boolean select(

+			          Viewer viewer,

+			          Object parentElement,

+			          Object element) {

+			        	if (element instanceof BaseFramework)

+			        		return true;

+			        	if (element instanceof BaseCriticalityLevel)

+			        		return true;

+		        		else

+		        			return false;

+			        }

+			    };

+			    tviewer.addFilter(modelFilter);

+			    tviewer.expandAll();			    

+			}

+			catch (Exception ex) {

+				MessageDialog.openError(getShell(), "Not valid model file", "The provided model file couldn't be parsed as an EMF resource");

+				tviewer.setInput(null);

+			}		

+	}

+	private void CreateApplicabilityList( CheckboxTreeViewerExt viewer) {

+		

+			   Resource resource = null;

+			   try {

+					viewer.setInput(null);

+					viewer.setInput(baselineResource);

+					

+				    final ViewerFilter modelFilter = new ViewerFilter() {

+				        public boolean select(

+				          Viewer viewer,

+				          Object parentElement,

+				          Object element) {

+				        	if (element instanceof BaseFramework)

+				        		return true;

+				        	if (element instanceof BaseApplicabilityLevel)

+				        		return true;

+			        		else

+			        			return false;

+				        }

+				    };

+				    viewer.addFilter(modelFilter);

+				    viewer.expandAll();				   

+				   // viewCDO.getSession().close();

+			   }catch (Exception ex) {

+					MessageDialog.openError(getShell(), "Not valid model file", "The provided model file couldn't be parsed as an EMF resource");

+					viewer.setInput(null);

+				}	

+	}

+	

+		

+}

diff --git a/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/search/.gitignore b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/search/.gitignore
new file mode 100644
index 0000000..6571d27
--- /dev/null
+++ b/org.eclipse.opencert.evm.evidspec.editor/src/org/eclipse/opencert/evm/evidspec/evidence/search/.gitignore
@@ -0,0 +1 @@
+/OslcKmQueryCDOHandler.java
diff --git a/org.eclipse.opencert.evm.evidspec/build.gradle b/org.eclipse.opencert.evm.evidspec/build.gradle
new file mode 100644
index 0000000..26e3267
--- /dev/null
+++ b/org.eclipse.opencert.evm.evidspec/build.gradle
@@ -0,0 +1,19 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+            exclude '**/ImageUtils.java'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.apm.assuranceassets')

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.infra.properties')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/.gitignore b/org.eclipse.opencert.evm.oslc.km.importevid/.gitignore
index ae3c172..3e2fcc7 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/.gitignore
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/.gitignore
@@ -1 +1 @@
-/bin/
+/bin/

diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/META-INF/MANIFEST.MF b/org.eclipse.opencert.evm.oslc.km.importevid/META-INF/MANIFEST.MF
index 089b36f..f70cbc2 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/META-INF/MANIFEST.MF
@@ -11,7 +11,8 @@
  org.eclipse.opencert.evm.evidspec.editor,
  org.junit,
  org.eclipse.emf.cdo.dawn;bundle-version="2.0.100",
- org.eclipse.opencert.apm.assurproj.edit
+ org.eclipse.opencert.apm.assurproj.edit,
+ org.eclipse.opencert.evm.evidspec
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ClassPath: lib/gson-2.8.0.jar,
  lib/OSLC-KM.jar,
@@ -67,3 +68,4 @@
  lib/cxf-common-utilities-2.5.2.jar,
  lib/cxf-rt-databinding-jaxb-2.7.3.jar,
  .
+Export-Package: org.eclipse.opencert.evm.oslc.km.importevid.handlers
diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/lib/OSLC-KM.jar b/org.eclipse.opencert.evm.oslc.km.importevid/lib/OSLC-KM.jar
index 17588c9..3531b63 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/lib/OSLC-KM.jar
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/lib/OSLC-KM.jar
Binary files differ
diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/plugin.xml b/org.eclipse.opencert.evm.oslc.km.importevid/plugin.xml
index 69e98ec..0f456e0 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/plugin.xml
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/plugin.xml
@@ -34,6 +34,14 @@
             commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.indexCommand"

             class="org.eclipse.opencert.evm.oslc.km.importevid.handlers.OslcKmIndexFileHandler">

       </handler>

+      <handler

+            commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.indexCDOProjectCommand"

+            class="org.eclipse.opencert.evm.oslc.km.importevid.handlers.OslcKmIndexCDOProjectHandler">

+      </handler>

+      <handler

+            commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.queryCDOCommand"

+            class="org.eclipse.opencert.evm.oslc.km.importevid.handlers.OslcKmQueryCDOHandler">

+      </handler>

        <handler

             commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.retrieveCommand"

             class="org.eclipse.opencert.evm.oslc.km.importevid.handlers.OslcKmRetrieveHandler">

@@ -78,6 +86,21 @@
                   mnemonic="S"

                   tooltip="Indexes and searches for similar files, for Reuse Discovery purposes">

             </command>

+             <separator name="additions2" visible="true"></separator>

+             <command

+                  commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.indexCDOProjectCommand"

+                  id="org.eclipse.opencert.evm.oslc.km.importevid.menus.indexCDOProjectCommand"

+                  label="Index CDO Project"

+                  mnemonic="S"

+                  tooltip="Indexes a CDO project, for Reuse Discovery purposes">

+            </command>

+             <command

+                  commandId="org.eclipse.opencert.evm.oslc.km.importevid.commands.queryCDOCommand"

+                  id="org.eclipse.opencert.evm.oslc.km.importevid.menus.queryCDOCommand"

+                  label="Query to search into indexed CDO"

+                  mnemonic="S"

+                  tooltip="Performs the query over the already indexed assurance projects in OSLC-KM">

+            </command>

          </menu>

       </menuContribution>

       <menuContribution

diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmIndexCDOProjectHandler.java b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmIndexCDOProjectHandler.java
new file mode 100644
index 0000000..628e7a2
--- /dev/null
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmIndexCDOProjectHandler.java
@@ -0,0 +1,203 @@
+/*******************************************************************************

+ * Copyright (c) 2017 The Reuse Company

+ * 

+ * 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:

+ *   Luís Alonso - initial API and implementation

+ *   Borja López - initial API and implementation

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

+

+package org.eclipse.opencert.evm.oslc.km.importevid.handlers;

+

+import java.util.ArrayList;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;

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

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

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.cdo.transaction.CDOTransaction;

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

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.common.util.TreeIterator;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.handlers.HandlerUtil;

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

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

+import org.eclipse.jface.wizard.WizardDialog;

+import org.eclipse.opencert.apm.assurproj.assuranceproject.AssuranceProject;

+import org.eclipse.opencert.evm.evidspec.evidence.Artefact;

+import org.eclipse.opencert.evm.evidspec.evidence.impl.ArtefactModelImpl;

+import org.eclipse.opencert.evm.oslc.km.importevid.indexWizard.MyPageOne;

+import org.eclipse.opencert.evm.oslc.km.importevid.indexWizard.MyWizard;

+import org.eclipse.opencert.evm.oslc.km.importevid.wizard.ProjectSelector;

+import org.eclipse.opencert.infra.general.general.NamedElement;

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

+

+public class OslcKmIndexCDOProjectHandler extends AbstractHandler {

+

+	@Override

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		

+		// Gestión de CDO

+		CDOSession cdoSession = CDOConnectionUtil.instance.getCurrentSession();

+		CDOView viewCDO = CDOConnectionUtil.instance.openView(cdoSession);

+

+		// Mostrar selector de proyecto a indexar, y usar el servicio OSLC-KM para indexar los requirements

+        CDOTransaction transaction = cdoSession.openTransaction();

+        ProjectSelector listAssuranceProject = new ProjectSelector(null, cdoSession);

+        if (listAssuranceProject.open() == Window.OK) {

+        	

+        	try {        	

+        		// Buscar la referencia al proyecto

+            	String projectUri = listAssuranceProject.getResult().get(1);

+            	if (projectUri != null) {

+            		

+            		// Obtener elementos indexar a partir de una carpeta seleccionada

+            		List<AssuranceProject> assuranceProjectsToIndex = new ArrayList<AssuranceProject>();

+            		List<Artefact> artefactsToIndex = new ArrayList<Artefact>();

+            		CDOResourceFolder resFolder = viewCDO.getResourceFolder(projectUri);

+            		if (resFolder != null) {

+            			TreeIterator<EObject> contents = resFolder.eAllContents();

+            			if (contents != null) {

+            				EObject eObj;

+            				while (contents.hasNext()) {

+            					eObj = contents.next();

+            					if (eObj != null) {

+            						if (eObj instanceof AssuranceProject) {

+            							//System.out.println("Assurance project found!");

+            							assuranceProjectsToIndex.add((AssuranceProject)eObj);

+            						} else if (eObj instanceof Artefact) {

+            							//System.out.println("Artefact found!");

+            							artefactsToIndex.add((Artefact)eObj);

+            						}

+            					}

+            				}

+            			}

+            		}

+            		

+            		// Print de elementos a indexar

+            		int assuranceProjectsCount = 0;

+            		int artefactsCount = 0;

+            		if (assuranceProjectsToIndex != null) {

+            			assuranceProjectsCount = assuranceProjectsToIndex.size();

+            		}

+            		if (artefactsToIndex != null) {

+            			artefactsCount = artefactsToIndex.size();

+            		}

+            		System.out.println(assuranceProjectsCount + " assurance projects to index");

+            		System.out.println(artefactsCount + " artefacts to index");

+            		

+            		// First, collecting SIL levels by Artefacts in Assurance Projects

+            		Map<Artefact, List<String>> artefactsSilMapping = null;

+            		if (assuranceProjectsToIndex != null && assuranceProjectsToIndex.size() > 0) {

+            			

+            			artefactsSilMapping = MyPageOne.collectSilLevelsByArtefactFromAssuranceProjects(assuranceProjectsToIndex);

+            			if (artefactsSilMapping != null && artefactsSilMapping.size() > 0) {

+            				Artefact art;

+            				List<String> silLevels;

+            				Iterator it = artefactsSilMapping.entrySet().iterator();

+            				while (it.hasNext()) {

+            					Map.Entry pair = (Map.Entry)it.next();

+            					art = (Artefact)pair.getKey();

+            					silLevels = (List<String>)pair.getValue();

+            					System.out.println("Artefact " + art.getName() + ", " + silLevels.size() + " sil levels");

+            				}

+            			}			

+            		}

+            		

+            		// Then, index Artefacts with the SIL levels

+            		if (artefactsToIndex != null && artefactsToIndex.size() > 0) {

+            			MyPageOne.indexArtefacts_FocusOnEvidenceReuse(viewCDO, artefactsToIndex, artefactsSilMapping);

+            		}

+            		

+            		// Confirmation message

+            		MessageDialog.openInformation(new Shell(), "Index finished", "Process finished successfully. Indexed " + assuranceProjectsCount + " assurance projects and " + artefactsCount + " artefacts");

+            	}

+        	} catch (Exception ex) {

+        		ex.printStackTrace();

+        		

+        		// Failure message

+        		MessageDialog.openInformation(new Shell(), "Error", "Error when trying to index: " + ex.getMessage());

+        	}        	        

+        }

+		

+		

+		

+		// Mientras tanto, obtengo el recurso de CDO de forma cableada

+		/*String project1 = "/CS1-RTU-Security-P1/ASSURANCE_PROJECT/CS1-RTU-Security-P1.assuranceproject";

+		String project2 = "/CS1-RTU-Security/ASSURANCE_PROJECT/CS1-RTU-Security.assuranceproject";

+		CDOResource myResource = viewCDO.getResource(project2);

+		if (myResource != null) {

+			System.out.println("CDO Resource found --> Indexing in OSLC-KM");

+			MyPageOne.indexElementsOfCDOResourceAsAssuranceProject_FocusOnEvidenceReuse(myResource);	

+		} else {

+			System.out.println("CDO Resource not found!");

+		}    	

+		*/

+		

+		

+		/*IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);

+		WizardDialog wizardDialog = new WizardDialog(window.getShell(), new MyWizard());

+        if (wizardDialog.open() == Window.OK) {

+    		// MessageDialog.openInformation(window.getShell(), "OSLC KM Importer","Evidences imported successfully");

+        }		

+		return null;*/

+        

+        return null;

+	}

+	

+	private void Test_OpenProjectSelector() {

+		

+		// Getting open CDO Session

+		CDOSession cdoSession = CDOConnectionUtil.instance.getCurrentSession();

+        ProjectSelector listAssuranceProject = new ProjectSelector(null, cdoSession);

+        if (listAssuranceProject.open() == Window.OK) {

+        	

+        	// Buscar la referencia al proyecto

+        	String projectUri = listAssuranceProject.getResult().get(1);

+        	

+            CDOTransaction transaction = cdoSession.openTransaction();

+        	CDOResource resource = transaction.getResource(projectUri);

+        	//CDOResource resource = cdoSession.getView(0).getResource(projectUri);

+        	if (resource != null) {

+        	

+        		System.out.println("Found: " + resource.getName());

+        		

+        		// Indexing contents

+        		MyPageOne.indexElementsOfCDOResourceAsAssuranceProject(resource);

+        		

+        		// Pruebas

+        		

+        		// Look for Requirement Items inside of the Assurance Project

+        		//resource.getAllContents();

+        		/*EList<EObject> contents = resource.getContents();

+        		int contentsCount = contents.size();

+        		EObject item = null;

+        		String itemName =  null;

+        		for (int i = 0; i < contentsCount; i++) {

+        			item = contents.get(i);

+        			itemName = item.toString();

+        			System.out.println("Item: " + itemName);

+        		}*/

+        	} else {

+        		

+        		// Project not found

+        		System.out.println("No project found");

+        	}        	

+        }

+	}

+	

+}

diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmQueryCDOHandler.java b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmQueryCDOHandler.java
new file mode 100644
index 0000000..1a5be74
--- /dev/null
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/handlers/OslcKmQueryCDOHandler.java
@@ -0,0 +1,117 @@
+/*******************************************************************************

+ * Copyright (c) 2017 The Reuse Company

+ * 

+ * 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:

+ *   Luís Alonso - initial API and implementation

+ *   Borja López - initial API and implementation

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

+

+package org.eclipse.opencert.evm.oslc.km.importevid.handlers;

+

+import java.io.InputStreamReader;

+import java.net.ConnectException;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.emf.cdo.CDOObject;

+import org.eclipse.emf.cdo.common.id.CDOID;

+import org.eclipse.emf.cdo.common.id.CDOIDUtil;

+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.view.CDOView;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.ui.IWorkbenchWindow;

+import org.eclipse.ui.handlers.HandlerUtil;

+

+import com.google.gson.Gson;

+import com.google.gson.stream.JsonReader;

+

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

+import org.eclipse.jface.wizard.WizardDialog;

+import org.eclipse.opencert.evm.oslc.km.importevid.indexWizard.MyPageOne;

+import org.eclipse.opencert.evm.oslc.km.importevid.indexWizard.MyWizard;

+import org.eclipse.opencert.evm.oslc.km.importevid.wizard.ProjectSelector;

+

+public class OslcKmQueryCDOHandler extends AbstractHandler {

+

+	@Override

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		

+		// Build up a query to invoke OSLC-KM service, so that we can recover CDOObjects

+		

+		// CDO session management

+		CDOSession cdoSession = CDOConnectionUtil.instance.getCurrentSession();		

+		

+		// Running Query and getting results

+		List<CDOObject> results = RunQuery("SL-C 1", cdoSession);

+

+        return results;

+	}

+	

+	public static List<CDOObject> RunQuery(String query, CDOSession cdoSession) {

+		String queryResult = "";		

+		try {			

+			// Service invoke

+			queryResult = MyPageOne.getSimilarRequirementsInOslcKmRepository(query);			

+		} catch (ConnectException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+		System.out.println("Results for query '" + query + "': " + queryResult);

+		

+		CDOView viewCDO = CDOConnectionUtil.instance.openView(cdoSession);

+		List<CDOObject> cdoObjects = new ArrayList<CDOObject>();

+		List<String> idsFromJson = null;

+		if (queryResult != null && queryResult != "") {

+			idsFromJson = MyPageOne.GetObjectsFromJson(queryResult);

+			if (idsFromJson != null && idsFromJson.size() > 0) {

+				

+				CDOObject cdoObject = null;

+				CDOID cdoID = null;

+				String cdoIdAsString = null;

+				for (int i = 0; i < idsFromJson.size(); i++) {

+					cdoIdAsString = idsFromJson.get(i);

+					if (cdoIdAsString != null) {						

+						cdoObject = resolveCDOObject(cdoIdAsString, viewCDO);

+						if (cdoObject != null && !cdoObjects.contains(cdoObject)) {

+							cdoObjects.add(cdoObject);

+						}

+					}

+				}	

+			}

+		}

+		return cdoObjects;

+	}

+	

+	private static CDOObject resolveCDOObject(String objectId, Object context) {

+		  // the only context we can handle at the moment is a CDOView

+		  if (context instanceof CDOView) {

+		   try {

+			    CDOID id = CDOIDUtil.read(objectId);

+			    CDOView view = (CDOView) context;

+			    CDOObject object = view.getObject(id, true);

+			    return object;

+		   } catch (Exception e) {

+		    // ignore

+			   int i = 2;

+			   e.printStackTrace();

+		   }

+		  }

+

+		  return null;

+		 }

+}

diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyPageOne.java b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyPageOne.java
index bc9c77f..dceaa31 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyPageOne.java
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyPageOne.java
@@ -15,7 +15,54 @@
 

 package org.eclipse.opencert.evm.oslc.km.importevid.indexWizard;

 

+import java.io.BufferedReader;

+import java.io.DataInputStream;

+import java.io.IOException;

+import java.io.InputStream;

+import java.io.InputStreamReader;

+import java.io.Reader;

+import java.io.StringReader;

+import java.net.ConnectException;

+import java.net.HttpURLConnection;

+import java.net.MalformedURLException;

+import java.net.URL;

+import java.nio.charset.Charset;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Map;

+import java.util.Scanner;

+

+import org.eclipse.core.internal.resources.Resource;

+import org.eclipse.emf.cdo.CDOObject;

+import org.eclipse.emf.cdo.common.id.CDOID;

+import org.eclipse.emf.cdo.common.id.CDOIDUtil;

+import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;

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

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

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

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.cdo.transaction.CDOTransaction;

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

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EObject;

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

 import org.eclipse.jface.wizard.WizardPage;

+import org.eclipse.opencert.apm.assuranceassets.assuranceasset.AssuranceAsset;

+import org.eclipse.opencert.apm.assuranceassets.assuranceasset.AssuranceAssetEvent;

+import org.eclipse.opencert.apm.assurproj.assuranceproject.AssuranceProject;

+import org.eclipse.opencert.apm.assurproj.assuranceproject.BaselineConfig;

+import org.eclipse.opencert.apm.baseline.baseline.BaseActivity;

+import org.eclipse.opencert.apm.baseline.baseline.BaseApplicability;

+import org.eclipse.opencert.apm.baseline.baseline.BaseArtefact;

+import org.eclipse.opencert.apm.baseline.baseline.BaseComplianceMap;

+import org.eclipse.opencert.apm.baseline.baseline.BaseCriticalityApplicability;

+import org.eclipse.opencert.apm.baseline.baseline.BaseCriticalityLevel;

+import org.eclipse.opencert.apm.baseline.baseline.BaseFramework;

+import org.eclipse.opencert.apm.baseline.baseline.BaseRequirement;

+import org.eclipse.opencert.evm.evidspec.evidence.Artefact;

+import org.eclipse.opencert.evm.oslc.km.importevid.wizard.ProjectSelector;

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.events.KeyEvent;

 import org.eclipse.swt.events.KeyListener;

@@ -25,6 +72,9 @@
 import org.eclipse.swt.widgets.Label;

 import org.eclipse.swt.widgets.Text;

 

+import com.google.gson.Gson;

+import com.reusecompany.oslc.km.vocabs.srl.Artifact;

+

 public class MyPageOne extends WizardPage {

 	

     private Text fileSelector;

@@ -34,7 +84,325 @@
         super("OSLC KM - Index Page");

         setTitle("Select the Model file to import");

         setDescription("The Model file will be indexed into the OSLC-KM repository");

+        

+        /* Código de prueba para desarrollo

+        // Getting current CDO Session

+        CDOSession cdoSession = CDOConnectionUtil.instance.getCurrentSession();

+        //cdoSession.getViews(); => Recupera las vistas activas

+        

+        CDOView [] views = sessionCDO.getViews();

+        if (views.length!=0) {

+         viewCDO = views[0];    

+        }

+        

+        // Getting CDO View

+    	CDOView viewCDO = CDOConnectionUtil.instance.openView(cdoSession);

+        

+    	// Getting CDO Elements

+    	CDOResourceNode[] listR = viewCDO.getElements();

+    	int count = listR.length;

+    	

+    	// Prueba Iteración

+    	List<String> nodeNames = new ArrayList<String>();

+    	List<String> nodePaths = new ArrayList<String>();

+    	String nodeName;

+    	String nodePath;

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

+    		nodeName = listR[i].getName();

+    		nodePath = listR[i].getPath();    

+    		nodePaths.add(nodePath);

+    		nodeNames.add(nodeName);

+    		//System.out.println(nodePath);    				

+		}	

+    	

+    	// 11 oct 2018: prueba recuperación

+    	String retrievalResult = "";

+    	if (false) {

+    		

+    		// CASO 1 - Recuperación de elementos para una query

+    		try {

+				retrievalResult = getSimilarRequirementsInOslcKmRepository("SL-C 1");

+			} catch (ConnectException e) {

+				// TODO Auto-generated catch block

+				e.printStackTrace();

+			}

+    		System.out.println("Retrieval Results: " + retrievalResult);

+    		

+    	} else {

+    		    		    	

+    		// CASO 2 - Indexación de un Assurance Project

+        	CDOResource myResource = viewCDO.getResource("/CS1-RTU-Security-P1/ASSURANCE_PROJECT/CS1-RTU-Security-P1.assuranceproject");

+        	indexElementsOfCDOResourceAsAssuranceProject_FocusOnEvidenceReuse(myResource);

+        	        	

+    	} 	

+    	

+        // Opening a transaction

+        CDOTransaction transaction = cdoSession.openTransaction();

+        ProjectSelector listAssuranceProject = new ProjectSelector(getShell(), cdoSession);

+        if (listAssuranceProject.open() == Window.OK) {

+        	

+        	// Buscar la referencia al proyecto

+        	String projectUri = listAssuranceProject.getResult().get(1);

+        	CDOResource resource = transaction.getResource(projectUri);

+        	if (resource != null) {

+        	

+        		// Look for Requirement Items inside of the Assurance Project

+        		//resource.getAllContents();

+        		EList<EObject> contents = resource.getContents();

+        		int contentsCount = contents.size();

+        		EObject item = null;

+        		String itemName =  null;

+        		for (int i = 0; i < contentsCount; i++) {

+        			item = contents.get(i);

+        			itemName = item.toString();

+        		}

+        		

+        		

+        		int prueba = 888;

+        		

+        	} else {

+        		

+        		// Project not found

+        	}        	

+        }

+        */

     }

+    

+

+ // Web request constants

+ 	//   Web request header properties and values:

+    private static final String CRSeparator = "###";

+    public static final String StringEmpty = "";

+ 	private static final String HttpPostProtocolName = "POST";

+ 	private static final String ContentTypeRequestProperty = "Content-Type";

+ 	private static final String JsonContentTypeRequestPropertyValue = "application/json";

+ 	private static final String ContentLengthRequestProperty = "Content-Length";

+ 	private static final String AsciiFormat = "ASCII";

+ 	private static final String Utf8Format = "UTF-8";

+ 	//   Parameters:

+ 	private static final String ReqPathParam = "path";

+ 	private static final String ReqNameParam = "name";

+ 	private static final String ReqIdParam = "cdoId";

+ 	private static final String ReqTextParam = "text";

+ 	private static final String CRsParam = "sil";

+ 	//   Json parts:

+ 	private static final String JsonStartWebRequest = "{\"";

+ 	private static final String JsonEndWebRequest = "\"}";

+ 	private static final String JsonAttributeValueSeparatorWebRequest = "\":\"";

+ 	private static final String JsonElementSeparatorWebRequest = "\",\"";

+ 	//   Answer headers / footers:

+ 	private static final String XMLResponseHeader = "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">";

+ 	private static final String XMLResponseFooter = "</string>";

+ 	//   Debug messages:

+ 	private static final String HttpWebRequestErrorMessage = "Failed : HTTP error code : ";

+	public static boolean indexRequirementInOslcKmRepository(String path, String name, String cdoId, String text, List<String> criticalityLevels) throws java.net.ConnectException {

+		boolean result = false;

+		HttpURLConnection conn;

+		conn = null; 

+		DataInputStream doi;

+		doi = null;

+		InputStream inputStream;

+		inputStream = null;

+		Scanner s ;

+		s = null;

+		try {

+			if (cdoId != null && !cdoId.equals(StringEmpty)) {

+				

+				String criticalityLevelsAsString = "";

+				if (criticalityLevels != null && criticalityLevels.size() > 0) {

+					criticalityLevelsAsString = String.join(CRSeparator, criticalityLevels);

+				}

+				

+				// Building POST parameters

+				StringBuilder postData = new StringBuilder();

+				postData.append(JsonStartWebRequest);

+				postData.append(ReqPathParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(path);

+				postData.append(JsonElementSeparatorWebRequest);

+				postData.append(ReqNameParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(name);

+				postData.append(JsonElementSeparatorWebRequest);

+				postData.append(ReqIdParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(cdoId);

+				postData.append(JsonElementSeparatorWebRequest);

+				postData.append(ReqTextParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(text);

+				postData.append(JsonElementSeparatorWebRequest);

+				postData.append(CRsParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(criticalityLevelsAsString);

+				postData.append(JsonEndWebRequest);

+				

+		        byte[] postDataBytes = postData.toString().getBytes(AsciiFormat);

+	

+				URL url = new URL(MyWizard.TrcAmassWebServiceUrl);

+				

+		        conn = (HttpURLConnection)url.openConnection();

+		        conn.setRequestMethod(HttpPostProtocolName);

+		        conn.setRequestProperty(ContentTypeRequestProperty, JsonContentTypeRequestPropertyValue);

+		        conn.setRequestProperty(ContentLengthRequestProperty, String.valueOf(postDataBytes.length));

+		        conn.setDoOutput(true);

+		        conn.getOutputStream().write(postDataBytes);

+	

+				if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {

+					System.out.println(HttpWebRequestErrorMessage + conn.getResponseCode());

+					

+				} else {

+					inputStream = conn.getInputStream();

+					doi = new DataInputStream(inputStream);

+					result = doi.readBoolean();

+					

+					//s = new Scanner(inputStream);

+					//s.useDelimiter(Delimiter);

+					//result = s.hasNextBoolean() ? s.nextBoolean() : false;					

+				}

+			}

+		} catch (java.net.ConnectException e) {

+			String errorMessage;

+			errorMessage = e.getMessage() + " @ " + MyWizard.TrcAmassWebServiceUrl;

+			System.out.println(errorMessage);

+			throw e;

+		} catch (MalformedURLException e) {

+			e.printStackTrace();

+		} catch (IOException e) {

+			e.printStackTrace();

+		} finally {

+			if (s != null) {

+				s.close();

+				s = null;

+			}

+			if (inputStream != null) {

+				try {

+					inputStream.close();

+				} catch(Exception ex1) {

+					

+				}

+				inputStream = null;

+			}

+			if (conn != null) {

+				conn.disconnect();

+				conn = null;

+			} 

+		}

+		return result;

+	}

+	

+	public static List<String> GetObjectsFromJson(String json) {

+		final Gson gson;

+		gson = new Gson();

+		List<String> result = null;

+		Reader inputString = null;

+		BufferedReader inFromUser = null;

+		try {

+			inputString = new StringReader(json);

+			inFromUser = new BufferedReader(inputString);

+			result = gson.fromJson(inFromUser, List.class);

+		} catch (Exception ex) {

+			System.out.println(ex.getMessage());

+			throw ex;

+		} finally {

+			if (inputString != null) {

+				try {

+					inputString.close();

+					inputString = null;

+				} catch (Exception ex) {

+				}

+			}

+			if (inFromUser != null) {

+				try {

+					inFromUser.close();

+					inFromUser = null;

+				} catch (Exception ex) {

+				}

+			}

+		}

+		return result;

+	}

+	

+	public static String getSimilarRequirementsInOslcKmRepository(String text)  throws java.net.ConnectException  {

+		String result = "";

+		HttpURLConnection conn;

+		conn = null; 

+		DataInputStream doi;

+		doi = null;

+		InputStream inputStream;

+		inputStream = null;

+		Scanner s ;

+		s = null;

+		try {

+			if (text != null && !text.equals(StringEmpty)) {

+				

+				// Building POST parameters

+				StringBuilder postData = new StringBuilder();

+				postData.append(JsonStartWebRequest);

+				postData.append(ReqTextParam);

+				postData.append(JsonAttributeValueSeparatorWebRequest);

+				postData.append(text);				

+				postData.append(JsonEndWebRequest);

+				

+		        byte[] postDataBytes = postData.toString().getBytes(AsciiFormat);

+	

+				URL url = new URL(MyWizard.TrcAmassWebServiceUrl_Retrieval);

+				

+		        conn = (HttpURLConnection)url.openConnection();

+		        conn.setRequestMethod(HttpPostProtocolName);

+		        conn.setRequestProperty(ContentTypeRequestProperty, JsonContentTypeRequestPropertyValue);

+		        conn.setRequestProperty(ContentLengthRequestProperty, String.valueOf(postDataBytes.length));

+		        conn.setDoOutput(true);

+		        conn.getOutputStream().write(postDataBytes);

+	

+				if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {

+					System.out.println(HttpWebRequestErrorMessage + conn.getResponseCode());

+					

+				} else {

+					

+					inputStream = conn.getInputStream();

+					doi = new DataInputStream(inputStream);

+					result = doi.readLine();

+					

+					if (result != null && !result.equals(StringEmpty)) {

+						result = result.replace(XMLResponseHeader, StringEmpty);

+						result = result.replace(XMLResponseFooter, StringEmpty);

+					}

+					

+					//s = new Scanner(inputStream);

+					//s.useDelimiter(Delimiter);

+					//result = s.hasNextBoolean() ? s.nextBoolean() : false;					

+				}

+			}

+		} catch (java.net.ConnectException e) {

+			String errorMessage;

+			errorMessage = e.getMessage() + " @ " + MyWizard.TrcAmassWebServiceUrl;

+			System.out.println(errorMessage);

+			throw e;

+		} catch (MalformedURLException e) {

+			e.printStackTrace();

+		} catch (IOException e) {

+			e.printStackTrace();

+		} finally {

+			if (s != null) {

+				s.close();

+				s = null;

+			}

+			if (inputStream != null) {

+				try {

+					inputStream.close();

+				} catch(Exception ex1) {

+					

+				}

+				inputStream = null;

+			}

+			if (conn != null) {

+				conn.disconnect();

+				conn = null;

+			} 

+		}

+		return result;

+	}

 

     @Override

     public void createControl(Composite parent) {

@@ -77,4 +445,522 @@
     public String getFileFullPath() {

         return fileSelector.getText();

     }

+    

+    

+    // REFACTORING FOR FINAL SOLUTION

+    public static void indexElementsOfCDOResourceAsAssuranceProject(CDOResource cdoResource) {

+    	

+    	//CDOResource myResource = viewCDO.getResource("/CS1-RTU-Security-P1/ASSURANCE_PROJECT/CS1-RTU-Security-P1.assuranceproject");

+    	if (cdoResource != null) {

+    		

+    		// Getting AssuranceProject

+    		EList<EObject> contents = cdoResource.getContents();

+    		if (contents != null && contents.size() > 0 && contents.get(0) instanceof AssuranceProject) {

+    			

+    			// From project: get baseline (from the Baseline Config ...Config) => Navigate through requirements

+    			

+    			// First element (TODO Iterate)

+        		AssuranceProject myAssuranceProject = (AssuranceProject) contents.get(0);

+        		EList<BaselineConfig> baselineConfigs = myAssuranceProject.getBaselineConfig();

+        		if (baselineConfigs != null && baselineConfigs.size() > 0) {

+        			

+        			// First element (TODO iterate)

+        			BaselineConfig baselineConfig = baselineConfigs.get(0);

+        			if (baselineConfig != null) {

+        				

+        				// From the BaselineConfiguration, get the RefFramework

+        				EList<BaseFramework> refFrameworks = baselineConfig.getRefFramework();

+        				if (refFrameworks != null && refFrameworks.size() > 0) {

+        				

+        					// First element (TODO iterate)

+        					BaseFramework refFramework = refFrameworks.get(0);

+        					if (refFramework != null) {

+        						

+        						// Getting BaseActivities

+        						EList<BaseActivity> baseActivities = refFramework.getOwnedActivities();

+        						if (baseActivities != null && baseActivities.size() > 0) {

+        							

+        							// First element (TODO iterate)

+        							BaseActivity baseActivity = baseActivities.get(0);

+        							

+        							// Parche Dev: primer subactivity

+        							baseActivity = baseActivities.get(0).getSubActivity().get(0);

+        							

+        							if (baseActivity != null) {

+        								

+        								// Getting Requirements

+        								EList<BaseRequirement> requirements = baseActivity.getOwnedRequirement();

+        								if (requirements != null && requirements.size() > 0) {

+        									

+        									// Iterating requirements

+        									BaseRequirement requirement = null;

+        									for (int i = 0; i < requirements.size(); i++) {

+        										requirement = requirements.get(i);

+        										if (requirement != null) {

+            										

+            										// Debug (TODO)

+            										System.out.println("");

+            										System.out.println("" + String.valueOf(i + 1) + "- Requirement Id: " + requirement.getId());

+            										System.out.println("	Name: " + requirement.getName());

+            										System.out.println("	Description: " + requirement.getDescription());

+            										

+            										// Getting Requirement Applicability

+            										List<String> silElements = new ArrayList<String>();

+            										EList<BaseApplicability> applicabilities = requirement.getApplicability();

+            										if (applicabilities != null && applicabilities.size() > 0) {

+            											

+            											// Iterating Requirement Applicabilities

+            											BaseApplicability applicability = null;

+            											for (int j = 0; j < applicabilities.size(); j++) {

+            												applicability = applicabilities.get(j);	

+            												if (applicability != null) {

+                												

+                												// Getting Criticality Applicabilities

+                												EList<BaseCriticalityApplicability> applicabilityLevels = applicability.getApplicCritic();

+                												if (applicabilityLevels != null && applicabilityLevels.size() > 0) {

+                													

+                													// Iterating criticality applicabilities

+                													BaseCriticalityApplicability applicabilityElement = null;

+                													for (int k = 0; k < applicabilityLevels.size(); k++) {

+                														applicabilityElement = applicabilityLevels.get(k);

+                    													if (applicabilityElement != null) {

+                    													

+                    														// Getting Criticality Level

+                    														BaseCriticalityLevel criticalityLevel = applicabilityElement.getCriticLevel();

+                    														if (criticalityLevel != null) {

+                    															System.out.println("	CriticalityLevel: " + criticalityLevel.getName());

+                    															silElements.add(criticalityLevel.getName());

+                    														}

+                    													}    	

+                													}                																									

+                												}

+                											}

+            											}  

+            											

+            											// Index OSLC-KM

+                										boolean indexed = false;

+                										try {

+    														indexed = indexRequirementInOslcKmRepository("", requirement.getId(), requirement.getId(), requirement.getDescription(), silElements);

+    													} catch (ConnectException e) {

+    														// TODO Auto-generated catch block

+    														e.printStackTrace();

+    													}

+                										System.out.println("	Indexed: " + indexed);

+                										

+            										}

+            									}

+        									}        									

+        								}

+        							}

+        						}

+        					}

+        				}

+        			}

+        		}

+    		}    		    

+    	}

+    }

+

+    private static List<String> GetSilLevelsFromRequirements(EList<BaseRequirement> requirements) {

+    	

+    	List<String> silElements = new ArrayList<String>();

+    	if (requirements != null && requirements.size() > 0) {

+			

+			// Iterating requirements (to get SIL-Levels)

+			BaseRequirement requirement = null;

+			for (int i = 0; i < requirements.size(); i++) {

+				requirement = requirements.get(i);

+				if (requirement != null) {

+					

+					// Getting Requirement Applicability

+					EList<BaseApplicability> applicabilities = requirement.getApplicability();

+					if (applicabilities != null && applicabilities.size() > 0) {

+						

+						// Iterating Requirement Applicabilities

+						BaseApplicability applicability = null;

+						for (int j = 0; j < applicabilities.size(); j++) {

+							applicability = applicabilities.get(j);	

+							if (applicability != null) {

+								

+								// Getting Criticality Applicabilities

+								EList<BaseCriticalityApplicability> applicabilityLevels = applicability.getApplicCritic();

+								if (applicabilityLevels != null && applicabilityLevels.size() > 0) {

+									

+									// Iterating criticality applicabilities

+									BaseCriticalityApplicability applicabilityElement = null;

+									for (int k = 0; k < applicabilityLevels.size(); k++) {

+										applicabilityElement = applicabilityLevels.get(k);

+										if (applicabilityElement != null) {

+										

+											// Getting Criticality Level

+											BaseCriticalityLevel criticalityLevel = applicabilityElement.getCriticLevel();

+											if (criticalityLevel != null) {

+												silElements.add(criticalityLevel.getName());

+											}

+										}    	

+									}                																									

+								}

+							}

+						}

+					}

+				}

+			}        									

+		}

+    	return silElements;

+    }

+    

+    public static void indexElementsOfCDOResourceAsAssuranceProject_FocusOnEvidenceReuse(CDOResource cdoResource) {

+    	

+    	//CDOResource myResource = viewCDO.getResource("/CS1-RTU-Security-P1/ASSURANCE_PROJECT/CS1-RTU-Security-P1.assuranceproject");

+    	if (cdoResource != null) {

+    		

+    		// Getting AssuranceProject

+    		EList<EObject> contents = cdoResource.getContents();

+    		if (contents != null && contents.size() > 0 && contents.get(0) instanceof AssuranceProject) {

+    			

+    			// First element (TODO Iterate)

+        		AssuranceProject myAssuranceProject = (AssuranceProject) contents.get(0);

+        		EList<BaselineConfig> baselineConfigs = myAssuranceProject.getBaselineConfig();

+        		if (baselineConfigs != null && baselineConfigs.size() > 0) {

+        			

+        			// Final result => Dictionary of <Artefact, List<SilLevels>> 

+        			Map<Artefact, List<String>> artefactsMapping = new HashMap<Artefact, List<String>>();

+        			

+        			// Iterating baselineConfigs

+        			BaselineConfig baselineConfig = null;

+        			for (int baselineConfigIndex = 0; baselineConfigIndex < baselineConfigs.size(); baselineConfigIndex++) {

+        			

+        				baselineConfig = baselineConfigs.get(baselineConfigIndex);

+            			if (baselineConfig != null) {

+            				

+            				// From the BaselineConfiguration, get the RefFramework

+            				EList<BaseFramework> refFrameworks = baselineConfig.getRefFramework();

+            				if (refFrameworks != null && refFrameworks.size() > 0) {

+            				

+            					// Iterate RefFrameworks

+            					BaseFramework refFramework = null;

+                    			for (int refFrameworkIndex = 0; refFrameworkIndex < refFrameworks.size(); refFrameworkIndex++) {

+

+                    				refFramework = refFrameworks.get(refFrameworkIndex);

+                					if (refFramework != null) {

+                						

+                						// New in this function => Getting Base Artefacts

+                						EList<BaseArtefact> baseArtefacts = refFramework.getOwnedArtefact();

+                						if (baseArtefacts != null && baseArtefacts.size() > 0) {

+                							

+                							// Iterate BaseArtefacts

+                							BaseArtefact baseArtefact = null;

+                							for (int baseArtefactIndex = 0; baseArtefactIndex < baseArtefacts.size(); baseArtefactIndex++) {

+                								

+                								baseArtefact = baseArtefacts.get(baseArtefactIndex);

+                								if (baseArtefact != null) {

+                									

+                									// Del BaseArtefact, por un lado saco los SilLevels de sus Constraining Requirements (from the BaseArtefact)

+                									List<String> silLevels = null;

+    												EList<BaseRequirement> constrainingRequirements = baseArtefact.getConstrainingRequirement();

+    												if (constrainingRequirements != null && constrainingRequirements.size() > 0) {

+                    									

+                    									// Iterating requirements (to get SIL-Levels)

+    													silLevels = GetSilLevelsFromRequirements(constrainingRequirements);        													                                									      							

+                    								}

+                									

+                									// Y por otro lado, navego a través de los BaseComplianceMaps para obtener los Artefacts a indexar

+                									EList<BaseComplianceMap> complianceMaps = baseArtefact.getComplianceMap();

+                									if (complianceMaps != null && complianceMaps.size() > 0) {

+                										

+                										// Iterate ComplianceMaps

+                										BaseComplianceMap complianceMap = null;

+                										for (int complianceMapIndex = 0; complianceMapIndex < complianceMaps.size(); complianceMapIndex++) {

+                											

+                											complianceMap = complianceMaps.get(complianceMapIndex);

+                											if (complianceMap != null) {

+                												

+                												// Getting Target => Es lo que tengo que indexar (Deben ser Artefacts)

+                												EList<AssuranceAsset> targets = complianceMap.getTarget();

+                												if (targets != null && targets.size() > 0) {

+                													

+                													Artefact artefact = null;

+                													AssuranceAsset target = null;

+                													for (int targetIndex = 0; targetIndex < targets.size(); targetIndex++) {

+                														target = targets.get(targetIndex);

+                														if (target instanceof Artefact) {

+                															artefact = (Artefact)target;

+                															if (artefact != null) {

+                																

+                																// Artefact para indexar

+                																String test1 = artefact.getName();

+                																String test2 = artefact.getDescription();

+                																

+                																// Append to the result

+                																List<String> silsForThisArtefact = null;

+                																if (artefactsMapping.containsKey(artefact)) {

+                																	silsForThisArtefact = artefactsMapping.get(artefact);

+                																} else {

+                																	// Not in the dictionary

+                																	silsForThisArtefact = new ArrayList<String>();

+                																	artefactsMapping.put(artefact, silsForThisArtefact);

+                																}

+                																

+                																// Complementar con los SilLevels

+                																if (silsForThisArtefact != null && silLevels != null && silLevels.size() > 0) {

+                																	

+                																	String localSil = null;

+                																	for (int localSilIndex = 0; localSilIndex < silLevels.size(); localSilIndex++) {

+                																		localSil = silLevels.get(localSilIndex);

+                																		if (localSil != null) {

+                																			if (!silsForThisArtefact.contains(localSil)) {

+                																				silsForThisArtefact.add(localSil);

+                																			}

+                																		}                																		

+                																	}

+                																}

+                															}

+                														}

+                													}

+                												}                												                											

+                											}

+                										}

+                									}

+                								}

+                							}

+                						}

+                					}                    				

+                    			}            					            				

+            				}

+            			}        				

+        			}    

+        			

+        			// Final summary

+        			if (artefactsMapping != null && artefactsMapping.size() > 0) {

+        				Artefact art;

+        				List<String> silLevels;

+        				Iterator it = artefactsMapping.entrySet().iterator();

+        				while (it.hasNext()) {

+        					Map.Entry pair = (Map.Entry)it.next();

+        					art = (Artefact)pair.getKey();

+        					silLevels = (List<String>)pair.getValue();

+        					System.out.println("Artefact " + art.getName() + ", " + silLevels.size() + " sil levels");

+        				}

+        			}

+        		}

+    		}    		    

+    	}

+    }

+

+    public static Map<Artefact, List<String>> collectSilLevelsByArtefactFromAssuranceProjects(List<AssuranceProject> assuranceProjects) {

+    	

+    	// Final result => Dictionary of <Artefact, List<SilLevels>> 

+		Map<Artefact, List<String>> artefactsMapping = new HashMap<Artefact, List<String>>();    	

+    	if (assuranceProjects != null && assuranceProjects.size() > 0) {

+    		

+    		AssuranceProject assuranceProject;

+    		for (int assuranceProjectIndex = 0; assuranceProjectIndex < assuranceProjects.size(); assuranceProjectIndex++) {

+    			assuranceProject = assuranceProjects.get(assuranceProjectIndex);    			

+    			EList<BaselineConfig> baselineConfigs = assuranceProject.getBaselineConfig();

+        		if (baselineConfigs != null && baselineConfigs.size() > 0) {

+        			

+        			// Iterating baselineConfigs

+        			BaselineConfig baselineConfig = null;

+        			for (int baselineConfigIndex = 0; baselineConfigIndex < baselineConfigs.size(); baselineConfigIndex++) {

+        			

+        				baselineConfig = baselineConfigs.get(baselineConfigIndex);

+            			if (baselineConfig != null) {

+            				

+            				// From the BaselineConfiguration, get the RefFramework

+            				EList<BaseFramework> refFrameworks = baselineConfig.getRefFramework();

+            				if (refFrameworks != null && refFrameworks.size() > 0) {

+            				

+            					// Iterate RefFrameworks

+            					BaseFramework refFramework = null;

+                    			for (int refFrameworkIndex = 0; refFrameworkIndex < refFrameworks.size(); refFrameworkIndex++) {

+

+                    				refFramework = refFrameworks.get(refFrameworkIndex);

+                					if (refFramework != null) {

+                						

+                						// New in this function => Getting Base Artefacts

+                						EList<BaseArtefact> baseArtefacts = refFramework.getOwnedArtefact();

+                						if (baseArtefacts != null && baseArtefacts.size() > 0) {

+                							

+                							// Iterate BaseArtefacts

+                							BaseArtefact baseArtefact = null;

+                							for (int baseArtefactIndex = 0; baseArtefactIndex < baseArtefacts.size(); baseArtefactIndex++) {

+                								

+                								baseArtefact = baseArtefacts.get(baseArtefactIndex);

+                								if (baseArtefact != null) {

+                									

+                									// Del BaseArtefact, por un lado saco los SilLevels de sus Constraining Requirements (from the BaseArtefact)

+                									List<String> silLevels = null;

+    												EList<BaseRequirement> constrainingRequirements = baseArtefact.getConstrainingRequirement();

+    												if (constrainingRequirements != null && constrainingRequirements.size() > 0) {

+                    									

+                    									// Iterating requirements (to get SIL-Levels)

+    													silLevels = GetSilLevelsFromRequirements(constrainingRequirements);        													                                									      							

+                    								}

+                									

+                									// Y por otro lado, navego a través de los BaseComplianceMaps para obtener los Artefacts a indexar

+                									EList<BaseComplianceMap> complianceMaps = baseArtefact.getComplianceMap();

+                									if (complianceMaps != null && complianceMaps.size() > 0) {

+                										

+                										// Iterate ComplianceMaps

+                										BaseComplianceMap complianceMap = null;

+                										for (int complianceMapIndex = 0; complianceMapIndex < complianceMaps.size(); complianceMapIndex++) {

+                											

+                											complianceMap = complianceMaps.get(complianceMapIndex);

+                											if (complianceMap != null) {

+                												

+                												// Getting Target => Es lo que tengo que indexar (Deben ser Artefacts)

+                												EList<AssuranceAsset> targets = complianceMap.getTarget();

+                												if (targets != null && targets.size() > 0) {

+                													

+                													Artefact artefact = null;

+                													AssuranceAsset target = null;

+                													for (int targetIndex = 0; targetIndex < targets.size(); targetIndex++) {

+                														target = targets.get(targetIndex);

+                														if (target instanceof Artefact) {

+                															artefact = (Artefact)target;

+                															if (artefact != null) {

+                																

+                																// Artefact para indexar

+                																String test1 = artefact.getName();

+                																String test2 = artefact.getDescription();

+                																

+                																// Append to the result

+                																List<String> silsForThisArtefact = null;

+                																if (artefactsMapping.containsKey(artefact)) {

+                																	silsForThisArtefact = artefactsMapping.get(artefact);

+                																} else {

+                																	// Not in the dictionary

+                																	silsForThisArtefact = new ArrayList<String>();

+                																	artefactsMapping.put(artefact, silsForThisArtefact);

+                																}

+                																

+                																// Complementar con los SilLevels

+                																if (silsForThisArtefact != null && silLevels != null && silLevels.size() > 0) {

+                																	

+                																	String localSil = null;

+                																	for (int localSilIndex = 0; localSilIndex < silLevels.size(); localSilIndex++) {

+                																		localSil = silLevels.get(localSilIndex);

+                																		if (localSil != null) {

+                																			if (!silsForThisArtefact.contains(localSil)) {

+                																				silsForThisArtefact.add(localSil);

+                																			}

+                																		}                																		

+                																	}

+                																}

+                															}

+                														}

+                													}

+                												}                												                											

+                											}

+                										}

+                									}

+                								}

+                							}

+                						}

+                					}                    				

+                    			}            					            				

+            				}

+            			}        				

+        			}            			        		

+        		}

+    		}   		    

+    	}

+    	return artefactsMapping;

+    }

+

+    public static void indexArtefacts_FocusOnEvidenceReuse(CDOView cdoView, List<Artefact> artefactsToIndex, Map<Artefact, List<String>> artefacts2Sil) {

+    	

+    	if (artefactsToIndex != null && artefactsToIndex.size() > 0) {

+    		

+    		String artefactIdentifier;

+    		String textToIndex;

+    		Artefact artefact;

+    		List<String> silElementsForThisArtefact;

+    		for (int i = 0; i < artefactsToIndex.size(); i++) {

+    			textToIndex = null;

+    			silElementsForThisArtefact = null;

+    			artefact = artefactsToIndex.get(i);

+    			if (artefact != null) {

+    				

+    				//artefactIdentifier = artefact.cdoID().toString();

+    				artefactIdentifier = "L" + artefact.cdoID().toURIFragment(); // Esto guarda sólo el ID numérico, sin la L

+    				

+    				textToIndex = artefact.getName() + ". " + artefact.getDescription();

+    				if (artefacts2Sil != null && artefacts2Sil.containsKey(artefact)) {

+    					silElementsForThisArtefact = artefacts2Sil.get(artefact);

+    				}

+    				

+    				// Index OSLC-KM

+					boolean indexed = false;

+					try {				

+						System.out.println("Indexing Artefact " + artefact.getName());

+						indexed = indexRequirementInOslcKmRepository("", artefact.getName(), artefactIdentifier, textToIndex, silElementsForThisArtefact);

+					} catch (ConnectException e) {

+						// TODO Auto-generated catch block

+						e.printStackTrace();

+					}

+					System.out.println("Result: " + indexed);

+					

+					// Furthermore, we must index the "AssuranceAssetEvent" objects (not clear in fact so it remains commented)

+					/*

+					EList<AssuranceAssetEvent> events = artefact.getLifecycleEvent();

+					if (events != null && events.size() > 0) {

+						

+						AssuranceAssetEvent event;

+						String eventTextToIndex;

+						String eventIdentifier;

+						for (int k = 0; k < events.size(); k++) {

+							event = events.get(i);

+							if (event != null) {

+								eventIdentifier = "L" + event.cdoID().toURIFragment();

+								eventTextToIndex = event.getName() + ". " + event.getDescription();

+								

+								// Index OSLC-KM

+								indexed = false;

+								try {				

+									System.out.println("   Indexing AssuranceAssetEvent " + event.getName());

+									indexed = indexRequirementInOslcKmRepository("", event.getName(), eventIdentifier, eventTextToIndex, null);

+								} catch (ConnectException e) {

+									// TODO Auto-generated catch block

+									e.printStackTrace();

+								}

+								System.out.println("   Result: " + indexed);

+							}

+						}

+					}

+					*/

+					

+					// Furthermore, we must index the "Resource" objects

+					EList<org.eclipse.opencert.evm.evidspec.evidence.Resource> artefactResources = artefact.getResource();

+					if (artefactResources != null && artefactResources.size() > 0) {

+						

+						String resTextToIndex;

+						String resIdentifier;

+						org.eclipse.opencert.evm.evidspec.evidence.Resource res;						

+						for (int j = 0; j < artefactResources.size(); j++) {

+							res = artefactResources.get(j);

+							if (res != null) {

+								

+								resIdentifier = "L" + res.cdoID().toURIFragment(); // Esto guarda sólo el ID numérico, sin la L

+								resTextToIndex = res.getName() + ". " + res.getDescription();

+								

+								// Index OSLC-KM with SIL-LEVELS

+								indexed = false;

+								try {				

+									System.out.println("   Indexing Resource " + res.getName());

+									indexed = indexRequirementInOslcKmRepository("", res.getName(), resIdentifier, resTextToIndex, silElementsForThisArtefact);

+								} catch (ConnectException e) {

+									// TODO Auto-generated catch block

+									e.printStackTrace();

+								}

+								System.out.println("   Result: " + indexed);

+							}							

+						}

+					}

+    			}

+    		} 		    

+    	}

+    }

+

+

 }
\ No newline at end of file
diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyWizard.java b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyWizard.java
index 2c4b0a7..d2b1a6e 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyWizard.java
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/indexWizard/MyWizard.java
@@ -36,11 +36,12 @@
 	private static final String StringEmpty = "";

 

 	// Default Remote Uri configuration:

-	// Release: test

-	// public static final String TrcAmassWebServiceUrl = "http://authoring.reusecompany.com:9999/OslcKmService.svc/GetData/4";

-	public static final String TrcAmassWebServiceUrl = "http://authoring.reusecompany.com:9999/OslcKmService.svc/IndexContent";

+	 public static final String TrcAmassWebServiceUrl = "http://authoring.reusecompany.com:9999/OslcKmService.svc/IndexRequirement";

+	 public static final String TrcAmassWebServiceUrl_Retrieval = "http://authoring.reusecompany.com:9999/OslcKmService.svc/RetrieveSimilarRequirements";

+	 

 	// Debug: 

-	// public static final String TrcAmassWebServiceUrl = "http://localhost:38306/OslcKmService.svc/IndexContent";

+	 //public static final String TrcAmassWebServiceUrl = "http://localhost:38306/OslcKmService.svc/IndexRequirement";

+	 //public static final String TrcAmassWebServiceUrl_Retrieval = "http://localhost:38306/OslcKmService.svc/RetrieveSimilarRequirements";

 	

 	// File to be checked

 	// private static final String PapyrusModel = "D:\\Projects\\RQA v17\\Rqa.Face.OslcKm\\Oslc.Km.Service.Amass.Tests\\Tests\\Papyrus\\model.uml";

diff --git a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/wizard/MyWizard.java b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/wizard/MyWizard.java
index 0f0f799..0529653 100644
--- a/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/wizard/MyWizard.java
+++ b/org.eclipse.opencert.evm.oslc.km.importevid/src/org/eclipse/opencert/evm/oslc/km/importevid/wizard/MyWizard.java
@@ -20,6 +20,7 @@
 import java.io.InputStream;

 import java.io.Reader;

 import java.io.StringReader;

+import java.io.UnsupportedEncodingException;

 import java.net.HttpURLConnection;

 import java.net.MalformedURLException;

 import java.net.URL;

@@ -428,13 +429,13 @@
 		Scanner s ;

 		s = null;

 		try {

-			String fileContent;

-			fileContent = readFile(fileName, encoding);

-			if (fileContent != null && !fileContent.equals(StringEmpty)) {

-				String additionalParametersContent;

-				additionalParametersContent = StringEmpty;

+			byte[] fileContent;

+			fileContent = readFile(fileName);

+			if (fileContent != null && fileContent.length>0) {

+				byte[] additionalParametersContent;

+				additionalParametersContent = null;

 				if (additionalParameters != null && !additionalParameters.equals(StringEmpty)) {

-					additionalParametersContent = readFile(additionalParameters, encoding);

+					additionalParametersContent = readFile(additionalParameters);

 				}

 				// Building POST parameters

 				StringBuilder postData = new StringBuilder();

@@ -445,11 +446,11 @@
 				postData.append(JsonElementSeparatorWebRequest);

 				postData.append(AdditionalParametersParam);

 				postData.append(JsonAttributeValueSeparatorWebRequest);

-				postData.append(GetBase64StringFromString(additionalParametersContent));

+				postData.append(GetBase64StringFromBytes(additionalParametersContent));

 				postData.append(JsonElementSeparatorWebRequest);

 				postData.append(FileContentParam);

 				postData.append(JsonAttributeValueSeparatorWebRequest);

-				postData.append(GetBase64StringFromString(fileContent));

+				postData.append(GetBase64StringFromBytes(fileContent));

 				postData.append(JsonEndWebRequest);

 				

 		        byte[] postDataBytes = postData.toString().getBytes(AsciiFormat);

@@ -511,12 +512,22 @@
 		byte[] encoded = Files.readAllBytes(Paths.get(path));

 		return new String(encoded, encoding);

 	}

-	

-	private static String GetBase64StringFromString(String text){

+	private static byte[] readFile(String path) 

+			   {

+		byte[] encoded=null;

+		try {

+			encoded = Files.readAllBytes(Paths.get(path));

+		} catch (IOException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+		return encoded;

+	}	

+	private static String GetBase64StringFromBytes(byte[] bytes){

 		String value;

 		value = StringEmpty;

-		if (text != null && !text.equals(StringEmpty)) {

-			value = Base64.getEncoder().encodeToString(text.getBytes());

+		if (bytes != null ) {

+			value = Base64.getEncoder().encodeToString(bytes);

 		}

 		return value;

 	}

diff --git a/org.eclipse.opencert.externaltools.api/build.gradle b/org.eclipse.opencert.externaltools.api/build.gradle
new file mode 100644
index 0000000..038d41f
--- /dev/null
+++ b/org.eclipse.opencert.externaltools.api/build.gradle
@@ -0,0 +1,19 @@
+apply plugin: 'java'
+
+sourceSets {
+    
+    main {
+        java {
+            srcDir 'src'
+        }
+        resources {
+            srcDir 'resources'
+        }
+    }
+}
+
+dependencies {
+
+    compile fileTree(dir: 'lib', include: '*.jar')
+    
+}
diff --git a/org.eclipse.opencert.feature/feature.xml b/org.eclipse.opencert.feature/feature.xml
index 63e77a9..185e96f 100644
--- a/org.eclipse.opencert.feature/feature.xml
+++ b/org.eclipse.opencert.feature/feature.xml
@@ -2,12 +2,12 @@
 <feature

       id="org.eclipse.opencert.feature"

       label="Opencert Feature"

-      version="3.3"

+      version="4.0"

       provider-name="Tecnalia"

       exclusive="true">

 

    <description>

-      Opencert Client version 3.3 for Prototype P1

+      Opencert Client version 4.0 for Prototype P2

    </description>

 

    <copyright url="http://www.eclipse.org/legal/epl-v10.html">

@@ -744,4 +744,18 @@
          version="0.0.0"

          unpack="false"/>

 

+   <plugin

+         id="org.eclipse.opencert.lines"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.opencert.evm.oslc.km.preferences"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

 </feature>

diff --git a/org.eclipse.opencert.impactanalysis/build.gradle b/org.eclipse.opencert.impactanalysis/build.gradle
new file mode 100644
index 0000000..a9cfa15
--- /dev/null
+++ b/org.eclipse.opencert.impactanalysis/build.gradle
@@ -0,0 +1,20 @@
+apply plugin: 'java'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src'
+        }
+        resources {
+            srcDir 'resources'
+        }
+    }
+}
+
+dependencies {
+    
+    compile project(':org.eclipse.opencert.apm.assuranceassets')
+    compile project(':org.eclipse.opencert.evm.evidspec')
+    compile project(':org.eclipse.opencert.storage.cdo')
+    
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.infra.dashboard/build.properties b/org.eclipse.opencert.infra.dashboard/build.properties
index 08ee3f4..7e48c50 100644
--- a/org.eclipse.opencert.infra.dashboard/build.properties
+++ b/org.eclipse.opencert.infra.dashboard/build.properties
@@ -3,4 +3,5 @@
 bin.includes = META-INF/,\

                .,\

                plugin.xml,\

-               LICENSE

+               LICENSE,\

+               icons/

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/DashboardActivator.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/DashboardActivator.java
index 4fe9321..81c76ae 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/DashboardActivator.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/DashboardActivator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/DashboardActionProvider.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/DashboardActionProvider.java
index f09a96b..969cc97 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/DashboardActionProvider.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/DashboardActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/GoToDashboardAction.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/GoToDashboardAction.java
index 00dc919..4912cad 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/GoToDashboardAction.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/GoToDashboardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/OpenDashboardAction.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/OpenDashboardAction.java
index effdd2a..b786ee6 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/OpenDashboardAction.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/actions/OpenDashboardAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/DashboardMappingSetDialog.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/DashboardMappingSetDialog.java
index a33ba85..9790dfd 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/DashboardMappingSetDialog.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/DashboardMappingSetDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

@@ -129,6 +129,9 @@
 				resourceFrom = mCDOTransaction.getResource(refListDirRef.get(mComboSource.getSelectionIndex()));

 				createModelFromCDOResource(modelViewerSource, resourceFrom);

 				modelViewerSource.expandAll();

+				

+				createModelSourceAll(modelViewerSourceAll, resourceFrom);

+				modelViewerSourceAll.expandAll();

 			}

 		});

 

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/extensionregistry/OpenCertWizardsRegistry.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/extensionregistry/OpenCertWizardsRegistry.java
index caef6e1..cda662f 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/extensionregistry/OpenCertWizardsRegistry.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/extensionregistry/OpenCertWizardsRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
index 470920d..072910e 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessProjectVisitor.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessProjectVisitor.java
index 26dda5c..5f875e1 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessProjectVisitor.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessProjectVisitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ISelectionHelper.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ISelectionHelper.java
index 0d0d264..1cca761 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ISelectionHelper.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ISelectionHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/OpenCertExtensions.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/OpenCertExtensions.java
index 94b385b..088dd70 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/OpenCertExtensions.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/OpenCertExtensions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ProjectFinder.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ProjectFinder.java
index 4095fcf..2f36afd 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ProjectFinder.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ProjectFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedFilesHelper.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedFilesHelper.java
index 8895a51..d3f6854 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedFilesHelper.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedFilesHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedProjectHelper.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedProjectHelper.java
index 5aaf359..9969be7 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedProjectHelper.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/SelectedProjectHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AbstractActivityPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AbstractActivityPage.java
index e90db94..20fe3f9 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AbstractActivityPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AbstractActivityPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceProjectDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceProjectDefinitionPage.java
index 0bd5618..c4226a6 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceProjectDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceProjectDefinitionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/DashboardWorkflowPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/DashboardWorkflowPage.java
index 9e383d6..b3aa6c2 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/DashboardWorkflowPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/DashboardWorkflowPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
index 1512d03..32f10db 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/StandardComplianceDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/StandardComplianceDefinitionPage.java
index 7229123..cf90567 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/StandardComplianceDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/StandardComplianceDefinitionPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenDialogHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenDialogHyperLinkAdapter.java
index 67528e4..e0e549f 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenDialogHyperLinkAdapter.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenDialogHyperLinkAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenWizardHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenWizardHyperLinkAdapter.java
index aa3592c..9b89c8e 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenWizardHyperLinkAdapter.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractOpenWizardHyperLinkAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenMappingSetDialogHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenMappingSetDialogHyperLinkAdapter.java
index fed651c..4d22056 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenMappingSetDialogHyperLinkAdapter.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenMappingSetDialogHyperLinkAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewAssuranceProjectWizard.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewAssuranceProjectWizard.java
index ac20551..ccc89f8 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewAssuranceProjectWizard.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewAssuranceProjectWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewChessProjectWizard.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewChessProjectWizard.java
index 21928e9..a7f6bdc 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewChessProjectWizard.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewChessProjectWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewMethodLibraryWizard.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewMethodLibraryWizard.java
index ff934c5..f25e452 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewMethodLibraryWizard.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewMethodLibraryWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewRefframeworkDiagramWizard.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewRefframeworkDiagramWizard.java
index 4c2bd7e..66845b6 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewRefframeworkDiagramWizard.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenNewRefframeworkDiagramWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.

+ * Copyright (c) 2018 ALL4TEC.

  *

  * All rights reserved. This program and the accompanying materials

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

diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/predicates/DashboardPredicate.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/predicates/DashboardPredicate.java
index ab5139e..c77e016 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/predicates/DashboardPredicate.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/predicates/DashboardPredicate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/viewers/OpenCertDiagramViewer.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/viewers/OpenCertDiagramViewer.java
index 5a3fcd4..a9fb552 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/viewers/OpenCertDiagramViewer.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/viewers/OpenCertDiagramViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Fundación Tecnalia Research & Innovation.
+ * Copyright (c) 2018 ALL4TEC.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
diff --git a/org.eclipse.opencert.infra.general/build.gradle b/org.eclipse.opencert.infra.general/build.gradle
new file mode 100644
index 0000000..6adba08
--- /dev/null
+++ b/org.eclipse.opencert.infra.general/build.gradle
@@ -0,0 +1,17 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile fileTree(dir: 'lib', include: '*.jar')

+    compile fileTree(dir: '../org.eclipse.opencert.storage.cdo/lib.eclipse', include: '*.jar')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.infra.general/splash/splash.bmp b/org.eclipse.opencert.infra.general/splash/splash.bmp
new file mode 100644
index 0000000..fd66b32
--- /dev/null
+++ b/org.eclipse.opencert.infra.general/splash/splash.bmp
Binary files differ
diff --git a/org.eclipse.opencert.infra.mappings/build.gradle b/org.eclipse.opencert.infra.mappings/build.gradle
new file mode 100644
index 0000000..180335e
--- /dev/null
+++ b/org.eclipse.opencert.infra.mappings/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.infra.properties/build.gradle b/org.eclipse.opencert.infra.properties/build.gradle
new file mode 100644
index 0000000..180335e
--- /dev/null
+++ b/org.eclipse.opencert.infra.properties/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.infra.svnkit/src/org/eclipse/opencert/infra/svnkit/MainClass.java b/org.eclipse.opencert.infra.svnkit/src/org/eclipse/opencert/infra/svnkit/MainClass.java
index f8d090f..12640ed 100644
--- a/org.eclipse.opencert.infra.svnkit/src/org/eclipse/opencert/infra/svnkit/MainClass.java
+++ b/org.eclipse.opencert.infra.svnkit/src/org/eclipse/opencert/infra/svnkit/MainClass.java
@@ -26,56 +26,41 @@
 import java.io.File;

 import java.io.FileInputStream;

 import java.io.FileOutputStream;

-import java.io.IOException;

 import java.io.OutputStream;

 import java.text.DateFormat;

 import java.text.SimpleDateFormat;

 import java.util.ArrayList;

 import java.util.Collection;

-import java.util.HashMap;

 import java.util.Iterator;

-import java.util.Map;

-import java.util.Set;

 

-import org.eclipse.ui.PlatformUI;

 import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;

 import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;

 import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;

 import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;

 import org.tmatesoft.svn.core.io.ISVNEditor;

-import org.tmatesoft.svn.core.io.ISVNFileRevisionHandler;

-import org.tmatesoft.svn.core.io.SVNFileRevision;

+

 import org.tmatesoft.svn.core.io.SVNRepository;

 

 import org.tmatesoft.svn.core.io.SVNRepositoryFactory;

 import org.tmatesoft.svn.core.io.diff.SVNDeltaGenerator;

-import org.tmatesoft.svn.core.io.diff.SVNDiffWindow;

 import org.tmatesoft.svn.core.wc.SVNWCUtil;

 import org.tmatesoft.svn.core.*;

 

 public class MainClass {

 

-	

-

 

 	//private static final String LOCAL_REPO_PROTOCOL = "file:///";

 	private static final int EXCEPTION = 3;

 	private static final int URL_NOT_FILE = 2;

 	private static final int INCORRECT_URL = 1;

-	private static final int NO_ERROR = 0;

-	private static final String SVNInfo_REPOSITORY_TYPE = "OPENCERT_SVN_REPOSITORY_TYPE";

-	private static final String SVNInfo_LOCAL_REPOSITORY_URL = "OPENCERT_SVN_LOCAL_REPOSITORY_URL";

-	private static final String SVNInfo_REMOTE_REPOSITORY_URL = "OPENCERT_SVN_REMOTE_REPOSITORY_URL";

-	private static final String SVNInfo_USER = "OPENCERT_SVN_USER";

-	private static final String SVNInfo_PASS = "OPENCERT_SVN_PASS";

-	

+	private static final int NO_ERROR = 0;	

+

 	private SVNRepository repository=null;

-	         

-	

+

 

 	public MainClass() {		

 	}

-	

+

 	public void deleteFile(String filePath) {

 

 		try {

@@ -87,28 +72,28 @@
 			// TODO Auto-generated catch block

 			e.printStackTrace();

 		}  

-		

+

 	}

 

 

 	public int connectRepository(String urlCon,String name, String password){

 		//boolean useLocalRepository = PlatformUI.getPreferenceStore().getBoolean(SVNInfo_REPOSITORY_TYPE);

-		

+

 		//String name ="";

 		//String password ="";

-		

-		

-		

+

+

+

 		//if(useLocalRepository){

 		//	urlCon = LOCAL_REPO_PROTOCOL + urlCon;

 		//}

-			

+

 		/*

 		 * initializes the library (it must be done before ever using the

 		 * library itself)

 		 */

 		setupLibrary();

-		

+

 		try {

 

 			repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(urlCon));

@@ -123,13 +108,13 @@
 

 		ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password);

 		repository.setAuthenticationManager(authManager);									

-		

-		

+

+

 		return NO_ERROR;

 	}

-	

+

 	public int checkPath(String urlCon){

-	

+

 		/*

 		 * Checks up if the specified path/to/repository part of the URL

 		 * really corresponds to a directory. If doesn't the program exits.

@@ -150,12 +135,12 @@
 			// TODO Auto-generated catch block

 			return EXCEPTION;

 		}

-		

+

 	}

-	

-	

+

+

 	public boolean existsFileRepo(String localPath){

-		

+

 		// paranoia

 		if (repository == null) {

 			return false;

@@ -164,7 +149,7 @@
 		//Read the file Bytes

 		//File file = new File(localPath);

 		//String name=file.getName();

-		

+

 		try {

 			SVNNodeKind nodeKind = repository.checkPath(localPath, -1);

 			if (nodeKind == SVNNodeKind.FILE) {				

@@ -172,20 +157,20 @@
 			} else {				

 				return false;

 			}

-			

+

 		} catch (SVNException e) {

 			// TODO Auto-generated catch block

 			return true;

 		}

-		

+

 	}

-	

-public boolean existsFolderRepo(String localPath){

-		

+

+	public boolean existsFolderRepo(String localPath){

+

 		//Read the file Bytes

 		//File file = new File(localPath);

 		//String name=file.getName();

-		

+

 		try {

 			SVNNodeKind nodeKind = repository.checkPath(localPath, -1);

 			if (nodeKind == SVNNodeKind.DIR) {				

@@ -193,14 +178,14 @@
 			} else {				

 				return false;

 			}

-			

+

 		} catch (SVNException e) {

 			// TODO Auto-generated catch block

 			return false;

 		}

-		

+

 	}

-	

+

 	public  ArrayList<String> getFileHistory(String filePath) {

 		//Get file de history

 		ArrayList<String> entriesList=new ArrayList<String>();

@@ -218,7 +203,7 @@
 					entriesList.add(historyRev);			

 				}			

 			}

-			

+

 		} catch (SVNException e) {

 			// TODO Auto-generated catch block

 			e.printStackTrace();

@@ -249,7 +234,7 @@
 				return fullPath;

 			}

 			return "";

-			

+

 		} catch (Exception e) {

 			// TODO Auto-generated catch block

 			e.printStackTrace();

@@ -257,25 +242,25 @@
 		}    

 

 	}

-		

+

 	public String copyFileFromRepo(String sourceURI, String targetFolderURI, String comment) {

 		String tempFile = getFileFromRepo(sourceURI);

 		if(tempFile.equals("exists")){

 			return tempFile;

 		}

 		String finalLocation=  addFileToRepo(tempFile, targetFolderURI,comment); 

-		

+

 		return finalLocation;

 	}

-	

-	

+

+

 	public String updateFileFromRepo(String sourceURI, String targetFolderURI, String comment) {

 		String tempFile = getFileFromRepo(sourceURI);

 		if(tempFile.equals("exists")){

 			return tempFile;

 		}

 		String finalLocation=  changeRepoFile(tempFile, targetFolderURI,comment); 

-		

+

 		return finalLocation;

 	}

 

@@ -283,7 +268,7 @@
 		ISVNEditor editor = null;

 		try {	

 			editor = repository.getCommitEditor( comment , null );

-			

+

 			//Read the file Bytes

 			File file = new File(localPath);

 			byte [] contentsNew = new byte[(int)file.length()];

@@ -291,7 +276,7 @@
 			dis.readFully(contentsNew);

 			dis.close();

 			String remotePath=destinationDir + "/" + file.getName();

-			

+

 			editor.openRoot(-1);

 			//editor.openDir(destinationDir, -1);

 			editor.openFile(remotePath, -1);

@@ -310,7 +295,7 @@
 

 			return remotePath;

 

-			

+

 		} catch ( Exception svne ) {

 			svne.printStackTrace();

 			try {

@@ -322,63 +307,57 @@
 			return  "An error has occurred updating the file to the Repository";

 		}

 

-	}

+	} 

 

 	public String addFolderToRepo(String destinationDir, String newFolderName, String comment) {

-		

+

 

 		ISVNEditor editor = null;

-	try {	

-		

-				

-		if(existsFolderRepo(destinationDir + "/" + newFolderName)){

-			return "exists";

-		}

-		

-		editor = repository.getCommitEditor(comment , null );			

-		

-		editor.openRoot(-1);

-		editor.openDir(destinationDir, -1);

-		

-		editor.addDir(newFolderName,null, -1);		

+		try {									

 

-		editor.closeDir();

+			editor = repository.getCommitEditor(comment , null );			

 

-		//Suuuper importante, sino se cierra no se genera nada en el Repo

-		editor.closeEdit();

-								

-		//Erase the first / character

-		String returnString = destinationDir + "/" + newFolderName;

-		if(returnString.startsWith("/")){

-			returnString= returnString.substring(1);

+			editor.openRoot(-1);

+			editor.openDir(destinationDir, -1);

+			//final long latestRevision = repository.getLatestRevision();

+			editor.addDir(newFolderName,null, -1);		

+

+			editor.closeDir();

+

+			//Suuuper importante, sino se cierra no se genera nada en el Repo

+			editor.closeEdit();

+

+			//Erase the first / character

+			String returnString = destinationDir + "/" + newFolderName;

+			if(returnString.startsWith("/")){

+				returnString= returnString.substring(1);

+			}

+			return returnString;

+		} catch ( Exception svne ) {

+			svne.printStackTrace();

+			try {

+				editor.abortEdit( );

+			} catch (SVNException e) {

+				// TODO Auto-generated catch block

+				e.printStackTrace();

+			}

+			return "An error has occurred adding the folder to the Repository";

 		}

-		return returnString;

-	} catch ( Exception svne ) {

-		svne.printStackTrace();

-		try {

-			editor.abortEdit( );

-		} catch (SVNException e) {

-			// TODO Auto-generated catch block

-			e.printStackTrace();

-		}

-		return "An error has occurred adding the folder to the Repository";

 	}

-}

-	

-	public String addFileToRepo(String localPath, String destinationDir, String comment) {

-		

 

-			ISVNEditor editor = null;

+	public String addFileToRepo(String localPath, String destinationDir, String comment) {

+

+		ISVNEditor editor = null;

 		try {	

 			File file = new File(localPath);

 			String remotePath= file.getName();

-			

+

 			if(existsFileRepo(destinationDir + "/" + remotePath)){

 				return "exists";

 			}

-			

+

 			editor = repository.getCommitEditor( comment , null );

-			

+

 			//Read the file Bytes

 			//File file = new File(localPath);

 			byte [] fileData = new byte[(int)file.length()];

@@ -386,9 +365,9 @@
 			dis.readFully(fileData);

 			dis.close();

 			//String remotePath= file.getName();

-			

+

 			//byte[] contents = "This is a new file".getBytes();

-			

+

 			editor.openRoot(-1);

 			editor.openDir(destinationDir, -1);

 			//editor.addDir(dir,null, -1);

@@ -408,7 +387,7 @@
 

 			//Suuuper importante, sino se cierra no se genera nada en el Repo

 			editor.closeEdit();

-									

+

 			//Erase the first / character

 			return destinationDir + "/" + remotePath;

 		} catch ( Exception svne ) {

diff --git a/org.eclipse.opencert.lines/plugin.xml b/org.eclipse.opencert.lines/plugin.xml
index 73767ec..9bc319e 100644
--- a/org.eclipse.opencert.lines/plugin.xml
+++ b/org.eclipse.opencert.lines/plugin.xml
@@ -10,8 +10,8 @@
       </category>

       <command

             name="Seamless Integration between EPF Composer and BVR Tool"

-            categoryId="org.eclipse.amass.lines.commands.category"

-            id="org.eclipse.amass.lines.commands.processCommand">

+            categoryId="org.eclipse.opencert.lines.commands.category"

+            id="org.eclipse.opencert.lines.commands.processCommand">

       </command>

    </extension>

    <extension

diff --git a/org.eclipse.opencert.pam.procspec/build.gradle b/org.eclipse.opencert.pam.procspec/build.gradle
new file mode 100644
index 0000000..49e3330
--- /dev/null
+++ b/org.eclipse.opencert.pam.procspec/build.gradle
@@ -0,0 +1,18 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.apm.assuranceassets')

+    compile project(':org.eclipse.opencert.evm.evidspec')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.pkm.refframework/build.gradle b/org.eclipse.opencert.pkm.refframework/build.gradle
new file mode 100644
index 0000000..0cccc2f
--- /dev/null
+++ b/org.eclipse.opencert.pkm.refframework/build.gradle
@@ -0,0 +1,18 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.infra.mappings')

+    compile project(':org.eclipse.opencert.infra.properties')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/forms/ClaimPropertiesEditionPartForm.java b/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/forms/ClaimPropertiesEditionPartForm.java
index b065f3f..84b1eb6 100644
--- a/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/forms/ClaimPropertiesEditionPartForm.java
+++ b/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/forms/ClaimPropertiesEditionPartForm.java
@@ -145,15 +145,11 @@
 	 */
 	public void createControls(final FormToolkit widgetFactory, Composite view) {
 		CompositionSequence claimStep = new BindingCompositionSequence(propertiesEditionComponent);
-		CompositionStep propertiesStep = claimStep.addStep(ArgViewsRepository.Claim.Properties.class);
-		/**
-		 * ARL changes.
-		 * some properties are not necessary for graphical visualization
-		 */		
+		CompositionStep propertiesStep = claimStep.addStep(ArgViewsRepository.Claim.Properties.class);	
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.id);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.name);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.description);
-//		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.content);
+		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.content);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.public_);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.assumed);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.toBeSupported);
diff --git a/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/impl/ClaimPropertiesEditionPartImpl.java b/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/impl/ClaimPropertiesEditionPartImpl.java
index b96096f..96e8f65 100644
--- a/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/impl/ClaimPropertiesEditionPartImpl.java
+++ b/org.eclipse.opencert.sam.arg.edit/src-gen/org/eclipse/opencert/sam/arg/arg/parts/impl/ClaimPropertiesEditionPartImpl.java
@@ -143,7 +143,7 @@
  */
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.name);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.description);
-//		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.content);
+		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.content);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.evaluation);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.lifecycleEvent);
 		propertiesStep.addStep(ArgViewsRepository.Claim.Properties.public_);
diff --git a/org.eclipse.opencert.sam.arg/build.gradle b/org.eclipse.opencert.sam.arg/build.gradle
new file mode 100644
index 0000000..49e3330
--- /dev/null
+++ b/org.eclipse.opencert.sam.arg/build.gradle
@@ -0,0 +1,18 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+    compile project(':org.eclipse.opencert.apm.assuranceassets')

+    compile project(':org.eclipse.opencert.evm.evidspec')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.storage.cdo/build.gradle b/org.eclipse.opencert.storage.cdo/build.gradle
new file mode 100644
index 0000000..dd35ddd
--- /dev/null
+++ b/org.eclipse.opencert.storage.cdo/build.gradle
@@ -0,0 +1,30 @@
+apply plugin: 'java'
+
+sourceSets {
+    main {
+        java {
+            srcDir 'src'
+        }
+        resources {
+            srcDir 'resources'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'lib', include: '*.jar')
+    compile fileTree(dir: 'lib.eclipse', include: '*.jar')
+    compile fileTree(dir: 'lib.servlet', include: '*.jar')
+    compile fileTree(dir: 'lib.httpclient', include: '*.jar')
+    compile project(':org.eclipse.opencert.apm.assuranceassets')
+    compile project(':org.eclipse.opencert.apm.assurproj')
+    compile project(':org.eclipse.opencert.apm.baseline')
+    compile project(':org.eclipse.opencert.evm.evidspec')
+    compile project(':org.eclipse.opencert.infra.general')
+    compile project(':org.eclipse.opencert.infra.mappings')
+    compile project(':org.eclipse.opencert.infra.properties')
+    compile project(':org.eclipse.opencert.pam.procspec')
+    compile project(':org.eclipse.opencert.pkm.refframework')
+    compile project(':org.eclipse.opencert.sam.arg')
+    compile project(':org.eclipse.opencert.vocabulary')
+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.updatesite/.gitignore b/org.eclipse.opencert.updatesite/.gitignore
new file mode 100644
index 0000000..462493b
--- /dev/null
+++ b/org.eclipse.opencert.updatesite/.gitignore
@@ -0,0 +1,5 @@
+/artifacts.jar
+/content.jar
+/org.eclipse.opencert.updatesite.zip
+/features/
+/plugins/
diff --git a/org.eclipse.opencert.updatesite/site.xml b/org.eclipse.opencert.updatesite/site.xml
index 25510b5..8b657d7 100644
--- a/org.eclipse.opencert.updatesite/site.xml
+++ b/org.eclipse.opencert.updatesite/site.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <site>

-   <feature url="features/org.eclipse.opencert.feature_3.3.0.jar" id="org.eclipse.opencert.feature" version="3.3">

+   <feature url="features/org.eclipse.opencert.chess.feature_2.4.0.jar" id="org.eclipse.opencert.chess.feature" version="2.4">

       <category name="org.eclipse.opencert.updatesite"/>

    </feature>

-   <feature url="features/org.eclipse.opencert.chess.feature_2.3.0.jar" id="org.eclipse.opencert.chess.feature" version="2.3">

+   <feature url="features/org.eclipse.opencert.feature_4.0.0.jar" id="org.eclipse.opencert.feature" version="4.0">

       <category name="org.eclipse.opencert.updatesite"/>

    </feature>

    <category-def name="org.eclipse.opencert.updatesite" label="OPENCERT Client Tools P1">

diff --git a/org.eclipse.opencert.vocabulary/build.gradle b/org.eclipse.opencert.vocabulary/build.gradle
new file mode 100644
index 0000000..180335e
--- /dev/null
+++ b/org.eclipse.opencert.vocabulary/build.gradle
@@ -0,0 +1,16 @@
+apply plugin: 'java'

+

+sourceSets {

+    main {

+        java {

+            srcDir 'src'

+        }

+        resources {

+            srcDir 'resources'

+        }

+    }

+}

+

+dependencies {

+    compile project(':org.eclipse.opencert.infra.general')

+}
\ No newline at end of file
diff --git a/org.eclipse.opencert.webapp.cdo/.classpath b/org.eclipse.opencert.webapp.cdo/.classpath
new file mode 100644
index 0000000..d171cd4
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

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

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

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

+</classpath>

diff --git a/org.eclipse.opencert.webapp.cdo/.project b/org.eclipse.opencert.webapp.cdo/.project
new file mode 100644
index 0000000..8fcbfac
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.opencert.webapp.cdo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.opencert.webapp.cdo/build.gradle b/org.eclipse.opencert.webapp.cdo/build.gradle
new file mode 100644
index 0000000..a02b4fd
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'java'
+apply plugin: 'war'
+
+sourceSets {
+    
+    main {
+        java {
+            srcDir 'src'
+        }
+        resources {
+            srcDir 'resources'
+        }
+    }
+}
+
+dependencies {
+    
+    providedCompile fileTree(dir: tomcatHome + '/lib', include: '*.jar')
+    runtime project (':org.eclipse.opencert.storage.cdo')
+}
+
+
+war {
+    
+    from 'webapp'
+}
+
diff --git a/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/applicationContext.xml b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..20331ef
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/applicationContext.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<beans xmlns="http://www.springframework.org/schema/beans"

+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+       xmlns:context="http://www.springframework.org/schema/context"

+       xsi:schemaLocation="http://www.springframework.org/schema/beans 

+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

+           http://www.springframework.org/schema/context

+           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

+

+	<bean class="org.eclipse.opencert.storage.cdo.StandaloneCDOServer">

+	   <!-- property name="opencertPersistenceMessagesProducer" ref="opencertPersistenceMessagesProducer" / -->

+	</bean>

+

+</beans>

diff --git a/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/messagingContext.xml b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/messagingContext.xml
new file mode 100644
index 0000000..5681339
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/messagingContext.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<beans 

+    xmlns="http://www.springframework.org/schema/beans"

+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    

+    xmlns:context="http://www.springframework.org/schema/context"

+    xmlns:amq="http://activemq.apache.org/schema/core"

+    

+    xsi:schemaLocation="

+        http://www.springframework.org/schema/beans

+        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

+        http://www.springframework.org/schema/context

+        http://www.springframework.org/schema/context/spring-context-2.5.xsd

+        http://activemq.apache.org/schema/core

+        http://activemq.apache.org/schema/core/activemq-core.xsd">

+    

+    <!-- common part -->

+    

+    <amq:broker useJmx="true" persistent="false">

+		<amq:transportConnectors>

+			<amq:transportConnector uri="tcp://localhost:9999" />

+		</amq:transportConnectors>

+    </amq:broker>

+

+    <amq:connectionFactory id="globalJmsConnectionFactoryOrigin" brokerURL="tcp://localhost:9999" />

+

+    <bean id="globalJmsConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">

+        <property name="targetConnectionFactory">

+            <ref local="globalJmsConnectionFactoryOrigin" />

+        </property>

+    </bean>

+    

+    <bean id="producerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">

+        <property name="connectionFactory" ref="globalJmsConnectionFactory" />

+    </bean>

+

+    <bean id="consumerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">

+        <property name="connectionFactory" ref="globalJmsConnectionFactory" />

+    </bean>

+

+    

+    

+    <!-- topics and producer - fill accordingly -->

+    

+    <amq:topic id="opencert.persistence"

+        physicalName="opencert.persistence" />

+    

+    <amq:topic id="opencert.persistence.evidence.Artefact"

+        physicalName="opencert.persistence.evidence.Artefact" />

+        

+    <amq:topic id="opencert.persistence.evidence.ArtefactRel"

+        physicalName="opencert.persistence.evidence.ArtefactRel" />

+    

+    

+    <bean id="opencertPersistenceMessagesProducer" class="org.eclipse.opencert.storage.cdo.messages.OpencertPersistenceMessagesProducer">

+        

+        <constructor-arg ref="producerJmsTemplate"/>

+        <constructor-arg ref="opencert.persistence"/>

+        

+        <property name="perEntityTypeEventsDestinationsList">

+            <list>

+                <ref bean="opencert.persistence.evidence.Artefact"/>

+                <ref bean="opencert.persistence.evidence.ArtefactRel"/>

+            </list>

+        </property>

+    </bean>

+    

+    

+    

+    <!-- message-driven consumers -->

+    

+    <bean id="persistence.AllMessagesListener" class="org.eclipse.opencert.storage.cdo.messages.AllMessagesListener" />

+    <bean id="persistence.AllMessagesListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">

+        <property name="connectionFactory" ref="globalJmsConnectionFactory"/>

+        <property name="messageListener" ref="persistence.AllMessagesListener" />

+        <property name="destination" ref="opencert.persistence"/>

+    </bean>

+    

+    

+    <bean id="persistence.evidence.ArtefactMessagesListener" class="org.eclipse.opencert.storage.cdo.messages.ArtefactMessagesListener" />

+    <bean id="persistence.evidence.ArtefactMessagesListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">

+        <property name="connectionFactory" ref="globalJmsConnectionFactory"/>

+        <property name="messageListener" ref="persistence.evidence.ArtefactMessagesListener" />

+        <property name="destination" ref="opencert.persistence.evidence.Artefact"/>

+    </bean>

+    

+    

+    <bean id="persistence.evidence.ArtefactRelMessagesListener" class="org.eclipse.opencert.storage.cdo.messages.ArtefactRelMessagesListener" />

+    <bean id="persistence.evidence.ArtefactRelMessagesListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">

+        <property name="connectionFactory" ref="globalJmsConnectionFactory"/>

+        <property name="messageListener" ref="persistence.evidence.ArtefactMessagesListener" />

+        <property name="destination" ref="opencert.persistence.evidence.ArtefactRel"/>

+    </bean>

+    

+</beans>
\ No newline at end of file
diff --git a/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/web.xml b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..59a2a78
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/webapp/WEB-INF/web.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

+	version="2.5">

+

+	<listener>

+		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

+	</listener>

+	

+	<context-param>

+        <param-name>contextConfigLocation</param-name>

+        <param-value>WEB-INF/applicationContext.xml</param-value>

+        <!-- , WEB-INF/messagingContext.xml -->

+    </context-param>

+

+</web-app>

diff --git a/org.eclipse.opencert.webapp.cdo/webapp/devloaderClassPath b/org.eclipse.opencert.webapp.cdo/webapp/devloaderClassPath
new file mode 100644
index 0000000..104f6df
--- /dev/null
+++ b/org.eclipse.opencert.webapp.cdo/webapp/devloaderClassPath
@@ -0,0 +1,4 @@
+[workspace1]\org.eclipse.opencert.webapp.cdo\bin

+[workspace1]\org.eclipse.opencert.storage.cdo\bin

+[workspace1]\org.eclipse.opencert.storage.cdo\lib\*

+[workspace1]\org.eclipse.opencert.storage.cdo\lib.eclipse\*
\ No newline at end of file
diff --git a/org.eclipse.opencert.webapp.reports/build.gradle b/org.eclipse.opencert.webapp.reports/build.gradle
new file mode 100644
index 0000000..33adeb8
--- /dev/null
+++ b/org.eclipse.opencert.webapp.reports/build.gradle
@@ -0,0 +1,34 @@
+apply plugin: 'java'
+apply plugin: 'war'
+
+sourceSets {
+    
+    main {
+        java {
+            srcDir 'src'
+        }
+        resources {
+            srcDir 'resources'
+        }
+    }
+}
+
+dependencies {
+    
+
+    compile fileTree(dir: 'webapp/WEB-INF/lib', include: '*.jar')
+    
+    compile project(':org.eclipse.opencert.apm.assurproj')
+    compile project(':org.eclipse.opencert.evm.evidspec')
+    compile project(':org.eclipse.opencert.storage.cdo')
+    compile project(':org.eclipse.opencert.externaltools.api')
+    compile project(':org.eclipse.opencert.impactanalysis')
+    
+    providedCompile fileTree(dir: tomcatHome + '/lib', include: '*.jar')
+}
+
+
+war {
+    
+    from 'webapp'
+}