//------------------------------------------------------------------------------ // 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.authoring.ui.filters; import org.eclipse.epf.library.edit.configuration.CategorizedProcessesItemProvider; import org.eclipse.epf.library.edit.configuration.ProcessesItemProvider; import org.eclipse.epf.library.edit.itemsfilter.FilterHelper; import org.eclipse.epf.library.edit.ui.IActionTypeProvider; import org.eclipse.epf.library.edit.util.TngUtil; import org.eclipse.epf.uma.Activity; import org.eclipse.epf.uma.BreakdownElement; import org.eclipse.epf.uma.CapabilityPattern; import org.eclipse.epf.uma.DeliveryProcess; import org.eclipse.epf.uma.MethodConfiguration; import org.eclipse.epf.uma.Process; import org.eclipse.epf.uma.ProcessComponent; import org.eclipse.epf.uma.ProcessPackage; import org.eclipse.jface.viewers.TableViewer; /** * Activity Filter for doing Process copy/extend * * @author Shashidhar Kannoori * @author Shilpa Toraskar * @author Phong Nguyen Le * @since 1.0 */ public class ProcessActivityFilter extends DescriptorConfigurationFilter { private Activity activity = null; private int command = 0; private ActivityVariabilityFilter delegateFilter; public ProcessActivityFilter(MethodConfiguration config, TableViewer viewer, String tabName, Activity activity, int command) { super(config, viewer, tabName); this.activity = activity; this.command = command; delegateFilter = new ActivityVariabilityFilter(config, viewer, tabName, activity); } /* (non-Javadoc) * @see org.eclipse.epf.authoring.ui.filters.DescriptorConfigurationFilter#setHelper(org.eclipse.epf.library.edit.itemsfilter.FilterHelper) */ public void setHelper(FilterHelper helper) { super.setHelper(helper); delegateFilter.setHelper(helper); } /* (non-Javadoc) * @see org.eclipse.epf.authoring.ui.filters.DescriptorConfigurationFilter#accept(java.lang.Object) */ public boolean accept(Object obj) { // any activity can be deep-copied // if(command == IActionTypeProvider.DEEP_COPY && (obj instanceof Activity || obj instanceof ProcessComponent)) { return true; } return super.accept(obj); } public boolean childAccept(Object obj) { if (obj instanceof ProcessesItemProvider) { return true; } if (obj instanceof CategorizedProcessesItemProvider) { return true; } // if ((obj instanceof Activity) || obj instanceof ProcessPackage) { // if (obj instanceof ProcessComponent) { // // if source and taget is same process, block it // Process proc = ((ProcessComponent) obj).getProcess(); // if (!(this.command == IActionTypeProvider.COPY)) { // if (proc.equals(this.activity)) // return false; // } // } // if (obj instanceof Process) { // // if source and taget is same process, block it // Process proc = (Process) obj; // if (!(this.command == IActionTypeProvider.COPY)) { // if (proc.equals(this.activity)) // return false; // } // } // // if (obj instanceof BreakdownElement) { // Process srcProc = TngUtil // .getOwningProcess((BreakdownElement) obj); // Process targetProc = TngUtil // .getOwningProcess((BreakdownElement) this.activity); // if (srcProc instanceof DeliveryProcess // && targetProc instanceof CapabilityPattern) { // return false; // } // } // if (obj instanceof Process) { // Process proc = (Process) obj; // if (proc.equals(this.activity)) // return false; // } // // return true; // } else // return false; if(obj instanceof Activity || obj instanceof ProcessPackage) { switch(command) { case IActionTypeProvider.EXTEND: return delegateFilter.accept(obj); case IActionTypeProvider.COPY: // disallow copying from delivery process to capability pattern // Process srcProc = null; if (obj instanceof ProcessComponent) { // if source and taget is same process, block it srcProc = ((ProcessComponent) obj).getProcess(); } else if (obj instanceof BreakdownElement) { BreakdownElement be = (BreakdownElement) obj; srcProc = TngUtil.getOwningProcess(be); } if(srcProc != null) { Process targetProc = TngUtil.getOwningProcess(this.activity); if (srcProc instanceof DeliveryProcess && targetProc instanceof CapabilityPattern) { return false; } else { return true; } } default: return true; } } return false; } }