/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company 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:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.uibindings.internal;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.eclipse.core.databinding.observable.DisposeEvent;
import org.eclipse.core.databinding.observable.IDisposeListener;
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.common.command.IdentityCommand;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
import org.eclipse.emf.ecore.util.EObjectEList;
import org.eclipse.emf.ecore.util.EObjectResolvingEList;
import org.eclipse.emf.ecore.util.EcoreEMap;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.rcpcompany.uibindings.BindingMessageSeverity;
import com.rcpcompany.uibindings.Constants;
import com.rcpcompany.uibindings.DecorationPosition;
import com.rcpcompany.uibindings.IArgumentContext;
import com.rcpcompany.uibindings.IArgumentInformation;
import com.rcpcompany.uibindings.IArgumentProvider;
import com.rcpcompany.uibindings.IArgumentValue;
import com.rcpcompany.uibindings.IAssignmentParticipantDescriptor;
import com.rcpcompany.uibindings.IAssignmentParticipantsManager;
import com.rcpcompany.uibindings.IBinding;
import com.rcpcompany.uibindings.IBindingContext;
import com.rcpcompany.uibindings.IBindingDataType;
import com.rcpcompany.uibindings.IBindingMessage;
import com.rcpcompany.uibindings.IBindingMessageTarget;
import com.rcpcompany.uibindings.ICellEditorFactory;
import com.rcpcompany.uibindings.IColumnBinding;
import com.rcpcompany.uibindings.IConstraintValidatorAdapterConstraintDescriptor;
import com.rcpcompany.uibindings.IControlFactory;
import com.rcpcompany.uibindings.IDecoratorProvider;
import com.rcpcompany.uibindings.IEMFObservableFactory;
import com.rcpcompany.uibindings.IEMFObservableFactoryDescriptor;
import com.rcpcompany.uibindings.IFormatterProvider;
import com.rcpcompany.uibindings.IManager;
import com.rcpcompany.uibindings.IModelArgumentMediator;
import com.rcpcompany.uibindings.IModelClassInfo;
import com.rcpcompany.uibindings.IModelFeatureInfo;
import com.rcpcompany.uibindings.IObservableListFactory;
import com.rcpcompany.uibindings.IQuickfixProposal;
import com.rcpcompany.uibindings.IQuickfixProposalProcessor;
import com.rcpcompany.uibindings.IQuickfixProposalProcessorContext;
import com.rcpcompany.uibindings.IQuickfixProposalProcessorDescriptor;
import com.rcpcompany.uibindings.ITreeItemDescriptor;
import com.rcpcompany.uibindings.ITreeItemRelation;
import com.rcpcompany.uibindings.IUIAttribute;
import com.rcpcompany.uibindings.IUIAttributeFactory;
import com.rcpcompany.uibindings.IUIAttributeFactoryDescriptor;
import com.rcpcompany.uibindings.IUIBindingDecoratorExtender;
import com.rcpcompany.uibindings.IUIBindingDecoratorExtenderDescriptor;
import com.rcpcompany.uibindings.IUIBindingsFactory;
import com.rcpcompany.uibindings.IUIBindingsPackage;
import com.rcpcompany.uibindings.IValueBinding;
import com.rcpcompany.uibindings.IValueBindingCell;
import com.rcpcompany.uibindings.IViewerBinding;
import com.rcpcompany.uibindings.ModelValueKind;
import com.rcpcompany.uibindings.TextCommitStrategy;
import com.rcpcompany.uibindings.UIBindingsUtils;
import com.rcpcompany.uibindings.initializers.DefaultEObjectInitializer;
import com.rcpcompany.uibindings.internal.formatters.DefaultFormatterProvider;
import com.rcpcompany.uibindings.internal.observableFactories.DefaultEMFObservableFactory;
import com.rcpcompany.uibindings.model.utils.BasicUtils;
import com.rcpcompany.uibindings.participants.IAssignmentParticipant;
import com.rcpcompany.uibindings.participants.IAssignmentParticipantContext;
import com.rcpcompany.uibindings.participants.IDeleteParticipant;
import com.rcpcompany.uibindings.participants.IDeleteParticipantContext;
import com.rcpcompany.uibindings.participants.IInitializationParticipant;
import com.rcpcompany.uibindings.participants.IInitializationParticipantContext;
import com.rcpcompany.uibindings.units.IUnitBindingSupport;
import com.rcpcompany.uibindings.utils.UIBEcoreUtils;
import com.rcpcompany.uibindings.validators.IConstraintValidatorAdapterConstraintProvider;
import com.rcpcompany.utils.basic.ClassUtils;
import com.rcpcompany.utils.extensionpoints.CEObjectHolder;
import com.rcpcompany.utils.logging.LogUtils;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Manager</b></em>'. <!--
* end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getEditingDomain <em>Editing Domain
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getFormToolkit <em>Form Toolkit</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getArgumentInformation <em>Argument
* Information</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getProviders <em>Providers</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getUiAttributeFactories <em>Ui
* Attribute Factories</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getDecoratorExtenders <em>Decorator
* Extenders</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getModelArgumentMediators <em>Model
* Argument Mediators</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getModelArgumentMediatorClasses <em>
* Model Argument Mediator Classes</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getTextCommitStrategy <em>Text Commit
* Strategy</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getTextCommitStrategyDelay <em>Text
* Commit Strategy Delay</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isEditCellAnyKey <em>Edit Cell Any Key
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isEditCellSingleClick <em>Edit Cell
* Single Click</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getMessageDecorationPosition <em>
* Message Decoration Position</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getMessageDecorationMinimumSeverity
* <em>Message Decoration Minimum Severity</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getAlternativeDecorationPosition <em>
* Alternative Decoration Position</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isAutoApplySingleQuickfix <em>Auto
* Apply Single Quickfix</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isAlternateRowColors <em>Alternate Row
* Colors</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isValidationErrorsAreFatal <em>
* Validation Errors Are Fatal</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getValidationDelay <em>Validation Delay
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getValidationDelayWindow <em>Validation
* Delay Window</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isRequiredVBImageDecorationShown <em>
* Required VB Image Decoration Shown</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isAssistVBImageDecorationShown <em>
* Assist VB Image Decoration Shown</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isQuickfixVBImageDecorationShown <em>
* Quickfix VB Image Decoration Shown</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isViewNavigationRecorded <em>View
* Navigation Recorded</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getModelInfo <em>Model Info</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getTreeItems <em>Tree Items</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getClipboard <em>Clipboard</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getObservableFactories <em>Observable
* Factories</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getQuickfixProposalProcessors <em>
* Quickfix Proposal Processors</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getConstraintProviders <em>Constraint
* Providers</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getContexts <em>Contexts</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getFormatterProvider <em>Formatter
* Provider</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#isDeleteHandlerCheckEnabled <em>Delete
* Handler Check Enabled</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getCommandIDs <em>Command IDs</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.ManagerImpl#getAssignmentParticiantsManager <em>
* Assignment Particiants Manager</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class ManagerImpl extends BaseObjectImpl implements IManager {
/**
* The key information for a binding provider in {@link Manager#myBindingCache}.
*/
private static final class BindingProviderKey {
/**
* Constructs and returns a new key object.
*
* @param modelType the wanted model type
* @param modelKind the wanted model kind (value, list, ...)
* @param uiType the wanted UI type
* @param type the wanted type (optional)
*/
protected BindingProviderKey(Class<?> modelType, ModelValueKind modelKind, Class<?> uiType, String type) {
this.modelType = modelType;
this.modelKind = modelKind;
this.uiType = uiType;
this.type = type;
}
public Class<?> modelType;
public ModelValueKind modelKind;
public Class<?> uiType;
public String type;
@Override
public String toString() {
return "getkey(" + modelType + "(" + modelKind + "), " + uiType + ", " + type + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((modelType == null) ? 0 : modelType.hashCode());
result = prime * result + ((modelKind == null) ? 0 : modelKind.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + ((uiType == null) ? 0 : uiType.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final BindingProviderKey other = (BindingProviderKey) obj;
if (modelKind != other.modelKind) return false;
if (!BasicUtils.equals(modelType, other.modelType)) return false;
if (!BasicUtils.equals(type, other.type)) return false;
if (!BasicUtils.equals(uiType, other.uiType)) return false;
return true;
}
}
@Override
public IDecoratorProvider getProvider(Class<?> modelType, ModelValueKind modelKind, Class<?> uiType, String type) {
if (type == null) {
type = ""; //$NON-NLS-1$
}
if (Activator.getDefault().TRACE_DECORATORS) {
LogUtils.debug(
this,
"getProvider(" + modelType.getName() + "(" + modelKind + ") , " + uiType.getName() + ", " + type + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
final BindingProviderKey key = new BindingProviderKey(modelType, modelKind, uiType, type);
IDecoratorProvider provider = myBindingCache.get(key);
if (provider != null) return provider;
/*
* Need to find a provider :-)
*/
final Class<?>[] modelTypeOrder = Platform.getAdapterManager().computeClassOrder(modelType);
final Class<?>[] uiTypeOrder = Platform.getAdapterManager().computeClassOrder(uiType);
final List<IDecoratorProvider> ps = new ArrayList<IDecoratorProvider>();
int psPriority = 1000000;
for (final IDecoratorProvider p : getProviders()) {
if (!type.equals(p.getType())) {
continue;
}
if (modelKind != p.getModelValueKind()) {
continue;
}
boolean found = false;
int priority = 0;
int prio = 0;
if (!p.eIsSet(IUIBindingsPackage.Literals.DECORATOR_PROVIDER__MODEL_TYPES)) {
found = true;
}
for (final String t : p.getModelTypes()) {
prio = 0;
/*
* If exact model type matching is wanted when just test again the model type
* itself.
*
* Otherwise test against model type order as found above.
*/
if (p.isExactModelTypeMatch()) {
if (modelType.getName().equals(t)) {
found = true;
}
} else {
for (final Class<?> c : modelTypeOrder) {
if (c.getName().equals(t)) {
found = true;
break;
}
prio++;
}
}
if (found) {
break;
}
}
if (!found) {
continue;
}
priority += prio;
found = false;
for (final String t : p.getUiTypes()) {
prio = 0;
for (final Class<?> c : uiTypeOrder) {
if (c.getName().equals(t)) {
found = true;
break;
}
}
if (found) {
break;
}
}
if (!found) {
continue;
}
priority += prio;
if (priority > psPriority) {
continue;
}
if (priority < psPriority) {
ps.clear();
psPriority = priority;
}
ps.add(p);
}
/*
* Three cases: no match, one match, many matches
*/
switch (ps.size()) {
case 0:
if (Activator.getDefault().TRACE_DECORATORS) {
LogUtils.error(this, "getProvider -- > null"); //$NON-NLS-1$
}
return null;
default:
/*
* Find the right match
*/
// TODO: Find the right match
LogUtils.error(this, "TODO: find the right match, got priority " + psPriority + " (" //$NON-NLS-1$ //$NON-NLS-2$
+ modelType.getSimpleName() + ", " + uiType.getSimpleName() + ", " + type + "): " + ps.size() //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ " matches:\n" + ps); //$NON-NLS-1$
//$FALL-THROUGH$ fallthrough
case 1:
provider = ps.get(0);
break;
}
myBindingCache.put(key, provider);
if (Activator.getDefault().TRACE_DECORATORS) {
LogUtils.debug(this, "getProvider -- > " + provider.getId()); //$NON-NLS-1$
}
return provider;
}
private IEMFObservableFactory theDefaultObservableFactory = null;
/**
* A repository of all defined UI attribute factories.
*/
protected final Map<BindingProviderKey, IDecoratorProvider> myBindingCache = new HashMap<BindingProviderKey, IDecoratorProvider>();
/**
* The default value of the '{@link #getEditingDomain() <em>Editing Domain</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getEditingDomain()
* @generated
* @ordered
*/
protected static final EditingDomain EDITING_DOMAIN_EDEFAULT = null;
/**
* The cached value of the '{@link #getEditingDomain() <em>Editing Domain</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getEditingDomain()
* @generated
* @ordered
*/
protected EditingDomain editingDomain = EDITING_DOMAIN_EDEFAULT;
/**
* The default value of the '{@link #getFormToolkit() <em>Form Toolkit</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormToolkit()
* @generated
* @ordered
*/
protected static final FormToolkit FORM_TOOLKIT_EDEFAULT = null;
/**
* The cached value of the '{@link #getFormToolkit() <em>Form Toolkit</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormToolkit()
* @generated
* @ordered
*/
protected FormToolkit formToolkit = FORM_TOOLKIT_EDEFAULT;
/**
* The cached value of the '{@link #getArgumentInformation() <em>Argument Information</em>}'
* map. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getArgumentInformation()
* @generated
* @ordered
*/
protected EMap<String, IArgumentInformation> argumentInformation;
/**
* The cached value of the '{@link #getProviders() <em>Providers</em>}' containment reference
* list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getProviders()
* @generated
* @ordered
*/
protected EList<IDecoratorProvider> providers;
/**
* The cached value of the '{@link #getUiAttributeFactories() <em>Ui Attribute Factories</em>}'
* reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getUiAttributeFactories()
* @generated
* @ordered
*/
protected EList<IUIAttributeFactoryDescriptor> uiAttributeFactories;
/**
* The cached value of the '{@link #getDecoratorExtenders() <em>Decorator Extenders</em>}'
* reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getDecoratorExtenders()
* @generated
* @ordered
*/
protected EList<IUIBindingDecoratorExtenderDescriptor> decoratorExtenders;
/**
* The cached value of the '{@link #getModelArgumentMediators()
* <em>Model Argument Mediators</em>}' attribute list. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getModelArgumentMediators()
* @generated
* @ordered
*/
protected EList<CEObjectHolder<IModelArgumentMediator>> modelArgumentMediators;
/**
* The cached value of the '{@link #getModelArgumentMediatorClasses()
* <em>Model Argument Mediator Classes</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getModelArgumentMediatorClasses()
* @generated NOT
* @ordered
*/
protected Map<EClassifier, Object> modelArgumentMediatorClasses = new HashMap<EClassifier, Object>();
/**
* The default value of the '{@link #getTextCommitStrategy() <em>Text Commit Strategy</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTextCommitStrategy()
* @generated
* @ordered
*/
protected static final TextCommitStrategy TEXT_COMMIT_STRATEGY_EDEFAULT = TextCommitStrategy.ON_MODIFY_DELAY;
/**
* The cached value of the '{@link #getTextCommitStrategy() <em>Text Commit Strategy</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTextCommitStrategy()
* @generated
* @ordered
*/
protected TextCommitStrategy textCommitStrategy = TEXT_COMMIT_STRATEGY_EDEFAULT;
/**
* The default value of the '{@link #getTextCommitStrategyDelay()
* <em>Text Commit Strategy Delay</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getTextCommitStrategyDelay()
* @generated
* @ordered
*/
protected static final int TEXT_COMMIT_STRATEGY_DELAY_EDEFAULT = 400;
/**
* The cached value of the '{@link #getTextCommitStrategyDelay()
* <em>Text Commit Strategy Delay</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getTextCommitStrategyDelay()
* @generated
* @ordered
*/
protected int textCommitStrategyDelay = TEXT_COMMIT_STRATEGY_DELAY_EDEFAULT;
/**
* The default value of the '{@link #isEditCellAnyKey() <em>Edit Cell Any Key</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEditCellAnyKey()
* @generated
* @ordered
*/
protected static final boolean EDIT_CELL_ANY_KEY_EDEFAULT = true;
/**
* The cached value of the '{@link #isEditCellAnyKey() <em>Edit Cell Any Key</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEditCellAnyKey()
* @generated
* @ordered
*/
protected boolean editCellAnyKey = EDIT_CELL_ANY_KEY_EDEFAULT;
/**
* The default value of the '{@link #isEditCellSingleClick() <em>Edit Cell Single Click</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEditCellSingleClick()
* @generated
* @ordered
*/
protected static final boolean EDIT_CELL_SINGLE_CLICK_EDEFAULT = true;
/**
* The cached value of the '{@link #isEditCellSingleClick() <em>Edit Cell Single Click</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isEditCellSingleClick()
* @generated
* @ordered
*/
protected boolean editCellSingleClick = EDIT_CELL_SINGLE_CLICK_EDEFAULT;
/**
* The default value of the '{@link #getMessageDecorationPosition()
* <em>Message Decoration Position</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getMessageDecorationPosition()
* @generated
* @ordered
*/
protected static final DecorationPosition MESSAGE_DECORATION_POSITION_EDEFAULT = DecorationPosition.BOTTOM_LEFT;
/**
* The cached value of the '{@link #getMessageDecorationPosition()
* <em>Message Decoration Position</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getMessageDecorationPosition()
* @generated
* @ordered
*/
protected DecorationPosition messageDecorationPosition = MESSAGE_DECORATION_POSITION_EDEFAULT;
/**
* The default value of the '{@link #getMessageDecorationMinimumSeverity()
* <em>Message Decoration Minimum Severity</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getMessageDecorationMinimumSeverity()
* @generated
* @ordered
*/
protected static final BindingMessageSeverity MESSAGE_DECORATION_MINIMUM_SEVERITY_EDEFAULT = BindingMessageSeverity.WARNING;
/**
* The cached value of the '{@link #getMessageDecorationMinimumSeverity()
* <em>Message Decoration Minimum Severity</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getMessageDecorationMinimumSeverity()
* @generated
* @ordered
*/
protected BindingMessageSeverity messageDecorationMinimumSeverity = MESSAGE_DECORATION_MINIMUM_SEVERITY_EDEFAULT;
/**
* The default value of the '{@link #getAlternativeDecorationPosition()
* <em>Alternative Decoration Position</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getAlternativeDecorationPosition()
* @generated
* @ordered
*/
protected static final DecorationPosition ALTERNATIVE_DECORATION_POSITION_EDEFAULT = DecorationPosition.TOP_LEFT;
/**
* The cached value of the '{@link #getAlternativeDecorationPosition()
* <em>Alternative Decoration Position</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getAlternativeDecorationPosition()
* @generated
* @ordered
*/
protected DecorationPosition alternativeDecorationPosition = ALTERNATIVE_DECORATION_POSITION_EDEFAULT;
/**
* The default value of the '{@link #isAutoApplySingleQuickfix()
* <em>Auto Apply Single Quickfix</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isAutoApplySingleQuickfix()
* @generated
* @ordered
*/
protected static final boolean AUTO_APPLY_SINGLE_QUICKFIX_EDEFAULT = false;
/**
* The cached value of the '{@link #isAutoApplySingleQuickfix()
* <em>Auto Apply Single Quickfix</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isAutoApplySingleQuickfix()
* @generated
* @ordered
*/
protected boolean autoApplySingleQuickfix = AUTO_APPLY_SINGLE_QUICKFIX_EDEFAULT;
/**
* The default value of the '{@link #isAlternateRowColors() <em>Alternate Row Colors</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isAlternateRowColors()
* @generated
* @ordered
*/
protected static final boolean ALTERNATE_ROW_COLORS_EDEFAULT = true;
/**
* The cached value of the '{@link #isAlternateRowColors() <em>Alternate Row Colors</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isAlternateRowColors()
* @generated
* @ordered
*/
protected boolean alternateRowColors = ALTERNATE_ROW_COLORS_EDEFAULT;
/**
* The default value of the '{@link #isValidationErrorsAreFatal()
* <em>Validation Errors Are Fatal</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isValidationErrorsAreFatal()
* @generated
* @ordered
*/
protected static final boolean VALIDATION_ERRORS_ARE_FATAL_EDEFAULT = false;
/**
* The cached value of the '{@link #isValidationErrorsAreFatal()
* <em>Validation Errors Are Fatal</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isValidationErrorsAreFatal()
* @generated
* @ordered
*/
protected boolean validationErrorsAreFatal = VALIDATION_ERRORS_ARE_FATAL_EDEFAULT;
/**
* The default value of the '{@link #getValidationDelay() <em>Validation Delay</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getValidationDelay()
* @generated
* @ordered
*/
protected static final int VALIDATION_DELAY_EDEFAULT = 200;
/**
* The cached value of the '{@link #getValidationDelay() <em>Validation Delay</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getValidationDelay()
* @generated
* @ordered
*/
protected int validationDelay = VALIDATION_DELAY_EDEFAULT;
/**
* The default value of the '{@link #getValidationDelayWindow()
* <em>Validation Delay Window</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getValidationDelayWindow()
* @generated
* @ordered
*/
protected static final int VALIDATION_DELAY_WINDOW_EDEFAULT = 25;
/**
* The cached value of the '{@link #getValidationDelayWindow() <em>Validation Delay Window</em>}
* ' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getValidationDelayWindow()
* @generated
* @ordered
*/
protected int validationDelayWindow = VALIDATION_DELAY_WINDOW_EDEFAULT;
/**
* The default value of the '{@link #isRequiredVBImageDecorationShown()
* <em>Required VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isRequiredVBImageDecorationShown()
* @generated
* @ordered
*/
protected static final boolean REQUIRED_VB_IMAGE_DECORATION_SHOWN_EDEFAULT = true;
/**
* The cached value of the '{@link #isRequiredVBImageDecorationShown()
* <em>Required VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isRequiredVBImageDecorationShown()
* @generated
* @ordered
*/
protected boolean requiredVBImageDecorationShown = REQUIRED_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
/**
* The default value of the '{@link #isAssistVBImageDecorationShown()
* <em>Assist VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isAssistVBImageDecorationShown()
* @generated
* @ordered
*/
protected static final boolean ASSIST_VB_IMAGE_DECORATION_SHOWN_EDEFAULT = true;
/**
* The cached value of the '{@link #isAssistVBImageDecorationShown()
* <em>Assist VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isAssistVBImageDecorationShown()
* @generated
* @ordered
*/
protected boolean assistVBImageDecorationShown = ASSIST_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
/**
* The default value of the '{@link #isQuickfixVBImageDecorationShown()
* <em>Quickfix VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isQuickfixVBImageDecorationShown()
* @generated
* @ordered
*/
protected static final boolean QUICKFIX_VB_IMAGE_DECORATION_SHOWN_EDEFAULT = true;
/**
* The cached value of the '{@link #isQuickfixVBImageDecorationShown()
* <em>Quickfix VB Image Decoration Shown</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #isQuickfixVBImageDecorationShown()
* @generated
* @ordered
*/
protected boolean quickfixVBImageDecorationShown = QUICKFIX_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
/**
* The default value of the '{@link #isViewNavigationRecorded()
* <em>View Navigation Recorded</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isViewNavigationRecorded()
* @generated
* @ordered
*/
protected static final boolean VIEW_NAVIGATION_RECORDED_EDEFAULT = true;
/**
* The cached value of the '{@link #isViewNavigationRecorded()
* <em>View Navigation Recorded</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #isViewNavigationRecorded()
* @generated
* @ordered
*/
protected boolean viewNavigationRecorded = VIEW_NAVIGATION_RECORDED_EDEFAULT;
/**
* The cached value of the '{@link #getModelInfo() <em>Model Info</em>}' map. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getModelInfo()
* @generated
* @ordered
*/
protected EMap<String, IModelClassInfo> modelInfo;
/**
* The cached value of the '{@link #getTreeItems() <em>Tree Items</em>}' containment reference
* list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTreeItems()
* @generated
* @ordered
*/
protected EList<ITreeItemDescriptor> treeItems;
/**
* The default value of the '{@link #getClipboard() <em>Clipboard</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getClipboard()
* @generated
* @ordered
*/
protected static final Clipboard CLIPBOARD_EDEFAULT = null;
/**
* The cached value of the '{@link #getClipboard() <em>Clipboard</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getClipboard()
* @generated
* @ordered
*/
protected Clipboard clipboard = CLIPBOARD_EDEFAULT;
/**
* The cached value of the '{@link #getObservableFactories() <em>Observable Factories</em>}'
* containment reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getObservableFactories()
* @generated
* @ordered
*/
protected EList<IEMFObservableFactoryDescriptor> observableFactories;
/**
* The cached value of the '{@link #getQuickfixProposalProcessors()
* <em>Quickfix Proposal Processors</em>}' containment reference list. <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @see #getQuickfixProposalProcessors()
* @generated
* @ordered
*/
protected EList<IQuickfixProposalProcessorDescriptor> quickfixProposalProcessors;
/**
* The cached value of the '{@link #getConstraintProviders() <em>Constraint Providers</em>}'
* reference list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getConstraintProviders()
* @generated
* @ordered
*/
protected EList<IConstraintValidatorAdapterConstraintDescriptor> constraintProviders;
/**
* The cached value of the '{@link #getContexts() <em>Contexts</em>}' containment reference
* list. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getContexts()
* @generated
* @ordered
*/
protected EList<IBindingContext> contexts;
/**
* The default value of the '{@link #getFormatterProvider() <em>Formatter Provider</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormatterProvider()
* @generated
* @ordered
*/
protected static final IFormatterProvider FORMATTER_PROVIDER_EDEFAULT = null;
/**
* The cached value of the '{@link #getFormatterProvider() <em>Formatter Provider</em>}'
* attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getFormatterProvider()
* @generated
* @ordered
*/
protected IFormatterProvider formatterProvider = FORMATTER_PROVIDER_EDEFAULT;
/**
* The default value of the '{@link #isDeleteHandlerCheckEnabled()
* <em>Delete Handler Check Enabled</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isDeleteHandlerCheckEnabled()
* @generated
* @ordered
*/
protected static final boolean DELETE_HANDLER_CHECK_ENABLED_EDEFAULT = false;
/**
* The cached value of the '{@link #isDeleteHandlerCheckEnabled()
* <em>Delete Handler Check Enabled</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #isDeleteHandlerCheckEnabled()
* @generated
* @ordered
*/
protected boolean deleteHandlerCheckEnabled = DELETE_HANDLER_CHECK_ENABLED_EDEFAULT;
/**
* The cached value of the '{@link #getCommandIDs() <em>Command IDs</em>}' map. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getCommandIDs()
* @generated
* @ordered
*/
protected EMap<String, String> commandIDs;
/**
* The cached value of the '{@link #getAssignmentParticiantsManager()
* <em>Assignment Particiants Manager</em>}' reference. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getAssignmentParticiantsManager()
* @generated
* @ordered
*/
protected IAssignmentParticipantsManager assignmentParticiantsManager;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
public ManagerImpl() {
super();
getCommandIDs().put(IWorkbenchCommandConstants.FILE_SAVE, IWorkbenchCommandConstants.FILE_SAVE);
getCommandIDs().put(IWorkbenchCommandConstants.FILE_SAVE_ALL, IWorkbenchCommandConstants.FILE_SAVE_ALL);
getCommandIDs().put(IWorkbenchCommandConstants.FILE_SAVE_AS, IWorkbenchCommandConstants.FILE_SAVE_AS);
getCommandIDs().put(IWorkbenchCommandConstants.FILE_REFRESH, IWorkbenchCommandConstants.FILE_REFRESH);
getCommandIDs().put(IWorkbenchCommandConstants.FILE_RENAME, IWorkbenchCommandConstants.FILE_RENAME);
getCommandIDs().put(IWorkbenchCommandConstants.FILE_MOVE, IWorkbenchCommandConstants.FILE_MOVE);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_UNDO, IWorkbenchCommandConstants.EDIT_UNDO);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_REDO, IWorkbenchCommandConstants.EDIT_REDO);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_CUT, IWorkbenchCommandConstants.EDIT_CUT);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_COPY, IWorkbenchCommandConstants.EDIT_COPY);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_PASTE, IWorkbenchCommandConstants.EDIT_PASTE);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_DELETE, IWorkbenchCommandConstants.EDIT_DELETE);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_CONTENT_ASSIST,
IWorkbenchCommandConstants.EDIT_CONTENT_ASSIST);
getCommandIDs().put(IWorkbenchCommandConstants.EDIT_SELECT_ALL, IWorkbenchCommandConstants.EDIT_SELECT_ALL);
getCommandIDs().put(IWorkbenchCommandConstants.NAVIGATE_BACK, IWorkbenchCommandConstants.NAVIGATE_BACK);
getCommandIDs().put(IWorkbenchCommandConstants.NAVIGATE_FORWARD, IWorkbenchCommandConstants.NAVIGATE_FORWARD);
getCommandIDs().put(IWorkbenchCommandConstants.NAVIGATE_BACKWARD_HISTORY,
IWorkbenchCommandConstants.NAVIGATE_BACKWARD_HISTORY);
getCommandIDs().put(IWorkbenchCommandConstants.NAVIGATE_FORWARD_HISTORY,
IWorkbenchCommandConstants.NAVIGATE_FORWARD_HISTORY);
assignmentParticiantsManager = new AssignmentParticipantsManagerImpl();
extensionReader();
}
/**
* Reads all relevant information from the registry...
*/
private void extensionReader() {
final IExtensionRegistry registry = Platform.getExtensionRegistry();
final Map<IConfigurationElement, ITreeItemDescriptor> delayedTreeItems = new HashMap<IConfigurationElement, ITreeItemDescriptor>();
final List<IConfigurationElement> delayedTreeRelations = new ArrayList<IConfigurationElement>();
for (final IConfigurationElement ce : registry
.getConfigurationElementsFor(InternalConstants.UIBINDINGS_EXTENSION_POINT)) {
final String elementName = ce.getName();
if (InternalConstants.BINDING_DECORATOR_TAG.equals(elementName)) {
extensionReaderBindingDecorator(ce);
} else if (InternalConstants.UI_ATTRIBUTE_FACTORY_TAG.equals(elementName)) {
extensionReaderUIAttributeFactory(ce);
} else if (InternalConstants.ARGUMENT_INFO_TAG.equals(elementName)) {
extensionReaderArgumentInfo(ce);
} else if (InternalConstants.DECORATOR_EXTENDER_TAG.equals(elementName)) {
extensionReaderDecoratorExtender(ce);
} else if (InternalConstants.MODEL_ARGUMENT_MEDIATOR_TAG.equals(elementName)) {
// TODO: check for dups
final CEObjectHolder<IModelArgumentMediator> mediator = new CEObjectHolder<IModelArgumentMediator>(ce);
getModelArgumentMediators().add(mediator);
} else if (InternalConstants.QUICKFIX_PROCESSOR_TAG.equals(elementName)) {
extensionReaderQuickfixProcessor(ce);
} else if (InternalConstants.CONSTRAINT_PROVIDER_TAG.equals(elementName)) {
extensionReaderConstraintProvider(ce);
} else if (InternalConstants.OBSERVABLES_FACTORY_TAG.equals(elementName)) {
final IEMFObservableFactoryDescriptor desc = IUIBindingsFactory.eINSTANCE
.createEMFObservableFactoryDescriptor();
desc.setPackagePrefix(ce.getAttribute(InternalConstants.PACKAGE_TAG));
desc.setFactory(new CEObjectHolder<IEMFObservableFactory>(ce));
getObservableFactories().add(desc);
} else if (InternalConstants.MODEL_TAG.equals(elementName)) {
extensionReaderModel(ce);
} else if (InternalConstants.ASSIGNMENT_PARTICIPANT_TAG.equals(elementName)) {
extensionReaderAssignmentParticipant(ce);
} else if (InternalConstants.TREE_ITEM_TAG.equals(elementName)) {
final String id = ce.getAttribute(InternalConstants.ID_TAG);
if (id == null || id.length() == 0) {
LogUtils.error(ce, InternalConstants.ID_TAG + " must be specified. Ignored"); //$NON-NLS-1$
continue;
}
final ITreeItemDescriptor descriptor = IUIBindingsFactory.eINSTANCE.createTreeItemDescriptor();
descriptor.setId(id);
final EList<String> modelTypes = descriptor.getModelTypes();
for (final IConfigurationElement child : ce.getChildren(InternalConstants.MODEL_TYPE_TAG)) {
String attr = child.getAttribute(InternalConstants.ALSO_PRIMITIVE_TAG);
final boolean alsoPrimitive = attr == null || Boolean.valueOf(attr).booleanValue();
attr = child.getAttribute(InternalConstants.CLASS_TAG);
if (attr == null || attr.length() == 0) {
LogUtils.error(ce, "Required attribute class is empty. Ignored."); //$NON-NLS-1$
continue;
}
if (modelTypes.contains(attr)) {
LogUtils.error(child, "Duplicate model type: '" + attr + "'. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
continue;
}
modelTypes.add(attr);
if (alsoPrimitive) {
final String primitiveType = UIBindingsUtils.getBoxed2Primitive(attr);
if (primitiveType != null) {
modelTypes.add(primitiveType);
}
}
}
final String attr = ce.getAttribute(InternalConstants.EMPTY_FOLDER_HIDDEN_TAG);
descriptor.setEmptyFolderHidden(attr != null && Boolean.valueOf(attr).booleanValue());
delayedTreeItems.put(ce, descriptor);
readArguments(descriptor, ce);
getTreeItems().add(descriptor);
} else if (InternalConstants.TREE_ITEM_RELATION_TAG.equals(elementName)) {
// Delayed...
delayedTreeRelations.add(ce);
} else {
LogUtils.error(ce, "Unknown element name: '" + elementName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
/*
* Now go through the items again and handle any parent pointers
*/
for (final Entry<IConfigurationElement, ITreeItemDescriptor> e : delayedTreeItems.entrySet()) {
final IConfigurationElement ce = e.getKey();
final String attr = ce.getAttribute(InternalConstants.PRIMARY_PARENT_TAG);
if (attr == null || attr.length() == 0) {
continue;
}
final ITreeItemDescriptor parent = getTreeItem(attr);
if (parent == null) {
LogUtils.error(ce, InternalConstants.PRIMARY_PARENT_TAG + " " + attr + " is unknown. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
continue;
}
e.getValue().setPrimaryParent(parent);
}
/*
* Now go through the relations
*/
for (final IConfigurationElement ce : delayedTreeRelations) {
extensionReaderTreeItemRelation(ce);
}
/*
* Sort the extenders.
*/
ECollections.sort(getDecoratorExtenders(), new Comparator<IUIBindingDecoratorExtenderDescriptor>() {
@Override
public int compare(IUIBindingDecoratorExtenderDescriptor o1, IUIBindingDecoratorExtenderDescriptor o2) {
return o1.getPriority() - o2.getPriority();
}
});
/*
* Sort the relations of tree descriptors.
*/
final Comparator<ITreeItemRelation> comparator = new Comparator<ITreeItemRelation>() {
@Override
public int compare(ITreeItemRelation o1, ITreeItemRelation o2) {
return o2.getPriority() - o1.getPriority();
}
};
for (final ITreeItemDescriptor tid : getTreeItems()) {
ECollections.sort(tid.getChildRelations(), comparator);
}
}
/**
* @param ce
*/
private void extensionReaderDecoratorExtender(final IConfigurationElement ce) {
// TODO: check for dups
final IUIBindingDecoratorExtenderDescriptor descriptor = IUIBindingsFactory.eINSTANCE
.createUIBindingDecoratorExtenderDescriptor();
descriptor.setFactory(new CEObjectHolder<IUIBindingDecoratorExtender>(ce));
final String attr = ce.getAttribute(InternalConstants.PRIORITY_TAG);
if (attr != null && attr.length() > 0) {
try {
descriptor.setPriority(Integer.parseInt(attr));
} catch (final NumberFormatException ex) {
LogUtils.error(ce, ex);
return;
}
} else {
descriptor.setPriority(Constants.DEFAULT_DECORATOR_EXTENDER_PRIORITY);
}
getDecoratorExtenders().add(descriptor);
readArguments(descriptor, ce);
}
/**
* @param ce
*/
private void extensionReaderTreeItemRelation(final IConfigurationElement ce) {
final ITreeItemRelation rel = IUIBindingsFactory.eINSTANCE.createTreeItemRelation();
String attr = ce.getAttribute(InternalConstants.PARENT_TAG);
if (attr == null || attr.length() == 0) {
LogUtils.error(ce, InternalConstants.PARENT_TAG + " must be specified. Ignored"); //$NON-NLS-1$
return;
}
final ITreeItemDescriptor parent = getTreeItem(attr);
if (parent == null) {
LogUtils.error(ce, InternalConstants.PARENT_TAG + " " + attr + " is unknown. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
attr = ce.getAttribute(InternalConstants.PRIORITY_TAG);
if (attr != null && attr.length() > 0) {
try {
rel.setPriority(Integer.parseInt(attr));
} catch (final NumberFormatException ex) {
LogUtils.error(ce, ex);
return;
}
} else {
rel.setPriority(Constants.DEFAULT_TREE_ITEM_RELATION_PRIORITY);
}
ITreeItemDescriptor desc = null;
attr = ce.getAttribute(InternalConstants.ID_TAG);
if (attr != null && attr.length() > 0) {
desc = getTreeItem(attr);
if (desc == null) {
LogUtils.error(ce, InternalConstants.ID_TAG + " " + attr + " is unknown. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
rel.setDescriptor(desc);
}
final String c = ce.getAttribute(InternalConstants.FACTORY_TAG);
final String f = ce.getAttribute(InternalConstants.FEATURE_NAME_TAG);
if (c != null && c.length() > 0) {
rel.setFactory(new CEObjectHolder<IObservableFactory>(ce, InternalConstants.FACTORY_TAG));
if (f != null && f.length() > 0) {
LogUtils.error(ce, "Both " + InternalConstants.FACTORY_TAG + " " + InternalConstants.FEATURE_NAME_TAG //$NON-NLS-1$ //$NON-NLS-2$
+ " may not by specified. Ignored."); //$NON-NLS-1$
return;
}
} else if (f != null && f.length() > 0) {
rel.setFeatureName(f);
} else {
// Do nothing
}
/*
* Add tree IDs
*/
for (final IConfigurationElement child : ce.getChildren(InternalConstants.NAVIGATOR_TAG)) {
attr = child.getAttribute(InternalConstants.ID_TAG);
if (attr == null) {
attr = "";
}
if (rel.getTreeIDs().contains(attr)) {
LogUtils.error(child, "Duplicate ID: '" + attr + "'. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
rel.getTreeIDs().add(attr);
}
rel.setParent(parent);
}
/**
* @param ce
*/
private void extensionReaderUIAttributeFactory(final IConfigurationElement ce) {
// TODO: check for dups
final IUIAttributeFactoryDescriptor descriptor = IUIBindingsFactory.eINSTANCE
.createUIAttributeFactoryDescriptor();
descriptor.setTypeName(ce.getAttribute(InternalConstants.WIDGET_TYPE_TAG));
String attribute = ce.getAttribute(InternalConstants.ATTRIBUTE_TAG);
if (attribute == null) {
attribute = ""; //$NON-NLS-1$
}
descriptor.setAttribute(attribute);
descriptor.setFactory(new CEObjectHolder<IUIAttributeFactory>(ce));
getUiAttributeFactories().add(descriptor);
}
/**
* @param ce
*/
private void extensionReaderArgumentInfo(final IConfigurationElement ce) {
// TODO: check for dups
final IArgumentInformation descriptor = IUIBindingsFactory.eINSTANCE.createArgumentInformation();
descriptor.setName(ce.getAttribute(InternalConstants.NAME_TAG));
String attr;
attr = ce.getAttribute(InternalConstants.LOOKUP_ATTRIBUTE_TARGET_TYPE_TAG);
if (attr != null) {
descriptor.setLookupAttributeTargetType(Boolean.valueOf(attr).booleanValue());
}
attr = ce.getAttribute(InternalConstants.LOOKUP_PARENT_TAG);
if (attr != null) {
descriptor.setLookupParent(Boolean.valueOf(attr).booleanValue());
}
attr = ce.getAttribute(InternalConstants.LOOKUP_ATTRIBUTE_CONTAINING_CLASS_TAG);
if (attr != null) {
descriptor.setLookupAttributeContainingClass(Boolean.valueOf(attr).booleanValue());
}
attr = ce.getAttribute(InternalConstants.LOOKUP_REFERENCE_TARGET_TYPE_TAG);
if (attr != null) {
descriptor.setLookupReferenceTargetType(Boolean.valueOf(attr).booleanValue());
}
attr = ce.getAttribute(InternalConstants.LOOKUP_REFERENCE_CONTAINING_CLASS_TAG);
if (attr != null) {
descriptor.setLookupReferenceContainingClass(Boolean.valueOf(attr).booleanValue());
}
if (getArgumentInformation().containsKey(descriptor.getName())) {
LogUtils.error(ce, "Duplicate of argument name '" + descriptor.getName() + "'. Ignored.");
return;
}
getArgumentInformation().put(descriptor.getName(), descriptor);
}
/**
* @param ce
*/
private void extensionReaderModel(final IConfigurationElement ce) {
final String className = ce.getAttribute(InternalConstants.CLASS_TAG);
if (className == null || className.length() == 0) {
LogUtils.error(ce, "Class name must be specified. Ignored"); //$NON-NLS-1$
return;
}
final String type = ce.getAttribute(InternalConstants.TARGET_TYPE_TAG);
final IModelClassInfo cInfo = getModelClassInfo(className, type, true);
readArguments(cInfo, ce);
for (final IConfigurationElement childCE : ce.getChildren(InternalConstants.FEATURE_TAG)) {
final String featureName = childCE.getAttribute(InternalConstants.NAME_TAG);
if (featureName == null || featureName.length() == 0) {
LogUtils.error(childCE, "Feature name must be specified. Ignored"); //$NON-NLS-1$
return;
}
final IModelFeatureInfo fInfo = getModelFeatureInfo(className, featureName, type, true);
readArguments(fInfo, childCE);
}
}
/**
* @param ce
*/
private void extensionReaderQuickfixProcessor(final IConfigurationElement ce) {
final IQuickfixProposalProcessorDescriptor qi = IUIBindingsFactory.eINSTANCE
.createQuickfixProposalProcessorDescriptor();
final String code = ce.getAttribute(InternalConstants.CODE_TAG);
if (code != null && code.length() > 0) {
try {
qi.setCode(Integer.parseInt(code));
} catch (final NumberFormatException ex) {
LogUtils.error(ce, ex);
return;
}
} else {
qi.setCode(Integer.MIN_VALUE);
}
final String pattern = ce.getAttribute(InternalConstants.MESSAGE_PATTERN_TAG);
if (pattern != null && pattern.length() > 0) {
try {
qi.setMessagePattern(Pattern.compile(pattern));
} catch (final PatternSyntaxException ex) {
LogUtils.error(ce, ex);
return;
}
}
qi.setSource(ce.getAttribute(InternalConstants.SOURCE_TAG));
qi.setFeature(ce.getAttribute(InternalConstants.FEATURE_TAG));
qi.setModelType(ce.getAttribute(InternalConstants.MODEL_TYPE_TAG));
qi.setProcessor(new CEObjectHolder<IQuickfixProposalProcessor>(ce, InternalConstants.PROCESSOR_TAG));
getQuickfixProposalProcessors().add(qi);
}
/**
* @param ce
*/
private void extensionReaderConstraintProvider(final IConfigurationElement ce) {
final IConstraintValidatorAdapterConstraintDescriptor cd = IUIBindingsFactory.eINSTANCE
.createConstraintValidatorAdapterConstraintDescriptor();
cd.setProvider(new CEObjectHolder<IConstraintValidatorAdapterConstraintProvider>(ce));
getConstraintProviders().add(cd);
}
/**
* Reads a {@link IAssignmentParticipantDescriptor} from the registry.
*
* @param ce
*/
private void extensionReaderAssignmentParticipant(final IConfigurationElement ce) {
final IAssignmentParticipantDescriptor desc = IUIBindingsFactory.eINSTANCE
.createAssignmentParticipantDescriptor();
String attr = ce.getAttribute(InternalConstants.ID_TAG);
if (attr == null || attr.length() == 0) {
attr = "<unspecified>"; //$NON-NLS-1$
}
desc.setId(attr);
attr = ce.getAttribute(InternalConstants.EXACT_MODEL_TYPE_MATCH_TAG);
desc.setExactTypeMatch(attr != null && Boolean.valueOf(attr).booleanValue());
final EList<String> destinationTypes = desc.getDestinationTypes();
for (final IConfigurationElement child : ce.getChildren(InternalConstants.DESTINATION_TYPE_TAG)) {
attr = child.getAttribute(InternalConstants.CLASS_TAG);
if (attr == null || attr.length() == 0) {
LogUtils.error(child, "Required attribute class is empty. Ignored."); //$NON-NLS-1$
break;
}
if (destinationTypes.contains(attr)) {
LogUtils.error(child, "Duplicate destination type: '" + attr + "'. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
}
destinationTypes.add(attr);
}
if (destinationTypes.size() == 0) {
LogUtils.error(ce, "No destination types supplied. Ignored."); //$NON-NLS-1$
return;
}
final EList<String> sourceTypes = desc.getSourceTypes();
for (final IConfigurationElement child : ce.getChildren(InternalConstants.SOURCE_TYPE_TAG)) {
attr = child.getAttribute(InternalConstants.CLASS_TAG);
if (attr == null || attr.length() == 0) {
LogUtils.error(ce, "Required attribute class is empty. Ignored."); //$NON-NLS-1$
break;
}
if (sourceTypes.contains(attr)) {
LogUtils.error(child, "Duplicate target type: '" + attr + "'. Ignored."); //$NON-NLS-1$ //$NON-NLS-2$
}
sourceTypes.add(attr);
}
if (sourceTypes.size() == 0) {
LogUtils.error(ce, "No source Types supplied. Ignored."); //$NON-NLS-1$
return;
}
desc.setParticipant(new CEObjectHolder<IAssignmentParticipant>(ce));
getAssignmentParticiantsManager().getParticipants().add(desc);
}
/**
* @param ce
*/
private void extensionReaderBindingDecorator(final IConfigurationElement ce) {
String id = ce.getAttribute(InternalConstants.ID_TAG);
if (id == null || id.length() == 0) {
id = "<unspecified>"; //$NON-NLS-1$
}
final IConfigurationElement[] javaProviders = ce.getChildren(InternalConstants.JAVA_DECORATOR_TAG);
final IConfigurationElement[] enumProviders = ce.getChildren(InternalConstants.ENUM_TAG);
final IConfigurationElement[] numberProviders = ce.getChildren(InternalConstants.NUMBER_TAG);
switch (javaProviders.length + enumProviders.length + numberProviders.length) {
case 0:
LogUtils.error(ce, id + ": Exactly one type-specific decorator required. Declaration ignored. Got none."); //$NON-NLS-1$
return;
case 1:
break;
default:
LogUtils.error(ce, id + ": Exactly one type decorator required. Provider ignored. Got " //$NON-NLS-1$
+ Arrays.toString(javaProviders) + " and " + Arrays.toString(enumProviders)); //$NON-NLS-1$
break;
}
if (javaProviders.length + enumProviders.length > 1) {
LogUtils.error(ce, id + ": Exactly one type decorator required. Provider ignored. Got " //$NON-NLS-1$
+ Arrays.toString(javaProviders) + " and " + Arrays.toString(enumProviders)); //$NON-NLS-1$
return;
}
IDecoratorProvider provider = null;
if (javaProviders.length == 1) {
provider = IUIBindingsFactory.eINSTANCE.createJavaDecoratorProvider();
provider.providerReader(id, ce, javaProviders[0]);
}
if (enumProviders.length == 1) {
provider = IUIBindingsFactory.eINSTANCE.createEnumDecoratorProvider();
provider.providerReader(id, ce, enumProviders[0]);
}
if (numberProviders.length == 1) {
provider = IUIBindingsFactory.eINSTANCE.createNumberDecoratorProvider();
provider.providerReader(id, ce, numberProviders[0]);
}
readArguments(provider, ce);
getProviders().add(provider);
}
/**
* Reads argument information for the specified argument provider.
*
* @param provider the argument provider
* @param ce the base configuration element
*/
protected void readArguments(IArgumentProvider provider, IConfigurationElement ce) {
for (final IConfigurationElement childCE : ce.getChildren(InternalConstants.STANDARD_ARGUMENTS_TAG)) {
for (final String name : Constants.EXT_POINT_ATTRIBUTE_NAMES) {
final String value = childCE.getAttribute(name);
if (value != null && value.length() > 0) {
provider.getArguments().put(name, childCE);
}
}
}
for (final IConfigurationElement childCE : ce.getChildren(InternalConstants.ARGUMENT_TAG)) {
final String name = childCE.getAttribute(InternalConstants.NAME_TAG);
if (name == null || name.length() == 0) {
LogUtils.error(childCE, "Argument name must be specified. Ignored"); //$NON-NLS-1$
continue;
}
provider.getArguments().put(name.intern(), childCE);
}
}
@Override
public IUIAttribute createUIAttribute(Widget widget, String attribute) {
final Class<?>[] classes = Platform.getAdapterManager().computeClassOrder(widget.getClass());
CEObjectHolder<IUIAttributeFactory> factoryHolder = null;
for (final Class<?> c : classes) {
final String typeName = c.getName();
for (final IUIAttributeFactoryDescriptor d : getUiAttributeFactories()) {
if (!d.getTypeName().equals(typeName)) {
continue;
}
if (!d.getAttribute().equals(attribute)) {
continue;
}
factoryHolder = d.getFactory();
break;
}
if (factoryHolder != null) {
break;
}
}
if (factoryHolder == null) {
LogUtils.error(widget, "Widget, '" + widget.getClass().getName() + "', does not support attribute '" //$NON-NLS-1$ //$NON-NLS-2$
+ attribute + "'. Ignored."); //$NON-NLS-1$
return null;
}
final IUIAttributeFactory factory = factoryHolder.getObject();
if (factory == null) {
LogUtils.error(widget, "Widget, '" + widget.getClass().getName() //$NON-NLS-1$
+ "', not supported. Cannot create IUIAttribute factory. Ignored."); //$NON-NLS-1$
return null;
}
try {
return factory.create(widget, attribute);
} catch (final IllegalArgumentException ex) {
LogUtils.error(factory, ex);
}
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return IUIBindingsPackage.Literals.MANAGER;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IDecoratorProvider> getProviders() {
if (providers == null) {
providers = new EObjectContainmentWithInverseEList<IDecoratorProvider>(IDecoratorProvider.class, this,
IUIBindingsPackage.MANAGER__PROVIDERS, IUIBindingsPackage.DECORATOR_PROVIDER__MANAGER);
}
return providers;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IUIAttributeFactoryDescriptor> getUiAttributeFactories() {
if (uiAttributeFactories == null) {
uiAttributeFactories = new EObjectResolvingEList<IUIAttributeFactoryDescriptor>(
IUIAttributeFactoryDescriptor.class, this, IUIBindingsPackage.MANAGER__UI_ATTRIBUTE_FACTORIES);
}
return uiAttributeFactories;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IUIBindingDecoratorExtenderDescriptor> getDecoratorExtenders() {
if (decoratorExtenders == null) {
decoratorExtenders = new EObjectResolvingEList<IUIBindingDecoratorExtenderDescriptor>(
IUIBindingDecoratorExtenderDescriptor.class, this, IUIBindingsPackage.MANAGER__DECORATOR_EXTENDERS);
}
return decoratorExtenders;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<CEObjectHolder<IModelArgumentMediator>> getModelArgumentMediators() {
if (modelArgumentMediators == null) {
modelArgumentMediators = new EDataTypeUniqueEList<CEObjectHolder<IModelArgumentMediator>>(
CEObjectHolder.class, this, IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATORS);
}
return modelArgumentMediators;
}
@Override
public void runModelArgumentMediators(EClassifier classifier) {
if (getModelArgumentMediatorClasses().containsKey(classifier)) return;
getModelArgumentMediatorClasses().put(classifier, null);
for (final CEObjectHolder<IModelArgumentMediator> holder : getModelArgumentMediators()) {
final IModelArgumentMediator mediator = holder.getObject();
if (mediator != null) {
mediator.mediateArguments(classifier);
}
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Map<EClassifier, Object> getModelArgumentMediatorClasses() {
return modelArgumentMediatorClasses;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setModelArgumentMediatorClasses(Map<EClassifier, Object> newModelArgumentMediatorClasses) {
final Map<EClassifier, Object> oldModelArgumentMediatorClasses = modelArgumentMediatorClasses;
modelArgumentMediatorClasses = newModelArgumentMediatorClasses;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATOR_CLASSES, oldModelArgumentMediatorClasses,
modelArgumentMediatorClasses));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public TextCommitStrategy getTextCommitStrategy() {
return textCommitStrategy;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setTextCommitStrategy(TextCommitStrategy newTextCommitStrategy) {
setTextCommitStrategyGen(newTextCommitStrategy);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_TEXT_COMMIT_STRATEGY, newTextCommitStrategy.name());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setTextCommitStrategyGen(TextCommitStrategy newTextCommitStrategy) {
final TextCommitStrategy oldTextCommitStrategy = textCommitStrategy;
textCommitStrategy = newTextCommitStrategy == null ? TEXT_COMMIT_STRATEGY_EDEFAULT : newTextCommitStrategy;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY,
oldTextCommitStrategy, textCommitStrategy));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public int getTextCommitStrategyDelay() {
return textCommitStrategyDelay;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setTextCommitStrategyDelay(int newTextCommitStrategyDelay) {
if (newTextCommitStrategyDelay < 1 || 1000000 < newTextCommitStrategyDelay)
throw new IllegalArgumentException("delay " + newTextCommitStrategyDelay + " must be in range [1;1000000["); //$NON-NLS-1$ //$NON-NLS-2$
setTextCommitStrategyDelayGen(newTextCommitStrategyDelay);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_TEXT_COMMIT_STRATEGY_DELAY, newTextCommitStrategyDelay);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setTextCommitStrategyDelayGen(int newTextCommitStrategyDelay) {
final int oldTextCommitStrategyDelay = textCommitStrategyDelay;
textCommitStrategyDelay = newTextCommitStrategyDelay;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY_DELAY, oldTextCommitStrategyDelay,
textCommitStrategyDelay));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isEditCellAnyKey() {
return editCellAnyKey;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setEditCellAnyKey(boolean newEditCellAnyKey) {
setEditCellAnyKeyGen(newEditCellAnyKey);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_EDIT_CELL_ANY_KEY, newEditCellAnyKey);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setEditCellAnyKeyGen(boolean newEditCellAnyKey) {
final boolean oldEditCellAnyKey = editCellAnyKey;
editCellAnyKey = newEditCellAnyKey;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__EDIT_CELL_ANY_KEY,
oldEditCellAnyKey, editCellAnyKey));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isEditCellSingleClick() {
return editCellSingleClick;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setEditCellSingleClick(boolean newEditCellSingleClick) {
setEditCellSingleClickGen(newEditCellSingleClick);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_EDIT_CELL_SINGLE_CLICK, newEditCellSingleClick);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setEditCellSingleClickGen(boolean newEditCellSingleClick) {
final boolean oldEditCellSingleClick = editCellSingleClick;
editCellSingleClick = newEditCellSingleClick;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__EDIT_CELL_SINGLE_CLICK,
oldEditCellSingleClick, editCellSingleClick));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public DecorationPosition getMessageDecorationPosition() {
return messageDecorationPosition;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setMessageDecorationPosition(DecorationPosition newMessageDecorationPosition) {
setMessageDecorationPositionGen(newMessageDecorationPosition);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_MESSAGE_DECORATION_POSITION, newMessageDecorationPosition.name());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setMessageDecorationPositionGen(DecorationPosition newMessageDecorationPosition) {
final DecorationPosition oldMessageDecorationPosition = messageDecorationPosition;
messageDecorationPosition = newMessageDecorationPosition == null ? MESSAGE_DECORATION_POSITION_EDEFAULT
: newMessageDecorationPosition;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_POSITION, oldMessageDecorationPosition,
messageDecorationPosition));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public BindingMessageSeverity getMessageDecorationMinimumSeverity() {
return messageDecorationMinimumSeverity;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setMessageDecorationMinimumSeverity(BindingMessageSeverity newMessageDecorationMinimumSeverity) {
setMessageDecorationMinimumSeverityGen(newMessageDecorationMinimumSeverity);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_MESSAGE_DECORATION_MINIMUM_SEVERITY, newMessageDecorationMinimumSeverity.name());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setMessageDecorationMinimumSeverityGen(BindingMessageSeverity newMessageDecorationMinimumSeverity) {
final BindingMessageSeverity oldMessageDecorationMinimumSeverity = messageDecorationMinimumSeverity;
messageDecorationMinimumSeverity = newMessageDecorationMinimumSeverity == null ? MESSAGE_DECORATION_MINIMUM_SEVERITY_EDEFAULT
: newMessageDecorationMinimumSeverity;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_MINIMUM_SEVERITY,
oldMessageDecorationMinimumSeverity, messageDecorationMinimumSeverity));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public DecorationPosition getAlternativeDecorationPosition() {
return alternativeDecorationPosition;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setAlternativeDecorationPosition(DecorationPosition newAlternativeDecorationPosition) {
setAlternativeDecorationPositionGen(newAlternativeDecorationPosition);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_ALTERNATIVE_DECORATION_POSITION, newAlternativeDecorationPosition.name());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setAlternativeDecorationPositionGen(DecorationPosition newAlternativeDecorationPosition) {
final DecorationPosition oldAlternativeDecorationPosition = alternativeDecorationPosition;
alternativeDecorationPosition = newAlternativeDecorationPosition == null ? ALTERNATIVE_DECORATION_POSITION_EDEFAULT
: newAlternativeDecorationPosition;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__ALTERNATIVE_DECORATION_POSITION, oldAlternativeDecorationPosition,
alternativeDecorationPosition));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isAutoApplySingleQuickfix() {
return autoApplySingleQuickfix;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setAutoApplySingleQuickfix(boolean newAutoApplySingleQuickfix) {
setAutoApplySingleQuickfixGen(newAutoApplySingleQuickfix);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_AUTO_APPLY_QUICKFIX, newAutoApplySingleQuickfix);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setAutoApplySingleQuickfixGen(boolean newAutoApplySingleQuickfix) {
final boolean oldAutoApplySingleQuickfix = autoApplySingleQuickfix;
autoApplySingleQuickfix = newAutoApplySingleQuickfix;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__AUTO_APPLY_SINGLE_QUICKFIX, oldAutoApplySingleQuickfix,
autoApplySingleQuickfix));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isAlternateRowColors() {
return alternateRowColors;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setAlternateRowColors(boolean newAlternateRowColors) {
setAlternateRowColorsGen(newAlternateRowColors);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_ALTERNATE_ROW_COLORS, newAlternateRowColors);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setAlternateRowColorsGen(boolean newAlternateRowColors) {
final boolean oldAlternateRowColors = alternateRowColors;
alternateRowColors = newAlternateRowColors;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__ALTERNATE_ROW_COLORS,
oldAlternateRowColors, alternateRowColors));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isValidationErrorsAreFatal() {
return validationErrorsAreFatal;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setValidationErrorsAreFatal(boolean newValidationErrorsAreFatal) {
setValidationErrorsAreFatalGen(newValidationErrorsAreFatal);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_VALIDATION_ERRORS_ARE_FATAL, newValidationErrorsAreFatal);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setValidationErrorsAreFatalGen(boolean newValidationErrorsAreFatal) {
final boolean oldValidationErrorsAreFatal = validationErrorsAreFatal;
validationErrorsAreFatal = newValidationErrorsAreFatal;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__VALIDATION_ERRORS_ARE_FATAL, oldValidationErrorsAreFatal,
validationErrorsAreFatal));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public int getValidationDelay() {
return validationDelay;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setValidationDelay(int newValidationDelay) {
if (newValidationDelay < 1 || 1000000 < newValidationDelay)
throw new IllegalArgumentException("delay must be in range [1;1000000["); //$NON-NLS-1$
setValidationDelayGen(newValidationDelay);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_VALIDATION_DELAY, newValidationDelay);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setValidationDelayGen(int newValidationDelay) {
final int oldValidationDelay = validationDelay;
validationDelay = newValidationDelay;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__VALIDATION_DELAY,
oldValidationDelay, validationDelay));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public int getValidationDelayWindow() {
return validationDelayWindow;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setValidationDelayWindow(int newValidationDelayWindow) {
if (newValidationDelayWindow < 1 || 1000000 < newValidationDelayWindow)
throw new IllegalArgumentException("delay must be in range [1;1000000["); //$NON-NLS-1$
setValidationDelayWindowGen(newValidationDelayWindow);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_VALIDATION_DELAY_WINDOW, newValidationDelayWindow);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setValidationDelayWindowGen(int newValidationDelayWindow) {
final int oldValidationDelayWindow = validationDelayWindow;
validationDelayWindow = newValidationDelayWindow;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__VALIDATION_DELAY_WINDOW,
oldValidationDelayWindow, validationDelayWindow));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isRequiredVBImageDecorationShown() {
return requiredVBImageDecorationShown;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setRequiredVBImageDecorationShown(boolean newRequiredVBImageDecorationShown) {
setRequiredVBImageDecorationShownGen(newRequiredVBImageDecorationShown);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_REQUIRED_VBID_SHOWN, newRequiredVBImageDecorationShown);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setRequiredVBImageDecorationShownGen(boolean newRequiredVBImageDecorationShown) {
final boolean oldRequiredVBImageDecorationShown = requiredVBImageDecorationShown;
requiredVBImageDecorationShown = newRequiredVBImageDecorationShown;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__REQUIRED_VB_IMAGE_DECORATION_SHOWN, oldRequiredVBImageDecorationShown,
requiredVBImageDecorationShown));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isAssistVBImageDecorationShown() {
return assistVBImageDecorationShown;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setAssistVBImageDecorationShown(boolean newAssistVBImageDecorationShown) {
setAssistVBImageDecorationShownGen(newAssistVBImageDecorationShown);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_ASSIST_VBID_SHOWN, newAssistVBImageDecorationShown);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setAssistVBImageDecorationShownGen(boolean newAssistVBImageDecorationShown) {
final boolean oldAssistVBImageDecorationShown = assistVBImageDecorationShown;
assistVBImageDecorationShown = newAssistVBImageDecorationShown;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__ASSIST_VB_IMAGE_DECORATION_SHOWN, oldAssistVBImageDecorationShown,
assistVBImageDecorationShown));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isQuickfixVBImageDecorationShown() {
return quickfixVBImageDecorationShown;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setQuickfixVBImageDecorationShown(boolean newQuickfixVBImageDecorationShown) {
setQuickfixVBImageDecorationShownGen(newQuickfixVBImageDecorationShown);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_QUICKFIX_VBID_SHOWN, newQuickfixVBImageDecorationShown);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setQuickfixVBImageDecorationShownGen(boolean newQuickfixVBImageDecorationShown) {
final boolean oldQuickfixVBImageDecorationShown = quickfixVBImageDecorationShown;
quickfixVBImageDecorationShown = newQuickfixVBImageDecorationShown;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__QUICKFIX_VB_IMAGE_DECORATION_SHOWN, oldQuickfixVBImageDecorationShown,
quickfixVBImageDecorationShown));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isViewNavigationRecorded() {
return viewNavigationRecorded;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setViewNavigationRecorded(boolean newViewNavigationRecorded) {
setViewNavigationRecordedGen(newViewNavigationRecorded);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_VIEW_NAVIGATION_RECORDED, newViewNavigationRecorded);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setViewNavigationRecordedGen(boolean newViewNavigationRecorded) {
final boolean oldViewNavigationRecorded = viewNavigationRecorded;
viewNavigationRecorded = newViewNavigationRecorded;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__VIEW_NAVIGATION_RECORDED,
oldViewNavigationRecorded, viewNavigationRecorded));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EMap<String, IModelClassInfo> getModelInfo() {
if (modelInfo == null) {
modelInfo = new EcoreEMap<String, IModelClassInfo>(
IUIBindingsPackage.Literals.STRING_TO_MODEL_CLASS_INFO_MAP_ENTRY,
StringToModelClassInfoMapEntryImpl.class, this, IUIBindingsPackage.MANAGER__MODEL_INFO);
}
return modelInfo;
}
@Override
public <ArgumentType> void addArgumentProviderArguments(IArgumentProvider provider,
IArgumentContext<ArgumentType> context) {
if (provider == null) return;
if (!provider.hasArguments()) return;
final String name = context.getName();
final Class<? extends ArgumentType> argumentType = context.getArgumentType();
if (!provider.getArguments().containsKey(name)) return;
final Object val = provider.getArguments().get(name);
if (val instanceof IConfigurationElement) {
final IConfigurationElement ce = (IConfigurationElement) val;
// SIMA-921
String value = ce.getAttribute(name);
if (value != null) {
addArgumentValue(context, provider, ce, name, value);
} else {
value = ce.getAttribute(InternalConstants.VALUE_TAG);
addArgumentValue(context, provider, ce, InternalConstants.VALUE_TAG, value);
}
} else if (argumentType.isInstance(val)) {
// OK
context.addResult(provider, (ArgumentType) val);
} else if (val instanceof String) {
addArgumentValue(context, provider, null, null, (String) val);
} else {
// TODO
context.addResult(provider, null);
}
}
@Override
public <ArgumentType> void addArgumentValue(IArgumentContext<ArgumentType> context, Object source,
IConfigurationElement ce, String attributeName, String value) {
final ArgumentType v = convertArgumentValue(context, ce, attributeName, value);
if (v != null) {
context.addResult(source, v);
}
}
private <ArgumentType> ArgumentType convertArgumentValue(IArgumentContext<ArgumentType> context,
IConfigurationElement ce, String attributeName, String value) {
if (value == null) return null;
final Class<? extends ArgumentType> argumentType = context.getArgumentType();
if (argumentType == String.class)
return (ArgumentType) value;
else if (argumentType == Boolean.class)
return (ArgumentType) Boolean.valueOf(value);
else if (argumentType == Integer.class) {
/*
* Special case handling:
*/
if (context.getName().equals(Constants.ARG_ALIGNMENT)) {
if ("l".equals(value) || "left".equals(value))
return (ArgumentType) (Integer) SWT.LEAD;
else if ("c".equals(value) || "center".equals(value))
return (ArgumentType) (Integer) SWT.CENTER;
else if ("r".equals(value) || "right".equals(value))
return (ArgumentType) (Integer) SWT.TRAIL;
else {
LogUtils.error(this, Constants.ARG_ALIGNMENT
+ " must be one of 'l', 'c' or 'r', got '" + value + "'", null); //$NON-NLS-1$ //$NON-NLS-2$
}
} else {
try {
return (ArgumentType) Integer.valueOf(value);
} catch (final NumberFormatException ex) {
LogUtils.error(this, ex);
}
}
} else if (argumentType == BigDecimal.class) {
try {
return (ArgumentType) new BigDecimal(value);
} catch (final NumberFormatException ex) {
LogUtils.error(this, ex);
}
} else if (argumentType == ImageDescriptor.class) {
final ImageDescriptor id = AbstractUIPlugin.imageDescriptorFromPlugin(ce.getContributor().getName(), value);
if (id == null) {
LogUtils.error(ce, "Cannot find image for '" + value + "'"); //$NON-NLS-1$
}
return (ArgumentType) id;
} else if (argumentType == IObservableList.class) {
if (context.getBinding() instanceof IValueBinding) {
final IValueBinding vb = (IValueBinding) context.getBinding();
try {
final IObservableListFactory factory = (IObservableListFactory) ce
.createExecutableExtension(attributeName);
return (ArgumentType) factory.createList(vb);
} catch (final CoreException ex) {
LogUtils.error(this, ex);
}
}
} else if (argumentType == IUnitBindingSupport.class) {
try {
final IUnitBindingSupport adapter = (IUnitBindingSupport) ce.createExecutableExtension(attributeName);
return (ArgumentType) adapter;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else if (argumentType == IDeleteParticipant.class) {
try {
final IDeleteParticipant participant = (IDeleteParticipant) ce.createExecutableExtension(attributeName);
return (ArgumentType) participant;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else if (argumentType == IInitializationParticipant.class) {
try {
final IInitializationParticipant adapter = (IInitializationParticipant) ce
.createExecutableExtension(attributeName);
return (ArgumentType) adapter;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else if (argumentType == IAssignmentParticipant.class) {
try {
final IAssignmentParticipant adapter = (IAssignmentParticipant) ce
.createExecutableExtension(attributeName);
return (ArgumentType) adapter;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else if (argumentType == IControlFactory.class) {
try {
final IControlFactory factory = (IControlFactory) ce.createExecutableExtension(attributeName);
return (ArgumentType) factory;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else if (argumentType == ICellEditorFactory.class) {
try {
final ICellEditorFactory factory = (ICellEditorFactory) ce.createExecutableExtension(attributeName);
return (ArgumentType) factory;
} catch (final CoreException ex) {
LogUtils.error(ce, ex);
}
} else {
LogUtils.error(this, "Unknown argument type: " + argumentType); //$NON-NLS-1$
}
return null;
}
@Override
public IModelClassInfo getModelClassInfo(String className, String type, boolean create) {
if (className == null) return null;
IModelClassInfo cInfo = getModelInfo().get(className);
if (cInfo == null && create) {
cInfo = IUIBindingsFactory.eINSTANCE.createModelClassInfo();
cInfo.setClassName(className);
getModelInfo().put(className.intern(), cInfo);
}
/*
* Handle the type part
*/
if (cInfo != null && type != null && type.length() > 0) {
IModelClassInfo tInfo = cInfo.getTypes().get(type);
if (tInfo == null && create) {
tInfo = IUIBindingsFactory.eINSTANCE.createModelClassInfo();
tInfo.setClassName(className);
cInfo.getTypes().put(type.intern(), tInfo);
}
cInfo = tInfo;
}
return cInfo;
}
@Override
public IModelFeatureInfo getModelFeatureInfo(String className, String featureName, String type, boolean create) {
if (className == null || featureName == null) return null;
final IModelClassInfo cInfo = getModelClassInfo(className, type, create);
if (cInfo == null) return null;
IModelFeatureInfo fInfo = cInfo.getFeatures().get(featureName);
if (fInfo == null && create) {
fInfo = IUIBindingsFactory.eINSTANCE.createModelFeatureInfo();
fInfo.setFeatureName(featureName);
cInfo.getFeatures().put(featureName.intern(), fInfo);
}
return fInfo;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<ITreeItemDescriptor> getTreeItems() {
if (treeItems == null) {
treeItems = new EObjectContainmentEList<ITreeItemDescriptor>(ITreeItemDescriptor.class, this,
IUIBindingsPackage.MANAGER__TREE_ITEMS);
}
return treeItems;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public Clipboard getClipboard() {
if (clipboard == null) {
clipboard = new Clipboard(PlatformUI.getWorkbench().getDisplay());
}
return clipboard;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IEMFObservableFactoryDescriptor> getObservableFactories() {
if (observableFactories == null) {
observableFactories = new EObjectContainmentEList<IEMFObservableFactoryDescriptor>(
IEMFObservableFactoryDescriptor.class, this, IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES);
}
return observableFactories;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IQuickfixProposalProcessorDescriptor> getQuickfixProposalProcessors() {
if (quickfixProposalProcessors == null) {
quickfixProposalProcessors = new EObjectContainmentEList<IQuickfixProposalProcessorDescriptor>(
IQuickfixProposalProcessorDescriptor.class, this,
IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS);
}
return quickfixProposalProcessors;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IConstraintValidatorAdapterConstraintDescriptor> getConstraintProviders() {
if (constraintProviders == null) {
constraintProviders = new EObjectEList<IConstraintValidatorAdapterConstraintDescriptor>(
IConstraintValidatorAdapterConstraintDescriptor.class, this,
IUIBindingsPackage.MANAGER__CONSTRAINT_PROVIDERS);
}
return constraintProviders;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IBindingContext> getContexts() {
if (contexts == null) {
contexts = new EObjectContainmentEList<IBindingContext>(IBindingContext.class, this,
IUIBindingsPackage.MANAGER__CONTEXTS);
}
return contexts;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public IFormatterProvider getFormatterProvider() {
if (formatterProvider == null) {
setFormatterProvider(new DefaultFormatterProvider());
}
return formatterProvider;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setFormatterProvider(IFormatterProvider newFormatterProvider) {
final IFormatterProvider oldFormatterProvider = formatterProvider;
formatterProvider = newFormatterProvider;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__FORMATTER_PROVIDER,
oldFormatterProvider, formatterProvider));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean isDeleteHandlerCheckEnabled() {
return deleteHandlerCheckEnabled;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setDeleteHandlerCheckEnabledGen(boolean newDeleteHandlerCheckEnabled) {
final boolean oldDeleteHandlerCheckEnabled = deleteHandlerCheckEnabled;
deleteHandlerCheckEnabled = newDeleteHandlerCheckEnabled;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
IUIBindingsPackage.MANAGER__DELETE_HANDLER_CHECK_ENABLED, oldDeleteHandlerCheckEnabled,
deleteHandlerCheckEnabled));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setDeleteHandlerCheckEnabled(boolean newDeleteHandlerCheckEnabled) {
setDeleteHandlerCheckEnabledGen(newDeleteHandlerCheckEnabled);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
ps.setValue(Constants.PREF_DELETE_HANDLER_CHECK_ENABLED, newDeleteHandlerCheckEnabled);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EMap<String, String> getCommandIDs() {
if (commandIDs == null) {
commandIDs = new EcoreEMap<String, String>(IUIBindingsPackage.Literals.STRING_TO_STRING_MAP_ENTRY,
StringToStringMapEntryImpl.class, this, IUIBindingsPackage.MANAGER__COMMAND_IDS);
}
return commandIDs;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public IAssignmentParticipantsManager getAssignmentParticiantsManager() {
return assignmentParticiantsManager;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public EditingDomain getEditingDomain() {
if (editingDomain == null) {
setEditingDomain(UIBindingsUtils.createEditingDomain());
}
return editingDomain;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setEditingDomain(EditingDomain newEditingDomain) {
final EditingDomain oldEditingDomain = editingDomain;
editingDomain = newEditingDomain;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__EDITING_DOMAIN,
oldEditingDomain, editingDomain));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public FormToolkit getFormToolkit() {
if (formToolkit == null) {
formToolkit = new FormToolkit(Display.getCurrent());
}
return formToolkit;
}
/**
* All used toolkits based on RGB for the background.
*/
private final Map<RGB, FormToolkit> myToolkitRegistry = new HashMap<RGB, FormToolkit>();
@Override
public FormToolkit getFormToolkit(Control c) {
return getFormToolkit();
// /*
// * Walk up the parent chain to find the background color.
// *
// * It is not clear if Control.getBackground() automatically walk up the parent chain...
// */
// Color col = null;
// for (Control bgControl = c; col == null && bgControl != null; bgControl =
// bgControl.getParent()) {
// col = bgControl.getBackground();
// }
//
// if (col == null) return getFormToolkit();
//
// /*
// * Check if we already have a match; otherwise create a new toolkit.
// */
// final RGB rgb = col.getRGB();
// FormToolkit toolkit = myToolkitRegistry.get(rgb);
// if (toolkit == null) {
// toolkit = new FormToolkit(c.getDisplay());
// myToolkitRegistry.put(rgb, toolkit);
// toolkit.getColors().setBackground(col);
// }
// return toolkit;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setFormToolkit(FormToolkit newFormToolkit) {
final FormToolkit oldFormToolkit = formToolkit;
formToolkit = newFormToolkit;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.MANAGER__FORM_TOOLKIT,
oldFormToolkit, formToolkit));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EMap<String, IArgumentInformation> getArgumentInformation() {
if (argumentInformation == null) {
argumentInformation = new EcoreEMap<String, IArgumentInformation>(
IUIBindingsPackage.Literals.STRING_TO_ARGUMENT_INFORMATION_MAP_ENTRY,
StringToArgumentInformationMapEntryImpl.class, this,
IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION);
}
return argumentInformation;
}
@Override
public IArgumentInformation getArgumentInformation(final String name) {
IArgumentInformation ai = getArgumentInformation().get(name);
if (ai == null) {
ai = IUIBindingsFactory.eINSTANCE.createArgumentInformation();
ai.setName(name);
getArgumentInformation().put(name, ai);
LogUtils.error(ai, "Argument '" + name + "' not declared. Added with defaults.");
}
return ai;
};
@Override
public IEMFObservableFactory getObservableFactory(EObject object) {
Assert.isNotNull(object, "observed object may not be null"); //$NON-NLS-1$
final String packageName = object.getClass().getPackage().getName();
IEMFObservableFactoryDescriptor desc = null;
for (final IEMFObservableFactoryDescriptor d : getObservableFactories()) {
if (packageName.startsWith(d.getPackagePrefix())) {
desc = d;
break;
}
}
if (desc == null) {
if (theDefaultObservableFactory == null) {
theDefaultObservableFactory = new DefaultEMFObservableFactory();
}
return theDefaultObservableFactory;
}
return desc.getFactory().getObject();
}
@Override
public void getQuickfixes(final IBindingMessage message, final List<IQuickfixProposal> proposals) {
final int code = message.getCode();
final String source = message.getSource();
final String messageMessage = message.getMessage();
final IQuickfixProposalProcessorContext context = new QuickfixProposalProcessorContextImpl() {
@Override
public void addProposal(IQuickfixProposal proposal) {
if (Activator.getDefault().TRACE_QUICK_FIXES) {
LogUtils.debug(proposal, "Added " + proposal); //$NON-NLS-1$
}
proposals.add(proposal);
}
@Override
public IBindingMessage getMessage() {
return message;
}
@Override
public IValueBinding getBinding() {
return message.getBinding();
}
@Override
public String getText() {
final IValueBinding binding = getBinding();
if (binding == null) return null;
final IObservableValue observable = binding.getUIAttribute().getCurrentValue();
if (observable.getValueType() != String.class) return null;
return (String) observable.getValue();
}
};
/*
* For each quick fix test against the current message. Reject the quick fix if any of the
* conditions do not match.
*/
for (final IQuickfixProposalProcessorDescriptor qi : getQuickfixProposalProcessors()) {
if (qi.getSource() != null && !qi.getSource().equals(source)) {
continue;
}
if (qi.getCode() != Integer.MIN_VALUE && qi.getCode() != code) {
continue;
}
if (qi.getModelType() != null || qi.getFeature() != null) {
boolean matches = false;
for (final IBindingMessageTarget target : message.getTargets()) {
boolean found = false;
final EObject modelObject = target.getModelObject();
if (qi.getModelType() != null) {
if (modelObject == null) {
continue;
}
final Class<?>[] typeOrder = Platform.getAdapterManager().computeClassOrder(
modelObject.getClass());
for (final Class<?> c : typeOrder) {
if (c.getName().equals(qi.getModelType())) {
found = true;
break;
}
}
if (!found) {
continue;
}
}
if (qi.getFeature() != null) {
final String feature = target.getModelFeature() != null ? target.getModelFeature().getName()
: null;
if (!qi.getFeature().equals(feature)) {
found = false;
continue;
}
}
// We have a match on object and feature
matches = true;
break;
}
if (!matches) {
continue;
}
}
if (qi.getMessagePattern() != null) {
if (messageMessage == null || messageMessage.length() == 0) {
continue;
}
if (!qi.getMessagePattern().matcher(messageMessage).matches()) {
continue;
}
}
/*
* So we have a possible processor
*/
final IQuickfixProposalProcessor processor = qi.getProcessor().getObject();
if (processor != null) {
processor.getProposals(context);
}
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__PROVIDERS:
return ((InternalEList<InternalEObject>) (InternalEList<?>) getProviders()).basicAdd(otherEnd, msgs);
}
return super.eInverseAdd(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION:
return ((InternalEList<?>) getArgumentInformation()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__PROVIDERS:
return ((InternalEList<?>) getProviders()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__MODEL_INFO:
return ((InternalEList<?>) getModelInfo()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__TREE_ITEMS:
return ((InternalEList<?>) getTreeItems()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES:
return ((InternalEList<?>) getObservableFactories()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS:
return ((InternalEList<?>) getQuickfixProposalProcessors()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__CONTEXTS:
return ((InternalEList<?>) getContexts()).basicRemove(otherEnd, msgs);
case IUIBindingsPackage.MANAGER__COMMAND_IDS:
return ((InternalEList<?>) getCommandIDs()).basicRemove(otherEnd, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__EDITING_DOMAIN:
return getEditingDomain();
case IUIBindingsPackage.MANAGER__FORM_TOOLKIT:
return getFormToolkit();
case IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION:
if (coreType)
return getArgumentInformation();
else
return getArgumentInformation().map();
case IUIBindingsPackage.MANAGER__PROVIDERS:
return getProviders();
case IUIBindingsPackage.MANAGER__UI_ATTRIBUTE_FACTORIES:
return getUiAttributeFactories();
case IUIBindingsPackage.MANAGER__DECORATOR_EXTENDERS:
return getDecoratorExtenders();
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATORS:
return getModelArgumentMediators();
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATOR_CLASSES:
return getModelArgumentMediatorClasses();
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY:
return getTextCommitStrategy();
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY_DELAY:
return getTextCommitStrategyDelay();
case IUIBindingsPackage.MANAGER__EDIT_CELL_ANY_KEY:
return isEditCellAnyKey();
case IUIBindingsPackage.MANAGER__EDIT_CELL_SINGLE_CLICK:
return isEditCellSingleClick();
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_POSITION:
return getMessageDecorationPosition();
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_MINIMUM_SEVERITY:
return getMessageDecorationMinimumSeverity();
case IUIBindingsPackage.MANAGER__ALTERNATIVE_DECORATION_POSITION:
return getAlternativeDecorationPosition();
case IUIBindingsPackage.MANAGER__AUTO_APPLY_SINGLE_QUICKFIX:
return isAutoApplySingleQuickfix();
case IUIBindingsPackage.MANAGER__ALTERNATE_ROW_COLORS:
return isAlternateRowColors();
case IUIBindingsPackage.MANAGER__VALIDATION_ERRORS_ARE_FATAL:
return isValidationErrorsAreFatal();
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY:
return getValidationDelay();
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY_WINDOW:
return getValidationDelayWindow();
case IUIBindingsPackage.MANAGER__REQUIRED_VB_IMAGE_DECORATION_SHOWN:
return isRequiredVBImageDecorationShown();
case IUIBindingsPackage.MANAGER__ASSIST_VB_IMAGE_DECORATION_SHOWN:
return isAssistVBImageDecorationShown();
case IUIBindingsPackage.MANAGER__QUICKFIX_VB_IMAGE_DECORATION_SHOWN:
return isQuickfixVBImageDecorationShown();
case IUIBindingsPackage.MANAGER__VIEW_NAVIGATION_RECORDED:
return isViewNavigationRecorded();
case IUIBindingsPackage.MANAGER__MODEL_INFO:
if (coreType)
return getModelInfo();
else
return getModelInfo().map();
case IUIBindingsPackage.MANAGER__TREE_ITEMS:
return getTreeItems();
case IUIBindingsPackage.MANAGER__CLIPBOARD:
return getClipboard();
case IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES:
return getObservableFactories();
case IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS:
return getQuickfixProposalProcessors();
case IUIBindingsPackage.MANAGER__CONSTRAINT_PROVIDERS:
return getConstraintProviders();
case IUIBindingsPackage.MANAGER__CONTEXTS:
return getContexts();
case IUIBindingsPackage.MANAGER__FORMATTER_PROVIDER:
return getFormatterProvider();
case IUIBindingsPackage.MANAGER__DELETE_HANDLER_CHECK_ENABLED:
return isDeleteHandlerCheckEnabled();
case IUIBindingsPackage.MANAGER__COMMAND_IDS:
if (coreType)
return getCommandIDs();
else
return getCommandIDs().map();
case IUIBindingsPackage.MANAGER__ASSIGNMENT_PARTICIANTS_MANAGER:
return getAssignmentParticiantsManager();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@SuppressWarnings("unchecked")
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__EDITING_DOMAIN:
setEditingDomain((EditingDomain) newValue);
return;
case IUIBindingsPackage.MANAGER__FORM_TOOLKIT:
setFormToolkit((FormToolkit) newValue);
return;
case IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION:
((EStructuralFeature.Setting) getArgumentInformation()).set(newValue);
return;
case IUIBindingsPackage.MANAGER__PROVIDERS:
getProviders().clear();
getProviders().addAll((Collection<? extends IDecoratorProvider>) newValue);
return;
case IUIBindingsPackage.MANAGER__UI_ATTRIBUTE_FACTORIES:
getUiAttributeFactories().clear();
getUiAttributeFactories().addAll((Collection<? extends IUIAttributeFactoryDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__DECORATOR_EXTENDERS:
getDecoratorExtenders().clear();
getDecoratorExtenders().addAll((Collection<? extends IUIBindingDecoratorExtenderDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATORS:
getModelArgumentMediators().clear();
getModelArgumentMediators().addAll((Collection<? extends CEObjectHolder<IModelArgumentMediator>>) newValue);
return;
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATOR_CLASSES:
setModelArgumentMediatorClasses((Map<EClassifier, Object>) newValue);
return;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY:
setTextCommitStrategy((TextCommitStrategy) newValue);
return;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY_DELAY:
setTextCommitStrategyDelay((Integer) newValue);
return;
case IUIBindingsPackage.MANAGER__EDIT_CELL_ANY_KEY:
setEditCellAnyKey((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__EDIT_CELL_SINGLE_CLICK:
setEditCellSingleClick((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_POSITION:
setMessageDecorationPosition((DecorationPosition) newValue);
return;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_MINIMUM_SEVERITY:
setMessageDecorationMinimumSeverity((BindingMessageSeverity) newValue);
return;
case IUIBindingsPackage.MANAGER__ALTERNATIVE_DECORATION_POSITION:
setAlternativeDecorationPosition((DecorationPosition) newValue);
return;
case IUIBindingsPackage.MANAGER__AUTO_APPLY_SINGLE_QUICKFIX:
setAutoApplySingleQuickfix((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__ALTERNATE_ROW_COLORS:
setAlternateRowColors((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_ERRORS_ARE_FATAL:
setValidationErrorsAreFatal((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY:
setValidationDelay((Integer) newValue);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY_WINDOW:
setValidationDelayWindow((Integer) newValue);
return;
case IUIBindingsPackage.MANAGER__REQUIRED_VB_IMAGE_DECORATION_SHOWN:
setRequiredVBImageDecorationShown((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__ASSIST_VB_IMAGE_DECORATION_SHOWN:
setAssistVBImageDecorationShown((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__QUICKFIX_VB_IMAGE_DECORATION_SHOWN:
setQuickfixVBImageDecorationShown((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__VIEW_NAVIGATION_RECORDED:
setViewNavigationRecorded((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__MODEL_INFO:
((EStructuralFeature.Setting) getModelInfo()).set(newValue);
return;
case IUIBindingsPackage.MANAGER__TREE_ITEMS:
getTreeItems().clear();
getTreeItems().addAll((Collection<? extends ITreeItemDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES:
getObservableFactories().clear();
getObservableFactories().addAll((Collection<? extends IEMFObservableFactoryDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS:
getQuickfixProposalProcessors().clear();
getQuickfixProposalProcessors().addAll(
(Collection<? extends IQuickfixProposalProcessorDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__CONSTRAINT_PROVIDERS:
getConstraintProviders().clear();
getConstraintProviders().addAll(
(Collection<? extends IConstraintValidatorAdapterConstraintDescriptor>) newValue);
return;
case IUIBindingsPackage.MANAGER__CONTEXTS:
getContexts().clear();
getContexts().addAll((Collection<? extends IBindingContext>) newValue);
return;
case IUIBindingsPackage.MANAGER__FORMATTER_PROVIDER:
setFormatterProvider((IFormatterProvider) newValue);
return;
case IUIBindingsPackage.MANAGER__DELETE_HANDLER_CHECK_ENABLED:
setDeleteHandlerCheckEnabled((Boolean) newValue);
return;
case IUIBindingsPackage.MANAGER__COMMAND_IDS:
((EStructuralFeature.Setting) getCommandIDs()).set(newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__EDITING_DOMAIN:
setEditingDomain(EDITING_DOMAIN_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__FORM_TOOLKIT:
setFormToolkit(FORM_TOOLKIT_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION:
getArgumentInformation().clear();
return;
case IUIBindingsPackage.MANAGER__PROVIDERS:
getProviders().clear();
return;
case IUIBindingsPackage.MANAGER__UI_ATTRIBUTE_FACTORIES:
getUiAttributeFactories().clear();
return;
case IUIBindingsPackage.MANAGER__DECORATOR_EXTENDERS:
getDecoratorExtenders().clear();
return;
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATORS:
getModelArgumentMediators().clear();
return;
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATOR_CLASSES:
setModelArgumentMediatorClasses((Map<EClassifier, Object>) null);
return;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY:
setTextCommitStrategy(TEXT_COMMIT_STRATEGY_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY_DELAY:
setTextCommitStrategyDelay(TEXT_COMMIT_STRATEGY_DELAY_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__EDIT_CELL_ANY_KEY:
setEditCellAnyKey(EDIT_CELL_ANY_KEY_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__EDIT_CELL_SINGLE_CLICK:
setEditCellSingleClick(EDIT_CELL_SINGLE_CLICK_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_POSITION:
setMessageDecorationPosition(MESSAGE_DECORATION_POSITION_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_MINIMUM_SEVERITY:
setMessageDecorationMinimumSeverity(MESSAGE_DECORATION_MINIMUM_SEVERITY_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__ALTERNATIVE_DECORATION_POSITION:
setAlternativeDecorationPosition(ALTERNATIVE_DECORATION_POSITION_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__AUTO_APPLY_SINGLE_QUICKFIX:
setAutoApplySingleQuickfix(AUTO_APPLY_SINGLE_QUICKFIX_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__ALTERNATE_ROW_COLORS:
setAlternateRowColors(ALTERNATE_ROW_COLORS_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_ERRORS_ARE_FATAL:
setValidationErrorsAreFatal(VALIDATION_ERRORS_ARE_FATAL_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY:
setValidationDelay(VALIDATION_DELAY_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY_WINDOW:
setValidationDelayWindow(VALIDATION_DELAY_WINDOW_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__REQUIRED_VB_IMAGE_DECORATION_SHOWN:
setRequiredVBImageDecorationShown(REQUIRED_VB_IMAGE_DECORATION_SHOWN_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__ASSIST_VB_IMAGE_DECORATION_SHOWN:
setAssistVBImageDecorationShown(ASSIST_VB_IMAGE_DECORATION_SHOWN_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__QUICKFIX_VB_IMAGE_DECORATION_SHOWN:
setQuickfixVBImageDecorationShown(QUICKFIX_VB_IMAGE_DECORATION_SHOWN_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__VIEW_NAVIGATION_RECORDED:
setViewNavigationRecorded(VIEW_NAVIGATION_RECORDED_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__MODEL_INFO:
getModelInfo().clear();
return;
case IUIBindingsPackage.MANAGER__TREE_ITEMS:
getTreeItems().clear();
return;
case IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES:
getObservableFactories().clear();
return;
case IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS:
getQuickfixProposalProcessors().clear();
return;
case IUIBindingsPackage.MANAGER__CONSTRAINT_PROVIDERS:
getConstraintProviders().clear();
return;
case IUIBindingsPackage.MANAGER__CONTEXTS:
getContexts().clear();
return;
case IUIBindingsPackage.MANAGER__FORMATTER_PROVIDER:
setFormatterProvider(FORMATTER_PROVIDER_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__DELETE_HANDLER_CHECK_ENABLED:
setDeleteHandlerCheckEnabled(DELETE_HANDLER_CHECK_ENABLED_EDEFAULT);
return;
case IUIBindingsPackage.MANAGER__COMMAND_IDS:
getCommandIDs().clear();
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case IUIBindingsPackage.MANAGER__EDITING_DOMAIN:
return EDITING_DOMAIN_EDEFAULT == null ? editingDomain != null : !EDITING_DOMAIN_EDEFAULT
.equals(editingDomain);
case IUIBindingsPackage.MANAGER__FORM_TOOLKIT:
return FORM_TOOLKIT_EDEFAULT == null ? formToolkit != null : !FORM_TOOLKIT_EDEFAULT.equals(formToolkit);
case IUIBindingsPackage.MANAGER__ARGUMENT_INFORMATION:
return argumentInformation != null && !argumentInformation.isEmpty();
case IUIBindingsPackage.MANAGER__PROVIDERS:
return providers != null && !providers.isEmpty();
case IUIBindingsPackage.MANAGER__UI_ATTRIBUTE_FACTORIES:
return uiAttributeFactories != null && !uiAttributeFactories.isEmpty();
case IUIBindingsPackage.MANAGER__DECORATOR_EXTENDERS:
return decoratorExtenders != null && !decoratorExtenders.isEmpty();
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATORS:
return modelArgumentMediators != null && !modelArgumentMediators.isEmpty();
case IUIBindingsPackage.MANAGER__MODEL_ARGUMENT_MEDIATOR_CLASSES:
return modelArgumentMediatorClasses != null;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY:
return textCommitStrategy != TEXT_COMMIT_STRATEGY_EDEFAULT;
case IUIBindingsPackage.MANAGER__TEXT_COMMIT_STRATEGY_DELAY:
return textCommitStrategyDelay != TEXT_COMMIT_STRATEGY_DELAY_EDEFAULT;
case IUIBindingsPackage.MANAGER__EDIT_CELL_ANY_KEY:
return editCellAnyKey != EDIT_CELL_ANY_KEY_EDEFAULT;
case IUIBindingsPackage.MANAGER__EDIT_CELL_SINGLE_CLICK:
return editCellSingleClick != EDIT_CELL_SINGLE_CLICK_EDEFAULT;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_POSITION:
return messageDecorationPosition != MESSAGE_DECORATION_POSITION_EDEFAULT;
case IUIBindingsPackage.MANAGER__MESSAGE_DECORATION_MINIMUM_SEVERITY:
return messageDecorationMinimumSeverity != MESSAGE_DECORATION_MINIMUM_SEVERITY_EDEFAULT;
case IUIBindingsPackage.MANAGER__ALTERNATIVE_DECORATION_POSITION:
return alternativeDecorationPosition != ALTERNATIVE_DECORATION_POSITION_EDEFAULT;
case IUIBindingsPackage.MANAGER__AUTO_APPLY_SINGLE_QUICKFIX:
return autoApplySingleQuickfix != AUTO_APPLY_SINGLE_QUICKFIX_EDEFAULT;
case IUIBindingsPackage.MANAGER__ALTERNATE_ROW_COLORS:
return alternateRowColors != ALTERNATE_ROW_COLORS_EDEFAULT;
case IUIBindingsPackage.MANAGER__VALIDATION_ERRORS_ARE_FATAL:
return validationErrorsAreFatal != VALIDATION_ERRORS_ARE_FATAL_EDEFAULT;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY:
return validationDelay != VALIDATION_DELAY_EDEFAULT;
case IUIBindingsPackage.MANAGER__VALIDATION_DELAY_WINDOW:
return validationDelayWindow != VALIDATION_DELAY_WINDOW_EDEFAULT;
case IUIBindingsPackage.MANAGER__REQUIRED_VB_IMAGE_DECORATION_SHOWN:
return requiredVBImageDecorationShown != REQUIRED_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
case IUIBindingsPackage.MANAGER__ASSIST_VB_IMAGE_DECORATION_SHOWN:
return assistVBImageDecorationShown != ASSIST_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
case IUIBindingsPackage.MANAGER__QUICKFIX_VB_IMAGE_DECORATION_SHOWN:
return quickfixVBImageDecorationShown != QUICKFIX_VB_IMAGE_DECORATION_SHOWN_EDEFAULT;
case IUIBindingsPackage.MANAGER__VIEW_NAVIGATION_RECORDED:
return viewNavigationRecorded != VIEW_NAVIGATION_RECORDED_EDEFAULT;
case IUIBindingsPackage.MANAGER__MODEL_INFO:
return modelInfo != null && !modelInfo.isEmpty();
case IUIBindingsPackage.MANAGER__TREE_ITEMS:
return treeItems != null && !treeItems.isEmpty();
case IUIBindingsPackage.MANAGER__CLIPBOARD:
return CLIPBOARD_EDEFAULT == null ? clipboard != null : !CLIPBOARD_EDEFAULT.equals(clipboard);
case IUIBindingsPackage.MANAGER__OBSERVABLE_FACTORIES:
return observableFactories != null && !observableFactories.isEmpty();
case IUIBindingsPackage.MANAGER__QUICKFIX_PROPOSAL_PROCESSORS:
return quickfixProposalProcessors != null && !quickfixProposalProcessors.isEmpty();
case IUIBindingsPackage.MANAGER__CONSTRAINT_PROVIDERS:
return constraintProviders != null && !constraintProviders.isEmpty();
case IUIBindingsPackage.MANAGER__CONTEXTS:
return contexts != null && !contexts.isEmpty();
case IUIBindingsPackage.MANAGER__FORMATTER_PROVIDER:
return FORMATTER_PROVIDER_EDEFAULT == null ? formatterProvider != null : !FORMATTER_PROVIDER_EDEFAULT
.equals(formatterProvider);
case IUIBindingsPackage.MANAGER__DELETE_HANDLER_CHECK_ENABLED:
return deleteHandlerCheckEnabled != DELETE_HANDLER_CHECK_ENABLED_EDEFAULT;
case IUIBindingsPackage.MANAGER__COMMAND_IDS:
return commandIDs != null && !commandIDs.isEmpty();
case IUIBindingsPackage.MANAGER__ASSIGNMENT_PARTICIANTS_MANAGER:
return assignmentParticiantsManager != null;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
final StringBuffer result = new StringBuffer(super.toString());
result.append(" (editingDomain: "); //$NON-NLS-1$
result.append(editingDomain);
result.append(", formToolkit: "); //$NON-NLS-1$
result.append(formToolkit);
result.append(", modelArgumentMediators: "); //$NON-NLS-1$
result.append(modelArgumentMediators);
result.append(", modelArgumentMediatorClasses: "); //$NON-NLS-1$
result.append(modelArgumentMediatorClasses);
result.append(", textCommitStrategy: "); //$NON-NLS-1$
result.append(textCommitStrategy);
result.append(", textCommitStrategyDelay: "); //$NON-NLS-1$
result.append(textCommitStrategyDelay);
result.append(", editCellAnyKey: "); //$NON-NLS-1$
result.append(editCellAnyKey);
result.append(", editCellSingleClick: "); //$NON-NLS-1$
result.append(editCellSingleClick);
result.append(", messageDecorationPosition: "); //$NON-NLS-1$
result.append(messageDecorationPosition);
result.append(", messageDecorationMinimumSeverity: "); //$NON-NLS-1$
result.append(messageDecorationMinimumSeverity);
result.append(", alternativeDecorationPosition: "); //$NON-NLS-1$
result.append(alternativeDecorationPosition);
result.append(", autoApplySingleQuickfix: "); //$NON-NLS-1$
result.append(autoApplySingleQuickfix);
result.append(", alternateRowColors: "); //$NON-NLS-1$
result.append(alternateRowColors);
result.append(", validationErrorsAreFatal: "); //$NON-NLS-1$
result.append(validationErrorsAreFatal);
result.append(", validationDelay: "); //$NON-NLS-1$
result.append(validationDelay);
result.append(", validationDelayWindow: "); //$NON-NLS-1$
result.append(validationDelayWindow);
result.append(", requiredVBImageDecorationShown: "); //$NON-NLS-1$
result.append(requiredVBImageDecorationShown);
result.append(", assistVBImageDecorationShown: "); //$NON-NLS-1$
result.append(assistVBImageDecorationShown);
result.append(", quickfixVBImageDecorationShown: "); //$NON-NLS-1$
result.append(quickfixVBImageDecorationShown);
result.append(", viewNavigationRecorded: "); //$NON-NLS-1$
result.append(viewNavigationRecorded);
result.append(", clipboard: "); //$NON-NLS-1$
result.append(clipboard);
result.append(", formatterProvider: "); //$NON-NLS-1$
result.append(formatterProvider);
result.append(", deleteHandlerCheckEnabled: "); //$NON-NLS-1$
result.append(deleteHandlerCheckEnabled);
result.append(')');
return result.toString();
}
@Override
public <T> T getService(Class<T> serviceClass) {
for (final Object service : getServices()) {
if (serviceClass.isInstance(service)) return (T) service;
}
return null;
}
@Override
public void updateBindings(Object[] objects) {
for (final IBindingContext c : getContexts()) {
c.updateBindings(objects);
}
}
@Override
public boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event, IValueBindingCell cell) {
Class<?> dataType = null;
/*
* The tree column of a tree is special: mouse clicks does not work!
*
* Otherwise, it will not be possible to click or double click on a item in the column to
* open and editor...
*/
boolean treeColumn = false;
if (cell != null) {
dataType = cell.getLabelBinding().getDataType().getDataType();
final IColumnBinding column = cell.getColumnBinding();
if (column != null) {
final IViewerBinding vb = column.getViewerBinding();
if (vb.getControl() instanceof Tree && (vb.getColumns().indexOf(column) == 0)) {
treeColumn = true;
}
}
}
final boolean isBoolean = dataType == Boolean.class || dataType == Boolean.TYPE;
switch (event.eventType) {
case ColumnViewerEditorActivationEvent.TRAVERSAL:
/*
* Travesal within a table or tree with TAB or arrows.
*/
return true;
case ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION:
if (treeColumn) return false;
/*
* Filter out the cases where a modifier - e.g. CTRL - has been pressed.
*/
final MouseEvent e = (MouseEvent) event.sourceEvent;
if ((isEditCellSingleClick() || isBoolean) && (e.button == 1) && (e.stateMask == 0)) return true;
return false;
case ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION:
if (treeColumn) return false;
return true;
case ColumnViewerEditorActivationEvent.KEY_PRESSED:
if ((event.keyCode == SWT.CR || event.keyCode == SWT.F2) && (event.stateMask == 0)) return true;
if (treeColumn) return false;
if (isBoolean && (event.character == ' ')) return true;
if (isEditCellAnyKey() && !isBoolean) {
/*
* If auto-editing is enabled, every character - expect control characters - will
* start editing
*/
if (event.character != 0 && !Character.isISOControl(event.character)) return true;
}
return false;
default:
break;
}
return false;
}
/**
* Cache for {@link ITreeItemDescriptor} based on the {@link EObject}.
*/
private final Map<EObject, ITreeItemDescriptor> myTreeItemDescriptorCache = new HashMap<EObject, ITreeItemDescriptor>();
@Override
public ITreeItemDescriptor getTreeItem(EObject modelObject) {
ITreeItemDescriptor descriptor = myTreeItemDescriptorCache.get(modelObject);
if (descriptor != null) return descriptor;
final Class<?>[] classes = Platform.getAdapterManager().computeClassOrder(modelObject.getClass());
final Set<ITreeItemDescriptor> descriptors = new HashSet<ITreeItemDescriptor>();
for (final Class<?> c : classes) {
final String typeName = c.getName();
for (final ITreeItemDescriptor d : getTreeItems()) {
for (final String mt : d.getModelTypes()) {
if (!mt.equals(typeName)) {
continue;
}
descriptors.add(d);
}
}
/*
* Depending on the numbe of found entries...
*/
switch (descriptors.size()) {
case 0:
continue;
default:
LogUtils.error(this, "Multiple ITreeItemDescriptors found for " + modelObject + ". Picking random."); //$NON-NLS-1$ //$NON-NLS-2$
//$FALL-THROUGH$ fallthrough
case 1:
descriptor = descriptors.iterator().next();
myTreeItemDescriptorCache.put(modelObject, descriptor);
return descriptor;
}
}
/*
* No descriptor found... Create one and put it into the cache
*/
return null;
}
@Override
public ITreeItemDescriptor getTreeItem(String id) {
for (final ITreeItemDescriptor d : getTreeItems()) {
if (d.getId().equals(id)) return d;
}
return null;
}
private static final IInitializationParticipant myDefaultInitializationParticipant = new DefaultEObjectInitializer();
// TODO: Move to UIBU!
@Override
public Command initializeObject(final EditingDomain editingDomain, final EObject parent,
final EReference reference, final EObject child, boolean addToParent) {
if (child == null) return null;
final EClass eClass = child.eClass();
final IBindingDataType dt = IBindingDataType.Factory.create(null, eClass);
final IInitializationParticipant initializer = dt.getArgument(Constants.ARG_INITIALIZER, null,
IInitializationParticipant.class, myDefaultInitializationParticipant);
if (initializer == null) return null;
final CompoundCommand cc = new CompoundCommand();
final Map<EStructuralFeature, Object> valueMap = new HashMap<EStructuralFeature, Object>();
final IInitializationParticipantContext context = new IInitializationParticipantContext() {
@Override
public EObject getObject() {
return child;
}
@Override
public EditingDomain getEditingDomain() {
return editingDomain;
}
@Override
public void addCommand(Command command) {
cc.append(command);
}
@Override
public Map<EStructuralFeature, Object> getValueMap() {
return valueMap;
}
@Override
public void setStructuralFeature(EStructuralFeature feature, Object value) {
getValueMap().put(feature, value);
final Command command = SetCommand.create(getEditingDomain(), getObject(), feature, value);
addCommand(command);
}
@Override
public Object getStructuralFeature(EStructuralFeature feature) {
if (getValueMap().containsKey(feature)) return getValueMap().get(feature);
return getObject().eGet(feature);
}
};
/*
* Make sure the parent is seen from the start... though it is only added as a command at
* the end - see below...
*/
if (parent != null && reference != null && reference.getEOpposite() != null) {
context.getValueMap().put(reference.getEOpposite(), parent);
}
try {
initializer.initialize(context, eClass);
} catch (final OperationCanceledException ex) {
return null;
} catch (final Exception ex) {
LogUtils.error(initializer, ex);
}
if (addToParent && parent != null && reference != null) {
if (reference.isMany()) {
context.addCommand(AddCommand.create(context.getEditingDomain(), parent, reference, child));
} else {
context.addCommand(SetCommand.create(context.getEditingDomain(), parent, reference, child));
}
}
if (cc.isEmpty()) return null;
return cc.unwrap();
}
// TODO: Move to UIBU!
@Override
public Command assignObject(final EditingDomain editingDomain, IBinding binding, final EObject destination,
final EObject source) {
if (destination == null || source == null) return null;
IAssignmentParticipant participant = null;
/*
* First we consult the binding for any manager that can supply a participant.
*/
if (participant == null && binding != null) {
final IAssignmentParticipantsManager apManager = binding.getArgument(
Constants.ARG_ASSIGNMENT_PARTICIPANT_MANAGER, IAssignmentParticipantsManager.class, null);
if (apManager != null) {
participant = apManager.getParticipant(destination.eClass(), source.eClass());
}
}
/*
* ...and if no participant is found, then consult the global manager
*/
if (participant == null) {
participant = getAssignmentParticiantsManager().getParticipant(destination.eClass(), source.eClass());
}
if (participant == null) return null;
final CompoundCommand cc = new CompoundCommand();
final Map<EStructuralFeature, Object> valueMap = new HashMap<EStructuralFeature, Object>();
final IAssignmentParticipantContext context = new IAssignmentParticipantContext() {
@Override
public EObject getObject() {
return destination;
}
@Override
public EditingDomain getEditingDomain() {
return editingDomain;
}
@Override
public void addCommand(Command command) {
cc.append(command);
}
@Override
public Map<EStructuralFeature, Object> getValueMap() {
return valueMap;
}
@Override
public void setStructuralFeature(EStructuralFeature feature, Object value) {
getValueMap().put(feature, value);
final Command command = SetCommand.create(getEditingDomain(), getObject(), feature, value);
addCommand(command);
}
@Override
public Object getStructuralFeature(EStructuralFeature feature) {
if (getValueMap().containsKey(feature)) return getValueMap().get(feature);
return getObject().eGet(feature);
}
@Override
public EObject getSourceObject() {
return source;
}
};
try {
participant.assign(context);
} catch (final Exception ex) {
LogUtils.error(participant, ex);
}
if (cc.isEmpty()) return null;
return cc.unwrap();
}
@Override
public Command deleteObjects(final EditingDomain editingDomain, final Collection<? extends EObject> targets,
final boolean queryUser) {
if (targets == null) return null;
final CompoundCommand cc = new CompoundCommand();
final boolean checkForIncomingReferences[] = new boolean[1];
checkForIncomingReferences[0] = true;
/*
* Tests each of the objects and their contained children if they can be deleted
*/
for (final EObject t : targets) {
final IDeleteParticipantContext context = new IDeleteParticipantContext() {
@Override
public EObject getElement() {
return t;
}
@Override
public EditingDomain getEditingDomain() {
return editingDomain;
}
@Override
public void addCommand(Command command) {
cc.append(command);
}
@Override
public boolean canQueryUser() {
return queryUser;
}
@Override
public boolean justTest() {
return !canQueryUser();
}
@Override
public void dontCheckForIncomingReferences() {
checkForIncomingReferences[0] = false;
}
};
if (!deleteObjectInternal(t, context)) return null;
for (final TreeIterator<EObject> i = t.eAllContents(); i.hasNext();) {
if (!deleteObjectInternal(i.next(), context)) return null;
}
}
if (checkForIncomingReferences[0]) {
/*
* Check if we have any incoming references into the targets...
*/
final Map<EObject, Collection<Setting>> references = UIBEcoreUtils.findIncomingRequiredReferences(targets);
if (references != null) {
/*
* Go though the incoming references to filter out any references that cannot be
* removed
*/
for (final Entry<EObject, Collection<Setting>> e : references.entrySet().toArray(
new Entry[references.entrySet().size()])) {
for (final Setting st : e.getValue().toArray(new Setting[e.getValue().size()])) {
final EStructuralFeature sf = st.getEStructuralFeature();
if (sf.isMany()) {
final List<?> l = (List<?>) st.get(false);
if (l.size() - 1 < sf.getLowerBound()) {
continue;
}
} else {
if (sf.isRequired()) {
continue;
}
}
e.getValue().remove(st);
}
if (e.getValue().isEmpty()) {
references.remove(e.getKey());
}
}
if (!references.isEmpty()) {
if (queryUser) {
UIBEcoreUtils.showErrorDialog("Delete Aborted", "Cannot delete the selected objects",
references);
}
return null;
}
}
}
if (cc.isEmpty()) return IdentityCommand.INSTANCE;
return cc.unwrap();
}
private boolean deleteObjectInternal(final EObject target, final IDeleteParticipantContext parentContext) {
/*
* Consult the global manager for participants
*/
final IBindingDataType dataType = IBindingDataType.Factory.create(null, target.getClass());
if (dataType == null) return false;
final List<IArgumentValue<IDeleteParticipant>> participants = dataType.getArguments(
Constants.ARG_DELETE_PARTICIPANT, null, IDeleteParticipant.class, false);
IDeleteParticipantContext context = null;
for (final IArgumentValue<IDeleteParticipant> dp : participants) {
if (context == null) {
context = new IDeleteParticipantContext() {
@Override
public EObject getElement() {
return target;
}
@Override
public EditingDomain getEditingDomain() {
return parentContext.getEditingDomain();
}
@Override
public void addCommand(Command command) {
parentContext.addCommand(command);
}
@Override
public boolean canQueryUser() {
return parentContext.canQueryUser();
}
@Override
public boolean justTest() {
return parentContext.justTest();
};
@Override
public void dontCheckForIncomingReferences() {
parentContext.dontCheckForIncomingReferences();
}
};
}
final IDeleteParticipant participant = dp.getValue();
try {
if (!participant.canDelete(context)) return false;
} catch (final Exception ex) {
LogUtils.error(participant, ex);
return false;
}
}
return true;
}
/**
* Listener use to monitor premature disposals of observables...
*/
private IDisposeListener myMonitorObservableDisposeListener = null;
/**
* Map with all monitored {@link IObservable} with a translation to the corresponding object
* that uses this object, if any...
*
* Unfortunately we cannot use {@link IObservable} as the direct key due to bug <a
* href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=341999">341999</a>: [DataBinding]+ *
* DecoratingObservable.hashCode() should not depend on decorated OV
*/
private Map<Integer, MonitoredObservableInfo> myMonitoredObservablesMap = null;
private static class MonitoredObservableInfo {
public MonitoredObservableInfo(IObservable source, Object observing) {
String s = "" + source;
if (source != null) {
if (s.startsWith(source.getClass().getName() + "@") && source instanceof IObservableValue) {
s = "" + ((IObservableValue) source).getValue();
}
s = s + " [" + ClassUtils.getLastClassName(source) + "]";
}
sourceInfo = s;
firstObserving = observing;
final Throwable cp = new Throwable();
cp.fillInStackTrace();
firstMonitoringPoint = cp;
}
public final String sourceInfo;
public final Object firstObserving;
public final Throwable firstMonitoringPoint;
public int noMonitors = 0;
}
/*
* TODO: Too important.. Needs a test..
*/
@Override
public void startMonitorObservableDispose(IObservable obj, Object observing) {
if (!Activator.getDefault().ASSERTS_PREMATURE_DISPOSE || obj == null) return;
if (myMonitorObservableDisposeListener == null) {
myMonitoredObservablesMap = new HashMap<Integer, MonitoredObservableInfo>();
myMonitorObservableDisposeListener = new IDisposeListener() {
@Override
public void handleDispose(DisposeEvent event) {
final MonitoredObservableInfo info = myMonitoredObservablesMap.get(System.identityHashCode(event
.getSource()));
/*
* Might already be removed by a listener prior in the listenerList
*/
if (info == null) return;
Object observing = info.firstObserving;
if (observing != null) {
observing = observing + " [" + ClassUtils.getLastClassName(observing) + "]";
}
final int oldLevels = LogUtils.DEBUG_STRACK_LEVELS;
try {
LogUtils.DEBUG_STRACK_LEVELS = 15;
LogUtils.error(event.getSource(), "PREMATURE DISPOSAL: " + info.sourceInfo + "\nused by "
+ observing, info.firstMonitoringPoint);
} finally {
LogUtils.DEBUG_STRACK_LEVELS = oldLevels;
}
}
};
}
MonitoredObservableInfo info = myMonitoredObservablesMap.get(System.identityHashCode(obj));
if (info == null) {
info = new MonitoredObservableInfo(obj, observing);
myMonitoredObservablesMap.put(System.identityHashCode(obj), info);
obj.addDisposeListener(myMonitorObservableDisposeListener);
}
info.noMonitors++;
}
@Override
public void stopMonitorObservableDispose(IObservable obj) {
if (!Activator.getDefault().ASSERTS_PREMATURE_DISPOSE || obj == null) return;
final MonitoredObservableInfo info = myMonitoredObservablesMap.get(System.identityHashCode(obj));
if (info == null) return;
info.noMonitors--;
if (info.noMonitors > 0) return;
myMonitoredObservablesMap.remove(System.identityHashCode(obj));
obj.removeDisposeListener(myMonitorObservableDisposeListener);
}
} // ManagerImpl