| //------------------------------------------------------------------------------ |
| // 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.dialogs; |
| |
| import java.text.MessageFormat; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; |
| import org.eclipse.epf.authoring.ui.AuthoringUIResources; |
| import org.eclipse.epf.authoring.ui.filters.AllFilter; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.configuration.ConfigurationHelper; |
| import org.eclipse.epf.library.edit.IFilter; |
| import org.eclipse.epf.library.edit.TngAdapterFactory; |
| import org.eclipse.epf.library.edit.itemsfilter.CategorizedProcessesItemProvider; |
| import org.eclipse.epf.library.edit.itemsfilter.ContentCategoriesGroupItemProvider; |
| import org.eclipse.epf.library.edit.itemsfilter.FilterConstants; |
| import org.eclipse.epf.library.edit.itemsfilter.ProcessesItemProvider; |
| import org.eclipse.epf.library.edit.util.MethodElementUtil; |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| import org.eclipse.epf.uma.BreakdownElement; |
| import org.eclipse.epf.uma.ContentElement; |
| import org.eclipse.epf.uma.ContentPackage; |
| import org.eclipse.epf.uma.CustomCategory; |
| import org.eclipse.epf.uma.Discipline; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.Process; |
| import org.eclipse.epf.uma.ProcessComponent; |
| import org.eclipse.epf.uma.ProcessPackage; |
| import org.eclipse.epf.uma.RoleSet; |
| import org.eclipse.epf.uma.VariabilityElement; |
| import org.eclipse.epf.uma.util.AssociationHelper; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| import org.eclipse.ui.PlatformUI; |
| |
| /** |
| * The dialog for selecting element to detetmine which element editor to open in |
| * case of variability relationship. This will only take effect if user |
| * double-clicks from configuration view. |
| * |
| * @author Shilpa Toraskar |
| * @since 1.0 |
| */ |
| public class ContributionSelection { |
| |
| private HashSet filterElementList = new HashSet(); |
| |
| private class ContributionFilter extends AllFilter { |
| public boolean accept(Object obj) { |
| Object contentElement = helper.getContentElement(); |
| if (contentElement != null) { |
| if (obj.equals(helper.getContentElement())) |
| return false; |
| } |
| |
| if (helper.getAlreadySelectedList() != null) { |
| if (obj instanceof ProcessComponent) { |
| if (helper.getAlreadySelectedList().contains( |
| ((ProcessComponent) obj).getProcess())) |
| return false; |
| } else { |
| if (helper.getAlreadySelectedList().contains(obj)) |
| return false; |
| } |
| } |
| |
| if (obj instanceof CustomCategory) { |
| if (TngUtil.isRootCustomCategory((CustomCategory) obj)) { |
| if (((CustomCategory) obj).getCategorizedElements() |
| .isEmpty()) |
| return false; |
| } |
| } |
| if (!helper.matchPattern(obj)) |
| return false; |
| |
| // if(obj instanceof TermDefinition) return false; |
| |
| if (obj instanceof MethodPlugin) { |
| if (obj instanceof MethodPlugin) { |
| if (contentElement != null) { |
| if (MethodElementUtil.getAllModels(contentElement) |
| .contains(obj)) |
| return true; |
| else |
| return false; |
| } else { |
| return true; |
| } |
| } |
| } |
| if (obj instanceof ContentPackage) |
| return true; |
| if (obj instanceof ContentCategoriesGroupItemProvider) { |
| Collection list = ((ContentCategoriesGroupItemProvider) obj) |
| .getChildren(obj); |
| if (list.isEmpty()) |
| return false; |
| else |
| return true; |
| } |
| if (obj instanceof ProcessesItemProvider) { |
| Collection list = ((ProcessesItemProvider) obj) |
| .getChildren(obj); |
| for (Iterator ior = list.iterator(); ior.hasNext();) { |
| Object object = ior.next(); |
| if (((CategorizedProcessesItemProvider) object) |
| .getChildren(object).isEmpty()) |
| ior.remove(); |
| } |
| if (list.isEmpty()) |
| return false; |
| else |
| return true; |
| } |
| |
| if (childAccept(obj)) |
| return true; |
| return false; |
| } |
| |
| public boolean childAccept(Object obj) { |
| if (obj instanceof CustomCategory) { |
| return anyCategorizedElementAccepted((CustomCategory) obj, |
| filterElementList); |
| } |
| if ((obj instanceof ContentElement) |
| && filterElementList.contains(obj)) { |
| return true; |
| } |
| if(obj instanceof Process){ |
| if(filterElementList.contains(obj)){ |
| return true; |
| } |
| } |
| if(obj instanceof ProcessPackage) { |
| return checkProcessPkg(obj); |
| } |
| if(obj instanceof Process) { |
| return checkProcessElements(obj); |
| } |
| return false; |
| } |
| }; |
| |
| public boolean checkProcessPkg(Object obj){ |
| |
| List list = new ArrayList(); |
| if(obj instanceof ProcessPackage){ |
| if(filterElementList.contains(obj)) |
| return true; |
| if(obj instanceof ProcessComponent){ |
| if(filterElementList.contains(((ProcessComponent)obj).getProcess())) |
| return true; |
| list = ((ProcessComponent)obj).getProcess().getBreakdownElements(); |
| }else{ |
| list = ((ProcessPackage)obj).getChildPackages(); |
| } |
| |
| } |
| for(Iterator iterator = list.iterator(); iterator.hasNext();) |
| { |
| Object child = iterator.next(); |
| if(child instanceof ProcessComponent){ |
| if(checkProcessPkg(child)) return true; |
| } |
| if(child instanceof BreakdownElement){ |
| if(filterElementList.contains(child)) return true; |
| } |
| } |
| return false; |
| } |
| |
| /** |
| * Check any process elements |
| * @param obj |
| * @return |
| * Boolean value |
| */ |
| public boolean checkProcessElements(Object obj){ |
| List list = ((Process)obj).getBreakdownElements(); |
| for(Iterator iterator = list.iterator(); iterator.hasNext();) |
| { |
| Object child = iterator.next(); |
| if(child instanceof BreakdownElement){ |
| if(filterElementList.contains(((BreakdownElement)child))) |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| /** |
| * Checks whether any categorized elements to be accepted. |
| * @param obj |
| * @param list |
| * @return |
| * Boolean value which indicates whether any categoriezed elements to be accepted |
| */ |
| public boolean anyCategorizedElementAccepted(CustomCategory obj, |
| HashSet list) { |
| if (list.contains(obj)) |
| return true; |
| List elements = obj.getCategorizedElements(); |
| for (Iterator iterator = elements.iterator(); iterator.hasNext();) { |
| Object object = iterator.next(); |
| if (object instanceof CustomCategory) { |
| if (list.contains(object)) |
| return true; |
| anyCategorizedElementAccepted((CustomCategory) object, list); |
| } |
| } |
| return false; |
| } |
| |
| |
| /** |
| * Display contribution selection dialog which lists elements and it's |
| * contributors. |
| */ |
| public ContributionSelection() { |
| } |
| |
| /** |
| * It shows dialog box for all the contributors. User is expected to select |
| * one. |
| * |
| * @param element |
| * Element for which contributor are shown |
| * @return |
| * Selected contributor |
| */ |
| public Object getSelectedContributor(VariabilityElement element) { |
| filterElementList = new HashSet(); |
| // Get the current configuration. |
| MethodConfiguration config = LibraryService.getInstance() |
| .getCurrentMethodConfiguration(); |
| |
| // get list of contributors |
| List contributors = ConfigurationHelper |
| .getContributors(element, config); |
| if ((contributors != null) && (!contributors.isEmpty())) { |
| // clear the array |
| List elementList = new ArrayList(); |
| |
| // add element and it's contributors |
| elementList.add(element); |
| elementList.addAll(contributors); |
| filterElementList.addAll(elementList); |
| for (Iterator itor = elementList.iterator(); itor.hasNext();) { |
| Object e = itor.next(); |
| List groupings = null; |
| if (e instanceof Discipline) { |
| groupings = AssociationHelper |
| .getDisciplineGroups((Discipline) e); |
| |
| } |
| if (e instanceof RoleSet) { |
| groupings = AssociationHelper |
| .getRoleSetGroups((RoleSet) e); |
| } |
| |
| if ((groupings != null) && (!groupings.isEmpty())) |
| filterElementList.addAll(groupings); |
| |
| } |
| |
| IFilter filter = new ContributionFilter(); |
| // ItemsFilterDialog dlg = new ItemsFilterDialog(PlatformUI |
| // .getWorkbench().getActiveWorkbenchWindow().getShell(), |
| // filter, null, FilterConstants.CONFIG_CONTENT_ELEMENT); |
| // dlg.setViewerSelectionSingle(true); |
| String[] str = new String[] { FilterConstants.CONFIG_CONTENT_ELEMENT }; |
| ConfigurationAddViewsDialog dlg = new ConfigurationAddViewsDialog( |
| PlatformUI.getWorkbench().getActiveWorkbenchWindow() |
| .getShell()); |
| dlg.setFilter(filter); |
| dlg.setTitle(FilterConstants.CONFIG_CONTENT_ELEMENT); |
| dlg.setViewerSelectionSingle(true); |
| dlg.setTypes(str); |
| dlg.setInput(UmaUtil.getMethodLibrary((EObject) element)); |
| dlg.setContentProvider(new AdapterFactoryContentProvider( |
| TngAdapterFactory.INSTANCE |
| .getItemsFilter_AdapterFactory(filter)), |
| TngAdapterFactory.INSTANCE |
| .getItemsFilter_ComposedAdapterFactory()); |
| dlg.setBlockOnOpen(true); |
| |
| String title = MessageFormat |
| .format( |
| AuthoringUIResources.ContributionSelection_filterdialog_title, |
| new String[] { element.getName() }); |
| |
| dlg.setTitle(title); |
| dlg.setBlockOnOpen(true); |
| dlg.open(); |
| |
| List result = dlg.getSelectedItems(); |
| if ((result == null) || (result.isEmpty())) |
| return null; |
| else |
| return result.get(0); |
| } |
| return element; |
| } |
| |
| } |