blob: 84c6e9d7c496e60f179e95952d73720206c75293 [file] [log] [blame]
// EStructuralFeatureFeatureModifierAdapterFactory.java
package org.eclipse.stem.ui.adapters.featuremodifier;
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.stem.core.model.ModelPackage;
import org.eclipse.stem.core.modifier.FeatureModifier;
import org.eclipse.stem.core.modifier.ModifierFactory;
import org.eclipse.stem.core.modifier.NOPModifier;
import org.eclipse.stem.core.modifier.RangeModifier;
import org.eclipse.stem.core.modifier.SequenceModifier;
import org.eclipse.stem.core.modifier.SingleValueModifier;
import org.eclipse.stem.ui.Activator;
/**
* This interface defines an adapter factory that adapts
* {@link EStructuralFeature}s to {@link FeatureModifier}s.
*/
public interface EStructuralFeatureFeatureModifierAdapterFactory {
/**
* Singleton instance of the factory.
*/
IdentifiableFeatureModifierAdapterFactoryImpl INSTANCE = new IdentifiableFeatureModifierAdapterFactoryImpl();
/**
* This class is an implementation of
* {@link EStructuralFeatureFeatureModifierAdapterFactory} that adapts
* {@link EStructuralFeature}s of
* {@link org.eclipse.stem.core.common.Identifiable}s to
* {@link FeatureModifier}s.
* <p>
* This implementation isn't quite complete as it doesn't allow the factory
* to be extended by adding another implementations of
* {@link EStructuralFeatureFeatureModifierAdapterFactory}. Doing so would
* allow different types provided by other plugins to be adapted.
*/
public class IdentifiableFeatureModifierAdapterFactoryImpl implements
EStructuralFeatureFeatureModifierAdapterFactory {
/**
* @param obj
* the {@link EStructuralFeature} to be adapted
* @param target
* the class to adapt to
* @return a {@link FeatureModifier} for the obj, or <code>null</code>
* if that's not possible.
*/
public FeatureModifier adapt(final Object obj, final Object target) {
FeatureModifier retValue = null;
if (obj instanceof EStructuralFeature) {
// Yes
final EStructuralFeature feature = (EStructuralFeature) obj;
if (target == NOPModifier.class) {
// Yes
// Integer NOP?
if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createIntegerNOPModifier();
retValue.setEStructuralFeature(feature);
} // if integer NOP
// Long NOP?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getELong()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createLongNOPModifier();
retValue.setEStructuralFeature(feature);
} // if Long NOP
// Double NOP?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEDouble()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createDoubleNOPModifier();
retValue.setEStructuralFeature(feature);
} // if double NOP
// STEMTime NOP?
else if (feature.getEType() == ModelPackage.eINSTANCE
.getSTEMTime()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createSTEMTimeNOPModifier();
retValue.setEStructuralFeature(feature);
} // if STEMTime NOP
// String NOP?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEString()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createStringNOPModifier();
retValue.setEStructuralFeature(feature);
} // if String NOP
else {
// No
// Not implemented
// Activator.logError("FeatureModifierAdapter for type \""
// + feature.getEType().getName()
// + "\" is not implemented.", null);
retValue = ModifierFactory.eINSTANCE
.createNOPModifier();
retValue.setEStructuralFeature(feature);
} // else
} // if NOPModifier
else if (target == SingleValueModifier.class) {
// Yes
// Integer range?
if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createIntegerModifier();
retValue.setEStructuralFeature(feature);
} // if integer range
// Long range?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getELong()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createLongModifier();
retValue.setEStructuralFeature(feature);
} // if Long range
// Double range?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEDouble()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createDoubleModifier();
retValue.setEStructuralFeature(feature);
} // if double range
// STEMTime range?
else if (feature.getEType() == ModelPackage.eINSTANCE
.getSTEMTime()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createSTEMTimeModifier();
retValue.setEStructuralFeature(feature);
} // if STEMTime range
else {
// No
// Not implemented
Activator.logError("FeatureModifierAdapter for type \""
+ feature.getEType().getName()
+ "\" is not implemented.", null);
retValue = ModifierFactory.eINSTANCE
.createNOPModifier();
retValue.setEStructuralFeature(feature);
}
} // if Range Modifier
else if (target == RangeModifier.class) {
// Yes
// Integer range?
if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createIntegerRangeModifier();
retValue.setEStructuralFeature(feature);
} // if integer range
// Long range?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getELong()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createLongRangeModifier();
retValue.setEStructuralFeature(feature);
} // if Long range
// Double range?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEDouble()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createDoubleRangeModifier();
retValue.setEStructuralFeature(feature);
} // if double range
// STEMTime range?
else if (feature.getEType() == ModelPackage.eINSTANCE
.getSTEMTime()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createSTEMTimeRangeModifier();
retValue.setEStructuralFeature(feature);
} // if STEMTime range
else {
// No
// Not implemented
Activator.logError("FeatureModifierAdapter for type \""
+ feature.getEType().getName()
+ "\" is not implemented.", null);
retValue = ModifierFactory.eINSTANCE
.createNOPModifier();
retValue.setEStructuralFeature(feature);
}
} // if Range Modifier
// Sequence?
else if (target == SequenceModifier.class) {
// Yes
// Integer Sequence?
if (feature.getEType() == EcorePackage.eINSTANCE.getEInt()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createIntegerSequenceModifier();
retValue.setEStructuralFeature(feature);
} // if integer Sequence
// Long Sequence?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getELong()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createLongSequenceModifier();
retValue.setEStructuralFeature(feature);
} // if Long Sequence
// Double Sequence?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEDouble()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createDoubleSequenceModifier();
retValue.setEStructuralFeature(feature);
} // if double Sequence
// STEMTime Sequence?
else if (feature.getEType() == ModelPackage.eINSTANCE
.getSTEMTime()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createSTEMTimeSequenceModifier();
retValue.setEStructuralFeature(feature);
} // if STEMTime Sequence
// String Sequence?
else if (feature.getEType() == EcorePackage.eINSTANCE
.getEString()) {
// Yes
retValue = ModifierFactory.eINSTANCE
.createStringSequenceModifier();
retValue.setEStructuralFeature(feature);
} // if String Sequence
else {
// No
// Not implemented
Activator.logError("FeatureModifierAdapter for type \""
+ feature.getEType().getName()
+ "\" is not implemented.", null);
retValue = ModifierFactory.eINSTANCE
.createNOPModifier();
retValue.setEStructuralFeature(feature);
}
} // if Sequence Modifier
else {
// No
// Not implemented
Activator.logError("FeatureModifierAdapter for type \""
+ feature.getEType().getName()
+ "\" is not implemented.", null);
retValue = ModifierFactory.eINSTANCE
.createNOPModifier();
retValue.setEStructuralFeature(feature);
}
} // if EStructuralFeature
return retValue;
} // adapt
} // IdentifiableFeatureModifierAdapterFactoryImpl
} // EStructuralFeatureFeatureModifierAdapterFactory