blob: f3d21c22d273b16e3d386895151fce30c98c7ff8 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.persistence.migration.internal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.xml.type.AnyType;
import org.eclipse.epf.persistence.MultiFileResourceSetImpl;
import org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.ContentDescription;
import org.eclipse.epf.uma.ContentPackage;
import org.eclipse.epf.uma.DescribableElement;
import org.eclipse.epf.uma.ProcessElement;
import org.eclipse.epf.uma.ProcessPackage;
import org.eclipse.epf.uma.UmaFactory;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.WorkBreakdownElement;
import org.eclipse.epf.uma.WorkOrder;
import org.eclipse.epf.uma.WorkOrderType;
/**
* @author Phong Nguyen Le
* @since 1.0
*/
public class UMA2UMAResourceHandler0 extends UMA2UMAResourceHandler {
private Set procMovedFeatureNames;
private Map guidToPresentationMap;
private Set classNamesToSavePresentationURI;
public UMA2UMAResourceHandler0() {
super();
guidToPresentationMap = new HashMap();
procMovedFeatureNames = new HashSet(Arrays.asList(new String[] {
"purpose" //$NON-NLS-1$
, "keyConsiderations" //$NON-NLS-1$
, "alternatives" //$NON-NLS-1$
, "howtoStaff" //$NON-NLS-1$
, "usageGuidance" //$NON-NLS-1$
, "externalId" //$NON-NLS-1$
, "scope" //$NON-NLS-1$
, "usageNotes" //$NON-NLS-1$
, "scale" //$NON-NLS-1$
, "projectCharacteristics" //$NON-NLS-1$
, "riskLevel" //$NON-NLS-1$
, "estimatingTechnique" //$NON-NLS-1$
, "projectMemberExpertise" //$NON-NLS-1$
, "typeOfContract" //$NON-NLS-1$
, "techniques" //$NON-NLS-1$
, "mainDescription" //$NON-NLS-1$
}));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler#getNewFeature(org.eclipse.emf.ecore.EObject,
* java.lang.String)
*/
protected EStructuralFeature getNewFeature(EObject owner, String featureName) {
if ("presentationName".equals(featureName) && owner instanceof ContentDescription) { //$NON-NLS-1$
return UmaPackage.eINSTANCE
.getDescribableElement_PresentationName();
}
if (procMovedFeatureNames.contains(featureName)) {
if (owner instanceof ProcessElement) {
ContentDescription content = ((ProcessElement) owner)
.getPresentation();
EAttribute attrib = getEAttribute(content.eClass(), featureName);
if (attrib != null) {
return attrib;
}
}
}
if ("WorkOrder".equals(featureName) && owner instanceof ProcessPackage) { //$NON-NLS-1$
return UmaPackage.eINSTANCE.getProcessPackage_ProcessElements();
}
return super.getNewFeature(owner, featureName);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler#getNewOwner(org.eclipse.emf.ecore.EObject,
* java.lang.String)
*/
protected EObject getNewOwner(EObject oldOwner, String featureName) {
if ("presentationName".equals(featureName) && oldOwner instanceof ContentDescription) { //$NON-NLS-1$
DescribableElement de = ((DescribableElement) oldOwner.eContainer());
if (de instanceof Activity) {
return null;
}
return de;
}
if (procMovedFeatureNames.contains(featureName)
&& oldOwner instanceof ProcessElement) {
return ((ProcessElement) oldOwner).getPresentation();
}
if ("WorkOrder".equals(featureName) && oldOwner instanceof ProcessPackage) { //$NON-NLS-1$
return oldOwner;
}
return super.getNewOwner(oldOwner, featureName);
}
/* (non-Javadoc)
* @see org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler#getNewValue(org.eclipse.emf.ecore.EObject, java.lang.String, org.eclipse.emf.ecore.xml.type.AnyType)
*/
protected Object getNewValue(EObject oldOwner, String featureName, AnyType value) {
if ("WorkOrder".equals(featureName) && oldOwner instanceof ProcessPackage) { //$NON-NLS-1$
WorkOrder workOrder = UmaFactory.eINSTANCE.createWorkOrder();
workOrder.setGuid((String) getSingleValue(value.getAnyAttribute(),
"guid")); //$NON-NLS-1$
String predGuid = (String) getSingleValue(value.getAnyAttribute(),
"pred"); //$NON-NLS-1$
if (predGuid == null) {
InternalEObject obj = (InternalEObject) getSingleValue(value
.getMixed(), "pred"); //$NON-NLS-1$
predGuid = obj.eProxyURI().authority();
}
MultiFileResourceSetImpl resourceSet = (MultiFileResourceSetImpl) oldOwner
.eResource().getResourceSet();
WorkBreakdownElement pred = (WorkBreakdownElement) resourceSet
.getEObject(predGuid);
workOrder.setPred(pred);
workOrder.setLinkType(WorkOrderType.FINISH_TO_FINISH_LITERAL);
return workOrder;
}
return getText(value);
}
public void savePresentationURIFor(Set classNames) {
classNamesToSavePresentationURI = classNames;
}
public URI getPresentationURI(String guid) {
return (URI) guidToPresentationMap.get(guid);
}
/* (non-Javadoc)
* @see org.eclipse.epf.persistence.migration.MigrationResourceHandler#handleUnknownData(org.eclipse.emf.ecore.EObject, java.lang.Object)
*/
protected void handleUnknownData(EObject e, AnyType unknownData) {
super.handleUnknownData(e, unknownData);
if (classNamesToSavePresentationURI != null
&& e instanceof ContentPackage) {
for (Iterator iter = getValue(unknownData.getMixed(), "contentElements").iterator(); iter.hasNext();) { //$NON-NLS-1$
AnyType value = (AnyType) iter.next();
if (value != null
&& classNamesToSavePresentationURI.contains(value
.eClass().getName())) {
Object presentation = getSingleValue(value.getMixed(),
"presentation"); //$NON-NLS-1$
if (presentation != null) {
Object guid = getSingleValue(value.getAnyAttribute(),
"guid"); //$NON-NLS-1$
URI uri = ((InternalEObject) presentation).eProxyURI();
guidToPresentationMap.put(guid, uri);
}
}
}
}
}
}