Skip to content
Snippets Groups Projects
Commit c1bd768b authored by Florian Hölzl's avatar Florian Hölzl
Browse files

implemented categories for navigator.

refs 890
parent 50bfe9d5
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@ import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.service.base.IEObjectAware;
import org.fortiss.tooling.kernel.ui.extension.base.ModelElementHandlerBase;
import org.fortiss.tooling.kernel.ui.extension.base.NamedCommentedModelElementHandlerBase;
import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/**
......@@ -38,10 +39,9 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
* @author hoelzl
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: 72BE2424E9C7B59DA7457943B0B416A8
* @ConQAT.Rating YELLOW Hash: 6CF99CF5089E03E8E60B1019F9D93A78
*/
public interface IModelElementHandler<T extends EObject> extends
IEObjectAware<T> {
public interface IModelElementHandler<T extends EObject> extends IEObjectAware<T> {
/** Returns the name of the model element (if any). */
String getName(T element);
......@@ -105,4 +105,12 @@ public interface IModelElementHandler<T extends EObject> extends
* than this, but MUST NOT return <code>null</code>.
*/
EObject getPropertySectionRetargetElement(T element);
/**
* Returns the list of categories to be inserted after the model element in the navigator view.
* Model element handlers may provide categories here in order to structure its content
* elements. If they do not need this feature this method must return {@code null}.
*/
List<NavigatorTreeContentProvider.NavigatorContentCategory<? extends EObject>>
getCategoryNodes(EObject parentElement);
}
......@@ -24,6 +24,7 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider.NavigatorContentCategory;
/**
* Base implementation for {@link IModelElementHandler}s.
......@@ -36,10 +37,9 @@ import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
* @author hoelzl
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: 64CAFB384824A059BE1CB86F084DEE1D
* @ConQAT.Rating YELLOW Hash: 9673BF0EB3582152AEE991F632CFDA09
*/
public abstract class ModelElementHandlerBase<T extends EObject> implements
IModelElementHandler<T> {
public abstract class ModelElementHandlerBase<T extends EObject> implements IModelElementHandler<T> {
/**
* Stores the icon image. Use singleton to save the limited image buffers.
......@@ -55,9 +55,9 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements
/** {@inheritDoc} */
@Override
public final Image getIcon() {
if (iconImage == null) {
if(iconImage == null) {
ImageDescriptor descr = getIconImageDescriptor();
if (descr != null) {
if(descr != null) {
iconImage = descr.createImage();
}
}
......@@ -111,4 +111,15 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements
public EObject getPropertySectionRetargetElement(T element) {
return element;
}
/**
* {@inheritDoc}
* <P>
* The base implementation returns {@code null}.
*/
@Override
public List<NavigatorContentCategory<? extends EObject>>
getCategoryNodes(EObject parentElement) {
return null;
}
}
......@@ -24,6 +24,7 @@ import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
......@@ -35,7 +36,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
* @author hoelzlf
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: AF1815BF663456271E6585863FEC15B4
* @ConQAT.Rating YELLOW Hash: 7D46EA19284C59D9804C13C434446A57
*/
public class NavigatorTreeContentProvider implements ITreeContentProvider {
......@@ -48,8 +49,7 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
// delegate to the top-level element contexts of the persistency service
List<EObject> result = new LinkedList<EObject>();
for (ITopLevelElement context : IPersistencyService.INSTANCE
.getTopLevelElements()) {
for(ITopLevelElement context : IPersistencyService.INSTANCE.getTopLevelElements()) {
result.add(context.getRootModelElement());
}
return result.toArray();
......@@ -59,16 +59,20 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
@Override
public Object[] getChildren(Object parent) {
// delegate to the model element handlers
if (parent instanceof EObject) {
EObject parentElement = (EObject) parent;
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler(parentElement);
if (handler != null) {
if(parent instanceof EObject) {
EObject parentElement = (EObject)parent;
IModelElementHandler<EObject> handler =
IModelElementHandlerService.INSTANCE.getModelElementHandler(parentElement);
if(handler != null) {
List<NavigatorContentCategory<? extends EObject>> categories =
handler.getCategoryNodes(parentElement);
if(categories != null) {
return categories.toArray();
}
// the default returns sub nodes and specifications
List<EObject> children = new ArrayList<EObject>();
children.addAll(filterExpertElements(handler
.getSubnodes(parentElement)));
children.addAll(filterExpertElements(handler
.getSpecifications(parentElement)));
children.addAll(filterExpertElements(handler.getSubnodes(parentElement)));
children.addAll(filterExpertElements(handler.getSpecifications(parentElement)));
return children.toArray();
}
}
......@@ -80,12 +84,12 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
* according to {@link IModelElementHandler#hiddenInNonExpertView()}
*/
private List<EObject> filterExpertElements(List<EObject> elements) {
if (!expertViewActive) {
if(!expertViewActive) {
List<EObject> filtered = new ArrayList<EObject>();
for (EObject current : elements) {
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler(current);
if (!handler.hiddenInNonExpertView())
for(EObject current : elements) {
IModelElementHandler<EObject> handler =
IModelElementHandlerService.INSTANCE.getModelElementHandler(current);
if(!handler.hiddenInNonExpertView())
filtered.add(current);
}
return filtered;
......@@ -96,9 +100,8 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
/** {@inheritDoc} */
@Override
public Object getParent(Object element) {
if (element instanceof EObject
&& IPersistencyService.INSTANCE
.isTopLevelElement((EObject) element)) {
if(element instanceof EObject &&
IPersistencyService.INSTANCE.isTopLevelElement((EObject)element)) {
// delegate to persistency service
return IPersistencyService.INSTANCE;
}
......@@ -131,4 +134,30 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
public void toggleExpertView() {
expertViewActive = !expertViewActive;
}
/**
* Class for navigator content objects, which allow {@link IModelElementHandler} to provide
* sub-elements in different categories.
*/
public abstract class NavigatorContentCategory<T extends EObject> {
/** The parent object of the category. */
protected T parent;
/** A model element handler that provided this element. */
protected IModelElementHandler<T> handler;
/** Constructor. */
protected NavigatorContentCategory(T parent, IModelElementHandler<T> handler) {
this.parent = parent;
this.handler = handler;
}
/** Returns the sub-nodes for this category. */
public abstract List<EObject> getSubNodes();
/** Returns the category name. */
public abstract String getName();
/** Returns the category icon. */
public abstract Image getIcon();
}
}
......@@ -26,6 +26,7 @@ import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.model.INamedElement;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider.NavigatorContentCategory;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
......@@ -35,29 +36,32 @@ import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
* @author mou
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: A10454849AA7D7BF9679F8CCAF5FA027
* @ConQAT.Rating YELLOW Hash: 53BE9186639ED93437E9D62E129DF460
*/
@SuppressWarnings("rawtypes")
public class ModelElementLabelProvider extends LabelProvider {
/** {@inheritDoc} */
@Override
public String getText(Object element) {
if (element instanceof EObject) {
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler((EObject) element);
if(element instanceof EObject) {
IModelElementHandler<EObject> handler =
IModelElementHandlerService.INSTANCE.getModelElementHandler((EObject)element);
if (handler != null)
return handler.getName((EObject) element);
if(handler != null)
return handler.getName((EObject)element);
// try to fall back on INamedElementModel
if (element instanceof INamedElement) {
return ((INamedElement) element).getName();
if(element instanceof INamedElement) {
return ((INamedElement)element).getName();
}
error(getDefault(),
"Missing model element handler of non-INamedElement EObject of class "
+ element.getClass());
"Missing model element handler of non-INamedElement EObject of class " +
element.getClass());
}
if (element instanceof IStructuredSelection) {
return getText(EObjectSelectionUtils
.getFirstElement((IStructuredSelection) element));
if(element instanceof NavigatorContentCategory) {
return ((NavigatorContentCategory)element).getName();
}
if(element instanceof IStructuredSelection) {
return getText(EObjectSelectionUtils.getFirstElement((IStructuredSelection)element));
}
return super.getText(element);
}
......@@ -65,13 +69,16 @@ public class ModelElementLabelProvider extends LabelProvider {
/** {@inheritDoc} */
@Override
public Image getImage(Object element) {
if (element instanceof EObject) {
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler((EObject) element);
if(element instanceof EObject) {
IModelElementHandler<EObject> handler =
IModelElementHandlerService.INSTANCE.getModelElementHandler((EObject)element);
if (handler != null)
if(handler != null)
return handler.getIcon();
}
if(element instanceof NavigatorContentCategory) {
return ((NavigatorContentCategory)element).getIcon();
}
return super.getImage(element);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment