| //------------------------------------------------------------------------------ |
| // 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.edit.process.command; |
| |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.epf.uma.Deliverable; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.eclipse.epf.uma.WorkProductDescriptor; |
| |
| |
| /** |
| * Command to synchronize attributes and deliverable parts of a deliverable descriptor |
| * |
| * @author Phong Nguyen Le - Feb 9, 2006 |
| * @since 1.0 |
| */ |
| public class SynchronizeDeliverableDescriptorCommand extends |
| BasicSynchronizeDescriptorCommand { |
| |
| private Set descriptorsToRefresh; |
| private Map wpDescToDeliverableParts; |
| private DescriptorUpdateBatchCommand updateDeliverablePartsCmd; |
| |
| /** |
| * @param descriptor |
| * @param synchFeatures |
| * @param config |
| */ |
| public SynchronizeDeliverableDescriptorCommand(WorkProductDescriptor descriptor, |
| Set synchFeatures, MethodConfiguration config) { |
| super(descriptor, synchFeatures, config); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.epf.library.edit.process.command.BasicSynchronizeDescriptorCommand#execute() |
| */ |
| public void execute() { |
| // update linked element if needed |
| // synchronize attributes |
| // |
| super.execute(); |
| |
| if(descriptorsToRefresh == null) { |
| descriptorsToRefresh = new HashSet(); |
| } |
| else { |
| descriptorsToRefresh.clear(); |
| } |
| if(wpDescToDeliverableParts == null) { |
| wpDescToDeliverableParts = new HashMap(); |
| } |
| else { |
| wpDescToDeliverableParts.clear(); |
| } |
| WorkProductDescriptor wpd = (WorkProductDescriptor) descriptor; |
| ProcessCommandUtil.createDeliverableParts(wpd, (Deliverable)wpd.getWorkProduct(), config, |
| wpDescToDeliverableParts, descriptorsToRefresh); |
| |
| if(!wpDescToDeliverableParts.isEmpty() || !descriptorsToRefresh.isEmpty()) { |
| if(updateDeliverablePartsCmd == null) { |
| updateDeliverablePartsCmd = new DescriptorUpdateBatchCommand(true, synchFeatures, config); |
| updateDeliverablePartsCmd.setDescriptorsToRefresh(descriptorsToRefresh); |
| } |
| else { |
| updateDeliverablePartsCmd.getObjectToNewFeatureValuesMap().clear(); |
| } |
| for (Iterator iter = wpDescToDeliverableParts.entrySet().iterator(); iter |
| .hasNext();) { |
| Map.Entry entry = (Map.Entry) iter.next(); |
| Object wpDesc = entry.getKey(); |
| updateDeliverablePartsCmd.getObjectToNewFeatureValuesMap().put(wpDesc, |
| Collections.singletonMap(UmaPackage.eINSTANCE.getWorkProductDescriptor_DeliverableParts(), entry.getValue())); |
| } |
| |
| updateDeliverablePartsCmd.execute(); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.epf.library.edit.process.command.BasicSynchronizeDescriptorCommand#undo() |
| */ |
| public void undo() { |
| if(updateDeliverablePartsCmd != null) { |
| updateDeliverablePartsCmd.undo(); |
| } |
| |
| super.undo(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.emf.common.command.AbstractCommand#dispose() |
| */ |
| public void dispose() { |
| super.dispose(); |
| |
| if(updateDeliverablePartsCmd != null) { |
| updateDeliverablePartsCmd.dispose(); |
| } |
| } |
| } |