diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/SetupTaskItemProvider.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/SetupTaskItemProvider.java | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/SetupTaskItemProvider.java b/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/SetupTaskItemProvider.java new file mode 100644 index 0000000000..5cf6ac990b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.releng.setup.edit/src/org/eclipse/emf/cdo/releng/setup/provider/SetupTaskItemProvider.java @@ -0,0 +1,349 @@ +/** + */ +package org.eclipse.emf.cdo.releng.setup.provider; + +import org.eclipse.emf.cdo.releng.setup.Configuration; +import org.eclipse.emf.cdo.releng.setup.SetupPackage; +import org.eclipse.emf.cdo.releng.setup.SetupTask; +import org.eclipse.emf.cdo.releng.setup.SetupTaskScope; +import org.eclipse.emf.cdo.releng.setup.Trigger; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IChildCreationExtender; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ItemProviderAdapter; +import org.eclipse.emf.edit.provider.ViewerNotification; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * This is the item provider adapter for a {@link org.eclipse.emf.cdo.releng.setup.SetupTask} object. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ +public class SetupTaskItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, + IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource +{ + private static final Map<Set<Trigger>, IItemLabelProvider> EXCLUSION_LABEL_PROVIDERS = new HashMap<Set<Trigger>, IItemLabelProvider>(); + + static + { + for (Set<Trigger> validTriggers : Trigger.LITERALS.keySet()) + { + final Map<Set<Trigger>, String> exclusionLabels = new HashMap<Set<Trigger>, String>(); + + for (Set<Trigger> triggers : Trigger.LITERALS.keySet()) + { + Set<Trigger> compliment = new LinkedHashSet<Trigger>(validTriggers); + compliment.removeAll(triggers); + exclusionLabels.put(triggers, Trigger.LITERALS.get(compliment)); + } + + EXCLUSION_LABEL_PROVIDERS.put(validTriggers, new IItemLabelProvider() + { + public String getText(Object object) + { + return exclusionLabels.get(object); + } + + public Object getImage(Object object) + { + return null; + } + }); + } + } + + /** + * This constructs an instance from a factory and a notifier. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public SetupTaskItemProvider(AdapterFactory adapterFactory) + { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) + { + if (itemPropertyDescriptors == null) + { + super.getPropertyDescriptors(object); + + addRequirementsPropertyDescriptor(object); + addRestrictionsPropertyDescriptor(object); + addScopePropertyDescriptor(object); + addExcludedTriggersPropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Requirements feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated NOT + */ + protected void addRequirementsPropertyDescriptor(Object object) + { + itemPropertyDescriptors.add(new ItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory) + .getRootAdapterFactory(), getResourceLocator(), getString("_UI_SetupTask_requirements_feature"), getString( + "_UI_PropertyDescriptor_description", "_UI_SetupTask_requirements_feature", "_UI_SetupTask_type"), + SetupPackage.Literals.SETUP_TASK__REQUIREMENTS, true, false, true, null, null, null) + { + private IItemLabelProvider labelProvider = new HierarchicalItemLabelProvider(itemDelegator); + + @Override + public IItemLabelProvider getLabelProvider(Object object) + { + return labelProvider; + } + + @Override + public Collection<?> getChoiceOfValues(Object object) + { + SetupTask setupTask = (SetupTask)object; + Collection<?> result = new ArrayList<Object>(super.getChoiceOfValues(object)); + for (Iterator<?> it = result.iterator(); it.hasNext();) + { + Object value = it.next(); + if (value instanceof SetupTask && ((SetupTask)value).requires(setupTask)) + { + // Remove items that would cause a circularity. + it.remove(); + } + } + return result; + } + + }); + } + + /** + * This adds a property descriptor for the Restrictions feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated NOT + */ + protected void addRestrictionsPropertyDescriptor(Object object) + { + itemPropertyDescriptors.add(new ItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory) + .getRootAdapterFactory(), getResourceLocator(), getString("_UI_SetupTask_restrictions_feature"), getString( + "_UI_PropertyDescriptor_description", "_UI_SetupTask_restrictions_feature", "_UI_SetupTask_type"), + SetupPackage.Literals.SETUP_TASK__RESTRICTIONS, true, false, true, null, null, null) + { + private IItemLabelProvider labelProvider = new HierarchicalItemLabelProvider(itemDelegator); + + @Override + public IItemLabelProvider getLabelProvider(Object object) + { + return labelProvider; + } + }); + } + + /** + * This adds a property descriptor for the Scope feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected void addScopePropertyDescriptor(Object object) + { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_SetupTask_scope_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_SetupTask_scope_feature", "_UI_SetupTask_type"), + SetupPackage.Literals.SETUP_TASK__SCOPE, false, false, false, ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, + null)); + } + + /** + * This adds a property descriptor for the Excluded Triggers feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated NOT + */ + protected void addExcludedTriggersPropertyDescriptor(Object object) + { + itemPropertyDescriptors.add(new ItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory) + .getRootAdapterFactory(), getResourceLocator(), getString("_UI_SetupTask_excludedTriggers_feature"), getString( + "_UI_PropertyDescriptor_description", "_UI_SetupTask_excludedTriggers_feature", "_UI_SetupTask_type"), + SetupPackage.Literals.SETUP_TASK__EXCLUDED_TRIGGERS, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null) + { + @Override + public IItemLabelProvider getLabelProvider(Object object) + { + final SetupTask setupTask = (SetupTask)object; + return EXCLUSION_LABEL_PROVIDERS.get(setupTask.getValidTriggers()); + } + + @Override + public String getDisplayName(Object object) + { + return "Triggers"; + } + + @Override + public String getDescription(Object object) + { + return "The triggers for which the task is applicable"; + } + + @Override + public Collection<?> getChoiceOfValues(Object object) + { + SetupTask setupTask = (SetupTask)object; + Set<Trigger> validTriggers = setupTask.getValidTriggers(); + List<Set<Trigger>> result = new ArrayList<Set<Trigger>>(Trigger.LITERALS.keySet()); + for (Iterator<Set<Trigger>> it = result.iterator(); it.hasNext();) + { + if (!validTriggers.containsAll(it.next())) + { + it.remove(); + } + } + Collections.reverse(result); + return result; + } + }); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean hasChildren(Object object) + { + return hasChildren(object, true); + } + + /** + * This returns the label text for the adapted class. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public String getText(Object object) + { + SetupTaskScope labelValue = ((SetupTask)object).getScope(); + String label = labelValue == null ? null : labelValue.toString(); + return label == null || label.length() == 0 ? getString("_UI_SetupTask_type") : getString("_UI_SetupTask_type") + + " " + label; + } + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public void notifyChanged(Notification notification) + { + updateChildren(notification); + + switch (notification.getFeatureID(SetupTask.class)) + { + case SetupPackage.SETUP_TASK__SCOPE: + case SetupPackage.SETUP_TASK__EXCLUDED_TRIGGERS: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) + { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + + /** + * Return the resource locator for this item provider's resources. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public ResourceLocator getResourceLocator() + { + return ((IChildCreationExtender)adapterFactory).getResourceLocator(); + } + + /** + * @author Eike Stepper + */ + private static class HierarchicalItemLabelProvider implements IItemLabelProvider + { + private AdapterFactoryItemDelegator itemDelegator; + + public HierarchicalItemLabelProvider(AdapterFactoryItemDelegator itemDelegator) + { + this.itemDelegator = itemDelegator; + } + + public String getText(Object object) + { + StringBuilder builder = new StringBuilder(); + while (object != null && !(object instanceof Configuration)) + { + if (builder.length() != 0) + { + builder.insert(0, " - "); + } + + String text = itemDelegator.getText(object); + builder.insert(0, text); + + object = itemDelegator.getParent(object); + } + + return builder.toString(); + } + + public Object getImage(Object object) + { + return itemDelegator.getImage(object); + } + } +} |