/* 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.java;
import org.eclipse.emf.ecore.EObject;
import org.flowerplatform.common.plugin.AbstractFlowerJavaPlugin;
import org.flowerplatform.editor.model.EditorModelPlugin;
import org.flowerplatform.editor.model.change_processor.AbstractFeatureChangesProcessor;
import org.flowerplatform.editor.model.change_processor.DependentFeature;
import org.flowerplatform.editor.model.java.JavaClassAttributeProcessor;
import org.flowerplatform.editor.model.java.JavaClassOperationProcessor;
import org.flowerplatform.editor.model.java.JavaClassTitleProcessor;
import org.flowerplatform.editor.model.java.JavaScenarioElementProcessor;
import org.flowerplatform.emf_model.notation.NotationPackage;
import org.flowerplatform.emf_model.notation.View;
import org.osgi.framework.BundleContext;
import com.crispico.flower.mp.codesync.base.CodeSyncPlugin;
import com.crispico.flower.mp.codesync.code.adapter.FolderModelAdapter;
import com.crispico.flower.mp.model.codesync.CodeSyncElement;
import com.crispico.flower.mp.model.codesync.CodeSyncPackage;
/**
* @author Mariana
*/
public class CodeSyncCodeJavaPlugin extends AbstractFlowerJavaPlugin {
public static final String TECHNOLOGY = "java";
protected static CodeSyncCodeJavaPlugin INSTANCE;
private FolderModelAdapter folderModelAdapter;
public static CodeSyncCodeJavaPlugin getInstance() {
return INSTANCE;
}
/**
* @author Mariana Gheorghe
* @author Mircea Negreanu
*/
@Override
public void start(BundleContext bundleContext) throws Exception {
super.start(bundleContext);
INSTANCE = this;
// wrap the descriptor register code in a runnable
CodeSyncPlugin.getInstance().addRunnablesForLoadDescriptors(new Runnable() {
@Override
public void run() {
CodeSyncPlugin.getInstance().addSrcDir("src");
// TODO reactivate java later
// CodeSyncPlugin.getInstance().getCodeSyncElementDescriptors().add(
// new CodeSyncElementDescriptor()
// .setCodeSyncType("javaClass")
// .setLabel("Class")
// .setIconUrl("images/obj16/SyncClass.gif")
// .setDefaultName("NewJavaClass")
// .setExtension("java")
// .addChildrenCodeSyncTypeCategory("javaClassMember")
// .addFeature(DOCUMENTATION)
// .addFeature(VISIBILITY)
// .addFeature(IS_ABSTRACT)
// .addFeature(IS_STATIC)
// .addFeature(IS_FINAL)
// .addFeature(SUPER_CLASS)
// .addFeature(SUPER_INTERFACES));
// CodeSyncPlugin.getInstance().getCodeSyncElementDescriptors().add(
// new CodeSyncElementDescriptor()
// .setCodeSyncType("javaOperation")
// .setLabel("Operation")
// .setIconUrl("images/obj16/SyncOperation_public.gif")
// .setDefaultName("newOperation")
// .addCodeSyncTypeCategory("javaClassMember")
// .addFeature(DOCUMENTATION)
// .addFeature(VISIBILITY)
// .addFeature(IS_ABSTRACT)
// .addFeature(IS_STATIC)
// .addFeature(IS_FINAL)
// .addFeature(TYPE));
// CodeSyncPlugin.getInstance().getCodeSyncElementDescriptors().add(
// new CodeSyncElementDescriptor()
// .setCodeSyncType("javaAttribute")
// .setLabel("Attribute")
// .setIconUrl("images/obj16/SyncProperty_public.gif")
// .setDefaultName("newAttribute")
// .addCodeSyncTypeCategory("javaClassMember")
// .addFeature(DOCUMENTATION)
// .addFeature(VISIBILITY)
// .addFeature(IS_ABSTRACT)
// .addFeature(IS_STATIC)
// .addFeature(IS_FINAL)
// .addFeature(TYPE)
// .addFeature(INITIALIZER));
//
// CodeSyncPlugin.getInstance().getFeatureAccessExtensions().add(new JavaFeatureAccessExtension());
// EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass", new JavaClassProcessor());
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass.title", new JavaClassTitleProcessor());
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass.javaAttribute", new JavaClassAttributeProcessor());
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass.javaOperation", new JavaClassOperationProcessor());
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("scenarioInterraction", new JavaScenarioElementProcessor());
AbstractFeatureChangesProcessor processor = new AbstractFeatureChangesProcessor();
// if model element removed => remove view
processor.getDependentFeatures().add(new DependentFeature(EObject.class, NotationPackage.eINSTANCE.getView_DiagrammableElement()));
// if model element removed => remove relations
processor.getDependentFeatures().add(new DependentFeature(CodeSyncElement.class, CodeSyncPackage.eINSTANCE.getRelation_Source()));
processor.getDependentFeatures().add(new DependentFeature(CodeSyncElement.class, CodeSyncPackage.eINSTANCE.getRelation_Target()));
// if view removed => remove edges
processor.getDependentFeatures().add(new DependentFeature(View.class, NotationPackage.eINSTANCE.getView_SourceEdges()));
processor.getDependentFeatures().add(new DependentFeature(View.class, NotationPackage.eINSTANCE.getView_TargetEdges()));
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass", processor);
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass.javaAttribute", processor);
EditorModelPlugin.getInstance().getDiagramUpdaterChangeProcessor().addDiagrammableElementFeatureChangeProcessor("classDiagram.javaClass.javaOperation", processor);
CodeSyncPlugin.getInstance().getFullyQualifiedNameProvider().addDelegateProvider(new JavaFullyQualifiedNameProvider());
// ResourcesPlugin.getWorkspace().addResourceChangeListener(new JavaResourceChangeListener());
// JavaCore.addElementChangedListener(new JavaElementChangedListener(), ElementChangedEvent.POST_RECONCILE);
}
});
}
public FolderModelAdapter getFolderModelAdapter() {
return folderModelAdapter;
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
INSTANCE = null;
}
@Override
public void registerMessageBundle() throws Exception {
// nothing to do yet
}
}