/* license-start
*
* Copyright (C) 2008 - 2013 Crispico, <http://www.crispico.com/>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details, at <http://www.gnu.org/licenses/>.
*
* Contributors:
* Crispico - Initial API and implementation
*
* license-end
*/
package org.flowerplatform.codesync.code.javascript.adapter;
import java.util.List;
import java.util.Map;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstNode;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstFactory;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstNodeParameter;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstPackage;
import com.crispico.flower.mp.codesync.code.adapter.AstModelElementAdapter;
import com.crispico.flower.mp.model.codesync.CodeSyncPackage;
/**
* Mapped to {@link RegExAstNode}. Must handle all the features from {@link RegExRegExAstNodeFeatureProvider}.
*
* @author Mariana Gheorghe
*/
public class RegExNodeAstModelAdapter extends AstModelElementAdapter {
@Override
public Object getMatchKey(Object element) {
RegExAstNode node = getRegExAstNode(element);
return getParameterValue(node, node.getKeyParameter());
}
@Override
public Object removeFromMap(Object element, Map<Object, Object> leftOrRightMap, boolean isRight) {
return leftOrRightMap.remove(getMatchKey(element));
}
protected String getParameterValue(RegExAstNode node, String parameterName) {
for (RegExAstNodeParameter parameter : node.getParameters()) {
if (parameter.getName().equals(node.getKeyParameter())) {
return parameter.getValue();
}
}
return null;
}
/**
* Must handle all the features provided by <code>common</code>, except for containment features.
*/
@Override
public Object getValueFeatureValue(Object element, Object feature, Object correspondingValue) {
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Name().equals(feature)) {
return getParameterValue(getRegExAstNode(element), getRegExAstNode(element).getKeyParameter());
}
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Type().equals(feature)) {
return getRegExAstNode(element).getType();
}
if (RegExAstPackage.eINSTANCE.getRegExAstCacheElement_KeyParameter().equals(feature)) {
return getRegExAstNode(element).getKeyParameter();
}
return super.getValueFeatureValue(element, feature, correspondingValue);
}
@Override
public void setValueFeatureValue(Object element, Object feature, Object value) {
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Name().equals(feature)) {
// nothing to do
}
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Type().equals(feature)) {
getRegExAstNode(element).setType((String) value);
}
if (RegExAstPackage.eINSTANCE.getRegExAstCacheElement_KeyParameter().equals(feature)) {
getRegExAstNode(element).setKeyParameter((String) value);
}
}
@Override
public Iterable<?> getContainmentFeatureIterable(Object element, Object feature, Iterable<?> correspondingIterable) {
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Children().equals(feature)) {
return getRegExAstNode(element).getChildren();
}
if (RegExAstPackage.eINSTANCE.getRegExAstCacheElement_Parameters().equals(feature)) {
return getRegExAstNode(element).getParameters();
}
return super.getContainmentFeatureIterable(element, feature, correspondingIterable);
}
@Override
public Object createChildOnContainmentFeature(Object element, Object feature, Object correspondingChild) {
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Children().equals(feature)) {
RegExAstNode parent = getRegExAstNode(element);
RegExAstNode node = RegExAstFactory.eINSTANCE.createRegExAstNode();
node.setAdded(true);
parent.getChildren().add(node);
return node;
}
if (RegExAstPackage.eINSTANCE.getRegExAstCacheElement_Parameters().equals(feature)) {
RegExAstNodeParameter parameter = RegExAstFactory.eINSTANCE.createRegExAstNodeParameter();
((RegExAstNode) element).getParameters().add(parameter);
return parameter;
}
return null;
}
@Override
public void removeChildrenOnContainmentFeature(Object parent, Object feature, Object child) {
if (CodeSyncPackage.eINSTANCE.getCodeSyncElement_Children().equals(feature)) {
getRegExAstNode(child).setDeleted(true);
}
}
@Override
public Object createCorrespondingModelElement(Object element) {
return RegExAstFactory.eINSTANCE.createRegExAstCacheElement();
}
@Override
public boolean save(Object element) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean discard(Object element) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasChildren(Object modelElement) {
return true;
}
@Override
public List<?> getChildren(Object modelElement) {
RegExAstNode node = getRegExAstNode(modelElement);
return node.getChildren();
}
@Override
public String getLabel(Object modelElement) {
return (String) getMatchKey(modelElement);
}
@Override
public List<String> getIconUrls(Object modelElement) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void updateUID(Object element, Object correspondingElement) {
// TODO Auto-generated method stub
}
protected RegExAstNode getRegExAstNode(Object element) {
return (RegExAstNode) element;
}
}