| //------------------------------------------------------------------------------ |
| // 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.library.util; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.epf.uma.UmaPackage; |
| |
| |
| /** |
| * class to convert activity types |
| * |
| * @author Jeff Hardy |
| * @author Shilpa Toraskar |
| * @since 1.0 |
| * |
| */ |
| public class ConvertActivityType { |
| |
| // private static Activity oldActivity = null; |
| // private static Activity newActivity = null; |
| // |
| // // original activity's container |
| // private static ProcessPackage oldActivityContainer = null; |
| // |
| // // the original activity's breakdown list |
| // private static List oldActivityBreakdown = null; |
| // |
| // // index of the original activity in it's superActivity's breakdown list |
| // private static int oldActivityBreakdownIndex = -1; |
| // |
| // // original Activity's parent activity |
| // private static Activity superAct = null; |
| // |
| // // parent activity's breakdown list |
| // private static EList superActbreakdownList = null; |
| // |
| // // original Activity's variabilityType |
| // private static VariabilityType oldActVarType = null; |
| // |
| // // original Activity's variabilityElement |
| // private static VariabilityElement oldActVarElement = null; |
| // |
| // // original Activity's immeditateVarieties |
| // private static List oldActImmediateVarietiesList = null; |
| |
| public static int[] compatibleActivities = { UmaPackage.ACTIVITY, |
| UmaPackage.ITERATION, |
| UmaPackage.PHASE, |
| UmaPackage.CAPABILITY_PATTERN, |
| UmaPackage.DELIVERY_PROCESS, |
| }; |
| |
| public static List compatibleActivitiesList = new ArrayList(); |
| static { |
| for (int i = 0; i < compatibleActivities.length; i++) |
| compatibleActivitiesList.add(new Integer(compatibleActivities[i])); |
| } |
| |
| // This method is buggy and is replaced with TypeConverter.convertActivity() |
| // |
| // public static Activity convertActivity(Activity oldActivity, int newType, |
| // DeleteMethodElementCommand command) { |
| // |
| // |
| // ConvertActivityType.oldActivity = oldActivity; |
| // |
| // // activity is already this type |
| // if (newType == oldActivity.eClass().getClassifierID()) { |
| // return null; |
| // } |
| // |
| // // newType is not valid |
| // if (!compatibleActivitiesList.contains(new Integer(newType))) { |
| // return null; |
| // } |
| // |
| // Activity newActivity = doConvert(newType, command); |
| // |
| // return newActivity; |
| // } |
| // |
| // private static Activity doConvert(int newType, DeleteMethodElementCommand command) { |
| // |
| // try { |
| // File oldActivityPathFile = new File(LibraryService.getInstance() |
| // .getCurrentMethodLibraryPath(), MethodLibraryPersister |
| // .getElementPath(oldActivity)); |
| // |
| // // create new activity |
| // newActivity = createNewActivity(newType); |
| // |
| // // TODO: store oldActivity's features here, and don't set them until |
| // // after oldactivity is deleted |
| // |
| // // store oldActivity's breakdown list |
| // oldActivityBreakdown = new ArrayList(); |
| // for (Iterator iter = oldActivity.getBreakdownElements().iterator();iter.hasNext();) { |
| // oldActivityBreakdown.add(iter.next()); |
| // } |
| // oldActivityBreakdownIndex = getIndexInBreakdown(oldActivity); |
| // |
| // // copy all data from oldActivity to newActivity |
| // Iterator iter = oldActivity.eClass().getEAllStructuralFeatures() |
| // .iterator(); |
| // while (iter.hasNext()) { |
| // EStructuralFeature feature = (EStructuralFeature) iter.next(); |
| // Object o = oldActivity.eGet(feature); |
| // if (feature.getFeatureID() != UmaPackage.DESCRIBABLE_ELEMENT__PRESENTATION |
| // && feature.getFeatureID() != UmaPackage.METHOD_ELEMENT__GUID |
| // && feature.getFeatureID() != UmaPackage.ACTIVITY__BREAKDOWN_ELEMENTS |
| // && feature.getFeatureID() != UmaPackage.ACTIVITY__SUPER_ACTIVITIES |
| // && feature.getFeatureID() != UmaPackage.PROCESS__INCLUDES_PATTERNS |
| // && feature.getFeatureID() != UmaPackage.PROCESS__VALID_CONTEXT |
| // && feature.getFeatureID() != UmaPackage.PROCESS__DEFAULT_CONTEXT |
| // && feature.getFeatureID() != UmaPackage.DELIVERY_PROCESS__COMMUNICATIONS_MATERIALS |
| // && feature.getFeatureID() != UmaPackage.DELIVERY_PROCESS__EDUCATION_MATERIALS |
| // ) { |
| // newActivity.eSet(feature, o); |
| // } |
| // } |
| // |
| // // store Guid here |
| // String oldActivityGuid = oldActivity.getGuid(); |
| // |
| // // store old activity's eContainer |
| // oldActivityContainer = (ProcessPackage) oldActivity |
| // .eContainer(); |
| // |
| // // set container |
| // oldActivityContainer.getProcessElements().remove(oldActivity); |
| // oldActivityContainer.getProcessElements().add(newActivity); |
| // |
| // // create presentation |
| // ContentDescription newContentDesc = ContentDescriptionFactory |
| // .createContentDescription(newActivity); |
| // newActivity.setPresentation(newContentDesc); |
| // |
| // File newActivityPathFile = new File(LibraryService.getInstance() |
| // .getCurrentMethodLibraryPath(), MethodLibraryPersister |
| // .getElementPath(newActivity)); |
| // ContentResourceScanner scanner = new ContentResourceScanner( |
| // oldActivityPathFile); |
| // scanner.setTargetRootPath(newActivityPathFile); |
| // |
| // // copy all presentation data from oldActivity to newActivity |
| // ContentDescription oldContentDesc = oldActivity.getPresentation(); |
| // iter = oldContentDesc.eClass().getEAllAttributes().iterator(); |
| // while (iter.hasNext()) { |
| // EAttribute attrib = (EAttribute) iter.next(); |
| // if (attrib.getFeatureID() != UmaPackage.PROCESS_DESCRIPTION__EXTERNAL_ID |
| // && attrib.getFeatureID() != UmaPackage.PROCESS_DESCRIPTION__SCOPE |
| // && attrib.getFeatureID() != UmaPackage.PROCESS_DESCRIPTION__USAGE_NOTES |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__ESTIMATING_TECHNIQUE |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__PROJECT_CHARACTERISTICS |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__PROJECT_MEMBER_EXPERTISE |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__RISK_LEVEL |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__SCALE |
| // && attrib.getFeatureID() != UmaPackage.DELIVERY_PROCESS_DESCRIPTION__TYPE_OF_CONTRACT |
| // ) { |
| // Object o = oldContentDesc.eGet(attrib); |
| // if (o instanceof String && ((String) o).trim().length() > 0) { |
| // // process links |
| // scanner.resolveResources(newActivity, (String) o, ""); //$NON-NLS-1$ |
| // // scanner.resolveResources(newActivity, (String) o, |
| // // MethodLibraryPersister.getElementPath(newActivity)); |
| // // //$NON-NLS-1$ |
| // } |
| // newContentDesc.eSet(attrib, o); |
| // } |
| // } |
| // |
| // // make breakdown links |
| // List oldActBreakdownList = new ArrayList(); |
| // oldActBreakdownList.addAll(oldActivity.getBreakdownElements()); |
| // for (iter = oldActBreakdownList.iterator();iter.hasNext();) { |
| // BreakdownElement be = (BreakdownElement)iter.next(); |
| // be.setSuperActivities(null); |
| // } |
| // |
| // oldActivity.getBreakdownElements().clear(); |
| // newActivity.getBreakdownElements().addAll(oldActivityBreakdown); |
| // // move new activity to proper index in the parent act's breakdown list |
| // superAct = UmaUtil.getParentActivity(oldActivity); |
| // superActbreakdownList = (EList)superAct.getBreakdownElements(); |
| // superActbreakdownList.add(oldActivityBreakdownIndex, newActivity); |
| // |
| // // handle variability |
| // oldActVarElement = oldActivity.getVariabilityBasedOnElement(); |
| // oldActVarType = oldActivity.getVariabilityType(); |
| // oldActImmediateVarietiesList = new ArrayList(); |
| // oldActImmediateVarietiesList.addAll(AssociationHelper.getImmediateVarieties(oldActivity)); |
| // |
| // if (oldActVarElement != null && oldActVarType != null) { |
| // newActivity.setVariabilityBasedOnElement(oldActVarElement); |
| // newActivity.setVariabilityType(oldActVarType); |
| // } |
| // |
| // for (iter = oldActImmediateVarietiesList.iterator();iter.hasNext();) { |
| // VariabilityElement ve = (VariabilityElement) iter.next(); |
| // ve.setVariabilityBasedOnElement(newActivity); |
| // } |
| // |
| // // create temp ProcessPackage and move oldActivity to it |
| // ProcessPackage tempParent = UmaFactory.eINSTANCE.createProcessPackage(); |
| // tempParent.getProcessElements().add(oldActivity); |
| // tempParent.setName("temp PP for deletion"); //$NON-NLS-1$ |
| // |
| // // delete old Activity here - if fails, roll back by deleting new Activity |
| // command.execute(); |
| // |
| // if (!command.executed || command.failed) { |
| // // delete failed, or user selected cancel on the "delete |
| // // references" dialog |
| // // clean up new Activity |
| // |
| // undo(); |
| // |
| // newActivity = null; |
| // newContentDesc = null; |
| // return null; |
| // } |
| // |
| // // set new activity's GUID |
| // newActivity.setGuid(oldActivityGuid); |
| // |
| // // TODO: update editor contents |
| // |
| // // TODO: on rollback, library may be dirty because of the |
| // // container/contentdesc changes we've done |
| // // fix this by storing all the old activity's info, then only create |
| // // new activity after old one has |
| // // been deleted. |
| // |
| // Set modifiedResourceSet = new HashSet(); |
| // |
| // // save new activity and its presentation |
| // IFileBasedLibraryPersister.FailSafeMethodLibraryPersister persister = ContentDescriptionFactory |
| // .getMethodLibraryPersister().getFailSafePersister(); |
| // try { |
| // if (newActivity.eResource() != null) |
| // modifiedResourceSet.add(newActivity.eResource()); |
| // if (newActivity.getPresentation().eResource() != null) |
| // modifiedResourceSet.add(newActivity.getPresentation().eResource()); |
| // if (oldActivityContainer.eResource() != null) |
| // modifiedResourceSet.add(oldActivityContainer.eResource()); |
| // if (superAct.eResource() != null) |
| // modifiedResourceSet.add(superAct.eResource()); |
| // |
| // for (iter = modifiedResourceSet.iterator();iter.hasNext();) { |
| // Resource res = (Resource) iter.next(); |
| // persister.save(res); |
| // } |
| // persister.commit(); |
| // |
| // } catch (Exception e) { |
| // persister.rollback(); |
| // command.undo(); |
| // |
| // undo(); |
| // LibraryPlugin |
| // .getDefault() |
| // .getMsgDialog() |
| // .displayError( |
| // LibraryResources.convertActivityError_title, |
| // NLS.bind(LibraryResources.saveConvertedActivityError_msg, newActivity.getName()), |
| // LibraryResources.error_reason, |
| // e); |
| // newActivity = null; |
| // } |
| // } catch (Exception ex) { |
| // ex.printStackTrace(); |
| // command.undo(); |
| // undo(); |
| // LibraryPlugin |
| // .getDefault() |
| // .getMsgDialog() |
| // .displayError( |
| // LibraryResources.convertActivityError_title, |
| // NLS.bind(LibraryResources.convertActivityError_msg, newActivity.getName()), |
| // LibraryResources.error_reason, |
| // ex); |
| // newActivity = null; |
| // } |
| // return newActivity; |
| // } |
| // |
| // private static Activity createNewActivity(int newType) { |
| // switch (newType) { |
| // case UmaPackage.ACTIVITY: |
| // return UmaFactory.eINSTANCE.createActivity(); |
| // case UmaPackage.ITERATION: |
| // return UmaFactory.eINSTANCE.createIteration(); |
| // case UmaPackage.PHASE: |
| // return UmaFactory.eINSTANCE.createPhase(); |
| // default: |
| // return null; |
| // } |
| // } |
| // |
| // private static int getIndexInBreakdown(Activity act) { |
| // int index = -1; |
| // Activity superAct = UmaUtil.getParentActivity(act); |
| // if (superAct instanceof ProcessComponent) { |
| // // get process, find breakdown |
| // index = ((ProcessComponent)superAct).getProcess().getBreakdownElements().indexOf(act); |
| // } |
| // else { |
| // index = superAct.getBreakdownElements().indexOf(act); |
| // } |
| // return index; |
| // } |
| // |
| // private static void undo() { |
| // // undo moving of oldActivity to the fake PP |
| // if (oldActivityContainer != null) { |
| // oldActivityContainer.getProcessElements().remove(newActivity); |
| // if (!oldActivityContainer.getProcessElements().contains(oldActivity)) |
| // oldActivityContainer.getProcessElements().add(oldActivity); |
| // } |
| // // undo the breakdown link changes |
| // if (newActivity != null) { |
| // newActivity.getBreakdownElements().clear(); |
| // } |
| // if (oldActivityBreakdown != null && oldActivity != null) { |
| //// oldActivity.getBreakdownElements().clear(); |
| // oldActivity.getBreakdownElements().addAll(oldActivityBreakdown); |
| // } |
| // if (superActbreakdownList != null) { |
| // if (newActivity != null) { |
| // superActbreakdownList.remove(newActivity); |
| // } |
| // if (oldActivityBreakdownIndex != -1 && oldActivity != null && |
| // !superActbreakdownList.contains(oldActivity)) |
| // superActbreakdownList.add(oldActivityBreakdownIndex, oldActivity); |
| // } |
| // |
| // // variability |
| // if (oldActVarElement != null && oldActVarType != null) { |
| // oldActivity.setVariabilityBasedOnElement(oldActVarElement); |
| // oldActivity.setVariabilityType(oldActVarType); |
| // } |
| // |
| // if (oldActImmediateVarietiesList != null) { |
| // for (Iterator iter = oldActImmediateVarietiesList.iterator();iter.hasNext();) { |
| // VariabilityElement ve = (VariabilityElement) iter.next(); |
| // ve.setVariabilityBasedOnElement(oldActivity); |
| // } |
| // } |
| // |
| // |
| // } |
| } |