/* * Licensed Materials - Property of Rogue Wave Software, Inc. * © Copyright Rogue Wave Software, Inc. 2014, 2015 * © 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. */ /** * This examples shows a number of diagrams to illustrate some typical * uses of Rogue Wave JViews Diagrammer. */ import ilog.views.diagrammer.IlvDiagrammer; import ilog.views.diagrammer.application.IlvDiagrammerAction; import ilog.views.diagrammer.application.IlvDiagrammerApplication; import ilog.views.diagrammer.application.IlvDiagrammerMenuBar; import ilog.views.diagrammer.application.IlvDiagrammerMenu; import ilog.views.diagrammer.project.IlvDiagrammerProject; import ilog.views.sdm.renderer.IlvRendererUtil; import ilog.views.util.swing.IlvJStreamTextArea; import ilog.views.util.IlvProductUtil; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; import java.util.StringTokenizer; public class DiagramGallery extends IlvDiagrammerApplication { private ResourceBundle bundle; IlvDiagrammerProject[] diagrams; private JComboBox combo; private JTextField descriptionField; private JFrame messageWindow; private IlvJStreamTextArea messageArea; public static void main(final String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { new DiagramGallery().init(args); } }); } public DiagramGallery() { super(new String[] { "-simple" }); } /** * This method is overridden to change the size of the frame. */ public JFrame createFrame() { JFrame frame = super.createFrame(); frame.setSize(800, 400); return frame; } /** * Initializes the GUI. * @param contentPane The container of the application or applet. */ public void init(Container contentPane) { // This sample uses JViews Diagrammer features. When deploying an // application that includes this code, you need to be in possession // of a Rogue Wave JViews Diagrammer Deployment license. IlvProductUtil.DeploymentLicenseRequired( IlvProductUtil.JViews_Diagrammer_Deployment); bundle = ResourceBundle.getBundle("gallery"); diagrams = readDiagrams(); descriptionField = new JTextField(); super.init(contentPane); // Create the combo box that lets the user choose a diagram. // JPanel topPanel = new JPanel(new GridBagLayout()); contentPane.add(topPanel, BorderLayout.NORTH); GridBagConstraints c = new GridBagConstraints(); c.gridy = 0; c.insets = new Insets(5, 5, 5, 5); c.weightx = 0; c.fill = GridBagConstraints.NONE; JLabel label = new JLabel(bundle.getString("DiagramGallery.ChooseDiagram")); c.gridx = 0; topPanel.add(label, c); combo = new JComboBox(diagrams); combo.setRenderer(new DefaultListCellRenderer(){ public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); label.setText(getProperty((IlvDiagrammerProject)value, "ShortDescription")); return label; } }); combo.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED){ loadDiagram((IlvDiagrammerProject)combo.getSelectedItem()); } } }); c.gridx = 1; topPanel.add(combo, c); descriptionField.setEditable(false); c.weightx = 1; c.gridx = 2; c.fill = GridBagConstraints.HORIZONTAL; topPanel.add(descriptionField, c); // create a message window messageArea = new IlvJStreamTextArea(); messageWindow = new JFrame(); messageWindow.getContentPane().add(messageArea); messageWindow.pack(); messageWindow.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); // enhance the file menu with the tracing facility IlvDiagrammerMenuBar menuBar = getMenuBar(); IlvDiagrammerMenu fileMenu = menuBar.getFileMenu(); final IlvDiagrammerAction.ToggleAction traceAction = new IlvDiagrammerAction.ToggleAction("DiagramGallery.EnableTracing", bundle) { protected boolean isEnabled(IlvDiagrammer diagrammer) throws Exception { return true; } protected boolean isSelected(IlvDiagrammer diagrammer) throws Exception { return IlvRendererUtil.isTracingEnabled(); } protected void setSelected(IlvDiagrammer diagrammer, boolean selected) throws Exception { if (selected) { // enable tracing for various rendering methods. // Nearly all methods of IlvSDMRenderer can be traced. messageWindow.setVisible(true); IlvRendererUtil.setTraceStream(messageArea.getPrintStream()); // to trace ALL methods: // IlvRendererUtil.setTracingEnabled(true); // to trace specific methods: IlvRendererUtil.setTracingEnabled("renderingDone", "createNodeGraphic", "createLinkGraphic"); // Can restrict tracing to certain renderers: // IlvRendererUtil.setTraceRenderers("GraphLayout", "LinkLayout"); diagrammer.refresh(); } else { if (IlvRendererUtil.isTracingEnabled()) { // disable tracing IlvRendererUtil.setTracingEnabled(false); diagrammer.refresh(); messageWindow.setVisible(false); } } } }; fileMenu.insertAction(traceAction, 1); messageWindow.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (IlvRendererUtil.isTracingEnabled()) { try { traceAction.perform(null, getCurrentDiagrammer()); } catch (Exception ex) { } } } }); } /** * Loads the first diagram. */ protected void ready() { super.ready(); loadDiagram(diagrams[0]); } /** * Loads a diagram. * @param project The diagram project to load. */ private void loadDiagram(IlvDiagrammerProject project) { try { getCurrentDiagrammer().setProject(project, true); if (project.getProjectURL().toString().contains("classdiag")) getCurrentDiagrammer().resetZoom(); else getCurrentDiagrammer().fitToContents(); descriptionField.setText(getProperty(project, "LongDescription")); } catch (Exception e1) { IlvDiagrammerAction.error( getApplicationContentPane(), bundle, "DiagramGallery.ErrorWhileLoadingProject", new Object[] { project.getProjectURL() }, e1); } } /** * Reads the list of diagrams from the property file. */ private IlvDiagrammerProject[] readDiagrams() { ArrayList l = new ArrayList(); try { URL documentBase; if(isApplet()){ documentBase = getDocumentBase(); } else { documentBase = new URL("file:./"); } String list = bundle.getString("DiagramGallery.DiagramList"); StringTokenizer tok = new StringTokenizer(list, " ,"); while(tok.hasMoreTokens()){ String name = tok.nextToken(); IlvDiagrammerProject project = new IlvDiagrammerProject(new URL(documentBase, "data/"+name+".idpr")); l.add(project); } } catch(Exception ex){ IlvDiagrammerAction.error( getApplicationContentPane(), bundle, "DiagramGallery.ErrorWhileListingProjects", null, ex); } return (IlvDiagrammerProject[]) l.toArray(new IlvDiagrammerProject[0]); } private String getProperty(IlvDiagrammerProject project, String property) { String key = project.getProjectURL().toExternalForm(); key = key.substring(key.lastIndexOf('/')+1); key = key.substring(0, key.lastIndexOf('.')); return bundle.getString("DiagramGallery."+key+"."+property); } }