// add compartments from super class if not disabled
IPaletteCompartmentEntry[] superCompartments = super.getPalette();
// create new compartments
IPaletteCompartmentEntry connectionCompartmentEntry = new PaletteCompartmentEntry("Connection", null);
IPaletteCompartmentEntry eventCompartmentEntry = new PaletteCompartmentEntry("Event", null);
IPaletteCompartmentEntry taskCompartmentEntry = new PaletteCompartmentEntry("Task", null);
IPaletteCompartmentEntry gatewayCompartmentEntry = new PaletteCompartmentEntry("Gateway", null);
IPaletteCompartmentEntry containerCompartmentEntry = new PaletteCompartmentEntry("Container", null);
IPaletteCompartmentEntry boundaryEventCompartmentEntry = new PaletteCompartmentEntry("Boundary event", null);
IPaletteCompartmentEntry intermediateEventCompartmentEntry = new PaletteCompartmentEntry("Intermediate event", null);
IPaletteCompartmentEntry artifactsCompartmentEntry = new PaletteCompartmentEntry("Artifacts", null);
IPaletteCompartmentEntry alfrescoCompartmentEntry = new PaletteCompartmentEntry("Alfresco", PluginImage.IMG_ALFRESCO_LOGO.getImageKey());
for (final IPaletteCompartmentEntry entry : superCompartments) {
// Prune any disabled palette entries in the Objects compartment
if ("Objects".equals(entry.getLabel())) {
pruneDisabledPaletteEntries(project, entry);
}
}
for (IPaletteCompartmentEntry iPaletteCompartmentEntry : superCompartments) {
final List<IToolEntry> toolEntries = iPaletteCompartmentEntry.getToolEntries();
for (IToolEntry toolEntry : toolEntries) {
if ("sequenceflow".equalsIgnoreCase(toolEntry.getLabel())) {
connectionCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("association".equalsIgnoreCase(toolEntry.getLabel())) {
connectionCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("startevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("timerstartevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("errorstartevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("endevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("errorendevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("terminateendevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("usertask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("messagestartevent".equalsIgnoreCase(toolEntry.getLabel())) {
eventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("scripttask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("servicetask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("mailtask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("manualtask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("receivetask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("businessruletask".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("timerboundaryevent".equalsIgnoreCase(toolEntry.getLabel())) {
boundaryEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("errorboundaryevent".equalsIgnoreCase(toolEntry.getLabel())) {
boundaryEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("signalboundaryevent".equalsIgnoreCase(toolEntry.getLabel())) {
boundaryEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("messageboundaryevent".equalsIgnoreCase(toolEntry.getLabel())) {
boundaryEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("timercatchingevent".equalsIgnoreCase(toolEntry.getLabel())) {
intermediateEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("signalcatchingevent".equalsIgnoreCase(toolEntry.getLabel())) {
intermediateEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("messagecatchingevent".equalsIgnoreCase(toolEntry.getLabel())) {
intermediateEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("signalthrowingevent".equalsIgnoreCase(toolEntry.getLabel())) {
intermediateEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("nonethrowingevent".equalsIgnoreCase(toolEntry.getLabel())) {
intermediateEventCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("parallelgateway".equalsIgnoreCase(toolEntry.getLabel())) {
gatewayCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("exclusivegateway".equalsIgnoreCase(toolEntry.getLabel())) {
gatewayCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("inclusivegateway".equalsIgnoreCase(toolEntry.getLabel())) {
gatewayCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("eventgateway".equalsIgnoreCase(toolEntry.getLabel())) {
gatewayCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("subprocess".equalsIgnoreCase(toolEntry.getLabel())) {
containerCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("pool".equalsIgnoreCase(toolEntry.getLabel())) {
containerCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("lane".equalsIgnoreCase(toolEntry.getLabel())) {
containerCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("eventsubprocess".equalsIgnoreCase(toolEntry.getLabel())) {
containerCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("callactivity".equalsIgnoreCase(toolEntry.getLabel())) {
taskCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("alfrescousertask".equalsIgnoreCase(toolEntry.getLabel())) {
alfrescoCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("alfrescostartevent".equalsIgnoreCase(toolEntry.getLabel())) {
alfrescoCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("alfrescoscripttask".equalsIgnoreCase(toolEntry.getLabel())) {
alfrescoCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("alfrescomailtask".equalsIgnoreCase(toolEntry.getLabel())) {
alfrescoCompartmentEntry.getToolEntries().add(toolEntry);
} else if ("annotation".equalsIgnoreCase(toolEntry.getLabel())) {
artifactsCompartmentEntry.getToolEntries().add(toolEntry);
}
}
}
// Always add the connection compartment
ret.add(connectionCompartmentEntry);
if (eventCompartmentEntry.getToolEntries().size() > 0) {
ret.add(eventCompartmentEntry);
}
if (taskCompartmentEntry.getToolEntries().size() > 0) {
ret.add(taskCompartmentEntry);
}
if (containerCompartmentEntry.getToolEntries().size() > 0) {
ret.add(containerCompartmentEntry);
}
if (gatewayCompartmentEntry.getToolEntries().size() > 0) {
ret.add(gatewayCompartmentEntry);
}
if (boundaryEventCompartmentEntry.getToolEntries().size() > 0) {
ret.add(boundaryEventCompartmentEntry);
}
if (intermediateEventCompartmentEntry.getToolEntries().size() > 0) {
ret.add(intermediateEventCompartmentEntry);
}
if (!artifactsCompartmentEntry.getToolEntries().isEmpty()) {
ret.add(artifactsCompartmentEntry);
}
if (PreferencesUtil.getBooleanPreference(Preferences.ALFRESCO_ENABLE) && alfrescoCompartmentEntry.getToolEntries().size() > 0) {
ret.add(alfrescoCompartmentEntry);
}
final Map<String, List<CustomServiceTaskContext>> tasksInDrawers = new HashMap<String, List<CustomServiceTaskContext>>();
final List<CustomServiceTaskContext> customServiceTaskContexts = ExtensionUtil.getCustomServiceTaskContexts(project);
final ImageRegistry reg = GraphitiUIPlugin.getDefault().getImageRegistry();
for (final CustomServiceTaskContext taskContext : customServiceTaskContexts) {
if (reg.get(taskContext.getSmallImageKey()) == null) {
reg.put(taskContext.getSmallImageKey(),
new Image(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), taskContext.getSmallIconStream()));
}
if (reg.get(taskContext.getLargeImageKey()) == null) {
reg.put(taskContext.getLargeImageKey(),
new Image(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), taskContext.getLargeIconStream()));
}
if (reg.get(taskContext.getShapeImageKey()) == null) {
reg.put(taskContext.getShapeImageKey(),
new Image(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(), taskContext.getShapeIconStream()));
}
}
for (final CustomServiceTaskContext taskContext : customServiceTaskContexts) {
if (!tasksInDrawers.containsKey(taskContext.getServiceTask().contributeToPaletteDrawer())) {
tasksInDrawers.put(taskContext.getServiceTask().contributeToPaletteDrawer(), new ArrayList<CustomServiceTaskContext>());
}
tasksInDrawers.get(taskContext.getServiceTask().contributeToPaletteDrawer()).add(taskContext);
}
for (final Entry<String, List<CustomServiceTaskContext>> drawer : tasksInDrawers.entrySet()) {
// Sort the list
Collections.sort(drawer.getValue());
final IPaletteCompartmentEntry paletteCompartmentEntry = new PaletteCompartmentEntry(drawer.getKey(), null);
for (final CustomServiceTaskContext currentDrawerItem : drawer.getValue()) {
final CreateCustomServiceTaskFeature feature = new CreateCustomServiceTaskFeature(getFeatureProvider(), currentDrawerItem.getServiceTask().getName(),
currentDrawerItem.getServiceTask().getDescription(), currentDrawerItem.getServiceTask().getClass().getCanonicalName());
final IToolEntry entry = new ObjectCreationToolEntry(currentDrawerItem.getServiceTask().getName(), currentDrawerItem.getServiceTask().getDescription(),
currentDrawerItem.getSmallImageKey(), null, feature);
paletteCompartmentEntry.getToolEntries().add(entry);
}
ret.add(paletteCompartmentEntry);
}
return ret.toArray(new IPaletteCompartmentEntry[ret.size()]);