/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ package bpmn; import java.awt.Container; import java.awt.Image; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JToolBar; import ilog.views.bpmn.IlvBPMNFrame; import ilog.views.bpmn.IlvBPMNSDMUtilitiesFactory; import ilog.views.bpmn.IlvBPMNSelectInteractor; import ilog.views.bpmn.IlvBPMNUtilities; import ilog.views.diagrammer.IlvDiagrammer; import ilog.views.diagrammer.IlvDiagrammerException; import ilog.views.diagrammer.application.IlvDiagrammerAction; import ilog.views.diagrammer.application.IlvDiagrammerMenu; import ilog.views.diagrammer.application.IlvDiagrammerMenuBar; import ilog.views.diagrammer.application.IlvDiagrammerPaletteAction; import ilog.views.diagrammer.application.IlvDiagrammerPaletteBar; import ilog.views.diagrammer.application.IlvDiagrammerPropertySheet; import ilog.views.diagrammer.application.IlvDiagrammerStatusBar; import ilog.views.sdm.interactor.IlvSDMCompositeSelectInteractor; import ilog.views.util.IlvImageUtil; import ilog.views.util.IlvProductUtil; import ilog.views.util.swing.IlvSwingUtil; /** * This example shows how to build a business process modeler * that uses the Business Process Modeling Notation. * <p> * The example is based on the predefined class * {@link IlvDiagrammerApplication} * supplied with the diagram component. */ public class BPMNModeler extends IlvBPMNFrame { static { // This sample uses JViews Diagrammer features. When deploying an // application that includes this code, you need to be in possession // of a Perforce JViews Diagrammer Deployment license. IlvProductUtil.DeploymentLicenseRequired( IlvProductUtil.JViews_Diagrammer_Deployment); } // The resource bundle used to get localized messages for // this class. // private ResourceBundle bundle; /** * Creates a new process modeler. */ public BPMNModeler() { super(); // Load the property file. // bundle = ResourceBundle.getBundle("bpmn"); // User CSS or default CSS String cssPath = getCSSPath(); // Set default arguments. setDefaultArgs(new String[]{ "-title", bundle.getString("BPMNModeler.FrameTitle"), "-tabbed", "-separatedPalettes", "-tree", "-psheet", "-edit", "-style", cssPath }); } protected String getCSSPath() { try { String cssPath = "userbpmn/userbpmn.css"; File file = new File(cssPath); if (file.canRead()) { return cssPath; } } catch (Exception e) { } return IlvBPMNUtilities.class.getResource("bpmn.css").toExternalForm(); } /** * Creates a simple version of the status bar for this application. */ Override protected IlvDiagrammerStatusBar createStatusBar() { return new IlvDiagrammerStatusBar(true); } /** * Initializes the application. * @param contentPane The panel in which the GUI will be created. */ Override public void init(final Container contentPane) { super.init(contentPane); IlvDiagrammerMenuBar mbar = (IlvDiagrammerMenuBar) getJMenuBar(); mbar.getOptionsMenu().addAction(IlvDiagrammerAction.resizing); removeAction(mbar.getFileMenu(), IlvDiagrammerAction.openStyleSheet); removeAction(mbar.getFileMenu(), IlvDiagrammerAction.refresh); removeAction(mbar.getOptionsMenu(), IlvDiagrammerAction.editing); getEditToolBar().removeAction(IlvDiagrammerAction.refresh); ((IlvDiagrammerAction.FileAction) IlvDiagrammerAction.saveAs).setSuffixes(new String[] {".xml"}); ((IlvDiagrammerAction.FileAction) IlvDiagrammerAction.open).setSuffixes(new String[] {".xml"}); } /** * Creates the frame of the application. * @see ilog.views.diagrammer.application.IlvDiagrammerApplication#createFrame() */ Override public void initFrame() { super.initFrame(); setSize(808, 634); } /** * Returns false, so the tool bars are not floatable. */ Override public boolean isFloatable() { return false; } protected void removeAction(IlvDiagrammerMenu menu, Action action) { int ndx = menu.indexOf(action); if (ndx != -1) { menu.remove(ndx); if (menu.getItemCount() > ndx) { if (menu.getItem(ndx) == null) { // The item next to the removed item is a separator // and the previous item is also a separator, remove // a separator. if (ndx == 0 || menu.getItem(ndx - 1) == null) { menu.remove(ndx); } } } } } Override protected JToolBar[] createPaletteToolBars() throws Exception { return new JToolBar[]{ createPalette("activities.xml"), createPalette("starts.xml"), createPalette("intermediates.xml"), createPalette("ends.xml"), createPalette("gateways.xml"), createPalette("flows.xml"), createPalette("artifacts.xml"), createPalette("pools.xml") }; } Override protected IlvDiagrammer createDiagrammer() { IlvDiagrammer diagrammer = super.createDiagrammer(); diagrammer.getView().setUtilitiesFactory(new IlvBPMNSDMUtilitiesFactory(this)); IlvSDMCompositeSelectInteractor selinter = new IlvBPMNSelectInteractor(); selinter.setOpaqueMove(true); selinter.setOpaqueResize(true); diagrammer.setSelectInteractor(selinter); diagrammer.setStickyModes(false); diagrammer.setResizingAllowed(true); diagrammer.setMinimumZoom(0.2); return diagrammer; } private JToolBar createPalette(String filename) throws IOException, IlvDiagrammerException { URL url = IlvBPMNUtilities.class.getResource("palettes/" + filename); IlvDiagrammerPaletteBar tbar = new IlvDiagrammerPaletteBar(url, getStyleSheetURL(), JToolBar.HORIZONTAL); // Change the icons if specified in the source objects. Action[] actions = tbar.getActions(); String filePrefix = getActionPrefix(filename); for (int ndx = 0; ndx < actions.length; ndx++) { // Override the default icon, and descriptions created by // the IlvDiagrammerPaletteAction if (actions[ndx] instanceof IlvDiagrammerPaletteAction) { IlvDiagrammerPaletteAction action = (IlvDiagrammerPaletteAction) actions[ndx]; String prefix = filePrefix + action.getPaletteDiagrammer().getID(action.getPaletteObject()) + "."; // The icon try { String iconPath = getActionProperty(action, prefix, Action.SMALL_ICON); Image image = IlvImageUtil.getImageFromFile(IlvBPMNUtilities.class, iconPath); ImageIcon imageIcon = new ImageIcon(image); action.putValue(Action.SMALL_ICON, imageIcon); } catch (Exception e) { } // The short description setActionProperty(action, prefix, Action.SHORT_DESCRIPTION); // The long description setActionProperty(action, prefix, Action.LONG_DESCRIPTION); } } return tbar; } private static String getActionPrefix(String filename) { String result = "BPMNModeler.Palette."; // Add the file name. int index = filename.indexOf('.'); if (index != -1) { // Only use the file name part. result += filename.substring(0, index); } else { result += filename; } result += "."; return result; } private String getActionProperty(IlvDiagrammerAction action, String prefix, String key) { try { return bundle.getString(prefix + key); } catch (Exception e) { return null; } } private void setActionProperty(IlvDiagrammerPaletteAction action, String prefix, String key) { String str = getActionProperty(action, prefix, key); if (str != null) { action.putValue(key, str); } } private static void globalInit() { IlvDiagrammerPropertySheet.allowUserDefinedType(false); IlvDiagrammerAction.about.putValue(IlvDiagrammerAction.ABOUT_APPLICATION_NAME, "BPMN Modeler"); } /** * The main method of the application. You must always supply your * own main when subclassing * {@link IlvDiagrammerApplication}. * @param args The command-line arguments. */ public static void main(final String[] args) { globalInit(); // Create the new modeler application and show it. IlvSwingUtil.invokeLater(new Runnable() { Override public void run() { new BPMNModeler().init(args); } }); } }