blob: e329fcce2bb14fb3bb8def738e8d3013cd912679 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 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.apm.assurproj.reuse.views;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.security.CDOPermission;
import org.eclipse.emf.cdo.common.util.CDOException;
import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
import org.eclipse.emf.cdo.dawn.ui.DawnEditorInput;
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.util.CDOUtil;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
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.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.impl.DiagramImpl;
import org.eclipse.gmf.runtime.notation.impl.ShapeImpl;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.opencert.apm.assuranceassets.assuranceasset.AssuranceAssetEvent;
import org.eclipse.opencert.apm.assurproj.assuranceproject.AssetsPackage;
import org.eclipse.opencert.apm.assurproj.assuranceproject.AssuranceProject;
import org.eclipse.opencert.apm.assurproj.assuranceproject.AssuranceprojectFactory;
import org.eclipse.opencert.apm.assurproj.assuranceproject.AssuranceprojectPackage;
import org.eclipse.opencert.apm.assurproj.assuranceproject.BaselineConfig;
import org.eclipse.opencert.apm.assurproj.assuranceproject.utils.DawnArgDiagramUtil;
import org.eclipse.opencert.apm.assurproj.utils.widget.CheckboxTreeViewerExt;
import org.eclipse.opencert.apm.baseline.baseline.BaseFramework;
import org.eclipse.opencert.evm.evidspec.evidence.Artefact;
import org.eclipse.opencert.evm.evidspec.evidence.ArtefactDefinition;
import org.eclipse.opencert.evm.evidspec.evidence.ArtefactModel;
import org.eclipse.opencert.evm.evidspec.evidence.presentation.EvidenceEditor;
import org.eclipse.opencert.sam.arg.arg.presentation.ArgEditor;
import org.eclipse.opencert.apm.baseline.baseline.presentation.BaselineEditor;
import org.eclipse.opencert.pam.procspec.process.presentation.ProcessEditor;
import org.eclipse.opencert.infra.mappings.mapping.MapGroup;
import org.eclipse.opencert.pam.procspec.process.Activity;
import org.eclipse.opencert.pam.procspec.process.Participant;
import org.eclipse.opencert.pam.procspec.process.ProcessModel;
import org.eclipse.opencert.sam.arg.arg.Case;
import org.eclipse.opencert.sam.arg.arg.Claim;
import org.eclipse.opencert.sam.arg.arg.ModelElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
public class ReuseAssistanceView extends ViewPart {
// MCP CrossProject
private static final String EXTENSION_DIAGRAM = "_diagram";
private Map<String, EObject> eIDToObjectMap = new HashMap<String, EObject>(); // only for arg model elements
// MCP CrossProject
protected ArrayList<String> sResult = null;
private CDOSession sessionCDO = null;
private CDOResource resourceAPSource = null; // Resource Source Assurance project
private AssuranceProject assuranceProjectSource; //model Source Assurance project
private CDOResource resourceAPTarget = null;
private AssuranceProject assuranceProjectTarget;//model Target Assurance project
private CDOTransaction transactionCDO = null;
private Map<CDOResource, Object[]> evidenceAllSelectedObjects = new HashMap<CDOResource, Object[]>();
private Map<CDOResource, Object[]> argAllSelectedObjects = new HashMap<CDOResource, Object[]>();
private Map<CDOResource, Object[]> processAllSelectedObjects = new HashMap<CDOResource, Object[]>();
private Map<CDOResource, Object[]> baselineAllSelectedObjects = new HashMap<CDOResource, Object[]>();
private CheckboxTreeViewerExt checktreeBaselineSource;
private CheckboxTreeViewerExt checktreeArgSource;
private CheckboxTreeViewerExt checktreeProcessSource;
private CDOResource baselineResource = null;
private Combo sourceProjectCombo;
private Label sourceLabel;
private CheckboxTreeViewerExt checktreeEvidenceSource;
private Label targetLabel;
private Combo targetProjectCombo;
private Map<EObject, EObject> map = new HashMap<EObject, EObject>();
HashMap<Object, Object> options = new HashMap<Object, Object>();
private AssetsPackage targetAssetsPackage;
protected AssuranceprojectPackage projectPackage;
protected AssuranceprojectFactory projectFactory;
private static final String ASSURANCEPROJECT = ".assuranceproject";
protected Button reuseBtn;
protected ArrayList<CDOResourceNode> projects;
protected String eviEditorID = "org.eclipse.opencert.evm.evidspec.presentation.DawnEvidenceEditorID";
protected String argEditorID = "org.eclipse.opencert.sam.arg.presentation.DawnArgEditorID";
protected String processEditorID = "org.eclipse.opencert.pam.procspec.presentation.DawnProcessEditorID";
protected String baselineEditorID = "org.eclipse.opencert.apm.baseline.presentation.DawnBaselineEditorID";
Action addItemAction;
@Override
public void createPartControl(Composite parent) {
CDOConnectionUtil.instance.init(PreferenceConstants.getRepositoryName(), PreferenceConstants.getProtocol(),
PreferenceConstants.getServerName());
sessionCDO = CDOConnectionUtil.instance.getCurrentSession();
if(sessionCDO == null){
try {
//To wait the connection establishment in Repository Explorer Thread
Thread.sleep(1500);
sessionCDO = CDOConnectionUtil.instance.getCurrentSession();
sessionCDO = CDOConnectionUtil.instance.openSession();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
transactionCDO = sessionCDO.openTransaction();
createActions();
createToolbar();
createReuseControls(parent);
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
protected void createReuseControls(Composite parent) {
ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
Composite sourceComposite = new Composite(parent, SWT.NONE);
GridData data = new GridData(SWT.FILL, SWT.FILL, false, true);
data.horizontalAlignment = SWT.END;
data.horizontalAlignment = SWT.FILL;
sourceComposite.setLayoutData(data);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 10;
sourceComposite.setLayout(layout);
Composite compositeSourceProject = new Composite(sourceComposite, SWT.NONE);
GridData dataNew = new GridData(SWT.FILL, SWT.FILL, false, true);
dataNew.horizontalAlignment = SWT.END;
compositeSourceProject.setLayoutData(dataNew);
GridLayout layoutNew = new GridLayout();
dataNew.horizontalAlignment = SWT.FILL;
layoutNew.marginHeight = 0;
layoutNew.marginWidth = 0;
layoutNew.numColumns = 2;
compositeSourceProject.setLayout(layoutNew);
// Label
targetLabel = new Label(compositeSourceProject, SWT.NONE);
targetLabel.setText("Target Project:");
GridData targetLabelGridData = new GridData();
targetLabelGridData.horizontalAlignment = SWT.FILL;
targetLabelGridData.verticalAlignment = SWT.FILL;
targetLabel.setLayoutData(targetLabelGridData);
targetProjectCombo=new Combo(compositeSourceProject,SWT.NONE);
GridData targetComboGridData = new GridData();
targetComboGridData.widthHint=200;
targetProjectCombo.setLayoutData(targetComboGridData);
targetProjectCombo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int targetindex=targetProjectCombo.getSelectionIndex();
CDOResourceNode selectedTarget=projects.get(targetindex);
try {
resourceAPTarget= transactionCDO.getResource(selectedTarget.getPath());
assuranceProjectTarget= (AssuranceProject) resourceAPTarget.getContents().get(0);
if(sourceProjectCombo.getSelectionIndex()>-1){
reuseBtn.setEnabled(true);
}
} catch (CDOException cdoe) {
cdoe.printStackTrace();
}
}
});
// // Text
// projecttargetText = new Text(compositeSourceProject, SWT.NONE);
GridData nameTextGridData = new GridData();
nameTextGridData.grabExcessHorizontalSpace = true;
nameTextGridData.minimumWidth = 50;
nameTextGridData.widthHint=100;
nameTextGridData.horizontalAlignment = SWT.FILL;
nameTextGridData.verticalAlignment = SWT.FILL;
// Label
sourceLabel = new Label(compositeSourceProject, SWT.NONE);
sourceLabel.setText("Source Project:");
GridData sourceLabelGridData = new GridData();
sourceLabelGridData.horizontalAlignment = SWT.FILL;
sourceLabelGridData.verticalAlignment = SWT.FILL;
sourceLabel.setLayoutData(sourceLabelGridData);
sourceProjectCombo=new Combo(compositeSourceProject,SWT.NONE);
GridData sourceComboGridData = new GridData();
sourceComboGridData.widthHint=200;
sourceProjectCombo.setLayoutData(sourceComboGridData);
sourceProjectCombo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
sourceProjectChanged();
}
});
//Load the baseline
GridData modelViewerGridData = new GridData();
modelViewerGridData.verticalAlignment = SWT.FILL;
modelViewerGridData.horizontalAlignment = SWT.FILL;
modelViewerGridData.widthHint = 200;
modelViewerGridData.horizontalSpan=2;
modelViewerGridData.grabExcessHorizontalSpace = true;
modelViewerGridData.grabExcessVerticalSpace = true;
checktreeBaselineSource = new CheckboxTreeViewerExt(compositeSourceProject,
SWT.NONE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
checktreeBaselineSource.getTree().setLayoutData(modelViewerGridData);
checktreeBaselineSource.setContentProvider(new AdapterFactoryContentProvider(
adapterFactory));
checktreeBaselineSource.setLabelProvider(new AdapterFactoryLabelProvider(
adapterFactory));
checktreeBaselineSource.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
Object obj=((TreeSelection)event.getSelection()).getFirstElement();
if(obj instanceof CDOResource){
URI uri=((CDOResource)obj).getURI();
String editorID = baselineEditorID;
if (editorID != null && !editorID.equals(""))
{
try
{
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
BaselineEditor baselineEditor = (BaselineEditor) page.findEditor(editorInput);
boolean resetChecks = false;
if (baselineEditor==null) {
resetChecks =true;
}
page.openEditor(editorInput, editorID);
baselineEditor = (BaselineEditor) page.findEditor(editorInput);
baselineEditor.setActivePagePublic(5);
boolean status = checktreeBaselineSource.getChecked(obj);
if (resetChecks==true) {
baselineEditor.setTreeViewerWithCheck(status);
}
}
catch (PartInitException e)
{
e.printStackTrace();
}
}
//String text=i.getText();
}
// TODO Auto-generated method stub
}
});
// TreeViewer for Artefact models
checktreeEvidenceSource = new CheckboxTreeViewerExt(compositeSourceProject, SWT.SINGLE
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
checktreeEvidenceSource.getTree().setLayoutData(modelViewerGridData);
checktreeEvidenceSource.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
checktreeEvidenceSource.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
// checktreeEvidenceSource.getTree().setEnabled(false);
checktreeEvidenceSource.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
Object obj=((TreeSelection)event.getSelection()).getFirstElement();
if(obj instanceof CDOResource){
URI uri=((CDOResource)obj).getURI();
String editorID = eviEditorID;
if (editorID != null && !editorID.equals(""))
{
try
{
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
EvidenceEditor eviEditor = (EvidenceEditor) page.findEditor(editorInput);
boolean resetChecks = false;
if (eviEditor==null) {
resetChecks =true;
}
page.openEditor(editorInput, editorID);
eviEditor = (EvidenceEditor) page.findEditor(editorInput);
eviEditor.setActivePagePublic(5);
boolean status = checktreeEvidenceSource.getChecked(obj);
if (resetChecks==true) {
eviEditor.setTreeViewerWithCheck(status);
}
eviEditor.setBaselineResource(baselineResource);
}
catch (PartInitException e)
{
e.printStackTrace();
}
}
//String text=i.getText();
}
// TODO Auto-generated method stub
}
});
// TreeViewer for Argumentation models
checktreeArgSource = new CheckboxTreeViewerExt(compositeSourceProject, SWT.SINGLE
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
checktreeArgSource.getTree().setLayoutData(modelViewerGridData);
checktreeArgSource.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
checktreeArgSource.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
checktreeArgSource.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
Object obj=((TreeSelection)event.getSelection()).getFirstElement();
if(obj instanceof CDOResource){
URI uri=((CDOResource)obj).getURI();
String editorID = argEditorID;
if (editorID != null && !editorID.equals(""))
{
try
{
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
ArgEditor argEditor = (ArgEditor) page.findEditor(editorInput);
boolean resetChecks = false;
if (argEditor==null) {
resetChecks =true;
}
page.openEditor(editorInput, editorID);
argEditor = (ArgEditor) page.findEditor(editorInput);
argEditor.setActivePagePublic(5);
boolean status = checktreeArgSource.getChecked(obj);
if (resetChecks==true) {
argEditor.setTreeViewerWithCheck(status);
}
}
catch (PartInitException e)
{
e.printStackTrace();
}
}
//String text=i.getText();
}
// TODO Auto-generated method stub
}
});
// TreeViewer for Process models
checktreeProcessSource = new CheckboxTreeViewerExt(compositeSourceProject, SWT.SINGLE
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
checktreeProcessSource.getTree().setLayoutData(modelViewerGridData);
checktreeProcessSource.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
checktreeProcessSource.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
checktreeProcessSource.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
Object obj=((TreeSelection)event.getSelection()).getFirstElement();
if(obj instanceof CDOResource){
URI uri=((CDOResource)obj).getURI();
String editorID = processEditorID;
if (editorID != null && !editorID.equals(""))
{
try
{
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
ProcessEditor processEditor = (ProcessEditor) page.findEditor(editorInput);
boolean resetChecks = false;
if (processEditor==null) {
resetChecks =true;
}
page.openEditor(editorInput, editorID);
processEditor = (ProcessEditor) page.findEditor(editorInput);
processEditor.setActivePagePublic(5);
boolean status = checktreeProcessSource.getChecked(obj);
if (resetChecks==true) {
processEditor.setTreeViewerWithCheck(status);
}
}
catch (PartInitException e)
{
e.printStackTrace();
}
}
//String text=i.getText();
}
// TODO Auto-generated method stub
}
});
//checktreeProcessSource.getTree().setEnabled(false); //Huascar to enable all the lists
reuseBtn = new Button (sourceComposite, SWT.PUSH);
reuseBtn.setText("Reuse");
reuseBtn.setEnabled(false);
GridData okGridData = new GridData();
okGridData.horizontalAlignment = SWT.RIGHT;
reuseBtn.setLayoutData(okGridData);
reuseBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
executeReuse();
}
});
setProjectDataToCombo();
}
public void CreateModelFromResourceSet(TreeViewer tree, ResourceSet resourceSet) {
try {
tree.setInput(resourceSet);
final ViewerFilter modelFilter = new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,
Object element) {
//if (sElementFilter.contentEquals("Artefact")) {
if (element instanceof CDOResource) {
return true;
}
// else if (element instanceof CDOResourceNode) {
// return true;
// }
else {
return false;
}
//} else
// return false;
}
};
tree.addFilter(modelFilter);
} catch (Exception ex) {
MessageDialog
.openError(new Shell(), "Not valid model file",
"The provided model file couldn't be parsed as an EMF resource");
tree.setInput(null);
}
}
private boolean copyMaps() {
String sourcePath= resourceAPSource.getPath();
String [] pathParts= sourcePath.split("/");
String projectFolder=pathParts[1]+ "/" + pathParts[2] ;
CDOResourceFolder folder = transactionCDO.getResourceFolder(projectFolder);
EList <CDOResourceNode> contents=null;
if(folder instanceof CDOResourceFolder){
contents= ((CDOResourceFolder)folder).getNodes();
}
for(int x=0;x<contents.size();x++){
CDOResourceNode oneNode = contents.get(x);
if(oneNode instanceof CDOResource){
if(oneNode.getName().endsWith("mapping")){
CDOResource sourceResource = (CDOResource)oneNode;
String projectPath= resourceAPTarget.getPath();
pathParts= projectPath.split("ASSURANCE_PROJECT");
String targetPath=pathParts[0]+ "ASSURANCE_PROJECT/" + oneNode.getName();
targetPath = createNotExistingName(targetPath);
CDOResource targetResource = transactionCDO.createResource(targetPath);
initCopy(sourceResource, targetResource, null);
try {
targetResource.save(options);
} catch (Exception e) {
MessageDialog.openError(new Shell(), "Mapping reuse failed", "Error copying model " + targetPath);
// TODO Auto-generated catch block
e.printStackTrace();
transactionCDO.rollback();
return false;
}
}
}
}
return true;
}
private boolean copyBaselines(BaselineConfig bconfigActive) {
ArrayList<Object> allObjects =null;
boolean isModelChecked = false;
for ( EObject key : baselineAllSelectedObjects.keySet() ) {
CDOResource sourceResource = (CDOResource)key;
baselineAllSelectedObjects.put(sourceResource, null);
isModelChecked = checktreeBaselineSource.getChecked(key);
if (isModelChecked) {
CheckboxTreeViewerExt treeView = null;
Object[] selectedObjects = null;
URI uri=sourceResource.getURI();
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
BaselineEditor editor = (BaselineEditor) page.findEditor(editorInput);
if (editor != null) {
treeView = editor.getTreeViewerWithCheck();
}
if (treeView!=null) {
selectedObjects = treeView.getCheckedElements();
} else {
allObjects= new ArrayList();
for (Iterator<EObject> iterator = sourceResource.getAllContents(); iterator.hasNext();) {
EObject aEObject = iterator.next();
allObjects.add(aEObject);
}
selectedObjects = allObjects.toArray();
}
baselineAllSelectedObjects.put(sourceResource, selectedObjects);
String projectPath= resourceAPTarget.getPath();
String [] pathParts= projectPath.split("ASSURANCE_PROJECT");
String targetPath=pathParts[0]+ "ASSURANCE_PROJECT/" + sourceResource.getName();
targetPath = createNotExistingName(targetPath);
CDOResource targetResource = transactionCDO.createResource(targetPath);
//diagramResource = transaction.getOrCreateResource(assuranceprojectFolder.getPath() + "/" + baselineName + ".baseline_diagram");
//To copy the refframework as baseline
//MCPCDOResource targetResource = assuranceprojectFolder.addResource(baselineName + ".baseline");
initCopy(sourceResource, targetResource, selectedObjects);
try {
targetResource.save(options);
bconfigActive.getRefFramework().add((BaseFramework) targetResource.getContents().get(0));
resourceAPTarget.save(options);
} catch (IOException e) {
MessageDialog.openError(new Shell(), "Baseline reuse failed", "Error copying model " + targetPath);
// TODO Auto-generated catch block
e.printStackTrace();
transactionCDO.rollback();
return false;
}
}
}
return true;
}
private boolean copyEvidences() {
ArrayList<Object> allObjects =null;
boolean isModelChecked = false;
for ( EObject key : evidenceAllSelectedObjects.keySet() ) {
CDOResource sourceResource = (CDOResource)key;
evidenceAllSelectedObjects.put(sourceResource, null);
isModelChecked = checktreeEvidenceSource.getChecked(key);
if (isModelChecked) {
CheckboxTreeViewerExt treeView = null;
Object[] selectedObjects = null;
URI uri=sourceResource.getURI();
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
EvidenceEditor editor = (EvidenceEditor) page.findEditor(editorInput);
if (editor != null) {
treeView = editor.getTreeViewerWithCheck();
}
if (treeView!=null) {
selectedObjects = treeView.getCheckedElements();
} else {
allObjects= new ArrayList();
for (Iterator<EObject> iterator = sourceResource.getAllContents(); iterator.hasNext();) {
EObject aEObject = iterator.next();
allObjects.add(aEObject);
}
selectedObjects = allObjects.toArray();
}
evidenceAllSelectedObjects.put(sourceResource, selectedObjects);
String projectPath= resourceAPTarget.getPath();
String [] pathParts= projectPath.split("ASSURANCE_PROJECT");
String targetPath=pathParts[0]+ "EVIDENCE/" + sourceResource.getName();
targetPath = createNotExistingName(targetPath);
CDOResource targetResource = transactionCDO.createResource(targetPath);
//diagramResource = transaction.getOrCreateResource(assuranceprojectFolder.getPath() + "/" + baselineName + ".baseline_diagram");
//To copy the refframework as baseline
//MCPCDOResource targetResource = assuranceprojectFolder.addResource(baselineName + ".baseline");
initCopy(sourceResource, targetResource, selectedObjects);
try {
targetResource.save(options);
targetAssetsPackage.getArtefactsModel().add((ArtefactModel) targetResource.getContents().get(0));
resourceAPTarget.save(options);
} catch (IOException e) {
MessageDialog.openError(new Shell(), "Evidence reuse failed", "Error copying model " + targetPath);
// TODO Auto-generated catch block
e.printStackTrace();
transactionCDO.rollback();
return false;
}
}
}
return true;
}
private String createNotExistingName(String targetPath) {
if(transactionCDO.hasResource(targetPath)){
String [] tokens= targetPath.split("/");
String [] nameTokes = tokens[tokens.length-1].split("\\.");
//Change only the name
String modelName = nameTokes[0];
String modelType = nameTokes[1];
char lastchar = modelName.charAt(modelName.length()-1);
char prevlastchar = modelName.charAt(modelName.length()-2);
if(Character.isDigit(prevlastchar) && Character.isDigit(lastchar)){
int number= Integer.parseInt("" + prevlastchar + lastchar);
number++;
modelName=modelName.substring(0, modelName.length()-2) + number;
}
else if(Character.isDigit(lastchar)){
int number= Integer.parseInt("" + lastchar);
number++;
modelName=modelName.substring(0, modelName.length()-1) + number;
}
else{
modelName=modelName + "1";
}
targetPath = targetPath.substring(0,targetPath.lastIndexOf("/")) + "/" + modelName + "." + modelType;
//Check again the new name
targetPath=createNotExistingName(targetPath);
}
return targetPath;
}
// MCP CrossProject
private List<CDOResource> getDiagramsFromModel(CDOResource modelCDO) {
List<CDOResource> res = new ArrayList<CDOResource>();
/* No funciona porque los diagramas no están cargados en memoria o es que sólo funciona con modelos
EObject aEObject= modelCDO.getContents().get(0);
List<CDOObjectReference> rc = transaction.queryXRefs(CDOUtil.getCDOObject(aEObject), new EReference[] {});
for(CDOObjectReference oneRef:rc){
if (oneRef.getSourceObject().eResource() != modelCDO) res.add((CDOResource)(oneRef.getSourceObject().eResource()));
if (oneRef.getTargetObject().eResource() != modelCDO) res.add((CDOResource)(oneRef.getTargetObject().eResource()));
}
List<EObject> list = aEObject.eCrossReferences();
for(EObject elem : list)
{
res.add((CDOResource)elem.eResource());
}
*/
String temp = modelCDO.getPath();
String sourceFolderPath = temp.substring(0, temp.lastIndexOf("/"));
CDOResourceFolder argFolder=transactionCDO.getResourceFolder(sourceFolderPath);
EList<CDOResourceNode> listN = argFolder.getNodes();
for ( CDOResourceNode node : listN) {
if (node instanceof CDOResourceFolder) {
System.out.println("getDiagramsFromModel: found subfolder =."+ node.toString());
List<CDOResource> res2 = getDiagramsFromModel((CDOResource) node);
res.addAll(res2);
} else if (node instanceof CDOResource) {
CDOResource elem = (CDOResource)node;
if(elem.getPath().contains(EXTENSION_DIAGRAM)){
EObject model = (EObject) ((DiagramImpl)elem.getContents().get(0)).basicGetElement();
//if (elem.getContents().get(0).eResource() == modelCDO)
if (model.eResource().getURI() == modelCDO.getURI())
{
res.add((CDOResource)elem.getContents().get(0).eResource());
}
}
}
//listN.remove(0); ME DA PROBLEMAS PORQUE ESTOY BORRANDO!!!
}
return res;
}
// MCP CrossProject
private boolean copyArgumentations() {
ArrayList<Object> allObjects =null;
boolean isModelChecked = false;
// MCP CrossProject
IProgressMonitor monitor = null;
ProgressMonitorDialog dialog = new ProgressMonitorDialog(new Shell());
// MCP CrossProject
for ( EObject key : argAllSelectedObjects.keySet() ) {
CDOResource sourceResource = (CDOResource)key;
argAllSelectedObjects.put(sourceResource, null);
isModelChecked = checktreeArgSource.getChecked(key);
// MCP CrossProject
dialog.open();
monitor = dialog.getProgressMonitor();
String CREATE_ARG_DIAGRAM = "Create Cross Arg diagram";
monitor.beginTask(CREATE_ARG_DIAGRAM, 20);
// MCP CrossProject
if (isModelChecked) {
CheckboxTreeViewerExt treeView = null;
Object[] selectedObjects = null;
URI uri=sourceResource.getURI();
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
ArgEditor editor = (ArgEditor) page.findEditor(editorInput);
if (editor != null) {
treeView = editor.getTreeViewerWithCheck();
}
if (treeView!=null) {
selectedObjects = treeView.getCheckedElements();
} else {
allObjects= new ArrayList();
for (Iterator<EObject> iterator = sourceResource.getAllContents(); iterator.hasNext();) {
EObject aEObject = iterator.next();
allObjects.add(aEObject);
}
selectedObjects = allObjects.toArray();
}
argAllSelectedObjects.put(sourceResource, selectedObjects);
String projectPath= resourceAPTarget.getPath();
String [] pathParts= projectPath.split("ASSURANCE_PROJECT");
String targetPath=pathParts[0]+ "ARGUMENTATION/" + sourceResource.getName();
String targetFolderPath=pathParts[0]+ "ARGUMENTATION"; targetPath = createNotExistingName(targetPath); CDOResource targetResource = transactionCDO.createResource(targetPath); //diagramResource = transaction.getOrCreateResource(assuranceprojectFolder.getPath() + "/" + baselineName + ".baseline_diagram"); //To copy the refframework as baseline //MCPCDOResource targetResource = assuranceprojectFolder.addResource(baselineName + ".baseline");
initCopy(sourceResource, targetResource, selectedObjects);
try { targetResource.save(options); // MCP CrossProject // crear los diagramas del modelo //String sourceDiagram= sourceResource.getPath() + "_diagram"; //CDOResource sourceDiagramResource = transaction.getOrCreateResource(sourceDiagram); List<CDOResource> listDiagrams = getDiagramsFromModel(sourceResource); for(CDOResource sourceDiagramResource: listDiagrams) { // lista de objetos en diagrama //List<EObject> listRootObjects = sourceDiagramResource.getContents(); List<EObject> listRootObjectsSource = ((Diagram)sourceDiagramResource.getContents().get(0)).getPersistedChildren(); List<EObject> listRootObjects = new ArrayList<EObject>(); for(EObject element : listRootObjectsSource) { EObject objsource = ((ShapeImpl)element).getElement(); //EObject obj = map.get(objsource); CDOID cdoID = CDOUtil.getCDOObject(objsource).cdoID(); EObject obj = eIDToObjectMap.get(cdoID.toString()); listRootObjects.add(obj); } // crear el recurso diagram vacio CDOResourceFolder argFolder=transactionCDO.getResourceFolder(targetFolderPath);
//CDOResourceFolder argFolder=projectFolder.addResourceFolder("ARGUMENTATION"); //CDOResource targetDiagramResource = transaction.getOrCreateResource(targetPath + EXTENSION_DIAGRAM); String targetDiagram = targetPath.substring(0, targetPath.lastIndexOf("/") + 1) + sourceDiagramResource.getName(); targetDiagram = createNotExistingName(targetDiagram); CDOResource targetDiagramResource = transactionCDO.getOrCreateResource(targetDiagram); DawnArgDiagramUtil myDiagram = new DawnArgDiagramUtil(sourceDiagramResource, listRootObjects, targetResource.getURI(), targetDiagramResource.getURI(), argFolder, transactionCDO); myDiagram.generateDiagram(monitor); } //MCP: se lanza LocalCommitConflictException!!!; los anteriores commit son sin parametro pero sigue el problema Set<CDOObject> conf = transactionCDO.getConflicts(); for (Iterator<CDOObject>it = conf.iterator(); it.hasNext();) { CDOObject nextObject = it.next(); System.out.println("copyArgumentations: confict "+nextObject.toString()); } transactionCDO.commit();//???MCP // MCP CrossProject targetAssetsPackage.getArgumentationModel().add((Case) targetResource.getContents().get(0)); resourceAPTarget.save(options); // MCP CrossProject //???transaction.close(); // MCP CrossProject } catch (Exception e) { MessageDialog.openError(new Shell(), "Argumentation reuse failed", "Error copying model " + targetPath); // TODO Auto-generated catch block e.printStackTrace(); transactionCDO.rollback(); dialog.close();
return false; }
}
dialog.close();
}// cycle for
return true;
}
private boolean copyProcesses() {
ArrayList<Object> allObjects =null;
boolean isModelChecked = false;
for ( EObject key : processAllSelectedObjects.keySet() ) {
CDOResource sourceResource = (CDOResource)key;
processAllSelectedObjects.put(sourceResource, null);
isModelChecked = checktreeProcessSource.getChecked(key);
if (isModelChecked) {
CheckboxTreeViewerExt treeView = null;
Object[] selectedObjects = null;
URI uri=sourceResource.getURI();
DawnEditorInput editorInput = new DawnEditorInput(uri);
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
ProcessEditor editor = (ProcessEditor) page.findEditor(editorInput);
if (editor != null) {
treeView = editor.getTreeViewerWithCheck();
}
if (treeView!=null) {
selectedObjects = treeView.getCheckedElements();
} else {
allObjects= new ArrayList();
for (Iterator<EObject> iterator = sourceResource.getAllContents(); iterator.hasNext();) {
EObject aEObject = iterator.next();
allObjects.add(aEObject);
}
selectedObjects = allObjects.toArray();
}
processAllSelectedObjects.put(sourceResource, selectedObjects);
String projectPath= resourceAPTarget.getPath();
String [] pathParts= projectPath.split("ASSURANCE_PROJECT");
String targetPath=pathParts[0]+ "PROCESSES/" + sourceResource.getName();
targetPath = createNotExistingName(targetPath);
CDOResource targetResource = transactionCDO.createResource(targetPath);
//diagramResource = transaction.getOrCreateResource(assuranceprojectFolder.getPath() + "/" + baselineName + ".baseline_diagram");
//To copy the refframework as baseline
//MCPCDOResource targetResource = assuranceprojectFolder.addResource(baselineName + ".baseline");
initCopy(sourceResource, targetResource, selectedObjects);
try {
targetResource.save(options);
targetAssetsPackage.getProcessModel().add((ProcessModel) targetResource.getContents().get(0));
resourceAPTarget.save(options);
} catch (IOException e) {
MessageDialog.openError(new Shell(), "Process reuse failed", "Error copying model " + targetPath);
// TODO Auto-generated catch block
e.printStackTrace();
transactionCDO.rollback();
return false;
}
}
}
return true;
}
private void initCopy(CDOResource sourceResource, CDOResource targetResource, Object[] selectedObjects) {
// Create empty roots
boolean objChecked = false;
for (EObject aEObject : sourceResource.getContents()) {
targetResource.getContents().add(getCorrespondingEObject(aEObject));
}
// Copy EObjects, containment in the resource is done automatically since we have
// already attached the corresponding root EObject to the target resource
for (Iterator<EObject> iterator = sourceResource.getAllContents(); iterator.hasNext();) {
EObject aEObject = iterator.next();
//Avoid copy assurance assent events
if(aEObject instanceof AssuranceAssetEvent){
continue;
}
if(selectedObjects!=null){
objChecked = false;
objChecked = existObject(aEObject, selectedObjects);
if (objChecked==false) {
continue;
}
}
EObject bEObject = getCorrespondingEObject(aEObject);
copyAEObjectToBEObject(aEObject, bEObject, selectedObjects);
// MCP CrossProject
if(aEObject instanceof ModelElement)
{
CDOID cdoID = CDOUtil.getCDOObject(aEObject).cdoID();
Long cdoIdLong = new Long(cdoID.toURIFragment());
eIDToObjectMap.put(cdoID.toString(), bEObject);
}
// MCP CrossProject
}
}
private boolean existObject(Object searchedObj, Object[] selectedObjects){
boolean exist = false;
for(Object element: selectedObjects){
if (element.toString().equals(searchedObj.toString())) {
exist = true;
//selectedObjects= ArrayUtils.removeElement(selectedObjects,element);
break;
}
}
return exist;
}
private EObject getCorrespondingEObject(EObject aEObject) {
EObject bEObject = map.get(aEObject);
if (bEObject == null) {
if(aEObject instanceof MapGroup){
for ( EObject key : map.keySet() ) {
if(key instanceof MapGroup){
if(CDOUtil.getCDOObject(key).cdoID() == CDOUtil.getCDOObject(aEObject).cdoID()){
return map.get(key);
}
}
}
}
EClass aEClass = aEObject.eClass();
//if(aEClass.getName().startsWith("Ref")){
//String bClassName = aEClass.getName().replaceFirst("Ref", "Base");
// Second search the corresponding EClass in BPackage
//EClass bEClass = (EClass) BaselinePackage.eINSTANCE.getEClassifier(bClassName);
// Create a new empty instance and register to avoid dups
bEObject = EcoreUtil.create(aEClass);
map.put(aEObject, bEObject);
//}
/*if (aEClass.getName().equals("MapJustification")){
bEObject = EcoreUtil.create(aEClass);
map.put(aEObject, bEObject);
}
else if (aEClass.getName().equals("MapGroup")){
bEObject = EcoreUtil.create(aEClass);
map.put(aEObject, bEObject);
}
else{*/
//bEObject=aEObject;
//map.put(aEObject, aEObject);
//}
}
return bEObject;
}
private void copyAEObjectToBEObject(EObject aEObject, EObject bEObject, Object[] selectedObjects) {
boolean objChecked = false;
for (EStructuralFeature aFeature : aEObject.eClass().getEAllStructuralFeatures()) {
if (aEObject.eIsSet(aFeature)) {
// Get the corresponding feature in the target EClass.
// Get simply the feature with the same name
EStructuralFeature bFeature = bEObject.eClass().getEStructuralFeature(aFeature.getName());
if(bFeature != null){
if (aFeature instanceof EAttribute) {
bEObject.eSet(bFeature, aEObject.eGet(aFeature));
} else { // EReference
if(aEObject.eClass().getName().equals("BaseEquivalenceMap") && aFeature.getName().equals("target") ){
bEObject.eSet(bFeature,aEObject.eGet(aFeature));
}
else if(aFeature.getName().equals("refFramework") || aFeature.getName().equals("refAssurableElement")){
bEObject.eSet(bFeature,aEObject.eGet(aFeature));
}
else if(aEObject.eClass().getName().equals("BaseComplianceMap") && aFeature.getName().equals("target") ){
if(aEObject.eGet(aFeature) instanceof EList){
@SuppressWarnings("unchecked")
EList<EObject> aList = (EList<EObject>) aEObject.eGet(aFeature);
EList<EObject> bList = new BasicEList<EObject>();
boolean hasElements = false;
for (int i = 0; i < aList.size(); i++) {
if ((aList.get(i) instanceof Artefact) || (aList.get(i) instanceof ArtefactDefinition)) {
objChecked = false;
for ( EObject key : evidenceAllSelectedObjects.keySet() ) {
if(evidenceAllSelectedObjects.get(key)!=null){
objChecked = existObject(aList.get(i), evidenceAllSelectedObjects.get(key));
if (objChecked==true) {
bList.add(getCorrespondingEObject(aList.get(i)));
hasElements = true;
break;
}
}
}
}
else if ((aList.get(i) instanceof Activity) || (aList.get(i) instanceof Participant)) {
objChecked = false;
for ( EObject key : processAllSelectedObjects.keySet() ) {
if(processAllSelectedObjects.get(key)!=null){
objChecked = existObject(aList.get(i), processAllSelectedObjects.get(key));
if (objChecked==true) {
bList.add(getCorrespondingEObject(aList.get(i)));
hasElements = true;
break;
}
}
}
}
else if (aList.get(i) instanceof Claim) {
objChecked = false;
for ( EObject key : argAllSelectedObjects.keySet() ) {
if(argAllSelectedObjects.get(key)!=null){
objChecked = existObject(aList.get(i), argAllSelectedObjects.get(key));
if (objChecked==true) {
bList.add(getCorrespondingEObject(aList.get(i)));
hasElements = true;
break;
}
}
}
}
}
if (hasElements) {
bEObject.eSet(bFeature, bList);
}
}
}
else if(aEObject.eClass().getName().equals("InformationElementCitation") && aFeature.getName().equals("artefact") ){
if(aEObject.eGet(aFeature) instanceof EList){
@SuppressWarnings("unchecked")
EList<EObject> aList = (EList<EObject>) aEObject.eGet(aFeature);
EList<EObject> bList = new BasicEList<EObject>();
boolean hasElements = false;
for (int i = 0; i < aList.size(); i++) {
objChecked = false;
for ( EObject key : evidenceAllSelectedObjects.keySet() ) {
if(evidenceAllSelectedObjects.get(key)!=null){
objChecked = existObject(aList.get(i), evidenceAllSelectedObjects.get(key));
if (objChecked==true) {
bList.add(getCorrespondingEObject(aList.get(i)));
hasElements = true;
break;
}
}
}
}
if (hasElements) {
bEObject.eSet(bFeature, bList);
}
}
}
else if( (aEObject.eClass().getName().equals("Participant") && aFeature.getName().equals("ownedArtefact") ) ||
(aEObject.eClass().getName().equals("Activity") && aFeature.getName().equals("requiredArtefact") ) ||
(aEObject.eClass().getName().equals("Activity") && aFeature.getName().equals("producedArtefact") ) ||
(aEObject.eClass().getName().equals("Technique") && aFeature.getName().equals("createdArtefact") ) ){
if(aEObject.eGet(aFeature) instanceof EList){
@SuppressWarnings("unchecked")
EList<EObject> aList = (EList<EObject>) aEObject.eGet(aFeature);
EList<EObject> bList = new BasicEList<EObject>();
boolean hasElements = false;
for (int i = 0; i < aList.size(); i++) {
objChecked = false;
for ( EObject key : evidenceAllSelectedObjects.keySet() ) {
if(evidenceAllSelectedObjects.get(key)!=null){
objChecked = existObject(aList.get(i), evidenceAllSelectedObjects.get(key));
if (objChecked==true) {
bList.add(getCorrespondingEObject(aList.get(i)));
hasElements = true;
break;
}
}
}
}
if (hasElements) {
bEObject.eSet(bFeature, bList);
}
}
}
/*else if(aEObject.eClass().getName().equals("MapGroup")){
EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
bEObject.eSet(bFeature, copy);
}
else if(aFeature.getName().equals("refFramework") || aFeature.getName().equals("refAssurableElement")){
bEObject.eSet(bFeature,aEObject.eGet(aFeature));
}
/*else if (aFeature.getName().equals("mapJustification")){
EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
//copyAEObjectToBEObject((EObject)aEObject.eGet(aFeature),copy, null);
bEObject.eSet(bFeature, copy);
}*/
/*else if (aFeature.getName().equals("ownedTechnique")){
EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
//copyAEObjectToBEObject((EObject)aEObject.eGet(aFeature),copy, null);
bEObject.eSet(bFeature, copy);
}*/
else if (aFeature.getName().equals("mapGroup")){
if(aEObject.eClass().getName().equals("BaseComplianceMap")){
EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
bEObject.eSet(bFeature, copy);
}
else{
//EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
//copyAEObjectToBEObject((EObject)aEObject.eGet(aFeature),copy, null);
//bEObject.eSet(bFeature, copy);
bEObject.eSet(bFeature,aEObject.eGet(aFeature));
}
}
else{
if(!aFeature.getName().equals("lifecycleEvent")){
if(aEObject.eGet(aFeature) instanceof EList){
@SuppressWarnings("unchecked")
EList<EObject> aList = (EList<EObject>) aEObject.eGet(aFeature);
EList<EObject> bList = new BasicEList<EObject>();
for (int i = 0; i < aList.size(); i++) {
if(selectedObjects!=null){
objChecked = false;
objChecked = existObject(aList.get(i), selectedObjects);
if (objChecked==false) {
continue;
}
}
bList.add(getCorrespondingEObject(aList.get(i)));
}
bEObject.eSet(bFeature, bList);
}
else{
if(selectedObjects!=null){
objChecked = false;
objChecked = existObject((EObject)aEObject.eGet(aFeature), selectedObjects);
if (objChecked==false) {
continue;
}
}
//System.out.println("Feature " + aFeature.getName() + " of " + aEObject.eClass().getName() + " not copied to Baseline");
EObject copy= getCorrespondingEObject((EObject)aEObject.eGet(aFeature));
//copyAEObjectToBEObject((EObject)aEObject.eGet(aFeature),copy, null);
bEObject.eSet(bFeature, copy);
}
}
}
}
}
}
}
//Add the linkf to the refframeork model concepts.
/*if(aEObject instanceof RefFramework){
EStructuralFeature bFeature = bEObject.eClass().getEStructuralFeature("refFramework");
bEObject.eSet(bFeature,aEObject);
}
else if(bEObject instanceof BaseAssurableElement){
EStructuralFeature bFeature = bEObject.eClass().getEStructuralFeature("refAssurableElement");
bEObject.eSet(bFeature,aEObject);
}*/
}
ArrayList<CDOResourceNode> findAssuranceProjects(){
ArrayList<CDOResourceNode> projectList=new ArrayList<CDOResourceNode>();
CDOResourceNode[] listR= transactionCDO.getElements();
for (int i = 0; i < listR.length; i++) {
if (listR[i] instanceof CDOResourceFolder) {
checkFolderContents((CDOResourceFolder) listR[i],ASSURANCEPROJECT, projectList);
} else if (listR[i].getName().endsWith(ASSURANCEPROJECT)) {
projectList.add(listR[i]);
// refListDirMap.add(listR[i].getPath());
//System.out.println(listR[i].getPath());
}
}
return projectList;
}
public static boolean hasReadPermission(CDOResourceNode node) {
// force to get the last revision
node.cdoReload();
CDOPermission permission = node.cdoRevision().getPermission();
return permission.isReadable();
}
private ArrayList<CDOResourceNode> checkFolderContents(CDOResourceFolder cdoResourceFolder, String sCadena, ArrayList<CDOResourceNode>projectList) {
if (hasReadPermission(cdoResourceFolder)) {
EList<CDOResourceNode> listN = cdoResourceFolder.getNodes();
for (int i = 0; i < listN.size(); i++) {
if (listN.get(i) instanceof CDOResourceFolder) {
checkFolderContents((CDOResourceFolder) listN.get(i), sCadena, projectList);
} else if (listN.get(i).getName().endsWith(sCadena)) {
projectList.add(listN.get(i));
//System.out.println(listN.get(i).getPath());
}
}
}
return projectList;
}
protected void sourceProjectChanged() {
int sourceindex=sourceProjectCombo.getSelectionIndex();
CDOResourceNode selectedSource=projects.get(sourceindex);
ResourceSet baselineSourceResourceSet = new ResourceSetImpl();
baselineSourceResourceSet.eSetDeliver(true);
try {
CDOResource artefactResource = null;
CDOResource processResource = null;
CDOResource argResource = null;
resourceAPSource = transactionCDO.getResource(selectedSource.getPath());
assuranceProjectSource = (AssuranceProject) resourceAPSource.getContents().get(0);
if(targetProjectCombo.getSelectionIndex()>-1){
reuseBtn.setEnabled(true);
}
//Load Source Baselines
EList<BaselineConfig> lstBaselineConfig = assuranceProjectSource.getBaselineConfig();
Iterator<BaselineConfig> baselineConfig = lstBaselineConfig.iterator();
BaselineConfig bconfig=null;
boolean bFind = false;
while (baselineConfig.hasNext() && !bFind) {
bconfig = baselineConfig.next();
if (bconfig.isIsActive()) {
bFind = true;
EList<BaseFramework> lstBaseFramework = bconfig.getRefFramework();
Iterator<BaseFramework> itbaseFramework = lstBaseFramework.iterator();
while (itbaseFramework.hasNext()) {
BaseFramework baseFramework = itbaseFramework.next();
baselineResource = CDOUtil.getCDOObject(baseFramework).cdoResource();
try {
baselineSourceResourceSet.getResources().add(baselineResource);
} catch (NullPointerException e) {
//Ignore it
}
baselineAllSelectedObjects.put(baselineResource, null);
}
//treeBaselineSource.setInput(baselineSourceResourceSet);
CreateModelFromResourceSet(checktreeBaselineSource, baselineSourceResourceSet);
baselineSourceResourceSet= null;
//To search the nodes to be moved.
checktreeBaselineSource.expandAll();
//To expand the moved nodes.
//treeBaselineSource.expandAll();
}
}
//Load the evidence models of the active assetsPackage of the selected assurance project
EList<AssetsPackage> lstAssetsPackage = assuranceProjectSource.getAssetsPackage();
Iterator<AssetsPackage> assetsPackage = lstAssetsPackage.iterator();
ResourceSet evidenceSourceResourceSet = new ResourceSetImpl();
AssetsPackage aPackage=null;
//Load the argumentation models of the active assetsPackage of the selected assurance project
ResourceSet argSourceResourceSet = new ResourceSetImpl();
//Load the process models of the active assetsPackage of the selected assurance project
ResourceSet processSourceResourceSet = new ResourceSetImpl();
bFind = false;
while (assetsPackage.hasNext() && !bFind) {
aPackage = assetsPackage.next();
if (aPackage.isIsActive()) {
bFind= true;
EList<ArtefactModel> lstArtefactModel = aPackage.getArtefactsModel();
Iterator<ArtefactModel> artefactModel = lstArtefactModel.iterator();
while (artefactModel.hasNext()) {
ArtefactModel artefact = artefactModel.next();
artefactResource = CDOUtil.getCDOObject(artefact).cdoResource();
try {
evidenceSourceResourceSet.getResources().add(artefactResource);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
evidenceAllSelectedObjects.put(artefactResource, null);
}
EList<Case> lstArgModel = aPackage.getArgumentationModel();
Iterator<Case> argModel = lstArgModel.iterator();
while (argModel.hasNext()) {
Case argRoot = argModel.next();
argResource = CDOUtil.getCDOObject(argRoot).cdoResource();
try {
argSourceResourceSet.getResources().add(argResource);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
//Do nothing
}
argAllSelectedObjects.put(argResource, null);
}
EList<ProcessModel> lstProcessModel = aPackage.getProcessModel();
Iterator<ProcessModel> processModel = lstProcessModel.iterator();
while (processModel.hasNext()) {
ProcessModel processRoot = processModel.next();
processResource = CDOUtil.getCDOObject(processRoot).cdoResource();
try {
processSourceResourceSet.getResources().add(processResource);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
processAllSelectedObjects.put(processResource, null);
}
}
CreateModelFromResourceSet(checktreeEvidenceSource, evidenceSourceResourceSet);
checktreeEvidenceSource.expandAll();
CreateModelFromResourceSet(checktreeArgSource, argSourceResourceSet);
checktreeArgSource.expandAll();
CreateModelFromResourceSet(checktreeProcessSource, processSourceResourceSet);
checktreeProcessSource.expandAll();
}
} catch (Exception cdoe) {
cdoe.printStackTrace();
transactionCDO.rollback();
}
}
protected void executeReuse() {
boolean allOK=true;
if(targetProjectCombo.getText().length()==0){
MessageDialog.openError(new Shell(), "Selected Source Project",
"You must select the source project of the reuse.");
return;
}
if ( (checktreeEvidenceSource.getCheckedElements().length!=0) ||
(checktreeArgSource.getCheckedElements().length!=0) ||
(checktreeProcessSource.getCheckedElements().length!=0) ||
(checktreeBaselineSource.getCheckedElements().length!=0)) {
//Load the evidence models of the active assetsPackage of the selected assurance project
EList<AssetsPackage> lstAssetsPackage = assuranceProjectTarget.getAssetsPackage();
Iterator<AssetsPackage> assetsPackage = lstAssetsPackage.iterator();
map = new HashMap<EObject, EObject>();
options = new HashMap<Object, Object>();
while (assetsPackage.hasNext()) {
targetAssetsPackage = assetsPackage.next();
if (targetAssetsPackage.isIsActive()) {
break;
}
}
}
else {
MessageDialog.openError(new Shell(), "Selected Models",
"You must select at least one model to be reused.");
return;
}
try {
if (checktreeBaselineSource.getCheckedElements().length!=0) {
MessageDialog.openWarning(new Shell(), "Changes to target Assurance Project",
"The model will be copied and related to a new Asset Package and Baseline Configuration that will be set up as the active ones.");
projectPackage = AssuranceprojectPackage.eINSTANCE;
projectFactory = projectPackage.getAssuranceprojectFactory();
AssetsPackage newAP= projectFactory.createAssetsPackage();
newAP.setId("" + assuranceProjectTarget.getAssetsPackage().size());
newAP.setName("AP_" + assuranceProjectTarget.getAssetsPackage().size());
newAP.setDescription("Created automatically for Cross Project Reuse");
newAP.setIsActive(true);
assuranceProjectTarget.getAssetsPackage().add(newAP);
targetAssetsPackage.setIsActive(false);
targetAssetsPackage=newAP;
BaselineConfig newBC = projectFactory.createBaselineConfig();
newBC.setId("" + assuranceProjectTarget.getBaselineConfig().size());
newBC.setName("AP_" + assuranceProjectTarget.getBaselineConfig().size());
newBC.setDescription("Created automatically for Cross Project Reuse");
//Load the evidence models of the active assetsPackage of the selected assurance project
EList<BaselineConfig> lstBC = assuranceProjectTarget.getBaselineConfig();
Iterator<BaselineConfig> bcI = lstBC.iterator();
//Inactive the active Baseline Config
while (bcI.hasNext()) {
BaselineConfig oneBC = bcI.next();
if (oneBC.isIsActive()) {
oneBC.setIsActive(false);
}
}
newBC.setIsActive(true);
assuranceProjectTarget.getBaselineConfig().add(newBC);
if (allOK) allOK=copyEvidences();
if (allOK) allOK=copyArgumentations();
if (allOK) allOK=copyProcesses();
if (allOK) allOK=copyMaps();
//Baselines is the last because has mappings to the other models
if (allOK) allOK=copyBaselines(newBC);
}
else {
if (allOK) allOK=copyEvidences();
if (allOK) allOK=copyArgumentations();
if (allOK) allOK=copyProcesses();
}
if(allOK){
MessageDialog.openInformation(new Shell(), "Reuse success", "Selected models reused");
}
} catch (Exception cdoe) {
cdoe.printStackTrace();
}
}
@Override
public void dispose() {
if (!transactionCDO.isClosed()) {
transactionCDO.close();
}
}
/**
* Create toolbar.
*/
private void createToolbar() {
IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
mgr.add(addItemAction);
}
public void createActions() {
addItemAction = new Action("Refresh") {
public void run() {
setProjectDataToCombo();
}
};
addItemAction.setImageDescriptor(getImageDescriptor("refresh.gif"));
//
// // Add selection listener.
// viewer.addSelectionChangedListener(new ISelectionChangedListener() {
// public void selectionChanged(SelectionChangedEvent event) {
// updateActionEna55blement();
// }
// });
}
/**
* Returns the image descriptor with the given relative path.
*/
private ImageDescriptor getImageDescriptor(String relativePath) {
String iconPath = "icons/";
ReusePlugin plugin = ReusePlugin.getDefault();
ImageDescriptor img = plugin.getImageDescriptor(iconPath + relativePath);
return img;
}
private void setProjectDataToCombo() {
sourceProjectCombo.removeAll();
targetProjectCombo.removeAll();
checktreeBaselineSource.setInput(null);
checktreeProcessSource.setInput(null);
checktreeArgSource.setInput(null);
checktreeEvidenceSource.setInput(null);
reuseBtn.setEnabled(false);
projects=findAssuranceProjects();
Iterator<CDOResourceNode> iterator = projects.iterator();
while(iterator.hasNext()){
CDOResourceNode proj=iterator.next();
String name=proj.getName();
sourceProjectCombo.add(name);
if(proj.cdoRevision().getPermission().isWritable()){
targetProjectCombo.add(name);
}
}
}
}