blob: 18a476ce36a1dc085a418329cefc3a09093db06a [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2014 CEA LIST.
*
*
* 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:
* Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.requirements.reqif.integration.transformation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils;
import org.eclipse.papyrus.infra.services.edit.service.IElementEditService;
import org.eclipse.papyrus.requirements.reqif.integration.assistant.ChooseReqIFTypeDialog;
import org.eclipse.papyrus.requirements.reqif.integration.command.DefineProfileCommand;
import org.eclipse.papyrus.requirements.reqif.transformation.ReqIFImporter;
import org.eclipse.papyrus.uml.service.types.element.UMLElementTypes;
import org.eclipse.rmf.reqif10.ReqIF;
import org.eclipse.rmf.reqif10.SpecType;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Dependency;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Profile;
/**
* implementation of a ReqIFImport dependent of Papyrus.
*
*/
public class ReqIFImporterServiceEdit extends ReqIFImporter {
/**
*
* Constructor.
*
* @param domain
* the domain to execute command
* @param reqIFModel
* the reqIF model that is imported
* @param UMLModel
* the UML model that contain imported elements
*/
public ReqIFImporterServiceEdit(TransactionalEditingDomain domain, ReqIF reqIFModel, Package UMLModel) {
super(domain, reqIFModel, UMLModel);
}
/**
*
* @see org.eclipse.papyrus.requirements.reqif.transformation.ReqIFImporter#createRequirementClass(org.eclipse.uml2.uml.Element)
* {@inheritDoc}
*/
protected Class createClassWithRequirementName(org.eclipse.uml2.uml.Element owner) {
IElementEditService provider = ElementEditServiceUtils.getCommandProvider(owner);
if (provider == null) {
return null;
}
ICommand createGMFCommand = provider.getEditCommand(new CreateElementRequest(domain, owner, UMLElementTypes.CLASS));
if (createGMFCommand != null) {
Command emfCommand = new GMFtoEMFCommandWrapper(createGMFCommand);
domain.getCommandStack().execute(emfCommand);
Class theClass = (Class) createGMFCommand.getCommandResult().getReturnValue();
theClass.setName(theClass.getName().replaceAll("Class", "Requirement"));
return theClass;
}
return null;
}
/**
*
* @see org.eclipse.papyrus.requirements.reqif.transformation.ReqIFImporter#createDependency(org.eclipse.uml2.uml.Package)
* {@inheritDoc}
*/
protected Dependency createDependency(Package uMLModel) {
IElementEditService provider = ElementEditServiceUtils.getCommandProvider(uMLModel);
if (provider == null) {
return null;
}
ICommand createGMFCommand = provider.getEditCommand(new CreateElementRequest(domain, uMLModel, org.eclipse.papyrus.uml.service.types.element.UMLElementTypes.DEPENDENCY));
if (createGMFCommand != null) {
Command emfCommand = new GMFtoEMFCommandWrapper(createGMFCommand);
domain.getCommandStack().execute(emfCommand);
return (Dependency) createGMFCommand.getCommandResult().getReturnValue();
}
return null;
}
/**
*
* @see org.eclipse.papyrus.requirements.reqif.transformation.ReqIFImporter#selectReqIFType(java.util.Collection)
* {@inheritDoc}
*
*/
protected HashMap<String, SpecType> selectReqIFType(Collection<SpecType> availableReqiFTypes) {
HashMap<String, SpecType> selectedReqiFType = new HashMap<String, SpecType>();
ChooseReqIFTypeDialog assistedDialog = new ChooseReqIFTypeDialog(new Shell(), availableReqiFTypes);
assistedDialog.open();
ArrayList<Object> result = assistedDialog.getSelectedElements();
for (Object object : result) {
if (object instanceof SpecType) {
selectedReqiFType.put(((SpecType) object).getLongName(), ((SpecType) object));
}
}
return selectedReqiFType;
}
/**
*
* @see org.eclipse.papyrus.requirements.reqif.transformation.ReqIFImporter#defineProfile(org.eclipse.uml2.uml.Profile)
*
* {@inheritDoc}
*/
protected void defineProfile(Profile profile) {
try {
DefineProfileCommand defineProfileCmd = new DefineProfileCommand(domain, new org.eclipse.papyrus.uml.tools.profile.definition.PapyrusDefinitionAnnotation(new org.eclipse.papyrus.uml.tools.profile.definition.Version(1, 0, 0),
"generated by Papyrus Req", "", GregorianCalendar.getInstance().getTime().toString(), "Papyrus Req"), profile, true);
defineProfileCmd.execute(new NullProgressMonitor(), null);
profile.eResource().save(null);
} catch (IOException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}