// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.plugins.reports.extension; import graphtea.extensions.reports.boundcheck.forall.IterGraphs; import graphtea.platform.core.BlackBoard; import graphtea.plugins.main.GraphData; import graphtea.ui.UIUtils; import graphtea.ui.components.gpropertyeditor.GCellRenderer; import graphtea.ui.components.utils.GFrameLocationProvider; import graphtea.ui.extension.AbstractExtensionAction; import javax.swing.*; import javax.swing.filechooser.FileFilter; import java.awt.*; import java.io.File; import java.io.FileWriter; /** * @author M. Ali Rostami - Conjecture check * @author Hooman Mohajeri Moghaddam - added save button, fixed recalculate button * @author azin azadi */ public class GraphReportExtensionAction extends AbstractExtensionAction { protected GraphReportExtension mr; public static IterGraphs ig=null; public GraphReportExtensionAction(BlackBoard bb, GraphReportExtension gg) { super(bb, gg); this.mr = gg; } public String getParentMenuName() { return "Reports"; } public Object performExtensionInCommandLine() { return mr.calculate(new GraphData(blackboard).getGraph()); } Component rendererComponent; Component ContentPane; JDialog jd; JFileChooser fileChooser; public void performExtension() { // if (testAndSetParameters(gr)) { new Thread() { Object result = new Object(); public void run() { if (ig!=null&&ig.activeConjCheck && !mr.getName().equals("Bound Check")) { result=ig.wrapper(mr); } else { result = mr.calculate(new GraphData(blackboard).getGraph()); } if (result == null) return; jd = new JDialog(UIUtils.getGFrame(blackboard)); jd.setVisible(true); jd.setTitle(mr.getName()); jd.setLayout(new BorderLayout(3, 3)); jd.add(new JLabel(mr.getDescription()), BorderLayout.NORTH); rendererComponent = GCellRenderer.getRendererFor(result); rendererComponent.setEnabled(true); jd.add(rendererComponent, BorderLayout.CENTER); JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); JButton recalc = new JButton("Recalculate"); panel.add(recalc, BorderLayout.SOUTH); recalc.addActionListener(actionEvent -> { Object result = mr.calculate(new GraphData(blackboard).getGraph()); jd.remove(rendererComponent); rendererComponent = GCellRenderer.getRendererFor(result); rendererComponent.setEnabled(true); jd.add(rendererComponent, BorderLayout.CENTER); jd.pack(); jd.repaint(); }); fileChooser = new JFileChooser(); JButton save = new JButton("Save"); panel.add(save); save.addActionListener(actionEvent -> { fileChooser.addChoosableFileFilter(new FileFilter() { @Override public String getDescription() { return "*.txt"; } @Override public boolean accept(File arg0) { if (arg0.isDirectory()) return true; else { String path = arg0.getAbsolutePath().toLowerCase(); if ((path.endsWith("txt") && (path.charAt(path.length() - 4)) == '.')) return true; } return false; } }); fileChooser.setDialogTitle("Choose a file"); fileChooser.showSaveDialog(jd); try { File curFile = fileChooser.getSelectedFile(); FileWriter fw = new FileWriter(curFile); JViewport viewp = ((JScrollPane) rendererComponent).getViewport(); if(viewp.getView() instanceof JTable) { JTable table = (JTable) viewp.getView(); for (int row = 0; row < table.getRowCount(); row++) { for (int col = 0; col < table.getColumnCount(); col++) { if (col != table.getColumnCount() - 1) { fw.write(table.getValueAt(row, col) + ","); } else { fw.write(table.getValueAt(row, col).toString()); } } fw.write("\n"); } fw.close(); } else { JList list = (JList) viewp.getView(); fw.write(list.toString()); fw.close(); } JOptionPane.showMessageDialog(jd, "Saved to file successfuly."); } catch (Exception e) { e.printStackTrace(); } }); jd.add(panel, BorderLayout.SOUTH); jd.setLocation(GFrameLocationProvider.getPopUpLocation()); jd.pack(); } }.start(); } }