blob: e47525bd0d9e116254ca9c849988446d4168ba30 [file] [log] [blame]
/**
* <copyright>
* </copyright>
*
* $Id$
*/
package org.eclipse.gmf.codegen.gmfgen.impl;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.gmf.codegen.gmfgen.GMFGenPackage;
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule;
import org.eclipse.gmf.codegen.gmfgen.GenConstraint;
import org.eclipse.gmf.codegen.gmfgen.GenDiagram;
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
import org.eclipse.gmf.codegen.gmfgen.GenExpressionProviderBase;
import org.eclipse.gmf.codegen.gmfgen.GenLanguage;
import org.eclipse.gmf.codegen.gmfgen.GenPlugin;
import org.eclipse.gmf.codegen.gmfgen.Viewmap;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Gen Plugin</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getEditorGen <em>Editor Gen</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getID <em>ID</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getProvider <em>Provider</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getVersion <em>Version</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#isPrintingEnabled <em>Printing Enabled</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getRequiredPlugins <em>Required Plugins</em>}</li>
* <li>{@link org.eclipse.gmf.codegen.gmfgen.impl.GenPluginImpl#getActivatorClassName <em>Activator Class Name</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class GenPluginImpl extends EObjectImpl implements GenPlugin {
/**
* The default value of the '{@link #getID() <em>ID</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getID()
* @generated
* @ordered
*/
protected static final String ID_EDEFAULT = null;
/**
* The cached value of the '{@link #getID() <em>ID</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getID()
* @generated
* @ordered
*/
protected String iD = ID_EDEFAULT;
/**
* The default value of the '{@link #getName() <em>Name</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getName()
* @generated
* @ordered
*/
protected static final String NAME_EDEFAULT = null;
/**
* The cached value of the '{@link #getName() <em>Name</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getName()
* @generated
* @ordered
*/
protected String name = NAME_EDEFAULT;
/**
* The default value of the '{@link #getProvider() <em>Provider</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getProvider()
* @generated
* @ordered
*/
protected static final String PROVIDER_EDEFAULT = "Sample Plugin Provider, Inc";
/**
* The cached value of the '{@link #getProvider() <em>Provider</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getProvider()
* @generated
* @ordered
*/
protected String provider = PROVIDER_EDEFAULT;
/**
* The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getVersion()
* @generated
* @ordered
*/
protected static final String VERSION_EDEFAULT = "1.0.0.qualifier";
/**
* The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getVersion()
* @generated
* @ordered
*/
protected String version = VERSION_EDEFAULT;
/**
* The default value of the '{@link #isPrintingEnabled() <em>Printing Enabled</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isPrintingEnabled()
* @generated
* @ordered
*/
protected static final boolean PRINTING_ENABLED_EDEFAULT = false;
/**
* The cached value of the '{@link #isPrintingEnabled() <em>Printing Enabled</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isPrintingEnabled()
* @generated
* @ordered
*/
protected boolean printingEnabled = PRINTING_ENABLED_EDEFAULT;
/**
* The cached value of the '{@link #getRequiredPlugins() <em>Required Plugins</em>}' attribute list.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getRequiredPlugins()
* @generated
* @ordered
*/
protected EList<String> requiredPlugins;
/**
* The default value of the '{@link #getActivatorClassName() <em>Activator Class Name</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getActivatorClassName()
* @generated
* @ordered
*/
protected static final String ACTIVATOR_CLASS_NAME_EDEFAULT = null;
/**
* The cached value of the '{@link #getActivatorClassName() <em>Activator Class Name</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getActivatorClassName()
* @generated
* @ordered
*/
protected String activatorClassName = ACTIVATOR_CLASS_NAME_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected GenPluginImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return GMFGenPackage.eINSTANCE.getGenPlugin();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public GenEditorGenerator getEditorGen() {
if (eContainerFeatureID() != GMFGenPackage.GEN_PLUGIN__EDITOR_GEN) return null;
return (GenEditorGenerator)eInternalContainer();
}
public String getID() {
String value = getIDGen();
if (GenCommonBaseImpl.isEmpty(value)) {
String prefix = "design"; //$NON-NLS-1$
if (getEditorGen() != null && getEditorGen().getDomainGenModel() != null) {
prefix = getEditorGen().getDomainGenModel().getModelPluginID();
}
if (prefix == null) {
prefix = ""; //$NON-NLS-1$
} else if (prefix.endsWith(".model")) { //$NON-NLS-1$
prefix = prefix.substring(0, prefix.length() - ".model".length()); //$NON-NLS-1$
}
return prefix + ".diagram"; //$NON-NLS-1$
}
return value;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getIDGen() {
return iD;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setID(String newID) {
String oldID = iD;
iD = newID;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__ID, oldID, iD));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getNameGen() {
return name;
}
/**
* @generated NOT
*/
public String getName() {
String result = getNameGen();
if (GenCommonBaseImpl.isEmpty(result)){
GenEditorGenerator generator = getEditorGen();
if (generator != null){
String prefix = "Diagram Editor";
GenModel genModel = generator.getDomainGenModel();
if (genModel != null){
prefix = genModel.getModelName();
}
result = prefix + " Plugin";
}
}
return result;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setName(String newName) {
String oldName = name;
name = newName;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__NAME, oldName, name));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getProvider() {
return provider;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setProvider(String newProvider) {
String oldProvider = provider;
provider = newProvider;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__PROVIDER, oldProvider, provider));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getVersion() {
return version;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setVersion(String newVersion) {
String oldVersion = version;
version = newVersion;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__VERSION, oldVersion, version));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isPrintingEnabled() {
return printingEnabled;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setPrintingEnabled(boolean newPrintingEnabled) {
boolean oldPrintingEnabled = printingEnabled;
printingEnabled = newPrintingEnabled;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__PRINTING_ENABLED, oldPrintingEnabled, printingEnabled));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EList<String> getRequiredPlugins() {
if (requiredPlugins == null) {
requiredPlugins = new EDataTypeUniqueEList<String>(String.class, this, GMFGenPackage.GEN_PLUGIN__REQUIRED_PLUGINS);
}
return requiredPlugins;
}
public String getActivatorClassName() {
String value = getActivatorClassNameGen();
if (GenCommonBaseImpl.isEmpty(value)) {
// FIXME is it really required to have domainPackageCapName there?
value = ((GenDiagramImpl) getDiagram()).getDomainPackageCapName() + "DiagramEditorPlugin";
}
return value;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getActivatorClassNameGen() {
return activatorClassName;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setActivatorClassName(String newActivatorClassName) {
String oldActivatorClassName = activatorClassName;
activatorClassName = newActivatorClassName;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GMFGenPackage.GEN_PLUGIN__ACTIVATOR_CLASS_NAME, oldActivatorClassName, activatorClassName));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public EList<String> getAllRequiredPlugins() {
Collection<String> rv = new LinkedHashSet<String>(getRequiredPlugins());
if (getEditorGen() != null) {
final GenModel genModel = getEditorGen().getDomainGenModel();
if (genModel != null) {
rv.add(genModel.getModelPluginID());
rv.add(genModel.getEditPluginID());
for (Iterator<GenPackage> it = genModel.getAllUsedGenPackagesWithClassifiers().iterator(); it.hasNext();) {
GenModel nextGenModel = it.next().getGenModel();
if (nextGenModel.hasEditSupport()) {
rv.add(nextGenModel.getModelPluginID());
rv.add(nextGenModel.getEditPluginID());
}
}
}
rv.addAll(getExpressionsRequiredPluginIDs());
rv.addAll(getValidationRequiredPluginIDs());
rv.addAll(getMetricsRequiredPluginIDs());
rv.addAll(getViewmapRequiredPluginIDs());
}
for (Iterator<String> it = rv.iterator(); it.hasNext();) {
if (GenCommonBaseImpl.isEmpty(it.next())) {
it.remove();
}
}
return new BasicEList<String>(rv);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public String getActivatorQualifiedClassName() {
return getEditorGen().getEditor().getPackageName() + '.' + getActivatorClassName();
}
private Set<String> getExpressionsRequiredPluginIDs() {
if(getEditorGen() != null && getEditorGen().getExpressionProviders() != null) {
for (GenExpressionProviderBase nextProvider : getEditorGen().getExpressionProviders().getProviders()) {
if (nextProvider.getLanguage() == GenLanguage.OCL_LITERAL);
return Collections.singleton("org.eclipse.ocl.ecore"); //$NON-NLS-1$
}
}
return Collections.emptySet();
}
private Collection<String> getViewmapRequiredPluginIDs() {
Collection<String> result = null;
for (TreeIterator<EObject> contents = EcoreUtil.getAllContents(getDiagram().getAllNodes()); contents.hasNext();){
EObject next = contents.next();
if (next instanceof Viewmap && next.eIsSet(GMFGenPackage.eINSTANCE.getViewmap_RequiredPluginIDs())){
if (result == null){
result = new HashSet<String>();
}
result.addAll(((Viewmap)next).getRequiredPluginIDs());
contents.prune();
}
}
if (result == null) {
return Collections.emptyList();
}
return result;
}
private Set<String> getValidationRequiredPluginIDs() {
if(getDiagram().isValidationEnabled() || getEditorGen().hasAudits()) {
HashSet<String> pluginIDs = new HashSet<String>();
pluginIDs.add("org.eclipse.emf.validation"); //$NON-NLS-1$
if(getEditorGen() != null && getEditorGen().getAudits() != null) {
// OCL constraint parser is part of separate feature/plugin: org.eclipse.emf.validation.ocl, need to refer to it explicitly
for (GenAuditRule ar : getEditorGen().getAudits().getRules()) {
GenConstraint constraint = ar.getRule();
if (constraint != null && constraint.getProvider() != null) {
if (GenLanguage.OCL_LITERAL.equals(constraint.getProvider().getLanguage())) {
pluginIDs.add("org.eclipse.emf.validation.ocl"); //$NON-NLS-1$
break;
}
}
}
collectGenPackagesRequiredPluginIDs(getEditorGen().getAudits().getTargetedModelPackages(), pluginIDs);
}
return pluginIDs;
}
return Collections.emptySet();
}
private Set<String> getMetricsRequiredPluginIDs() {
if(getEditorGen() != null && getEditorGen().getMetrics() != null) {
HashSet<String> pluginIDs = new HashSet<String>();
collectGenPackagesRequiredPluginIDs(getEditorGen().getMetrics().getAllTargetedModelPackages(), pluginIDs);
return pluginIDs;
}
return Collections.emptySet();
}
private void collectGenPackagesRequiredPluginIDs(Collection<GenPackage> genPackages, Set<String> pluginIDs) {
for (GenPackage nextPackage : genPackages) {
pluginIDs.add(nextPackage.getGenModel().getModelPluginID());
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
case GMFGenPackage.GEN_PLUGIN__EDITOR_GEN:
if (eInternalContainer() != null)
msgs = eBasicRemoveFromContainer(msgs);
return eBasicSetContainer(otherEnd, GMFGenPackage.GEN_PLUGIN__EDITOR_GEN, 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 GMFGenPackage.GEN_PLUGIN__EDITOR_GEN:
return eBasicSetContainer(null, GMFGenPackage.GEN_PLUGIN__EDITOR_GEN, msgs);
}
return super.eInverseRemove(otherEnd, featureID, msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
switch (eContainerFeatureID()) {
case GMFGenPackage.GEN_PLUGIN__EDITOR_GEN:
return eInternalContainer().eInverseRemove(this, GMFGenPackage.GEN_EDITOR_GENERATOR__PLUGIN, GenEditorGenerator.class, msgs);
}
return super.eBasicRemoveFromContainerFeature(msgs);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case GMFGenPackage.GEN_PLUGIN__EDITOR_GEN:
return getEditorGen();
case GMFGenPackage.GEN_PLUGIN__ID:
return getID();
case GMFGenPackage.GEN_PLUGIN__NAME:
return getName();
case GMFGenPackage.GEN_PLUGIN__PROVIDER:
return getProvider();
case GMFGenPackage.GEN_PLUGIN__VERSION:
return getVersion();
case GMFGenPackage.GEN_PLUGIN__PRINTING_ENABLED:
return isPrintingEnabled();
case GMFGenPackage.GEN_PLUGIN__REQUIRED_PLUGINS:
return getRequiredPlugins();
case GMFGenPackage.GEN_PLUGIN__ACTIVATOR_CLASS_NAME:
return getActivatorClassName();
}
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 GMFGenPackage.GEN_PLUGIN__ID:
setID((String)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__NAME:
setName((String)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__PROVIDER:
setProvider((String)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__VERSION:
setVersion((String)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__PRINTING_ENABLED:
setPrintingEnabled((Boolean)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__REQUIRED_PLUGINS:
getRequiredPlugins().clear();
getRequiredPlugins().addAll((Collection<? extends String>)newValue);
return;
case GMFGenPackage.GEN_PLUGIN__ACTIVATOR_CLASS_NAME:
setActivatorClassName((String)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case GMFGenPackage.GEN_PLUGIN__ID:
setID(ID_EDEFAULT);
return;
case GMFGenPackage.GEN_PLUGIN__NAME:
setName(NAME_EDEFAULT);
return;
case GMFGenPackage.GEN_PLUGIN__PROVIDER:
setProvider(PROVIDER_EDEFAULT);
return;
case GMFGenPackage.GEN_PLUGIN__VERSION:
setVersion(VERSION_EDEFAULT);
return;
case GMFGenPackage.GEN_PLUGIN__PRINTING_ENABLED:
setPrintingEnabled(PRINTING_ENABLED_EDEFAULT);
return;
case GMFGenPackage.GEN_PLUGIN__REQUIRED_PLUGINS:
getRequiredPlugins().clear();
return;
case GMFGenPackage.GEN_PLUGIN__ACTIVATOR_CLASS_NAME:
setActivatorClassName(ACTIVATOR_CLASS_NAME_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case GMFGenPackage.GEN_PLUGIN__EDITOR_GEN:
return getEditorGen() != null;
case GMFGenPackage.GEN_PLUGIN__ID:
return ID_EDEFAULT == null ? iD != null : !ID_EDEFAULT.equals(iD);
case GMFGenPackage.GEN_PLUGIN__NAME:
return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
case GMFGenPackage.GEN_PLUGIN__PROVIDER:
return PROVIDER_EDEFAULT == null ? provider != null : !PROVIDER_EDEFAULT.equals(provider);
case GMFGenPackage.GEN_PLUGIN__VERSION:
return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
case GMFGenPackage.GEN_PLUGIN__PRINTING_ENABLED:
return printingEnabled != PRINTING_ENABLED_EDEFAULT;
case GMFGenPackage.GEN_PLUGIN__REQUIRED_PLUGINS:
return requiredPlugins != null && !requiredPlugins.isEmpty();
case GMFGenPackage.GEN_PLUGIN__ACTIVATOR_CLASS_NAME:
return ACTIVATOR_CLASS_NAME_EDEFAULT == null ? activatorClassName != null : !ACTIVATOR_CLASS_NAME_EDEFAULT.equals(activatorClassName);
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (iD: ");
result.append(iD);
result.append(", name: ");
result.append(name);
result.append(", provider: ");
result.append(provider);
result.append(", version: ");
result.append(version);
result.append(", printingEnabled: ");
result.append(printingEnabled);
result.append(", requiredPlugins: ");
result.append(requiredPlugins);
result.append(", activatorClassName: ");
result.append(activatorClassName);
result.append(')');
return result.toString();
}
private GenDiagram getDiagram() {
return getEditorGen().getDiagram();
}
} //GenPluginImpl