/*******************************************************************************
* 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 org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EObjectEList;
import org.eclipse.swt.widgets.Control;
import com.rcpcompany.uibindings.BindingMessageSeverity;
import com.rcpcompany.uibindings.IBindingMessage;
import com.rcpcompany.uibindings.IBindingMessageTarget;
import com.rcpcompany.uibindings.IUIBindingsPackage;
import com.rcpcompany.uibindings.IValueBinding;
import com.rcpcompany.utils.basic.ClassUtils;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Binding Message</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getBinding <em>Binding</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getMessage <em>Message</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getSeverity <em>Severity</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getMessageType <em>Message Type
* </em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getPrefix <em>Prefix</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getTargets <em>Targets</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getData <em>Data</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getSource <em>Source</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getCode <em>Code</em>}</li>
* <li>{@link com.rcpcompany.uibindings.internal.BindingMessageImpl#getDetails <em>Details</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public abstract class BindingMessageImpl extends EObjectImpl implements IBindingMessage {
/**
* The cached value of the '{@link #getBinding() <em>Binding</em>}' reference. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getBinding()
* @generated
* @ordered
*/
protected IValueBinding binding;
/**
* The default value of the '{@link #getMessage() <em>Message</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getMessage()
* @generated
* @ordered
*/
protected static final String MESSAGE_EDEFAULT = null;
/**
* The default value of the '{@link #getSeverity() <em>Severity</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getSeverity()
* @generated
* @ordered
*/
protected static final BindingMessageSeverity SEVERITY_EDEFAULT = BindingMessageSeverity.NONE;
/**
* The default value of the '{@link #getMessageType() <em>Message Type</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getMessageType()
* @generated
* @ordered
*/
protected static final int MESSAGE_TYPE_EDEFAULT = 0;
/**
* The default value of the '{@link #getPrefix() <em>Prefix</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getPrefix()
* @generated
* @ordered
*/
protected static final String PREFIX_EDEFAULT = null;
/**
* The cached value of the '{@link #getTargets() <em>Targets</em>}' reference list. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTargets()
* @generated
* @ordered
*/
protected EList<IBindingMessageTarget> targets;
/**
* The default value of the '{@link #getData() <em>Data</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getData()
* @generated
* @ordered
*/
protected static final Object DATA_EDEFAULT = null;
/**
* The default value of the '{@link #getSource() <em>Source</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getSource()
* @generated
* @ordered
*/
protected static final String SOURCE_EDEFAULT = null;
/**
* The default value of the '{@link #getCode() <em>Code</em>}' attribute. <!-- begin-user-doc
* --> <!-- end-user-doc -->
*
* @see #getCode()
* @generated
* @ordered
*/
protected static final int CODE_EDEFAULT = 0;
/**
* The default value of the '{@link #getDetails() <em>Details</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getDetails()
* @generated
* @ordered
*/
protected static final String DETAILS_EDEFAULT = null;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public BindingMessageImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return IUIBindingsPackage.Literals.BINDING_MESSAGE;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public IValueBinding getBinding() {
return binding;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setBinding(IValueBinding newBinding) {
final IValueBinding oldBinding = binding;
binding = newBinding;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET, IUIBindingsPackage.BINDING_MESSAGE__BINDING,
oldBinding, binding));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public String getPrefix() {
return ""; //$NON-NLS-1$
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IBindingMessageTarget> getTargets() {
if (targets == null) {
targets = new EObjectEList<IBindingMessageTarget>(IBindingMessageTarget.class, this,
IUIBindingsPackage.BINDING_MESSAGE__TARGETS);
}
return targets;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public Object getData() {
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public String getSource() {
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public int getCode() {
return 0;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public String getDetails() {
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case IUIBindingsPackage.BINDING_MESSAGE__BINDING:
return getBinding();
case IUIBindingsPackage.BINDING_MESSAGE__MESSAGE:
return getMessage();
case IUIBindingsPackage.BINDING_MESSAGE__SEVERITY:
return getSeverity();
case IUIBindingsPackage.BINDING_MESSAGE__MESSAGE_TYPE:
return getMessageType();
case IUIBindingsPackage.BINDING_MESSAGE__PREFIX:
return getPrefix();
case IUIBindingsPackage.BINDING_MESSAGE__TARGETS:
return getTargets();
case IUIBindingsPackage.BINDING_MESSAGE__DATA:
return getData();
case IUIBindingsPackage.BINDING_MESSAGE__SOURCE:
return getSource();
case IUIBindingsPackage.BINDING_MESSAGE__CODE:
return getCode();
case IUIBindingsPackage.BINDING_MESSAGE__DETAILS:
return getDetails();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case IUIBindingsPackage.BINDING_MESSAGE__BINDING:
setBinding((IValueBinding) newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case IUIBindingsPackage.BINDING_MESSAGE__BINDING:
setBinding((IValueBinding) null);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case IUIBindingsPackage.BINDING_MESSAGE__BINDING:
return binding != null;
case IUIBindingsPackage.BINDING_MESSAGE__MESSAGE:
return MESSAGE_EDEFAULT == null ? getMessage() != null : !MESSAGE_EDEFAULT.equals(getMessage());
case IUIBindingsPackage.BINDING_MESSAGE__SEVERITY:
return getSeverity() != SEVERITY_EDEFAULT;
case IUIBindingsPackage.BINDING_MESSAGE__MESSAGE_TYPE:
return getMessageType() != MESSAGE_TYPE_EDEFAULT;
case IUIBindingsPackage.BINDING_MESSAGE__PREFIX:
return PREFIX_EDEFAULT == null ? getPrefix() != null : !PREFIX_EDEFAULT.equals(getPrefix());
case IUIBindingsPackage.BINDING_MESSAGE__TARGETS:
return targets != null && !targets.isEmpty();
case IUIBindingsPackage.BINDING_MESSAGE__DATA:
return DATA_EDEFAULT == null ? getData() != null : !DATA_EDEFAULT.equals(getData());
case IUIBindingsPackage.BINDING_MESSAGE__SOURCE:
return SOURCE_EDEFAULT == null ? getSource() != null : !SOURCE_EDEFAULT.equals(getSource());
case IUIBindingsPackage.BINDING_MESSAGE__CODE:
return getCode() != CODE_EDEFAULT;
case IUIBindingsPackage.BINDING_MESSAGE__DETAILS:
return DETAILS_EDEFAULT == null ? getDetails() != null : !DETAILS_EDEFAULT.equals(getDetails());
}
return super.eIsSet(featureID);
}
@Override
public boolean supersedes(IBindingMessage otherMessage) {
return false;
}
@Override
public boolean matches(EObject obj, EStructuralFeature feature, Object key, FeatureMatchingAlgorithm algorithm) {
if (!eIsSet(IUIBindingsPackage.Literals.BINDING_MESSAGE__TARGETS)) return false;
for (final IBindingMessageTarget target : getTargets()) {
if (target.getModelObject() != obj) {
continue;
}
switch (algorithm) {
case IGNORE:
return true;
case EXACT_OR_NULL:
if (target.getModelFeature() == null) return true;
//$FALL-THROUGH$
case EXACT:
/*
* If we match against a specific key, then test for at match in the targets;
* otherwise ignore the key
*/
if (key != null && target.getModelKey() != key) {
continue;
}
if (target.getModelFeature() == feature) return true;
}
}
return false;
}
@Override
public Control getControl() {
return null;
}
@Override
public Object getKey() {
return null;
}
@Override
public String getMessage() {
return null;
}
@Override
public final int getMessageType() {
return getSeverity().getValue();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NONE
*/
@Override
public BindingMessageSeverity getSeverity() {
return BindingMessageSeverity.NONE;
}
@Override
public String toString() {
return ClassUtils.getLastClassName(this) + "[" + getSeverity().getLiteral() + ": " + getMessage() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
} // BindingMessageImpl