/* 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 org.eclipse.emf.ecore.resource.Resource;
import org.flowerplatform.codesync.code.javascript.CodeSyncCodeJavascriptPlugin;
import org.flowerplatform.codesync.code.javascript.feature_provider.RegExNodeFeatureProvider;
import org.flowerplatform.codesync.code.javascript.feature_provider.RegExParameterFeatureProvider;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstNode;
import org.flowerplatform.codesync.code.javascript.regex_ast.RegExAstNodeParameter;
import org.flowerplatform.editor.EditorPlugin;
import org.flowerplatform.editor.file.IFileAccessController;
import com.crispico.flower.mp.codesync.base.CodeSyncElementFeatureProvider;
import com.crispico.flower.mp.codesync.base.CodeSyncPlugin;
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.CodeSyncModelAdapterFactory;
import com.crispico.flower.mp.codesync.code.adapter.FolderModelAdapter;
import com.crispico.flower.mp.codesync.merge.SyncElementModelAdapter;
import com.crispico.flower.mp.model.codesync.CodeSyncElement;
/**
* @author Mariana Gheorghe
*/
public class JavaScriptModelAdapterFactorySet extends ModelAdapterFactorySet {
public static final String MODEL_ELEMENT = "modelElement";
public static final String PARAMETER = "parameter";
@Override
public void initialize(Resource cache, String limitedPath, boolean useUIDs) {
super.initialize(cache, limitedPath, useUIDs);
IFileAccessController fileAccessController = EditorPlugin.getInstance().getFileAccessController();
// right - AST
rightFactory = new ModelAdapterFactory();
// folder adapter
FolderModelAdapter folderModelAdapter = (FolderModelAdapter) createAstModelAdapter(new FolderModelAdapter());
folderModelAdapter.setLimitedPath(limitedPath);
rightFactory.addModelAdapter(fileAccessController.getFileClass(), folderModelAdapter, "", CodeSyncPlugin.FOLDER);
// javascript specific adapter
IModelAdapter fileModelAdapter = createAstModelAdapter(new JavaScriptFileModelAdapter());
rightFactory.addModelAdapter(fileAccessController.getFileClass(), fileModelAdapter, CodeSyncCodeJavascriptPlugin.TECHNOLOGY, CodeSyncPlugin.FILE);
rightFactory.addModelAdapter(fileAccessController.getFileClass(), fileModelAdapter, "html", CodeSyncPlugin.FILE);
rightFactory.addModelAdapter(RegExAstNode.class, createAstModelAdapter(new RegExNodeAstModelAdapter()), MODEL_ELEMENT);
rightFactory.addModelAdapter(RegExAstNodeParameter.class, createAstModelAdapter(new RegExParameterModelAdapter()), PARAMETER);
// ancestor - CSE
ancestorFactory = createCodeSyncModelAdapterFactory(cache, false);
// left - CSE
leftFactory = createCodeSyncModelAdapterFactory(cache, true);
// feature providers
CodeSyncElementFeatureProvider featureProvider = new CodeSyncElementFeatureProvider();
addFeatureProvider(fileAccessController.getFileClass(), featureProvider);
addFeatureProvider(CodeSyncPlugin.FOLDER, featureProvider);
addFeatureProvider(CodeSyncPlugin.FILE, featureProvider);
RegExNodeFeatureProvider regexRegExAstNodeFeatureProvider = new RegExNodeFeatureProvider();
addFeatureProvider(CodeSyncElement.class, regexRegExAstNodeFeatureProvider);
addFeatureProvider(RegExAstNode.class, regexRegExAstNodeFeatureProvider);
addFeatureProvider(RegExAstNodeParameter.class, new RegExParameterFeatureProvider());
}
private CodeSyncModelAdapterFactory createCodeSyncModelAdapterFactory(Resource resource, boolean isLeft) {
CodeSyncModelAdapterFactory factory = new CodeSyncModelAdapterFactory(this, rightFactory, resource, isLeft);
factory.addModelAdapter(CodeSyncPlugin.FOLDER, new SyncElementModelAdapter(), CodeSyncPlugin.FOLDER);
factory.addModelAdapter(CodeSyncPlugin.FILE, new SyncElementModelAdapter(), CodeSyncPlugin.FILE);
factory.addModelAdapter(CodeSyncElement.class, new SyncElementModelAdapter(), MODEL_ELEMENT);
factory.addModelAdapter(RegExAstNodeParameter.class, createAstModelAdapter(new RegExParameterModelAdapter()), PARAMETER);
return factory;
}
private IModelAdapter createAstModelAdapter(IModelAdapter adapter) {
return adapter.setModelAdapterFactorySet(this);
}
}