blob: ad949b3a5b9bfc92fc136b8559b51ac73f253e16 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2006 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
*******************************************************************************/
package org.eclipse.wst.common.internal.emfworkbench.integration;
import java.util.HashMap;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.impl.EClassImpl;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConversionException;
import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConverter;
/**
* Insert the type's description here. Creation date: (4/6/2001 3:23:36 PM)
*
* @author: Administrator
*/
public class ModifierHelper {
private EObject owner;
private ModifierHelper ownerHelper;
private OwnerProvider ownerProvider;
private Object value;
private EStructuralFeature feature;
private HashMap attributes;
private boolean shouldUnsetValue = false;
private String valueXSITypeName;
private FeatureValueConverter featureValueConverter;
public static final int ACTION_SET = 0;
public static final int ACTION_UNSET = 1;
public static final int ACTION_BOTH = 2;
/**
* J2EEModifierHelper constructor comment.
*/
public ModifierHelper() {
super();
}
/**
* J2EEModifierHelper constructor comment.
*/
public ModifierHelper(EObject anOwner, EStructuralFeature aFeature, Object aValue) {
setOwner(anOwner);
setFeature(aFeature);
setValue(aValue);
}
/**
* J2EEModifierHelper constructor comment.
*/
public ModifierHelper(ModifierHelper anOwnerHelper, EStructuralFeature aFeature, Object aValue) {
setOwnerHelper(anOwnerHelper);
setFeature(aFeature);
setValue(aValue);
}
/**
* J2EEModifierHelper constructor comment.
*/
public ModifierHelper(OwnerProvider anOwnerProvider, EStructuralFeature aFeature, Object aValue) {
setOwnerProvider(anOwnerProvider);
setFeature(aFeature);
setValue(aValue);
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return java.util.HashMap
*/
public void addAttribute(EStructuralFeature aFeature, Object aValue) {
if (aFeature != null && aValue != null)
getAttributes().put(aFeature, aValue);
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newValue
* java.lang.Object
*/
protected Object convertValue(java.lang.Object newValue) {
return getFeatureValueConverter().convertValue(newValue, getFeature());
}
//Calling this will cause the value to be removed or unset from the owner.
public void doUnsetValue() {
shouldUnsetValue = true;
if (value != SetCommand.UNSET_VALUE && feature != null && !feature.isMany())
primSetValue(SetCommand.UNSET_VALUE);
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return java.util.HashMap
*/
public java.util.HashMap getAttributes() {
if (attributes == null)
attributes = new HashMap();
return attributes;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return org.eclipse.emf.ecore.EFactory
*/
protected org.eclipse.emf.ecore.EFactory getFactory() {
return getPackage().getEFactoryInstance();
}
protected EPackage getPackage() {
return ((EClassImpl) getFeatureType()).getEPackage();
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return org.eclipse.emf.ecore.EStructuralFeature
*/
public org.eclipse.emf.ecore.EStructuralFeature getFeature() {
return feature;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return EObject
*/
protected EObject getFeatureType() {
return getFeature().getEType();
}
/**
* Insert the method's description here. Creation date: (5/10/2001 4:51:58 PM)
*
* @return com.ibm.etools.j2ee.commands.FeatureValueConverter
*/
public FeatureValueConverter getFeatureValueConverter() {
if (featureValueConverter == null)
featureValueConverter = FeatureValueConverter.DEFAULT;
return featureValueConverter;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return String
*/
protected String getNewValueTypeName() {
if (getValueXSITypeName() != null && getValueXSITypeName().length() > 0)
return getValueXSITypeName();
return (((EClass) getFeatureType()).getName());
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return org.eclipse.emf.ecore.EObject
*/
public org.eclipse.emf.ecore.EObject getOwner() {
if (owner == null) {
OwnerProvider provider = getOwnerProvider();
EObject providerOwner = null;
if (provider != null)
providerOwner = provider.getOwner();
if (providerOwner == null && getOwnerHelper() != null)
providerOwner = (EObject) getOwnerHelper().getValue();
return providerOwner;
}
return owner;
}
/**
* Insert the method's description here. Creation date: (4/8/2001 2:47:54 PM)
*
* @return com.ibm.etools.j2ee.commands.J2EEModifierHelper
*/
public ModifierHelper getOwnerHelper() {
if (ownerHelper == null) {
if (getOwnerProvider() != null && getOwnerProvider().getOwner() == null)
return getOwnerProvider().getOwnerHelper();
}
return ownerHelper;
}
public ModifierHelper primGetOwnerHelper() {
return ownerHelper;
}
/**
* Insert the method's description here. Creation date: (9/18/2001 1:31:14 PM)
*
* @return com.ibm.etools.j2ee.ui.J2EEOwnerProvider
*/
public OwnerProvider getOwnerProvider() {
return ownerProvider;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @return java.lang.Object
*/
public java.lang.Object getValue() {
return value;
}
/**
* Insert the method's description here. Creation date: (4/10/2001 3:39:31 PM)
*
* @return java.lang.String
*/
public java.lang.String getValueXSITypeName() {
return valueXSITypeName;
}
/**
* This will automatically get called from the J2EEModelModifier before executing so it is not
* necessary to call it directly.
*/
public boolean isComplete() {
boolean result = true;
if (getOwnerHelper() != null)
result = getOwnerHelper().isComplete();
if (!mustCreateValue())
result = getValue() != null || shouldUnsetValue();
else
result = getFeatureType() != null;
return result && getFeature() != null && (getOwner() != null || getOwnerHelper() != null);
}
public boolean mustCreateValue() {
return getValue() == null && getFeature() != null && !shouldUnsetValue();
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newValue
* java.lang.Object
*/
public void primSetValue(java.lang.Object newValue) {
value = newValue;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newFeature
* org.eclipse.emf.ecore.EStructuralFeature
*/
public void setFeature(org.eclipse.emf.ecore.EStructuralFeature newFeature) {
feature = newFeature;
}
/**
* Insert the method's description here. Creation date: (5/10/2001 4:51:58 PM)
*
* @param newFeatureValueConverter
* com.ibm.etools.j2ee.commands.FeatureValueConverter
*/
public void setFeatureValueConverter(FeatureValueConverter newFeatureValueConverter) {
featureValueConverter = newFeatureValueConverter;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newOwner
* org.eclipse.emf.ecore.EObject
*/
public void setOwner(org.eclipse.emf.ecore.EObject newOwner) {
owner = newOwner;
}
/**
* Insert the method's description here. Creation date: (4/8/2001 2:47:54 PM)
*
* @param newOwnerHelper
* com.ibm.etools.j2ee.commands.J2EEModifierHelper
*/
public void setOwnerHelper(ModifierHelper newOwnerHelper) {
ownerHelper = newOwnerHelper;
}
/**
* Insert the method's description here. Creation date: (9/18/2001 1:31:14 PM)
*
* @param newOwnerProvider
* com.ibm.etools.j2ee.ui.J2EEOwnerProvider
*/
public void setOwnerProvider(OwnerProvider newOwnerProvider) {
ownerProvider = newOwnerProvider;
}
/**
* Insert the method's description here. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newValue
* java.lang.Object
*/
public void setValue(java.lang.Object newValue) {
try {
primSetValue(convertValue(newValue));
} catch (FeatureValueConversionException featureException) {
Logger.getLogger().logError(featureException);
primSetValue(null);
}
}
/**
* Treat an empty String as a null value. Creation date: (4/6/2001 3:28:16 PM)
*
* @param newValue
* java.lang.Object
*/
public void setValueFromWidget(String newValue) {
Object data = newValue;
if (newValue != null && newValue.length() == 0)
data = null;
setValue(data);
if (data == null)
doUnsetValue();
else
shouldUnsetValue = false;
}
/**
* Insert the method's description here. Creation date: (4/10/2001 3:39:31 PM)
*
* @param newValueXSITypeName
* java.lang.String
*/
public void setValueXSITypeName(java.lang.String newValueXSITypeName) {
valueXSITypeName = newValueXSITypeName;
}
public boolean shouldUnsetValue() {
return shouldUnsetValue;
}
public EObject createNewObjectFromFeature() {
EClass metaClass = (EClass) getPackage().getEClassifier(getNewValueTypeName());
return getFactory().create(metaClass);
}
}