How to link an EMF model instance with Common Navigator Framework:
- CNF overriding
- CNF ContentBinding with EMF
- Adding menu contribution (WIP)
- Using TransactionalEditingDomain (WIP)
Adding a view
- using org.eclipse.ui.views
<extension point="org.eclipse.ui.views">
<category
id="francky.newproject.categoryview"
name="New Project">
</category>
<view
allowMultiple="false"
category="francky.newproject.categoryview"
class="francky.newproject.NewNavigator"
icon="icons/obj16/Project-nature.gif"
id="francky.newproject.navigatorView"
name="New Navigator"
restorable="true">
</view>
</extension>
the class extend CNF the navigator
public class NewNavigator extends CommonNavigator implements CommandStackListener {
//...
}
Define Content
- defining content and filter
<!-- NAVIGATOR CONTENT-->
<extension point="org.eclipse.ui.navigator.navigatorContent">
<navigatorContent
activeByDefault="true"
contentProvider="francky.newproject.providers.NewProjectContentProvider"
icon="icons/obj16/Project-nature.gif"
id="francky.newproject.navigatorContent"
labelProvider="francky.newproject.providers.NewProjectLabelProvider"
name="New project content"
priority="normal">
<triggerPoints>
<and>
<instanceof value="org.eclipse.core.resources.IResource">
</instanceof>
<test forcePluginActivation="true"
property="org.eclipse.core.resources.extension"
value="frk">
</test>
</and>
</triggerPoints>
<possibleChildren>
<or>
<instanceof value="org.eclipse.emf.ecore.resource.Resource"/>
<instanceof value="org.eclipse.emf.ecore.EObject"/>
</or>
</possibleChildren>
</navigatorContent>
</extension>
<!-- CONTENT FILTER -->
<extension point="org.eclipse.ui.navigator.navigatorContent">
<commonFilter
activeByDefault="true"
id="francky.newproject.filters.hideNonNewProject"
name="Hide Non New Project"
visibleInUI="true">
<filterExpression>
<and>
<not>
<adapt
type="org.eclipse.core.resources.IProject">
<test
property="org.eclipse.core.resources.projectNature"
value="francky.newproject.NewNature">
</test>
</adapt>
</not>
<not>
<instanceof
value="org.eclipse.core.resources.IFolder">
</instanceof>
</not>
<not>
<and>
<instanceof value="org.eclipse.core.resources.IResource">
</instanceof>
<!-- EMF instance file extension is frk -->
<test forcePluginActivation="true"
property="org.eclipse.core.resources.extension"
value="frk">
</test>
</and>
</not>
<not>
<instanceof value="org.eclipse.emf.ecore.resource.Resource"/>
</not>
<not>
<instanceof value="org.eclipse.emf.ecore.EObject"/>
</not>
</and>
</filterExpression>
</commonFilter>
</extension>
<!-- REGISTER CONTENT AND FILTER-->
<extension point="org.eclipse.ui.navigator.viewer">
<viewer
viewerId="francky.newproject.navigatorView">
</viewer>
<viewerContentBinding viewerId="francky.newproject.navigatorView">
<includes>
<contentExtension pattern="org.eclipse.ui.navigator.resourceContent"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
<contentExtension pattern="francky.newproject.filters.*"/>
<contentExtension pattern="francky.newproject.navigatorContent"/>
</includes>
</viewerContentBinding>
<viewerActionBinding viewerId="francky.newproject.navigatorView">
<includes>
<actionExtension pattern="org.eclipse.ui.navigator.resources.*"/>
</includes>
</viewerActionBinding>
</extension>
Define content and label provider
- Defining content provider using adapterFactories
public class NewAdapterFactory
{
private static ComposedAdapterFactory NewAdapterFactory;
public final static ComposedAdapterFactory getAdapterFactory()
{
if (NewAdapterFactory == null)
NewAdapterFactory = new ComposedAdapterFactory(createFactoryList());
return NewAdapterFactory;
}
public final static ArrayList<AdapterFactory> createFactoryList()
{
ArrayList<AdapterFactory> factories = new ArrayList<AdapterFactory>();
factories.add(new ResourceItemProviderAdapterFactory());
//Add your AAAItemProviderAdapterFactory here....
factories.add(new InfratestItemProviderAdapterFactory());
factories.add(new ReflectiveItemProviderAdapterFactory());
return factories;
}
}
Label provider
public class NewProjectLabelProvider extends AdapterFactoryLabelProvider {
public NewProjectLabelProvider() {
super(NewAdapterFactory.getAdapterFactory());
}
public Image getImage(Object element) {
return super.getImage(element);
}
public String getText(Object element) {
return super.getText(element);
}
}
Content provider
public class NewProjectContentProvider extends
AdapterFactoryContentProvider implements IResourceChangeListener,
IResourceDeltaVisitor {
private static ResourceSetImpl resourceSet = new ResourceSetImpl();
public NewProjectContentProvider() {
super(NewAdapterFactory.getAdapterFactory());
ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
IResourceChangeEvent.POST_CHANGE);
}
...