diff options
author | rescobar | 2010-08-26 23:53:12 +0000 |
---|---|---|
committer | rescobar | 2010-08-26 23:53:12 +0000 |
commit | 8c41455314d66f4abcd576892a01fe9283572fc2 (patch) | |
tree | ea293f8e6cadb62edafeadcae331ebe145a40518 /plugins | |
parent | 3194500ef6b9dcdc2f963909a0f250cd4d43fb80 (diff) | |
download | org.eclipse.osee-8c41455314d66f4abcd576892a01fe9283572fc2.tar.gz org.eclipse.osee-8c41455314d66f4abcd576892a01fe9283572fc2.tar.xz org.eclipse.osee-8c41455314d66f4abcd576892a01fe9283572fc2.zip |
Cleanup renderer code.
Diffstat (limited to 'plugins')
3 files changed, 75 insertions, 70 deletions
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OpenWithContributionItem.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OpenWithContributionItem.java index a219632cd99..6c499ffde04 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OpenWithContributionItem.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OpenWithContributionItem.java @@ -11,8 +11,11 @@ package org.eclipse.osee.framework.ui.skynet; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.logging.Level; import org.eclipse.core.commands.Command; import org.eclipse.jface.action.IContributionItem; @@ -60,6 +63,14 @@ import org.eclipse.ui.menus.CommandContributionItemParameter; * @author Jeff C. Phillips */ public class OpenWithContributionItem extends CompoundContributionItem { + + //@formatter:off + private static final PresentationType[] OPEN_WITH_PRESENTATION_TYPES = new PresentationType[] { + PresentationType.PREVIEW, + PresentationType.SPECIALIZED_EDIT + }; + //@formatter:on + private ICommandService commandService; public OpenWithContributionItem() { @@ -75,58 +86,61 @@ public class OpenWithContributionItem extends CompoundContributionItem { ArrayList<IContributionItem> contributionItems = new ArrayList<IContributionItem>(40); List<Artifact> artifacts = getSelectedArtifacts(); if (artifacts != null && !artifacts.isEmpty()) { + + Artifact testArtifact = artifacts.iterator().next(); + try { - contributionItems.addAll(getCommonContributionItems(artifacts, PresentationType.PREVIEW)); - //add separator between preview and edit commands - if (!contributionItems.isEmpty()) { - contributionItems.add(new Separator()); + for (int index = 0; index < OPEN_WITH_PRESENTATION_TYPES.length; index++) { + PresentationType openWithType = OPEN_WITH_PRESENTATION_TYPES[index]; + List<IRenderer> commonRenders = RendererManager.getCommonRenderers(artifacts, openWithType); + contributionItems.addAll(getCommonContributionItems(openWithType, testArtifact, commonRenders)); + + if (index + 1 < OPEN_WITH_PRESENTATION_TYPES.length && !contributionItems.isEmpty()) { + //add separator between presentation type commands + contributionItems.add(new Separator()); + } } - contributionItems.addAll(getCommonContributionItems(artifacts, PresentationType.SPECIALIZED_EDIT)); } catch (OseeCoreException ex) { OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); } } - return contributionItems.toArray(new IContributionItem[0]); } - private ArrayList<IContributionItem> getCommonContributionItems(List<Artifact> artifacts, PresentationType presentationType) throws OseeCoreException { - ArrayList<IContributionItem> contributionItems = new ArrayList<IContributionItem>(25); - List<IRenderer> commonRenders = RendererManager.getCommonRenderers(artifacts, presentationType); - Artifact firstArtifact = artifacts.iterator().next(); - for (IRenderer render : commonRenders) { - ImageDescriptor imageDescriptor = null; - if (render instanceof WordRenderer) { - imageDescriptor = WordRenderer.getImageDescriptor(); - } else if (render instanceof NativeRenderer) { - String fileExtension = firstArtifact.getSoleAttributeValue(CoreAttributeTypes.Extension); - if (Strings.isValid(fileExtension)) { - imageDescriptor = ImageManager.getProgramImageDescriptor(fileExtension); + private Collection<IContributionItem> getCommonContributionItems(PresentationType presentationType, Artifact testArtifact, Collection<IRenderer> commonRenders) throws OseeCoreException { + Map<String, IContributionItem> contributedItems = new LinkedHashMap<String, IContributionItem>(25); + for (IRenderer renderer : commonRenders) { + for (String commandId : renderer.getCommandId(presentationType)) { + Command command = commandService.getCommand(commandId); + if (command != null && command.isEnabled()) { + ImageDescriptor imageDescriptor = getRenderImageDescriptor(renderer, testArtifact); + IContributionItem item = createContributionItem(commandId, imageDescriptor); + contributedItems.put(commandId, item); } } - List<IContributionItem> commandList = loadCommands(render, presentationType, imageDescriptor); - contributionItems.addAll(commandList); } - return contributionItems; + return contributedItems.values(); } - private ArrayList<IContributionItem> loadCommands(IRenderer renderer, PresentationType presentationType, ImageDescriptor imageDescriptor) { - ArrayList<IContributionItem> contributionItems = new ArrayList<IContributionItem>(25); - CommandContributionItem contributionItem = null; - - for (String commandId : renderer.getCommandId(presentationType)) { - contributionItem = - new CommandContributionItem(new CommandContributionItemParameter( - PlatformUI.getWorkbench().getActiveWorkbenchWindow(), commandId, commandId, Collections.emptyMap(), - imageDescriptor, null, null, null, null, null, SWT.NONE, null, false)); - - Command command = commandService.getCommand(contributionItem.getId()); - if (command != null && command.isEnabled()) { - contributionItems.add(contributionItem); + private ImageDescriptor getRenderImageDescriptor(IRenderer renderer, Artifact testArtifact) throws OseeCoreException { + ImageDescriptor imageDescriptor = null; + if (renderer instanceof WordRenderer) { + imageDescriptor = WordRenderer.getImageDescriptor(); + } else if (renderer instanceof NativeRenderer) { + String fileExtension = testArtifact.getSoleAttributeValue(CoreAttributeTypes.Extension); + if (Strings.isValid(fileExtension)) { + imageDescriptor = ImageManager.getProgramImageDescriptor(fileExtension); } } + return imageDescriptor; + } - return contributionItems; + private IContributionItem createContributionItem(String commandId, ImageDescriptor imageDescriptor) { + IContributionItem contributionItem = + new CommandContributionItem(new CommandContributionItemParameter( + PlatformUI.getWorkbench().getActiveWorkbenchWindow(), commandId, commandId, Collections.emptyMap(), + imageDescriptor, null, null, null, null, null, SWT.NONE, null, false)); + return contributionItem; } @Override diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java index 4160e35dd40..083b9ebf6ee 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/DefaultArtifactRenderer.java @@ -91,7 +91,6 @@ public class DefaultArtifactRenderer implements IRenderer { return new DefaultArtifactRenderer(); } - @SuppressWarnings("unused") @Override public int getApplicabilityRating(PresentationType presentationType, Artifact artifact) throws OseeCoreException { if (presentationType == GENERALIZED_EDIT) { @@ -159,7 +158,7 @@ public class DefaultArtifactRenderer implements IRenderer { @Override public List<String> getCommandId(PresentationType presentationType) { - ArrayList<String> commandIds = new ArrayList<String>(2); + ArrayList<String> commandIds = new ArrayList<String>(1); if (presentationType == PresentationType.SPECIALIZED_EDIT) { commandIds.add("org.eclipse.osee.framework.ui.skynet.artifacteditor.command"); diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java index 9d5c25e1645..3b29c7b67e6 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/RendererManager.java @@ -12,19 +12,16 @@ package org.eclipse.osee.framework.ui.skynet.render; import static org.eclipse.osee.framework.ui.skynet.render.PresentationType.DEFAULT_OPEN; -import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.logging.Level; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.osee.framework.core.data.IAttributeType; import org.eclipse.osee.framework.core.exception.OseeArgumentException; @@ -34,8 +31,7 @@ import org.eclipse.osee.framework.core.model.type.AttributeType; import org.eclipse.osee.framework.core.operation.IOperation; import org.eclipse.osee.framework.core.operation.Operations; import org.eclipse.osee.framework.jdk.core.type.HashCollection; -import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.plugin.core.util.ExtensionPoints; +import org.eclipse.osee.framework.plugin.core.util.ExtensionDefinedObjects; import org.eclipse.osee.framework.skynet.core.UserManager; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.change.ArtifactDelta; @@ -48,12 +44,13 @@ import org.eclipse.osee.framework.ui.skynet.render.word.Producer; /** * @author Ryan D. Brooks */ -public class RendererManager { - private static final RendererManager instance = new RendererManager(); - private final HashMap<String, IRenderer> renderers = new HashMap<String, IRenderer>(40); +public final class RendererManager { + + private static final Map<String, IRenderer> RENDERER_MAP = new ConcurrentHashMap<String, IRenderer>(40); + private static boolean firstTimeThrough = true; private RendererManager() { - registerRendersFromExtensionPoints(); + // Utility Class } /** @@ -91,25 +88,19 @@ public class RendererManager { /** * Maps all renderers in the system to their applicable artifact types */ - @SuppressWarnings("unchecked") - private void registerRendersFromExtensionPoints() { - List<IConfigurationElement> elements = - ExtensionPoints.getExtensionElements(SkynetGuiPlugin.getInstance(), "ArtifactRenderer", "Renderer"); - - for (IConfigurationElement element : elements) { - String classname = element.getAttribute("classname"); - String bundleName = element.getContributor().getName(); - try { - Class<IRenderer> clazz = Platform.getBundle(bundleName).loadClass(classname); - Constructor<IRenderer> constructor = clazz.getConstructor(); - IRenderer renderer = constructor.newInstance(); - renderers.put(renderer.getClass().getCanonicalName(), renderer); - } catch (Exception ex) { - OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); - } catch (NoClassDefFoundError er) { - OseeLog.log(SkynetGuiPlugin.class, Level.WARNING, - "Failed to find a class definition for " + classname + ", registered from bundle " + bundleName, er); - } + private static synchronized void ensurePopulated() { + if (firstTimeThrough) { + firstTimeThrough = false; + registerRendersFromExtensionPoints(); + } + } + + private static void registerRendersFromExtensionPoints() { + ExtensionDefinedObjects<IRenderer> contributions = + new ExtensionDefinedObjects<IRenderer>(SkynetGuiPlugin.PLUGIN_ID + ".ArtifactRenderer", "Renderer", + "classname"); + for (IRenderer renderer : contributions.getObjects()) { + RENDERER_MAP.put(renderer.getClass().getCanonicalName(), renderer); } } @@ -138,7 +129,8 @@ public class RendererManager { } IRenderer bestRendererPrototype = null; int bestRating = IRenderer.NO_MATCH; - for (IRenderer renderer : instance.renderers.values()) { + ensurePopulated(); + for (IRenderer renderer : RENDERER_MAP.values()) { int rating = renderer.getApplicabilityRating(presentationType, artifact); if (rating > bestRating) { bestRendererPrototype = renderer; @@ -164,8 +156,8 @@ public class RendererManager { public static List<IRenderer> getApplicableRenderers(PresentationType presentationType, Artifact artifact, VariableMap options) throws OseeCoreException { ArrayList<IRenderer> renderers = new ArrayList<IRenderer>(); int minimumRanking = getBestRenderer(presentationType, artifact, options).minimumRanking(); - - for (IRenderer prototypeRenderer : instance.renderers.values()) { + ensurePopulated(); + for (IRenderer prototypeRenderer : RENDERER_MAP.values()) { // Add Catch Exception Code -- int rating = prototypeRenderer.getApplicabilityRating(presentationType, artifact); |