Revision: 6326 http://sourceforge.net/p/jump-pilot/code/6326 Author: ma15569 Date: 2020-06-12 09:11:06 +0000 (Fri, 12 Jun 2020) Log Message: ----------- Reverted commit as it still throws exception with OpenJUMP basic setup (no batik libs)
Modified Paths: -------------- core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java Modified: core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java =================================================================== --- core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java 2020-06-12 08:59:47 UTC (rev 6325) +++ core/trunk/src/org/openjump/sextante/gui/additionalResults/AdditionalResultsFrame.java 2020-06-12 09:11:06 UTC (rev 6326) @@ -1,20 +1,34 @@ package org.openjump.sextante.gui.additionalResults; +import it.betastudio.adbtoolbox.libs.DxfExport; + import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Cursor; import java.awt.Dimension; +import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.awt.image.BufferedImage; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Enumeration; +import java.util.Locale; +import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -22,425 +36,1007 @@ import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.JTextPane; import javax.swing.JTree; import javax.swing.ScrollPaneConstants; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; +import javax.xml.namespace.QName; import org.apache.log4j.Logger; +import org.math.plot.PlotPanel; +import org.math.plot.plots.Plot; +import org.openjump.core.apitools.IOTools; +import org.openjump.core.ui.io.file.FileNameExtensionFilter; import org.openjump.core.ui.swing.DetachableInternalFrame; +import org.openjump.core.ui.util.LayerableUtil; import org.openjump.sextante.core.ObjectAndDescription; import com.vividsolutions.jump.I18N; +import com.vividsolutions.jump.feature.FeatureCollection; import com.vividsolutions.jump.workbench.JUMPWorkbench; +import com.vividsolutions.jump.workbench.WorkbenchContext; +import com.vividsolutions.jump.workbench.model.Task; +import com.vividsolutions.jump.workbench.ui.FeatureCollectionPanel; import com.vividsolutions.jump.workbench.ui.GUIUtil; +import com.vividsolutions.jump.workbench.ui.HTMLPanel; public class AdditionalResultsFrame extends DetachableInternalFrame { - /** - * Flexible generic frame for prompting the results in several objects. This - * frame is a refactoring of Sextante - * es.unex.sextante.gui.additionalResults.AdditionalResultsDialog from - * library SextanteGUI.jar. Methods to prompting AdditionalResultsFrame are - * located to the class AdditionalResults - * - * @author Giuseppe Aruta [2017-12-12] - */ + /** + * Flexible generic frame for prompting the results in several objects. This + * frame is a refactoring of Sextante + * es.unex.sextante.gui.additionalResults.AdditionalResultsDialog from + * library SextanteGUI.jar. Methods to promping AdditionalResultsFrame are + * located to the class AdditionalResults + * + * @author Giuseppe Aruta [2017-12-12] + */ - // Main components of a AdditionalResultsFrame + // Main components of a AdditionalResultsFrame - private final String name = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Result-viewer"); - private final String sMenu = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Menu"); - private final String sRemove = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Remove"); - private final String sRename = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Rename"); - private final String sSave = I18N - .get("deejump.plugin.SaveLegendPlugIn.Save"); - private final String sWriteName = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Write-name"); - private final String sChangeName = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Change-name"); - private final String sProcessing = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Processing"); - private final String sResult = I18N - .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Result"); - private final String SAVE = I18N - .get("deejump.plugin.SaveLegendPlugIn.Save"); - private final String CLOSE = I18N - .get("ui.plugin.imagery.ImageLayerManagerDialog.Close"); - public final static String HEIGHT = I18N - .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.values"); - public final static String WIDTH = I18N - .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.2d-distance"); + private final String name = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Result-viewer"); + private final String sMenu = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Menu"); + private final String sRemove = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Remove"); + private final String sRename = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Rename"); + private final String sSave = I18N + .get("deejump.plugin.SaveLegendPlugIn.Save"); + private final String sWriteName = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Write-name"); + private final String sChangeName = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Change-name"); + private final String sSaved = I18N + .get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved"); + private final String SCouldNotSave = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result"); + private final String sProcessing = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Processing"); + private final String sResult = I18N + .get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Result"); + private final String SAVE = I18N + .get("deejump.plugin.SaveLegendPlugIn.Save"); + private final String CLOSE = I18N + .get("ui.plugin.imagery.ImageLayerManagerDialog.Close"); + public final static String HEIGHT = I18N + .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.values"); + public final static String WIDTH = I18N + .get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.2d-distance"); - private static final long serialVersionUID = 1L; - private JSplitPane jSplitPane; - private JTree jTree; - private TreePath m_Path; - private JScrollPane jScrollPane; - private JMenuItem menuItemSave; - private JPopupMenu popupMenu; - private JMenuItem menuItemRemove; - private JMenuItem menuItemRename; + private static final long serialVersionUID = 1L; + private JSplitPane jSplitPane; + private JTree jTree; + private TreePath m_Path; + private JScrollPane jScrollPane; + private JMenuItem menuItemSave; + private JPopupMenu popupMenu; + private JMenuItem menuItemRemove; + private JMenuItem menuItemRename; - public JSplitPane getSplitPanel() { - return jSplitPane; - } + public JSplitPane getSplitPanel() { + return jSplitPane; + } - // --da rimuovere - // final protected OKCancelApplyPanel okCancelApplyPanel = new - // OKCancelApplyPanel(); + // --da rimuovere + // final protected OKCancelApplyPanel okCancelApplyPanel = new + // OKCancelApplyPanel(); - public AdditionalResultsFrame(final ArrayList<?> components) { + public AdditionalResultsFrame(final ArrayList<?> components) { - initGUI(components); - setTitle(name); - setResizable(true); - setClosable(true); - setIconifiable(true); - setMaximizable(true); - setPreferredSize(new Dimension(900, 700)); - setSize(900, 700); - setLayer(JLayeredPane.MODAL_LAYER); - } + initGUI(components); + setTitle(name); + setResizable(true); + setClosable(true); + setIconifiable(true); + setMaximizable(true); + setPreferredSize(new Dimension(900, 700)); + setSize(900, 700); + setLayer(JLayeredPane.MODAL_LAYER); + } - public Icon getColorIcon() { - final ImageIcon icon = new ImageIcon(getClass().getResource( - "application_view.png")); - return GUIUtil.toSmallIcon(icon); - } + public Icon getColorIcon() { + final ImageIcon icon = new ImageIcon(getClass().getResource( + "application_view.png")); + return GUIUtil.toSmallIcon(icon); + } - private boolean initGUI(final ArrayList<?> components) { + private boolean initGUI(final ArrayList<?> components) { - final JPanel panel = new JPanel(); - final BorderLayout thisLayout = new BorderLayout(); - panel.setLayout(thisLayout); - setContentPane(panel); + final JPanel panel = new JPanel(); + final BorderLayout thisLayout = new BorderLayout(); + panel.setLayout(thisLayout); + setContentPane(panel); - if (components.size() == 0) { - return false; - } - try { - { - setPreferredSize(new Dimension(900, 450)); - this.setSize(new Dimension(900, 450)); - { - jSplitPane = new JSplitPane(); - jSplitPane.setDividerSize(9); - jSplitPane.setContinuousLayout(true); - jSplitPane.setOneTouchExpandable(true); - jSplitPane.setDividerLocation(200); - panel.add(jSplitPane, BorderLayout.CENTER); + if (components.size() == 0) { + return false; + } + try { + { + setPreferredSize(new Dimension(900, 450)); + this.setSize(new Dimension(900, 450)); + { + jSplitPane = new JSplitPane(); + jSplitPane.setDividerSize(9); + jSplitPane.setContinuousLayout(true); + jSplitPane.setOneTouchExpandable(true); + jSplitPane.setDividerLocation(200); + panel.add(jSplitPane, BorderLayout.CENTER); - panel.add(getOKSavePanel(), BorderLayout.SOUTH); + panel.add(getOKSavePanel(), BorderLayout.SOUTH); - { - jTree = new JTree(); - jTree.setCellRenderer(new AdditionalResultsTreeCellRenderer()); + { + jTree = new JTree(); + jTree.setCellRenderer(new AdditionalResultsTreeCellRenderer()); - final MouseListener ml = new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { + final MouseListener ml = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { - m_Path = jTree.getPathForLocation(e.getX(), - e.getY()); - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - if (node.getUserObject() instanceof ObjectAndDescription) { - showComponent(); - if ((e.getButton() == MouseEvent.BUTTON3) - && (m_Path != null)) { + m_Path = jTree.getPathForLocation(e.getX(), + e.getY()); + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + if (node.getUserObject() instanceof ObjectAndDescription) { + showComponent(); + if ((e.getButton() == MouseEvent.BUTTON3) + && (m_Path != null)) { - showPopupMenu(e); - } - } - } - }; - jTree.addMouseListener(ml); + showPopupMenu(e); + } + } + } + }; + jTree.addMouseListener(ml); - fillTree(components); + fillTree(components); - if (components.size() > 0) { - final DefaultMutableTreeNode node = findNode((ObjectAndDescription) components - .get(components.size() - 1)); - final DefaultTreeModel model = (DefaultTreeModel) jTree - .getModel(); - final TreePath path = new TreePath( - model.getPathToRoot(node)); - jTree.setSelectionPath(path); - jTree.scrollPathToVisible(path); - m_Path = path; - showComponent(); - } - jScrollPane = new JScrollPane( - jTree, - ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, - ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); + if (components.size() > 0) { + final DefaultMutableTreeNode node = findNode((ObjectAndDescription) components + .get(components.size() - 1)); + final DefaultTreeModel model = (DefaultTreeModel) jTree + .getModel(); + final TreePath path = new TreePath( + model.getPathToRoot(node)); + jTree.setSelectionPath(path); + jTree.scrollPathToVisible(path); + m_Path = path; + showComponent(); + } + jScrollPane = new JScrollPane( + jTree, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - jScrollPane.setPreferredSize(new Dimension(200, 450)); - // jScrollPane.setMinimumSize(new Dimension(200, 450)); - jScrollPane.setMaximumSize(new Dimension(200, 450)); - } - { - jSplitPane.add(jScrollPane, JSplitPane.LEFT); - } - } - } + jScrollPane.setPreferredSize(new Dimension(200, 450)); + // jScrollPane.setMinimumSize(new Dimension(200, 450)); + jScrollPane.setMaximumSize(new Dimension(200, 450)); + } + { + jSplitPane.add(jScrollPane, JSplitPane.LEFT); + } + } + } - popupMenu = new JPopupMenu(sMenu); - menuItemSave = new JMenuItem(sSave); - menuItemSave.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent evt) { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - if (node.getUserObject() instanceof ObjectAndDescription) { - AdditionalResultsIO.save(m_Path); - } - } catch (final Exception e) { - } - } - } - }); - popupMenu.add(menuItemSave); - menuItemRemove = new JMenuItem(sRemove); - menuItemRemove.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent evt) { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - if (node.getUserObject() instanceof ObjectAndDescription) { - remove(); - } - } catch (final Exception e) { - } - } - ; - } - }); - popupMenu.add(menuItemRemove); - menuItemRename = new JMenuItem(sRename); - menuItemRename.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent evt) { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - if (node.getUserObject() instanceof ObjectAndDescription) { - rename(); - } - } catch (final Exception e) { - } - } - ; - } + popupMenu = new JPopupMenu(sMenu); + menuItemSave = new JMenuItem(sSave); + menuItemSave.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent evt) { + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + if (node.getUserObject() instanceof ObjectAndDescription) { + save(); + } + } catch (final Exception e) { + } + } + } + }); + popupMenu.add(menuItemSave); + menuItemRemove = new JMenuItem(sRemove); + menuItemRemove.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent evt) { + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + if (node.getUserObject() instanceof ObjectAndDescription) { + remove(); + } + } catch (final Exception e) { + } + } + ; + } + }); + popupMenu.add(menuItemRemove); + menuItemRename = new JMenuItem(sRename); + menuItemRename.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent evt) { + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + if (node.getUserObject() instanceof ObjectAndDescription) { + rename(); + } + } catch (final Exception e) { + } + } + ; + } - }); - popupMenu.add(menuItemRename); + }); + popupMenu.add(menuItemRename); - panel.updateUI(); - return true; - } catch (final Exception e) { - Logger(this.getClass(), e); - return false; - } + panel.updateUI(); + return true; + } catch (final Exception e) { + Logger(this.getClass(), e); + return false; + } - } + } - public Component getLeftPanel() { - return jSplitPane.getLeftComponent(); + public Component getLeftPanel() { + return jSplitPane.getLeftComponent(); - } + } - public Component getRightPanel() { - return jSplitPane.getRightComponent(); - } + public Component getRightPanel() { + return jSplitPane.getRightComponent(); + } - public JPopupMenu getPopupMen() { - return popupMenu; - } + public JPopupMenu getPopupMen() { + return popupMenu; + } - protected void showPopupMenu(final MouseEvent e) { - jTree.setSelectionPath(m_Path); + protected void showPopupMenu(final MouseEvent e) { + jTree.setSelectionPath(m_Path); - menuItemSave.setEnabled(true); - popupMenu.show(e.getComponent(), e.getX(), e.getY()); + menuItemSave.setEnabled(true); + popupMenu.show(e.getComponent(), e.getX(), e.getY()); - } + } - private void rename() { + private void rename() { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - final ObjectAndDescription oad = (ObjectAndDescription) node - .getUserObject(); - final String sName = oad.getDescription(); - final JOptionPane pane = new JOptionPane(); - pane.setMessage(sWriteName); - pane.setMessageType(JOptionPane.QUESTION_MESSAGE); - pane.setWantsInput(true); - pane.setInitialSelectionValue(sName); - pane.setInputValue(sName); - final JDialog dlg = pane.createDialog(null, sChangeName); - dlg.setModal(true); - dlg.setVisible(true); - final String sNewName = pane.getInputValue().toString().trim(); + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + final ObjectAndDescription oad = (ObjectAndDescription) node + .getUserObject(); + final String sName = oad.getDescription(); + final JOptionPane pane = new JOptionPane(); + pane.setMessage(sWriteName); + pane.setMessageType(JOptionPane.QUESTION_MESSAGE); + pane.setWantsInput(true); + pane.setInitialSelectionValue(sName); + pane.setInputValue(sName); + final JDialog dlg = pane.createDialog(null, sChangeName); + dlg.setModal(true); + dlg.setVisible(true); + final String sNewName = pane.getInputValue().toString().trim(); - if ((sNewName != null) && (sNewName.length() != 0)) { - oad.setDescription(sNewName); - } - update(); - } catch (final Exception e) { - } - } + if ((sNewName != null) && (sNewName.length() != 0)) { + oad.setDescription(sNewName); + } + update(); + } catch (final Exception e) { + } + } - } + } - protected void remove() { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - final ObjectAndDescription oad = (ObjectAndDescription) node - .getUserObject(); - AdditionalResults.removeComponent(oad); - update(); - } catch (final Exception e) { - } - } + protected void remove() { + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + final ObjectAndDescription oad = (ObjectAndDescription) node + .getUserObject(); + AdditionalResults.removeComponent(oad); + update(); + } catch (final Exception e) { + } + } - } + } - protected void showComponent() { - if (m_Path != null) { - try { - final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path - .getLastPathComponent(); - final ObjectAndDescription oad = (ObjectAndDescription) node - .getUserObject(); - final Component c = (Component) oad.getObject(); - c.setMinimumSize(new Dimension(300, 200)); - jSplitPane.setRightComponent(c); - } catch (final Exception e) { - Logger(this.getClass(), e); - } - } - } + public void save() { - public void fillTree(final ArrayList<?> components) { - DefaultMutableTreeNode node; - final DefaultMutableTreeNode mainNode = new DefaultMutableTreeNode( - sProcessing); - final DefaultMutableTreeNode componentsNode = new DefaultMutableTreeNode( - sResult); + FileNameExtensionFilter filter; - for (int i = 0; i < components.size(); i++) { - node = new DefaultMutableTreeNode(components.get(i)); - componentsNode.add(node); - } - mainNode.add(componentsNode); - jTree.setModel(new DefaultTreeModel(mainNode)); - } + final File file; + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + final ObjectAndDescription oad = (ObjectAndDescription) node + .getUserObject(); + final Component c = (Component) oad.getObject(); + if (c instanceof FeatureCollectionPanel) { + final FeatureCollectionPanel panel = (FeatureCollectionPanel) c; + final FeatureCollection fcoll = panel + .getFeatureCollection(); + final FileNameExtensionFilter filter2 = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final FileNameExtensionFilter filter3 = new FileNameExtensionFilter( + "JUMP Markup Language (JML)", "jml"); + filter = new FileNameExtensionFilter( + "ESRI Shapefile (SHP)", "shp"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(); + if (!LayerableUtil.isMixedGeometryType(fcoll)) { + fc.setFileFilter(filter); + } + fc.setFileFilter(filter3); + fc.setFileFilter(filter2); + fc.addChoosableFileFilter(filter2); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter3)) { + file = new File(fc.getSelectedFile() + ".jml"); + IOTools.saveJMLFile(fcoll, file.getAbsolutePath()); + saved(file); + } else if (fc.getFileFilter().equals(filter)) { + file = new File(fc.getSelectedFile() + ".shp"); + IOTools.saveShapefile(fcoll, file.getAbsolutePath()); + saved(file); + } else if (fc.getFileFilter().equals(filter2)) { + final JTable table = panel.getTable(); + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + saved(file); + } + } - public void update() { - if (!initGUI(AdditionalResults.getComponents())) { - dispose(); - setVisible(false); - } - } + } else if (c instanceof JScrollPane) { + final JScrollPane pane = (JScrollPane) c; + final Component view = pane.getViewport().getView(); + if (view instanceof JTextPane || view instanceof JLabel + || view instanceof JTextArea) { + final JTextPane text = (JTextPane) pane.getViewport() + .getView(); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "html"); + filter = new FileNameExtensionFilter("HTML", "html"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".html"); + file.getParent(); + final FileWriter fileWriter = new FileWriter( + file); + final BufferedWriter bufferedWriter = new BufferedWriter( + fileWriter); + bufferedWriter.write(text.getText()); + bufferedWriter.close(); + saved(file); + } catch (final Exception e) { + notsaved(); + Logger(this.getClass(), e); + } + } - private DefaultMutableTreeNode findNode(final ObjectAndDescription oad) { - Object ob; - final DefaultTreeModel data = (DefaultTreeModel) jTree.getModel(); - final DefaultMutableTreeNode root = (DefaultMutableTreeNode) data - .getRoot(); - DefaultMutableTreeNode node = null; - if (root != null) { - for (final Enumeration<?> e = root.breadthFirstEnumeration(); e - .hasMoreElements();) { - final DefaultMutableTreeNode current = (DefaultMutableTreeNode) e - .nextElement(); - ob = current.getUserObject(); - if (ob instanceof ObjectAndDescription) { - if (ob == oad) { - node = current; - break; - } - } - } - } - return node; - } + } else if (view instanceof JTable) { + final JTable table = (JTable) pane.getViewport() + .getView(); + filter = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "csv"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + } else if (returnVal == JFileChooser.CANCEL_OPTION) { + return; + } - public static void Logger(Class<?> plugin, Exception e) { - final Logger LOG = Logger.getLogger(plugin); - JUMPWorkbench - .getInstance() - .getFrame() - .warnUser( - plugin.getSimpleName() + " Exception: " + e.toString()); - LOG.error(plugin.getName() + " Exception: ", e); - } + } - protected JPanel getOKSavePanel() { - final JPanel okPanel = new JPanel(); - final JButton saveButton = new JButton(SAVE) { + // [Giuseppe Aruta 2018-08-22] add generic save view to + // image of JPanel in a JScrollPane + else if (view instanceof JPanel) { + final JPanel panel = (JPanel) pane.getViewport() + .getView(); + final int w = panel.getWidth(); + final int h = panel.getHeight(); + final BufferedImage bi = new BufferedImage(w, h, + BufferedImage.TYPE_INT_RGB); + final Graphics2D g = bi.createGraphics(); + panel.paint(g); - private static final long serialVersionUID = 1L; + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "png"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".png"); + ImageIO.write(bi, "png", file); + saved(file); + } catch (final Exception e) { + notsaved(); + Logger(this.getClass(), e); + } + } + } - @Override - public Dimension getPreferredSize() { - return new Dimension(100, 25); - } - }; - final JButton closeButton = new JButton(CLOSE) { - private static final long serialVersionUID = 2L; + } else if (c instanceof PlotPanel) { + final PlotPanel panel = (PlotPanel) c; + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + final FileNameExtensionFilter filter2 = new FileNameExtensionFilter( + "Drawing Interchange Format(dxf)", "dxf"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(); + if (oad.getDescription() + .contains( + I18N.get("org.openjump.core.ui.plugin.raster.ProfileGraphTool.Profile-Plot"))) { + fc.setFileFilter(filter2); + } + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fc.getFileFilter().equals(filter)) { + file = new File(fc.getSelectedFile() + ".png"); + file.getParent(); + panel.toGraphicFile(file); + saved(file); + } else if (fc.getFileFilter().equals(filter2)) { + file = new File(fc.getSelectedFile() + ".dxf"); + file.getParent(); + double[][] pointsOfProfile = null; + for (final Plot plot : panel.getPlots()) { + pointsOfProfile = plot.getData(); + } + setCursor(new Cursor(Cursor.WAIT_CURSOR)); + exportToDxf(file.getAbsolutePath(), pointsOfProfile); + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + saved(file); + } + } - @Override - public Dimension getPreferredSize() { - return new Dimension(100, 25); - } - }; + } else if (c instanceof JTable) { + final JTable table = (JTable) c; + filter = new FileNameExtensionFilter( + "Comma-Separated Values (csv)", "csv"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "csv"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + file = new File(fc.getSelectedFile() + ".csv"); + IOTools.saveCSV(table, file.getAbsolutePath()); + } else if (returnVal == JFileChooser.CANCEL_OPTION) { + return; + } + } else if (c instanceof HTMLPanel) { + final HTMLPanel panel = (HTMLPanel) c; + final String text = panel.lastString(); + filter = new FileNameExtensionFilter("HTML", "html"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "html"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".html"); + file.getParent(); + final FileWriter fileWriter = new FileWriter(file); + final BufferedWriter bufferedWriter = new BufferedWriter( + fileWriter); + bufferedWriter.write(text); + bufferedWriter.close(); + saved(file); + } catch (final Exception e) { + notsaved(); + Logger(this.getClass(), e); + } + } + } else if (c instanceof JPanel) { + final JPanel panel = (JPanel) c; + final int w = panel.getWidth(); + final int h = panel.getHeight(); + final BufferedImage bi = new BufferedImage(w, h, + BufferedImage.TYPE_INT_RGB); + final Graphics2D g = bi.createGraphics(); + panel.paint(g); + filter = new FileNameExtensionFilter( + "Portable Network Graphics (png)", "png"); + final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting( + "png"); + fc.setFileFilter(filter); + fc.addChoosableFileFilter(filter); + final int returnVal = fc + .showSaveDialog(AdditionalResultsFrame.this); + fc.getWidth(); + fc.getHeight(); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + file = new File(fc.getSelectedFile() + ".png"); + ImageIO.write(bi, "png", file); + saved(file); + } catch (final Exception e) { + notsaved(); + Logger(this.getClass(), e); + } + } + } + } catch (final Exception e) { + Logger(this.getClass(), e); + } + } + } - saveButton.addActionListener(new java.awt.event.ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - AdditionalResultsIO.save(m_Path); - return; - } - }); - closeButton.addActionListener(new java.awt.event.ActionListener() { + protected void saved(File file) { + JUMPWorkbench.getInstance().getFrame() + .setStatusMessage(sSaved + " :" + file.getAbsolutePath()); + } - @Override - public void actionPerformed(ActionEvent e) { + protected void notsaved() { + JOptionPane.showMessageDialog(null, SCouldNotSave, I18N.get(name), + JOptionPane.WARNING_MESSAGE); + } - dispose(); + protected void showComponent() { + if (m_Path != null) { + try { + final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path + .getLastPathComponent(); + final ObjectAndDescription oad = (ObjectAndDescription) node + .getUserObject(); + final Component c = (Component) oad.getObject(); + c.setMinimumSize(new Dimension(300, 200)); + jSplitPane.setRightComponent(c); + } catch (final Exception e) { + Logger(this.getClass(), e); + } + } + } - return; - } - }); - okPanel.add(saveButton, BorderLayout.WEST); - okPanel.add(closeButton, BorderLayout.EAST); - return okPanel; + public void fillTree(final ArrayList<?> components) { + DefaultMutableTreeNode node; + final DefaultMutableTreeNode mainNode = new DefaultMutableTreeNode( + sProcessing); + final DefaultMutableTreeNode componentsNode = new DefaultMutableTreeNode( + sResult); - } + for (int i = 0; i < components.size(); i++) { + node = new DefaultMutableTreeNode(components.get(i)); + componentsNode.add(node); + } + mainNode.add(componentsNode); + jTree.setModel(new DefaultTreeModel(mainNode)); + } + public void update() { + if (!initGUI(AdditionalResults.getComponents())) { + dispose(); + setVisible(false); + } + } + private DefaultMutableTreeNode findNode(final ObjectAndDescription oad) { + Object ob; + final DefaultTreeModel data = (DefaultTreeModel) jTree.getModel(); + final DefaultMutableTreeNode root = (DefaultMutableTreeNode) data + .getRoot(); + DefaultMutableTreeNode node = null; + if (root != null) { + for (final Enumeration<?> e = root.breadthFirstEnumeration(); e + .hasMoreElements();) { + final DefaultMutableTreeNode current = (DefaultMutableTreeNode) e + .nextElement(); + ob = current.getUserObject(); + if (ob instanceof ObjectAndDescription) { + if (ob == oad) { + node = current; + break; + } + } + } + } + return node; + } + public static void Logger(Class<?> plugin, Exception e) { + final Logger LOG = Logger.getLogger(plugin); + JUMPWorkbench + .getInstance() + .getFrame() + .warnUser( + plugin.getSimpleName() + " Exception: " + e.toString()); + LOG.error(plugin.getName() + " Exception: ", e); + } + protected JPanel getOKSavePanel() { + final JPanel okPanel = new JPanel(); + final JButton saveButton = new JButton(SAVE) { - public static JUMPWorkbench workbench = JUMPWorkbench - .getInstance(); + private static final long serialVersionUID = 1L; + @Override + public Dimension getPreferredSize() { + return new Dimension(100, 25); + } + }; + final JButton closeButton = new JButton(CLOSE) { + private static final long serialVersionUID = 2L; + + @Override + public Dimension getPreferredSize() { + return new Dimension(100, 25); + } + }; + + saveButton.addActionListener(new java.awt.event.ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + save(); + // frame.dispose(); + return; + } + }); + closeButton.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + dispose(); + + return; + } + }); + okPanel.add(saveButton, BorderLayout.WEST); + okPanel.add(closeButton, BorderLayout.EAST); + return okPanel; + + } + + public static Integer round100(Integer b) { + return b - (b % 100); + } + + // [Giuseppe Aruta 2018-3-14] The following code derives from AdbToolbox + // Raster>Topography>Section code. + // see also class it.betastudio.adbtoolbox.libs.DxfExport + // [Giuseppe Aruta 2018-3-22] Enhenced dxf output + + public static void exportToDxf(String fileName, double[][] points) { + + try { + + double minX = Double.MAX_VALUE; + double maxX = -minX; + double minY = Double.MAX_VALUE; + double maxY = -minY; + + // Find max and min vals + for (final double[] point : points) { + if (point[0] < minX) { + minX = point[0]; + } + if (point[0] > maxX) { + maxX = point[0]; + } + if (point[1] < minY) { + minY = point[1]; + } + if (point[1] > maxY) { + maxY = point[1]; + } + } + final DecimalFormatSymbols dfs = new DecimalFormatSymbols( + Locale.ENGLISH); + DecimalFormat twoPlaces = null; + + final String twoPlacesS = "0.00"; + twoPlaces = new DecimalFormat(twoPlacesS, dfs); + + final int pointsCount = points.length; + + final int txtHight = 14; + final int txtHight2 = 22; + + // min elevation of the grid, 200m below the min elevation of the + // profile + final int b = ((int) minY - 99) / 100 * 100; + final double baseElev = b - 100; + + // max elevation of the grid, 200m above the max elevation of the + // profile + final int a = ((int) maxY + 99) / 100 * 100; + final double topElev = a + 200; + + final int sepSpacing = 10 * txtHight; + final String layNameProf = "PROFILE"; + final String baseSectionLayer = "BASE"; + final String partialValuesLayer = "PARTIAL_VALUES"; + final String gridLayer = "GRID"; + final String layNameText = "GRID_TEXT"; + + // Main points coords + final double sep1Y = baseElev - txtHight * 2; + final double sep2Y = sep1Y - sepSpacing; + final double sep3Y = topElev; + final double leg5Y = sep3Y + sepSpacing; + final double legX = minX - (txtHight * 30); + + final DxfExport dxfExp = new DxfExport(); + + // Write header + // -------------------------------------------------------- + dxfExp.writeHeader(legX, sep3Y, maxX, maxY); + + // Write tables + dxfExp.writeStartSec(); + dxfExp.writeTablesStart(); + + dxfExp.writeTableStart(); + dxfExp.writeVPort((maxX + legX) / 2, (maxY + sep3Y) / 2, 0, 0, 1, 1); + dxfExp.writeTableEnd(); + + dxfExp.writeTableStart(); + dxfExp.writeAppId(); + dxfExp.writeTableEnd(); + + dxfExp.writeTableStart(); + dxfExp.writeLayersStart(); + dxfExp.writeLayer(layNameProf, 5); + dxfExp.writeLayer(baseSectionLayer, 0); + dxfExp.writeLayer(partialValuesLayer, 8); + dxfExp.writeLayer(gridLayer, 9); + dxfExp.writeLayer(layNameText, 7); + dxfExp.writeTableEnd(); + + dxfExp.writeEndSec(); + + // Write section + dxfExp.writeStartSec(); + dxfExp.writeEntStart(); + dxfExp.writePolyline(layNameProf, points); + + // Write legend + + final Task selectedTask = workbenchContext.getTask(); + String unitsDistLabel = ""; + + if (selectedTask.getProperties().containsKey( + new QName(Task.PROJECT_UNIT_KEY))) { + unitsDistLabel = " [" + + selectedTask.getProperty( + new QName(Task.PROJECT_UNIT_KEY)).toString() + + "]"; + } else { + unitsDistLabel = ""; + } + + // Text of X axe + dxfExp.writeText(layNameText, 0, 0, 0, (maxX - minX) / 2, sep2Y, 0, + txtHight2, 0, 0, 2, WIDTH + unitsDistLabel); + + dxfExp.writeText(partialValuesLayer, 0, 0, 0, (maxX - minX) / 2, + leg5Y, 0, txtHight2, 0, 0, 2, HEIGHT + unitsDistLabel); + // Text of Y axe + dxfExp.writeText(layNameText, 0, 0, 0, minX - 200, + (topElev + baseElev) / 2, 0, txtHight2, 90, 0, 2, HEIGHT + + unitsDistLabel); + dxfExp.writeText(layNameText, 0, 0, 0, maxX + 200, + (topElev + baseElev) / 2, 0, txtHight2, 270, 0, 2, HEIGHT + + unitsDistLabel); + + // Write interpoints labels and ticks + double p1x = 0; + double p1y = 0; + double p2x = 0; + double p2y = 0; + double alPt1x = 0; + double alPt1y = 0; + double alPt2y = 0; + String labelText = null; + + int interPointsCount = 0; + // Count interpoints + double[] interStepD = null; + + interStepD = new double[1]; + // Define 100 meters for length/height steps + interStepD[0] = 100D; + interPointsCount = (int) ((maxX - minX) / interStepD[0]) + 2; + + // Prepare x positions + final double[] interPointsDists = new double[interPointsCount]; + final double[] interPointsElev = new double[interPointsCount]; + for (int ip = 0; ip < interPointsCount; ip++) { + + if (ip < interPointsCount - 1) { + interPointsDists[ip] = interStepD[0] * ip; + } else { + interPointsDists[ip] = maxX; + } + + } + + // Prepare points IDs + final int[] interPointsIds = new int[interPointsCount]; + int ipId = 0; + for (int p = 1; p < pointsCount; p++) { + if (points[p][0] >= interPointsDists[ipId]) { + if (Math.abs(points[p][0] - interPointsDists[ipId]) <= Math + .abs(interPointsDists[ipId] - points[p - 1][0])) { + interPointsIds[ipId] = p; + } else { + interPointsIds[ipId] = p - 1; + } + ipId++; + } + } + + // Boh + if (interPointsIds[interPointsCount - 1] == 0) { + interPointsIds[interPointsCount - 1] = pointsCount - 1; + } + + // Prepare y positions + ipId = 0; + for (int p = 1; p < pointsCount; p++) { + if (points[p][0] >= interPointsDists[ipId]) { + if (Math.abs(points[p][0] - interPointsDists[ipId]) <= Math + .abs(interPointsDists[ipId] - points[p - 1][0])) { + interPointsIds[ipId] = p; + } else { + interPointsIds[ipId] = p - 1; + } + + interPointsElev[ipId] = (interPointsDists[ipId] - points[p - 1][0]) + / (points[p][0] - points[p - 1][0]) + * (points[p][1] - points[p - 1][1]) + + points[p - 1][1]; + ipId++; + } + } + + for (int ip = 0; ip < interPointsCount; ip++) { // OKKIO + + if (baseElev + interPointsDists[ip] < topElev + || baseElev + interPointsDists[ip] == topElev) { + + // Grid - orizontal lines every 100 m + p1x = maxX; + p1y = interPointsDists[ip] + baseElev; + p2x = minX; + p2y = interPointsDists[ip] + baseElev; + dxfExp.writeLineType(gridLayer, "DOTTINY", p1x, p1y, p2x, + p2y); + + // Heights (Y) - text on right and left part of the profile + // every 100m + alPt1x = minX - 100;// sep1Y + txtHight; + final double alPt1ax = maxX + txtHight;// + alPt1y = interPointsDists[ip] + baseElev; + labelText = twoPlaces.format(interPointsDists[ip] + + baseElev); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0, + txtHight, 0, 0, 2, labelText); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1ax, alPt1y, 0, + txtHight, 0, 0, 2, labelText); + + // Heights (Y) - small tracks on right and left part of the + // profile + alPt1x = minX; + alPt1y = interPointsDists[ip] + baseElev; + final double alPt2x = minX - (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, alPt1x, alPt1y, alPt2x, + alPt1y); + final double alPt2x2 = maxX + (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, maxX, alPt1y, alPt2x2, + alPt1y); + + } + } + + for (int ip = 0; ip < interPointsCount; ip++) { // OKKIO + + // Grid - vertical lines every 100 m + p1x = interPointsDists[ip]; + p1y = topElev;// interPointsElev[ip]; + p2x = interPointsDists[ip]; + p2y = baseElev;// minY; + dxfExp.writeLineType(gridLayer, "DOTTINY", p1x, p1y, p2x, p2y); + + // Widths (X axe) - texts below the X line, every 100 m + alPt1x = interPointsDists[ip]; + alPt1y = sep1Y - 4 * txtHight; + labelText = twoPlaces.format(interPointsDists[ip]); + dxfExp.writeText(layNameText, 0, 0, 0, alPt1x, alPt1y, 0, + txtHight, 90, 0, 2, labelText); + + // Widths (X axe) - small tracks above the texts + alPt1x = interPointsDists[ip]; + alPt1y = baseElev; + alPt2y = baseElev - (txtHight / 2); + dxfExp.writeLine(baseSectionLayer, alPt1x, alPt1y, alPt1x, + alPt2y); + + // Partial heights - texts per every 100 width + alPt1x = interPointsDists[ip]; + alPt1y = sep3Y + txtHight; + labelText = twoPlaces.format(points[interPointsIds[ip]][1]); + dxfExp.writeText(partialValuesLayer, 0, 0, 0, alPt1x, alPt1y, + 0, txtHight, 90, 0, 2, labelText); + + // Partial heights - small tracks + alPt1y = sep3Y; + alPt2y = sep3Y + (txtHight / 2); + dxfExp.writeLine(partialValuesLayer, alPt1x, alPt1y, alPt1x, + alPt2y); + + } + + // Width - X line of the profile + dxfExp.writeLine(baseSectionLayer, minX, baseElev, maxX, baseElev); + // Height - Y lines of the profile + dxfExp.writeLine(baseSectionLayer, minX, baseElev, minX, topElev); + dxfExp.writeLine(baseSectionLayer, maxX, baseElev, maxX, topElev); + // Partial heights width line + dxfExp.writeLine(partialValuesLayer, minX, sep3Y, maxX, sep3Y); + // Finalize DXF + dxfExp.writeEnding(); + final int ret = dxfExp.exportDxf(fileName); + if (ret == 0) { + return; + } else { + return; + } + } catch (final Exception ex) { + workbenchContext.getWorkbench().getFrame() + .warnUser("Errore durante l'esportazione: "); + return; + } + } + + public static WorkbenchContext workbenchContext = JUMPWorkbench + .getInstance().getContext(); + } _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel