| /******************************************************************************* |
| * Copyright (c) 2001, 2007 Oracle 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: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| /** |
| * |
| */ |
| package org.eclipse.jst.jsf.facesconfig.internal.translator; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.notify.Notifier; |
| 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.resource.Resource; |
| import org.eclipse.jst.jsf.facesconfig.emf.DynamicAttribute; |
| import org.eclipse.jst.jsf.facesconfig.emf.DynamicElement; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigFactory; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage; |
| import org.eclipse.wst.common.internal.emf.resource.ReadAheadHelper; |
| import org.eclipse.wst.common.internal.emf.resource.Translator; |
| import org.eclipse.wst.common.internal.emf.resource.TranslatorPath; |
| import org.eclipse.wst.common.internal.emf.resource.VariableTranslatorFactory; |
| import org.w3c.dom.Attr; |
| import org.w3c.dom.NamedNodeMap; |
| import org.w3c.dom.Node; |
| |
| class DynamicElementTranslator extends Translator implements IAnyTranslator |
| { |
| public boolean isManagedByParent() { |
| return false; |
| } |
| |
| protected Translator[] getChildren() |
| { |
| FacesConfigPackage facesConfigPackage = FacesConfigPackage.eINSTANCE; |
| |
| return new Translator[] |
| { |
| new DynamicElementTranslator("*", facesConfigPackage.getDynamicElement_ChildNodes()), //$NON-NLS-1$ |
| new Translator(TEXT_ATTRIBUTE_VALUE, facesConfigPackage.getDynamicElement_TextContent()) |
| { |
| public Object getMOFValue(EObject object) |
| { |
| // TODO: this is a bit of a hack. The problem is |
| // that for some reason, if this translator returns |
| // null, then EMF2DOMAdapterImpl.updateDOMSubtree will |
| // remove the containing DynamicElement node completely. |
| // Returning an non-null empty value seems to work |
| // around this for now. |
| Object value = super.getMOFValue(object); |
| return value != null ? value : ""; //$NON-NLS-1$ |
| } |
| } |
| }; |
| } |
| |
| /** |
| * @param domNameAndPath |
| * @param feature |
| */ |
| public DynamicElementTranslator(String domNameAndPath, |
| EStructuralFeature feature) |
| { |
| super(domNameAndPath, feature); |
| } |
| public boolean isMapFor(String domName) { |
| return true; |
| } |
| |
| public EObject createEMFObject(String nodeName, String readAheadName) { |
| // tag name is based on the name property |
| DynamicElement element = FacesConfigFactory.eINSTANCE.createDynamicElement(); |
| element.setName(nodeName); |
| return element; |
| } |
| |
| public String getDOMName(Object value) { |
| // tag name is based on the name property |
| if (value instanceof DynamicElement) |
| { |
| return ((DynamicElement)value).getName(); |
| } |
| return ""; //$NON-NLS-1$ |
| } |
| |
| public Translator[] getDynamicAttributeTranslators(Node element) { |
| NamedNodeMap attributeMap = element.getAttributes(); |
| List attributes = new ArrayList(attributeMap.getLength()); |
| for (int i = 0; i < attributeMap.getLength(); i++) |
| { |
| Attr attr = (Attr) attributeMap.item(i); |
| attributes.add( |
| new DynamicAttributeTranslator(attr.getNodeName(), |
| FacesConfigPackage.eINSTANCE.getDynamicElement_Attributes())); |
| } |
| |
| return (Translator[]) attributes.toArray(new Translator[0]); |
| } |
| |
| public Translator[] getDynamicAttributeTranslators(DynamicElement element) { |
| List attributes = element.getAttributes(); |
| Translator[] translators = new Translator[attributes.size()]; |
| int i = 0; |
| for (Iterator it = attributes.iterator(); it.hasNext();) |
| { |
| DynamicAttribute attribute = (DynamicAttribute) it.next(); |
| translators[i++] = new DynamicAttributeTranslator(attribute.getName(), |
| FacesConfigPackage.eINSTANCE.getDynamicElement_Attributes()); |
| } |
| return translators; |
| } |
| |
| private static class DynamicAttributeTranslator extends Translator |
| { |
| |
| /** |
| * @param domNameAndPath |
| * @param feature |
| */ |
| public DynamicAttributeTranslator(String domNameAndPath, EStructuralFeature feature) |
| { |
| // the "*" is a place holder. The dom path gets ignored in |
| // this translator. It's a handy one because it is invalid |
| // tag name data so if it gets transmitted to the model |
| // we will get an exception |
| super(domNameAndPath, feature, DOM_ATTRIBUTE); |
| } |
| |
| public boolean isMapFor(String domName) { |
| return super.isMapFor(domName); |
| } |
| |
| public EObject createEMFObject(String nodeName, String readAheadName) { |
| // attribute name is based on the name property |
| DynamicAttribute attribute = FacesConfigFactory.eINSTANCE.createDynamicAttribute(); |
| attribute.setName(nodeName); |
| return attribute; |
| } |
| |
| protected Translator[] getChildren() { |
| return new Translator[0]; |
| } |
| |
| public void addReadAheadHelper(ReadAheadHelper helper) { |
| // TODO Auto-generated method stub |
| super.addReadAheadHelper(helper); |
| } |
| |
| public EObject basicGetDependencyObject(EObject parent) { |
| // TODO Auto-generated method stub |
| return super.basicGetDependencyObject(parent); |
| } |
| |
| public void clearList(EObject mofObject) { |
| // TODO Auto-generated method stub |
| super.clearList(mofObject); |
| } |
| |
| public Object convertStringToValue(String strValue, EObject owner) { |
| // TODO Auto-generated method stub |
| return super.convertStringToValue(strValue, owner); |
| } |
| |
| public Object convertStringToValue(String nodeName, |
| String readAheadName, String value, Notifier owner) { |
| // TODO Auto-generated method stub |
| return super.convertStringToValue(nodeName, readAheadName, value, owner); |
| } |
| |
| public String convertValueToString(Object value, EObject owner) { |
| // TODO Auto-generated method stub |
| return super.convertValueToString(value, owner); |
| } |
| |
| public boolean equals(Object object) { |
| // TODO Auto-generated method stub |
| return super.equals(object); |
| } |
| |
| public String extractStringValue(EObject emfObject) { |
| // TODO Auto-generated method stub |
| return super.extractStringValue(emfObject); |
| } |
| |
| public boolean featureExists(EObject emfObject) { |
| // TODO Auto-generated method stub |
| return super.featureExists(emfObject); |
| } |
| |
| public Translator findChild(String tagName, Object target, int versionID) { |
| // TODO Auto-generated method stub |
| return super.findChild(tagName, target, versionID); |
| } |
| |
| public Translator[] getChildren(Object target, int versionID) { |
| // TODO Auto-generated method stub |
| return super.getChildren(target, versionID); |
| } |
| |
| public EStructuralFeature getDependencyFeature() { |
| // TODO Auto-generated method stub |
| return super.getDependencyFeature(); |
| } |
| |
| public String[] getDOMNames() { |
| // TODO Auto-generated method stub |
| return super.getDOMNames(); |
| } |
| |
| public String getDOMPath() { |
| // TODO Auto-generated method stub |
| return super.getDOMPath(); |
| } |
| |
| public EStructuralFeature getFeature() { |
| // TODO Auto-generated method stub |
| return super.getFeature(); |
| } |
| |
| public List getMOFChildren(EObject mofObject) { |
| // TODO Auto-generated method stub |
| return super.getMOFChildren(mofObject); |
| } |
| |
| public Object getMOFValue(EObject mofObject) { |
| if (mofObject instanceof DynamicElement) |
| { |
| EList attributes = ((DynamicElement)mofObject).getAttributes(); |
| |
| for (final Iterator it = attributes.iterator(); it.hasNext();) |
| { |
| DynamicAttribute attribute = (DynamicAttribute) it.next(); |
| if (fDOMNames[0].equals(attribute.getName())) |
| { |
| return attribute.getValue(); |
| } |
| } |
| } |
| |
| return null; |
| } |
| |
| public String getNameSpace() { |
| // TODO Auto-generated method stub |
| return super.getNameSpace(); |
| } |
| |
| public ReadAheadHelper getReadAheadHelper(String parentName) { |
| // TODO Auto-generated method stub |
| return super.getReadAheadHelper(parentName); |
| } |
| |
| public TranslatorPath[] getTranslatorPaths() { |
| // TODO Auto-generated method stub |
| return super.getTranslatorPaths(); |
| } |
| |
| public Translator[] getVariableChildren(Notifier target, int version) { |
| // TODO Auto-generated method stub |
| return super.getVariableChildren(target, version); |
| } |
| |
| public VariableTranslatorFactory getVariableTranslatorFactory() { |
| // TODO Auto-generated method stub |
| return super.getVariableTranslatorFactory(); |
| } |
| |
| public boolean hasDOMPath() { |
| // TODO Auto-generated method stub |
| return super.hasDOMPath(); |
| } |
| |
| public boolean hasReadAheadNames() { |
| // TODO Auto-generated method stub |
| return super.hasReadAheadNames(); |
| } |
| |
| protected void initializeDOMNameAndPath(String domNameAndPathArg) { |
| // TODO Auto-generated method stub |
| super.initializeDOMNameAndPath(domNameAndPathArg); |
| } |
| |
| public boolean isBooleanFeature() { |
| // TODO Auto-generated method stub |
| return super.isBooleanFeature(); |
| } |
| |
| public boolean isBooleanUppercase() { |
| // TODO Auto-generated method stub |
| return super.isBooleanUppercase(); |
| } |
| |
| public boolean isCDATAContent() { |
| // TODO Auto-generated method stub |
| return super.isCDATAContent(); |
| } |
| |
| public boolean isComment() { |
| // TODO Auto-generated method stub |
| return super.isComment(); |
| } |
| |
| public boolean isDataType() { |
| // TODO Auto-generated method stub |
| return super.isDataType(); |
| } |
| |
| public boolean isDependencyChild() { |
| // TODO Auto-generated method stub |
| return super.isDependencyChild(); |
| } |
| |
| public boolean isDependencyParent() { |
| // TODO Auto-generated method stub |
| return super.isDependencyParent(); |
| } |
| |
| public boolean isDOMAttribute() { |
| // TODO Auto-generated method stub |
| return super.isDOMAttribute(); |
| } |
| |
| public boolean isDOMTextValue() { |
| // TODO Auto-generated method stub |
| return super.isDOMTextValue(); |
| } |
| |
| public boolean isEmptyContentSignificant() { |
| // TODO Auto-generated method stub |
| return super.isEmptyContentSignificant(); |
| } |
| |
| public boolean isEmptyTag() { |
| // TODO Auto-generated method stub |
| return super.isEmptyTag(); |
| } |
| |
| public boolean isEnumFeature() { |
| // TODO Auto-generated method stub |
| return super.isEnumFeature(); |
| } |
| |
| public boolean isEnumWithHyphens() { |
| // TODO Auto-generated method stub |
| return super.isEnumWithHyphens(); |
| } |
| |
| public boolean isIDMap() { |
| // TODO Auto-generated method stub |
| return super.isIDMap(); |
| } |
| |
| public boolean isLinkMap() { |
| // TODO Auto-generated method stub |
| return super.isLinkMap(); |
| } |
| |
| public boolean isManagedByParent() { |
| // TODO Auto-generated method stub |
| return super.isManagedByParent(); |
| } |
| |
| public boolean isMapFor(Object feature1, Object oldValue, Object newValue) { |
| return super.isMapFor(feature1, oldValue, newValue); |
| } |
| |
| public boolean isMultiValued() { |
| // we want to treat each attribute as a single value |
| return false; |
| } |
| |
| public boolean isObjectMap() { |
| // TODO Auto-generated method stub |
| return super.isObjectMap(); |
| } |
| |
| public boolean isSetMOFValue(EObject emfObject) { |
| // TODO Auto-generated method stub |
| return super.isSetMOFValue(emfObject); |
| } |
| |
| public boolean isShared() { |
| // TODO Auto-generated method stub |
| return super.isShared(); |
| } |
| |
| public boolean isTargetLinkMap() { |
| // TODO Auto-generated method stub |
| return super.isTargetLinkMap(); |
| } |
| |
| public boolean isUnsettable() { |
| // TODO Auto-generated method stub |
| return super.isUnsettable(); |
| } |
| |
| protected String[] parseDOMNames(String domNamesString) { |
| // TODO Auto-generated method stub |
| return super.parseDOMNames(domNamesString); |
| } |
| |
| public void removeMOFValue(Notifier owner, Object value) { |
| // TODO Auto-generated method stub |
| super.removeMOFValue(owner, value); |
| } |
| |
| protected void setEMFClass(EClass anEClass) { |
| // TODO Auto-generated method stub |
| super.setEMFClass(anEClass); |
| } |
| |
| protected void setFeature(EStructuralFeature feature) { |
| // TODO Auto-generated method stub |
| super.setFeature(feature); |
| } |
| |
| public void setMOFValue(Notifier owner, Object value, int newIndex) { |
| if (owner instanceof DynamicElement) |
| { |
| DynamicAttribute attribute = FacesConfigFactory.eINSTANCE.createDynamicAttribute(); |
| attribute.setName(fDOMNames[0]); |
| attribute.setValue(value.toString()); |
| |
| EList attributes = ((DynamicElement)owner).getAttributes(); |
| if (newIndex < 0 || newIndex >= attributes.size()) |
| { |
| attributes.add(attribute); |
| } |
| else |
| { |
| attributes.set(newIndex, attribute); |
| } |
| } |
| // otherwise do nothing |
| } |
| |
| public void setMOFValue(Notifier owner, Object value) { |
| // TODO Auto-generated method stub |
| super.setMOFValue(owner, value); |
| } |
| |
| public void setMOFValue(Resource res, Object value) { |
| // TODO Auto-generated method stub |
| super.setMOFValue(res, value); |
| } |
| |
| public void setMOFValueFromEmptyDOMPath(EObject object) { |
| // TODO Auto-generated method stub |
| super.setMOFValueFromEmptyDOMPath(object); |
| } |
| |
| public void setNameSpace(String string) { |
| // TODO Auto-generated method stub |
| super.setNameSpace(string); |
| } |
| |
| public void setTextValueIfNecessary(String textValue, Notifier owner, |
| int versionId) { |
| // TODO Auto-generated method stub |
| super.setTextValueIfNecessary(textValue, owner, versionId); |
| } |
| |
| public boolean shouldIndentEndTag() { |
| // TODO Auto-generated method stub |
| return super.shouldIndentEndTag(); |
| } |
| |
| public boolean shouldRenderEmptyDOMPath(EObject object) { |
| // TODO Auto-generated method stub |
| return super.shouldRenderEmptyDOMPath(object); |
| } |
| |
| public String toString() { |
| // TODO Auto-generated method stub |
| return super.toString(); |
| } |
| |
| public void unSetMOFValue(EObject emfObject) { |
| // TODO Auto-generated method stub |
| super.unSetMOFValue(emfObject); |
| } |
| |
| |
| } |
| } |