/* 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; import org.eclipse.emf.ecore.resource.Resource; import com.crispico.flower.mp.codesync.base.IModelAdapter; import com.crispico.flower.mp.codesync.base.ModelAdapterFactory; import com.crispico.flower.mp.codesync.base.ModelAdapterFactorySet; import com.crispico.flower.mp.codesync.code.adapter.CodeSyncElementModelAdapterAncestor; import com.crispico.flower.mp.codesync.code.adapter.CodeSyncElementModelAdapterLeft; import com.crispico.flower.mp.codesync.merge.SyncElementModelAdapter; import com.crispico.flower.mp.model.codesync.CodeSyncElement; /** * @author Mariana */ public class CodeSyncModelAdapterFactory extends ModelAdapterFactory { private ModelAdapterFactorySet factorySet; private ModelAdapterFactory astModelAdapterFactory; private Resource resource; private boolean isLeft; public CodeSyncModelAdapterFactory(ModelAdapterFactorySet factorySet, ModelAdapterFactory astModelAdapterFactory, Resource resource, boolean isLeft) { this.factorySet = factorySet; this.astModelAdapterFactory = astModelAdapterFactory; this.resource = resource; this.isLeft = isLeft; } private SyncElementModelAdapter createModelAdapter(SyncElementModelAdapter adapter) { return (SyncElementModelAdapter) adapter .setModelAdapterFactory(this) .setEObjectConverter(astModelAdapterFactory) .setResource(resource) .setModelAdapterFactorySet(factorySet); } @Override public IModelAdapter getModelAdapter(Object modelElement) { if (modelElement instanceof CodeSyncElement) { for (ModelAdapterEntry entry : modelAdapters) { String type = ((CodeSyncElement) modelElement).getType(); if (type != null && type.equals(entry.type)) { return entry.modelAdapter; } } } return super.getModelAdapter(modelElement); } public ModelAdapterEntry addModelAdapter(String type, SyncElementModelAdapter modelAdapter, String adapterType) { ModelAdapterEntry e = new ModelAdapterEntry(); e.type = type; e.modelAdapter = isLeft ? new CodeSyncElementModelAdapterLeft(createModelAdapter(modelAdapter)) : new CodeSyncElementModelAdapterAncestor(createModelAdapter(modelAdapter)); modelAdapter.setType(adapterType); modelAdapters.add(e); return e; } public ModelAdapterEntry addModelAdapter(Class<?> clazz, SyncElementModelAdapter modelAdapter, String adapterType) { modelAdapter.setType(adapterType); return super.addModelAdapter(clazz, isLeft ? new CodeSyncElementModelAdapterLeft(createModelAdapter(modelAdapter)) : new CodeSyncElementModelAdapterAncestor(createModelAdapter(modelAdapter)), adapterType); } }