blob: d1fa2047c4767330eadfa9e7678a7718e1c99b8e [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.authoring.ui.properties;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
import org.eclipse.epf.authoring.ui.dialogs.ItemsFilterDialog;
import org.eclipse.epf.authoring.ui.filters.DescriptorProcessFilter;
import org.eclipse.epf.library.edit.IFilter;
import org.eclipse.epf.library.edit.TngAdapterFactory;
import org.eclipse.epf.library.edit.command.IActionManager;
import org.eclipse.epf.library.edit.itemsfilter.FilterConstants;
import org.eclipse.epf.uma.Activity;
import org.eclipse.epf.uma.BreakdownElement;
import org.eclipse.epf.uma.CompositeRole;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.Role;
import org.eclipse.epf.uma.RoleDescriptor;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
/**
* The composite role - role section
*
* @author Shilpa Toraskar
* @since 1.0
*
*/
public class CompositeRoleRoleSection extends OBSRelationSection {
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage)
*/
public void createControls(Composite parent,
TabbedPropertySheetPage tabbedPropertySheetPage) {
super.createControls(parent, tabbedPropertySheetPage);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#initContentProvider()
*/
protected void initContentProvider() {
contentProvider = new AdapterFactoryContentProvider(getAdapterFactory()) {
public Object[] getElements(Object object) {
element = getElement();
return getFilteredList(
((CompositeRole) element).getAggregatedRoles())
.toArray();
}
};
viewer.setContentProvider(contentProvider);
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#init()
*/
protected void init() {
super.init();
element = (CompositeRole) element;
String title = PropertiesResources.CompositeRole_Role_SectionTitle;
String desc = PropertiesResources.CompositeRole_Role_SectionDescription;
String table1 = PropertiesResources.CompositeRole_Role_Table1;
setTabData(title, desc, table1);
showAddFromProcessButton = true;
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#refresh()
*/
public void refresh() {
try {
if (getElement() instanceof CompositeRole) {
super.refresh();
element = (CompositeRole) getElement();
viewer.refresh();
}
} catch (Exception ex) {
logger.logError(
"Error refreshing Composite role - role sectin ", ex); //$NON-NLS-1$
}
}
/**
* Add composite roles
* @param items
* List of roles
*/
private void add(List items) {
// update the model
if (items != null) {
for (Iterator itor = items.iterator(); itor.hasNext();) {
Object obj = itor.next();
if (obj instanceof Role) {
actionMgr.doAction(IActionManager.ADD,
(CompositeRole) element, UmaPackage.eINSTANCE
.getCompositeRole_AggregatedRoles(),
(Role) obj, -1);
} else if (obj instanceof RoleDescriptor) {
Role role = ((RoleDescriptor) obj).getRole();
if (role != null)
actionMgr.doAction(IActionManager.ADD,
(CompositeRole) element, UmaPackage.eINSTANCE
.getCompositeRole_AggregatedRoles(),
role, -1);
else {
MessageFormat mf = new MessageFormat(
PropertiesResources.Process_CompositeRoleAssignError);
Object[] args = { ((RoleDescriptor) obj).getName(),
((CompositeRole) element).getName() };
AuthoringUIPlugin
.getDefault()
.getMsgDialog()
.displayInfo(
PropertiesResources.Process_AssignmentInfoTitle, mf.format(args));
}
}
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#remove(java.util.ArrayList)
*/
protected void remove(ArrayList rmItems) {
// update the model
if (!rmItems.isEmpty()) {
for (Iterator itor = rmItems.iterator(); itor.hasNext();) {
Role role = (Role) itor.next();
actionMgr.doAction(IActionManager.REMOVE,
(CompositeRole) element, UmaPackage.eINSTANCE
.getCompositeRole_AggregatedRoles(), role, -1);
}
}
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#openAddDialog()
*/
protected void openAddDialog() {
List existingElements = ((CompositeRole) element).getAggregatedRoles();
ItemsFilterDialog fd = new ItemsFilterDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), getFilter(), element,
FilterConstants.ROLES, existingElements);
fd.setBlockOnOpen(true);
fd.setTitle(FilterConstants.ROLES);
fd.open();
add(fd.getSelectedItems());
}
private List getExistingElements() {
return null;
}
/**
* @see org.eclipse.epf.authoring.ui.properties.OBSRelationSection#openAddFromProcessDialog()
*/
protected void openAddFromProcessDialog() {
String tabName = FilterConstants.ROLE_DESCRIPTORS;
List existingElements = getExistingElements();
Process process = (Process) getProcess(element);
IFilter descriptorFilter = getDescriptorFilter();
if (descriptorFilter != null && process != null) {
ItemsFilterDialog fd = new ItemsFilterDialog(PlatformUI
.getWorkbench().getActiveWorkbenchWindow().getShell(),
descriptorFilter, process, tabName, existingElements);
fd.setBlockOnOpen(true);
fd.setTitle(FilterConstants.ROLE_DESCRIPTORS);
fd.open();
add(fd.getSelectedItems());
}
}
/**
* Get parent Find parent until it's activity.
*
* @param element
* @return
* process object
*/
protected Object getProcess(BreakdownElement element) {
AdapterFactory aFactory = TngAdapterFactory.INSTANCE
.getOBS_ComposedAdapterFactory();
ItemProviderAdapter adapter = (ItemProviderAdapter) aFactory.adapt(
element, ITreeItemContentProvider.class);
Object parent = adapter.getParent(element);
if (parent instanceof Process) {
return parent;
} else {
return getProcess((BreakdownElement) parent);
}
}
/**
* Return descriptor process filter
*/
protected IFilter getDescriptorFilter() {
return new DescriptorProcessFilter(getConfiguration()) {
protected boolean childAccept(Object obj) {
if (obj instanceof Activity) {
// List list = ((Activity)obj).getBreakdownElements();
List list = new ArrayList();
getActivitiesInScope(TngAdapterFactory.INSTANCE
.getOBS_ComposedAdapterFactory(), element, list);
if (list.contains(obj))
return true;
else
return false;
}
if (obj instanceof CompositeRole) {
if (obj.equals(element))
return false;
}
if (obj instanceof RoleDescriptor)
return true;
return false;
}
};
}
}