/*******************************************************************************
* 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.navigator.internal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.CoreException;
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.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EObjectEList;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.services.IEvaluationService;
import com.rcpcompany.uibindings.navigator.IEditorInformation;
import com.rcpcompany.uibindings.navigator.IEditorPartDescriptor;
import com.rcpcompany.uibindings.navigator.INavigatorModelPackage;
import com.rcpcompany.utils.logging.LogUtils;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>Editior Model Type</b></em>
* '. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link com.rcpcompany.uibindings.navigator.internal.EditorInformationImpl#getEditors <em>
* Editors</em>}</li>
* <li>{@link com.rcpcompany.uibindings.navigator.internal.EditorInformationImpl#getPreferredEditor
* <em>Preferred Editor</em>}</li>
* <li>{@link com.rcpcompany.uibindings.navigator.internal.EditorInformationImpl#getModelType <em>
* Model Type</em>}</li>
* <li>{@link com.rcpcompany.uibindings.navigator.internal.EditorInformationImpl#getTreeItemID <em>
* Tree Item ID</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class EditorInformationImpl extends EObjectImpl implements IEditorInformation {
/**
* The cached value of the '{@link #getEditors() <em>Editors</em>}' reference list. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getEditors()
* @generated
* @ordered
*/
protected EList<IEditorPartDescriptor> editors;
/**
* The cached value of the '{@link #getPreferredEditor() <em>Preferred Editor</em>}' reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see #getPreferredEditor()
* @generated
* @ordered
*/
protected IEditorPartDescriptor preferredEditor;
/**
* The default value of the '{@link #getModelType() <em>Model Type</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getModelType()
* @generated
* @ordered
*/
protected static final String MODEL_TYPE_EDEFAULT = null;
/**
* The cached value of the '{@link #getModelType() <em>Model Type</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getModelType()
* @generated
* @ordered
*/
protected String modelType = MODEL_TYPE_EDEFAULT;
/**
* The default value of the '{@link #getTreeItemID() <em>Tree Item ID</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTreeItemID()
* @generated
* @ordered
*/
protected static final String TREE_ITEM_ID_EDEFAULT = null;
/**
* The cached value of the '{@link #getTreeItemID() <em>Tree Item ID</em>}' attribute. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @see #getTreeItemID()
* @generated
* @ordered
*/
protected String treeItemID = TREE_ITEM_ID_EDEFAULT;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected EditorInformationImpl() {
super();
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected EClass eStaticClass() {
return INavigatorModelPackage.Literals.EDITOR_INFORMATION;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public EList<IEditorPartDescriptor> getEditors() {
if (editors == null) {
editors = new EObjectEList<IEditorPartDescriptor>(IEditorPartDescriptor.class, this,
INavigatorModelPackage.EDITOR_INFORMATION__EDITORS);
}
return editors;
}
@Override
public List<IEditorPartDescriptor> getEnabledEditors() {
final List<IEditorPartDescriptor> l = new ArrayList<IEditorPartDescriptor>();
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
final IEvaluationService service = (IEvaluationService) window.getService(IEvaluationService.class);
final IEvaluationContext context = service.getCurrentState();
for (final IEditorPartDescriptor d : getEditors()) {
final Expression e = d.getEnabledWhenExpression();
try {
if (e == null || e.evaluate(context) == EvaluationResult.TRUE) {
l.add(d);
continue;
}
} catch (final CoreException ex) {
LogUtils.error(this, ex);
}
}
return l;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public IEditorPartDescriptor getPreferredEditor() {
return preferredEditor;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public void setPreferredEditor(IEditorPartDescriptor newPreferredEditor) {
if (newPreferredEditor == null && getEditors().size() > 0) {
newPreferredEditor = getEditors().get(0);
}
setPreferredEditorGen(newPreferredEditor);
final IPreferenceStore ps = Activator.getDefault().getPreferenceStore();
String key = getModelType();
if (key == null) {
key = getTreeItemID();
}
ps.setValue(key, getPreferredEditor().getId());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public void setPreferredEditorGen(IEditorPartDescriptor newPreferredEditor) {
final IEditorPartDescriptor oldPreferredEditor = preferredEditor;
preferredEditor = newPreferredEditor;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
INavigatorModelPackage.EDITOR_INFORMATION__PREFERRED_EDITOR, oldPreferredEditor, preferredEditor));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String getModelType() {
return modelType;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setModelType(String newModelType) {
final String oldModelType = modelType;
modelType = newModelType;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
INavigatorModelPackage.EDITOR_INFORMATION__MODEL_TYPE, oldModelType, modelType));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public String getTreeItemID() {
return treeItemID;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void setTreeItemID(String newTreeItemID) {
final String oldTreeItemID = treeItemID;
treeItemID = newTreeItemID;
if (eNotificationRequired()) {
eNotify(new ENotificationImpl(this, Notification.SET,
INavigatorModelPackage.EDITOR_INFORMATION__TREE_ITEM_ID, oldTreeItemID, treeItemID));
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case INavigatorModelPackage.EDITOR_INFORMATION__EDITORS:
return getEditors();
case INavigatorModelPackage.EDITOR_INFORMATION__PREFERRED_EDITOR:
return getPreferredEditor();
case INavigatorModelPackage.EDITOR_INFORMATION__MODEL_TYPE:
return getModelType();
case INavigatorModelPackage.EDITOR_INFORMATION__TREE_ITEM_ID:
return getTreeItemID();
}
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 INavigatorModelPackage.EDITOR_INFORMATION__EDITORS:
getEditors().clear();
getEditors().addAll((Collection<? extends IEditorPartDescriptor>) newValue);
return;
case INavigatorModelPackage.EDITOR_INFORMATION__PREFERRED_EDITOR:
setPreferredEditor((IEditorPartDescriptor) newValue);
return;
case INavigatorModelPackage.EDITOR_INFORMATION__MODEL_TYPE:
setModelType((String) newValue);
return;
case INavigatorModelPackage.EDITOR_INFORMATION__TREE_ITEM_ID:
setTreeItemID((String) newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case INavigatorModelPackage.EDITOR_INFORMATION__EDITORS:
getEditors().clear();
return;
case INavigatorModelPackage.EDITOR_INFORMATION__PREFERRED_EDITOR:
setPreferredEditor((IEditorPartDescriptor) null);
return;
case INavigatorModelPackage.EDITOR_INFORMATION__MODEL_TYPE:
setModelType(MODEL_TYPE_EDEFAULT);
return;
case INavigatorModelPackage.EDITOR_INFORMATION__TREE_ITEM_ID:
setTreeItemID(TREE_ITEM_ID_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case INavigatorModelPackage.EDITOR_INFORMATION__EDITORS:
return editors != null && !editors.isEmpty();
case INavigatorModelPackage.EDITOR_INFORMATION__PREFERRED_EDITOR:
return preferredEditor != null;
case INavigatorModelPackage.EDITOR_INFORMATION__MODEL_TYPE:
return MODEL_TYPE_EDEFAULT == null ? modelType != null : !MODEL_TYPE_EDEFAULT.equals(modelType);
case INavigatorModelPackage.EDITOR_INFORMATION__TREE_ITEM_ID:
return TREE_ITEM_ID_EDEFAULT == null ? treeItemID != null : !TREE_ITEM_ID_EDEFAULT.equals(treeItemID);
}
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(" (modelType: ");
result.append(modelType);
result.append(", treeItemID: ");
result.append(treeItemID);
result.append(')');
return result.toString();
}
} // EditiorModelTypeImpl