diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java index f7faf95adee91cbed35b57b7bb77d343e42d8437..0412ec45445a8d789752f8bf23e866ebbd921d99 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java @@ -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); } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java index d6a5dbcc137e94b46a9f3483c35309ac4038bf06..ef26584fc77c6ac0d1946ca378b399ecf2e52290 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java @@ -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; + } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java index eca23c6ce5d2e7c11c08bb9f8bde83082dfc20e6..3e07270931a577eefa15c6c80462735c78369538 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java @@ -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(); + } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java index 051ffe60440fad4462d6c6aa933ecdcfb1f737ca..4bb809618b25c1a033c5ca47293d5f8048719a36 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java @@ -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); } }