/* 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 com.crispico.flower.mp.codesync.code.adapter;
import java.util.Map;
import com.crispico.flower.mp.codesync.base.AbstractModelAdapter;
import com.crispico.flower.mp.codesync.base.IModelAdapter;
import com.crispico.flower.mp.codesync.base.ModelAdapterFactorySet;
import com.crispico.flower.mp.codesync.base.action.ActionResult;
/**
*
*/
public abstract class AstModelElementAdapter extends AbstractModelAdapter {
private ModelAdapterFactorySet modelAdapterFactorySet;
@Override
public ModelAdapterFactorySet getModelAdapterFactorySet() {
return modelAdapterFactorySet;
}
@Override
public IModelAdapter setModelAdapterFactorySet(ModelAdapterFactorySet modelAdapterFactorySet) {
this.modelAdapterFactorySet = modelAdapterFactorySet;
return this;
}
@Override
public void addToMap(Object element, Map<Object, Object> map) {
map.put(getMatchKey(element), element);
}
@Override
public Object removeFromMap(Object element, Map<Object, Object> leftOrRightMap, boolean isRight) {
throw new UnsupportedOperationException("AstModelElementAdapter.removeFromMap() attempted.");
}
@Override
public Object getValueFeatureValue(Object element, Object feature, Object correspondingValue) {
throw new IllegalArgumentException("Attempted to acces value feature " + feature + " for element " + element);
}
@Override
public Iterable<?> getContainmentFeatureIterable(Object element, Object feature, Iterable<?> correspondingIterable) {
throw new IllegalArgumentException("Attempted to acces containment feature " + feature + " for element " + element);
}
@Override
public void beforeFeaturesProcessed(Object element, Object correspondingElement) {
// nothing to do
}
@Override
public void featuresProcessed(Object element) {
// nothing to do
}
@Override
public void actionPerformed(Object element, Object feature, ActionResult result) {
// nothing to do
}
@Override
public void allActionsPerformedForFeature(Object element, Object correspondingElement, Object feature) {
// nothing to do
}
@Override
public void allActionsPerformed(Object element, Object correspondingElement) {
if (modelAdapterFactorySet.useUIDs()) {
updateUID(element, correspondingElement);
}
for (Object feature : getModelAdapterFactorySet().getFeatureProvider(element).getFeatures(element)) {
if (getModelAdapterFactorySet().getFeatureProvider(element).getFeatureType(feature) == FEATURE_TYPE_CONTAINMENT) {
allActionsPerformedForFeature(element, correspondingElement, feature);
}
}
}
abstract protected void updateUID(Object element, Object correspondingElement);
}