diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/.ratings index b78c28a17cda209bfd559396ab41fb74d7bc08a4..fc03bd1ed395b26570cb889e72ed0a99db7e1a65 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/.ratings @@ -1 +1 @@ -ToolingBaseUIActivator.java 42fa7691bceec500b4e08cb28ef7fc69b9f8f658 GREEN +ToolingBaseUIActivator.java dbb6f64b87a553ffbcfeb92160d84b63073dfd89 GREEN diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/ToolingBaseUIActivator.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/ToolingBaseUIActivator.java index 42fa7691bceec500b4e08cb28ef7fc69b9f8f658..dbb6f64b87a553ffbcfeb92160d84b63073dfd89 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/ToolingBaseUIActivator.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/ToolingBaseUIActivator.java @@ -15,6 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.base.ui; +import static org.eclipse.jface.resource.ResourceLocator.imageDescriptorFromBundle; + import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -53,6 +55,6 @@ public class ToolingBaseUIActivator extends AbstractUIPlugin { /** Returns image descriptor of the image in the kernel plugin. */ public static ImageDescriptor getImageDescriptor(String iconPath) { - return imageDescriptorFromPlugin(PLUGIN_ID, iconPath); + return imageDescriptorFromBundle(PLUGIN_ID, iconPath).orElse(null); } } diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/.ratings index 6b4246af401efaf593800f92066f95f1f1a9bddd..98429aa52a09641a8fd628740ef236e1897db259 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/.ratings @@ -1 +1 @@ -HierarchicElementHandlerBase.java 5207a32e345912f16d753c466e9b603bb72bd2ef GREEN +HierarchicElementHandlerBase.java eef567d577422c9cdfb8bff9a5238ebd2d08e3bd GREEN diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/HierarchicElementHandlerBase.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/HierarchicElementHandlerBase.java index 5207a32e345912f16d753c466e9b603bb72bd2ef..eef567d577422c9cdfb8bff9a5238ebd2d08e3bd 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/HierarchicElementHandlerBase.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/extension/base/HierarchicElementHandlerBase.java @@ -18,7 +18,6 @@ package org.fortiss.tooling.base.ui.extension.base; import java.util.List; import org.eclipse.emf.ecore.EObject; -import org.eclipse.jface.resource.ImageDescriptor; import org.fortiss.tooling.base.model.base.HierarchicElementBase; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler; @@ -30,7 +29,7 @@ import org.fortiss.tooling.kernel.ui.extension.base.NamedCommentedModelElementHa * @author mou */ @SuppressWarnings({"rawtypes", "unchecked"}) -public class HierarchicElementHandlerBase<T extends HierarchicElementBase> +public abstract class HierarchicElementHandlerBase<T extends HierarchicElementBase> extends NamedCommentedModelElementHandlerBase<T> { /** {@inheritDoc} */ @@ -50,10 +49,4 @@ public class HierarchicElementHandlerBase<T extends HierarchicElementBase> public List<EObject> getSpecifications(T element) { return (List)element.getSpecifications(); } - - /** {@inheritDoc} */ - @Override - public ImageDescriptor getIconImageDescriptor() { - return null; - } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/.ratings index a43153e7ec1c24ed07b02f4c2668e456311d707a..265089733b90eb1665267688b6f3271af3126bdb 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/.ratings @@ -1 +1 @@ -ToolingCommonUIActivator.java cce1178fb9941ee2d4d97cfdbe6af8cf94170fd3 GREEN +ToolingCommonUIActivator.java 0e00121865e18435bb9f130e23eea6e07b43af46 GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/ToolingCommonUIActivator.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/ToolingCommonUIActivator.java index cce1178fb9941ee2d4d97cfdbe6af8cf94170fd3..0e00121865e18435bb9f130e23eea6e07b43af46 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/ToolingCommonUIActivator.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/ToolingCommonUIActivator.java @@ -15,6 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.common.ui; +import static org.eclipse.jface.resource.ResourceLocator.imageDescriptorFromBundle; + import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -53,6 +55,6 @@ public class ToolingCommonUIActivator extends AbstractUIPlugin { /** Returns the image descriptor for the given icon file. */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return imageDescriptorFromBundle(PLUGIN_ID, path).orElse(null); } } diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/.ratings index d8aad1a695ee70a33a9224b9196e6a220822fcaf..12467927525d334654803c4f29f212de9bb6ad4c 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/.ratings @@ -1,2 +1,2 @@ -GraphicUtils.java 46cfc991cd3ef787fec3f95751bc680d68479e26 GREEN +GraphicUtils.java 9373a2c7a5ebb0d87284d0f6f983348812e5b90d GREEN JavaFXUtils.java db3cf28289109ffec64c8f96c7b2de779a977b3b GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/GraphicUtils.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/GraphicUtils.java index 46cfc991cd3ef787fec3f95751bc680d68479e26..9373a2c7a5ebb0d87284d0f6f983348812e5b90d 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/GraphicUtils.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/util/GraphicUtils.java @@ -32,7 +32,7 @@ public class GraphicUtils { private static final HashMap<String, Image> imageCache = new HashMap<>(); /** Returns the plugin-local URI string for the given resource. */ - public static String getURIString(String pluginId, String localPath) { + private static String getURIString(String pluginId, String localPath) { if(!pluginId.endsWith("/") && !localPath.startsWith("/")) { localPath = "/" + localPath; } @@ -41,6 +41,9 @@ public class GraphicUtils { /** Returns the Java FX Image loaded from the plugin's local path. */ public static Image getFXImage(String pluginId, String localPath) { + if(pluginId == null || localPath == null) { + return null; + } String uri = getURIString(pluginId, localPath); if(uri == null) { return null; diff --git a/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/.ratings b/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/.ratings index c6edc8e2348631a76c121a42bd3455f3b828c919..f0ac7d366bbda8c7f43a6afbd2d9ea6190bbac10 100644 --- a/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/.ratings +++ b/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/.ratings @@ -1 +1 @@ -ToolingGraphicsGLUIActivator.java 278f2896961a12211d7b48daf6ec6e685e105dc8 GREEN +ToolingGraphicsGLUIActivator.java d8e45ba22affcad57dc7f194004aa110f11590fc GREEN diff --git a/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/ToolingGraphicsGLUIActivator.java b/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/ToolingGraphicsGLUIActivator.java index 278f2896961a12211d7b48daf6ec6e685e105dc8..d8e45ba22affcad57dc7f194004aa110f11590fc 100644 --- a/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/ToolingGraphicsGLUIActivator.java +++ b/org.fortiss.tooling.graphicsGL.ui/src/org/fortiss/tooling/graphicsGL/ui/ToolingGraphicsGLUIActivator.java @@ -17,6 +17,7 @@ package org.fortiss.tooling.graphicsGL.ui; import static java.lang.System.mapLibraryName; import static org.eclipse.core.runtime.FileLocator.toFileURL; +import static org.eclipse.jface.resource.ResourceLocator.imageDescriptorFromBundle; import static org.fortiss.tooling.base.utils.SystemUtils.isOs64BitArch; import org.eclipse.jface.resource.ImageDescriptor; @@ -93,6 +94,6 @@ public class ToolingGraphicsGLUIActivator extends AbstractUIPlugin { /** Returns the image descriptor for the given icon file. */ public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); + return imageDescriptorFromBundle(PLUGIN_ID, path).orElse(null); } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/.ratings index fbd0cab3259f881979947837bbf444692e417ac6..e5179fafce002378ce1029a73e389de29079f4d5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/.ratings @@ -1,3 +1,3 @@ ESharedImages.java dd65be1d1ee807db8460064d9b970847e6303ff0 GREEN ToolingKernelUI.java 250e5dde230272e286aa8d327fd597cf542774fe GREEN -ToolingKernelUIActivator.java 1c6ac50477a78cd77d9e4daf36f423d4b4dbdf63 GREEN +ToolingKernelUIActivator.java fc281e60592e54bd606d0b6667168afdfde8389e GREEN diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/ToolingKernelUIActivator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/ToolingKernelUIActivator.java index 1c6ac50477a78cd77d9e4daf36f423d4b4dbdf63..fc281e60592e54bd606d0b6667168afdfde8389e 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/ToolingKernelUIActivator.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/ToolingKernelUIActivator.java @@ -15,6 +15,8 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui; +import static org.eclipse.jface.resource.ResourceLocator.imageDescriptorFromBundle; + import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.ui.plugin.AbstractUIPlugin; @@ -81,7 +83,7 @@ public class ToolingKernelUIActivator extends AbstractUIPlugin { /** Returns image descriptor of the image in the kernel plugin. */ public static ImageDescriptor getImageDescriptor(String iconPath) { - return imageDescriptorFromPlugin(PLUGIN_ID, iconPath); + return imageDescriptorFromBundle(PLUGIN_ID, iconPath).orElse(null); } /** {@inheritDoc} */ diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings index 4dfe4762a07390bd5a303f6b7d8ba7446b51e4fa..5c3dd63e4d68684cf019dbafd1692296426a68f5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings @@ -8,7 +8,7 @@ FXEditorBase.java 40caf638c7b4c02da5aece0d9d58883bce630e76 GREEN IListPropertySection.java 8bb00fe7959583e794ff9437b7a77404c9a9e70f GREEN LWFXEFEditorBase.java f6b160b700a0287021402b5702beb2bfdce3dc2e GREEN ModelEditorBindingBase.java b9b1a1c5a48a6e677d1f57ad55a6126d9703c4b5 GREEN -ModelElementHandlerBase.java d08583ffdf78938a14caeb46124eda4ce5cac3e4 GREEN +ModelElementHandlerBase.java d0efc1e9ca2fbbefb861f1ae8176ad9ec08a08a8 GREEN MultiEObjectActionBase.java 9e237d8ea640c4194e4877af4a9cfce88698e543 GREEN NamedCommentedModelElementHandlerBase.java 681b98b50b362f01abb7a36f108f4f11b9e51829 GREEN PropertySectionBase.java 20fb1daea544123ea941743aafeb9ac59daf5356 GREEN diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java index d08583ffdf78938a14caeb46124eda4ce5cac3e4..d0efc1e9ca2fbbefb861f1ae8176ad9ec08a08a8 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java @@ -16,7 +16,10 @@ package org.fortiss.tooling.kernel.ui.extension.base; import static java.util.Collections.emptyList; +import static org.eclipse.jface.resource.ResourceLocator.imageDescriptorFromBundle; import static org.fortiss.tooling.common.ui.javafx.util.GraphicUtils.getFXImageFromURI; +import static org.fortiss.tooling.kernel.utils.LoggingUtils.warning; +import static org.fortiss.tooling.kernel.utils.ResourceUtils.getResourceURI; import java.util.HashMap; import java.util.List; @@ -27,6 +30,7 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DecorationOverlayIcon; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; +import org.fortiss.tooling.kernel.ui.ToolingKernelUIActivator; import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler; import javafx.scene.Node; @@ -34,10 +38,12 @@ import javafx.scene.image.ImageView; /** * Base implementation for {@link IModelElementHandler}s. - * - * Sub-classes must implement {@link #getIconImageDescriptor()} and may override - * the other non-final methods of {@link IModelElementHandler}. By default the base - * implementation returns empty lists for the respective methods. Open editor + * <br> + * {@link ModelEditorBindingBase} retrieves model element icons from file resources in the plugins. + * Sub-classes must implement {@link #getPluginId()} and {@link #getIconPath(EObject)} and may + * override the other non-final methods of {@link IModelElementHandler}. + * <br> + * By default the base implementation returns empty lists for the respective methods. Open editor * requests are handled by returning the model element itself. * * @author hoelzl @@ -53,6 +59,33 @@ public abstract class ModelElementHandlerBase<T extends EObject> return ""; } + /** + * Returns the ID of the plugin used by this model element handler to provide icons for model + * elements. + */ + protected abstract String getPluginId(); + + /** Returns the plugin-relative path of the icon to be displayed for the given element. */ + protected abstract String getIconPath(T element); + + /** {@inheritDoc} */ + @Override + public final ImageDescriptor getIconImageDescriptor(T element) { + String pluginId = getPluginId(); + String iconPath = getIconPath(element); + if(pluginId == null || iconPath == null) { + String elementTypeName = + element != null ? element.getClass().getCanonicalName() : "<null>"; + String pluginIdName = pluginId != null ? pluginId : "<null>"; + String iconPathName = iconPath != null ? iconPath : "<null>"; + warning(ToolingKernelUIActivator.getDefault(), + "Failed to load icon for " + elementTypeName + ". Plugin ID: " + pluginIdName + + ", icon path: " + iconPathName); + return null; + } + return imageDescriptorFromBundle(pluginId, iconPath).orElse(null); + } + /** {@inheritDoc} */ @Override public final Image getIcon(T element) { @@ -79,37 +112,31 @@ public abstract class ModelElementHandlerBase<T extends EObject> return iconImage; } - /** - * Returns the URL to the JavaFX icon image. - * - * @param element - * the model element - * @return the URL of the icon - */ - protected String getFXIconURL(T element) { - return "platform:/plugin/org.fortiss.tooling.kernel.ui/icons/fix.png"; - } - /** {@inheritDoc} */ @Override - public Node getFXIcon(T element) { - String uri = getFXIconURL(element); + public final Node getFXIcon(T element) { + String uri; + String pluginId = getPluginId(); + String iconPath = getIconPath(element); + try { + uri = getResourceURI(pluginId, iconPath); + } catch(Exception e) { + uri = null; + } if(uri == null) { + String elementTypeName = + element != null ? element.getClass().getCanonicalName() : "<null>"; + String pluginIdName = pluginId != null ? pluginId : "<null>"; + String iconPathName = iconPath != null ? iconPath : "<null>"; + warning(ToolingKernelUIActivator.getDefault(), + "Failed to load FX icon for " + elementTypeName + ". Plugin ID: " + + pluginIdName + ", icon path: " + iconPathName); return null; } javafx.scene.image.Image img = getFXImageFromURI(uri); return new ImageView(img); } - /** The default implementation forwards the request by ignoring the model element. */ - @Override - public ImageDescriptor getIconImageDescriptor(T element) { - return getIconImageDescriptor(); - } - - /** Get image descriptor by ignoring the model element. */ - public abstract ImageDescriptor getIconImageDescriptor(); - /** {@inheritDoc} */ @Override public List<EObject> getSubnodes(T element) { diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/.ratings index 87159f5430ed08dd71e893efd81e7542dab16d2a..4e2a8782dcd01a1927efbb33ae2411f72c1ee545 100644 --- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/.ratings +++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/.ratings @@ -10,6 +10,6 @@ KernelModelElementUtils.java fded09befe7e543fc04ea5184ffc1c8a309d7a66 GREEN KernelServiceBasedModelListenerBase.java 8d916509ae75f7118ce72564ee715c46556fb709 GREEN LoggingUtils.java 0e0aa5d466d80ea29cfc7e91178b23a5cdd4ddf7 GREEN PrototypesUtils.java ec75bed75cfc5103f1f38e3a29df86f729428775 GREEN -ResourceUtils.java 7f4941a83115dfbed75eb58b79c0a372fe1cbb94 GREEN +ResourceUtils.java 1388e642ceeead4c8852e7ae39c6d57a362d4845 GREEN TransformationUtils.java 552d3a9d56d34450be781af828efe0b8aa5d359e GREEN UniqueIDUtils.java 665955b1790c1bd1c2087e23114da920bfec2265 GREEN diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/ResourceUtils.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/ResourceUtils.java index 7f4941a83115dfbed75eb58b79c0a372fe1cbb94..1388e642ceeead4c8852e7ae39c6d57a362d4845 100644 --- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/ResourceUtils.java +++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/ResourceUtils.java @@ -240,22 +240,23 @@ public final class ResourceUtils { * * @param pluginId * The plugin ID - * @param absPath + * @param path * The absolute path in the plugin * @return a resource URI */ - public static String getResourceURI(String pluginId, String absPath) { + public static String getResourceURI(String pluginId, String path) { if(pluginId == null) { throw new NullPointerException("The plugin ID must not be null!"); } - if(absPath == null) { + if(path == null) { throw new NullPointerException("The path must not be null!"); } - if(!absPath.startsWith("/")) { - throw new IllegalArgumentException("The path is not a absolute path."); + + if(!pluginId.endsWith("/") && !path.startsWith("/")) { + path = "/" + path; } - return "platform:/plugin/" + pluginId + absPath; + return "platform:/plugin/" + pluginId + path; } /**