/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ /* * * MapChooser.java * * Author: dhelle01 * * Created on January 4, 2007, 5:31 PM * */ package tufts.vue; //import junit.extensions.ActiveTestSuite; import tufts.vue.action.ActionUtil; import tufts.vue.gui.VueFileChooser; import tufts.vue.gui.VueLabel; import edu.tufts.vue.compare.ConnectivityMatrix; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class MapChooser extends JDialog implements ActionListener{ public static final int CMPUB_WIDTH = 500; public static final int CMPUB_HEIGHT = 350; public static final int CMPUB_X_LOCATION = 300; public static final int CMPUB_Y_LOCATION = 300; public static final String generateMessage = VueResources.getString("dialog.connanalysis"); public static final String browseMessage = VueResources.getString("dialog.browsmap"); public static final String FILE_URL = "file://"; private JPanel locationPanel = null; private JButton cancelButton = null; private JButton generateButton = null; private JPanel buttonPanel = null; private JComboBox choice = null; private JLabel lineLabel = null; private JPanel browsePanel = null; private JLabel browseLabel = null; private JPanel innerBrowsePanel = null; private JTextField file = null; private JButton browseButton = null; private File selectedFile = null; private File currentMapDir = null; private LWMap selectedMap = null; public MapChooser(Frame owner,String title) { super(owner,title); setLocation(CMPUB_X_LOCATION,CMPUB_Y_LOCATION); setModal(true); setSize(CMPUB_WIDTH,CMPUB_HEIGHT); cancelButton = new JButton(VueResources.getString("dialog.connanalysis.cancel")); generateButton = new JButton(VueResources.getString("dialog.connanalysis.generate")); browseButton = new JButton(VueResources.getString("dialog.connanalysis.browse")); cancelButton.addActionListener(this); generateButton.addActionListener(this); browseButton.addActionListener(this); setUpLocationPanel(); getContentPane().setLayout(new FlowLayout()); getContentPane().add(locationPanel); choice.addActionListener(this); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { setSelectedMap(null); } }); setSelectedMap(VUE.getActiveMap()); locationPanel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); getRootPane().setDefaultButton(generateButton); pack(); setResizable(false); setVisible(true); } public void setUpLocationPanel() { locationPanel = new JPanel(); GridBagLayout gridBag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); locationPanel.setLayout(gridBag); VueLabel info = new VueLabel(); info.setIcon(VueResources.getIcon("helpIcon.raw")); info.setToolTipText(VueResources.getString("ConnectivityMatrix.helpText")); JLabel chooseLabel = new JLabel(generateMessage,JLabel.RIGHT); browseLabel = new JLabel(browseMessage,JLabel.CENTER); String[] choices = {VueResources.getString("dialog.connanalysis.activemap"),VueResources.getString("dialog.connanalysis.mapinfolder")}; choice = new JComboBox(choices); file = new JTextField(2); PolygonIcon lineIcon = new PolygonIcon(new Color(153,153,153)); lineIcon.setIconWidth(CMPUB_WIDTH-40); lineIcon.setIconHeight(1); browsePanel = new JPanel(); //browsePanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); browsePanel.setLayout(new BorderLayout()); innerBrowsePanel = new JPanel(); lineLabel = new JLabel(lineIcon); buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); buttonPanel.add(cancelButton); buttonPanel.add(generateButton); // innerBrowsePanel gets added and removed in action for choice // but do layout here so as to not have to redo the layout // each time GridBagLayout innerGridBag = new GridBagLayout(); GridBagConstraints c2 = new GridBagConstraints(); innerBrowsePanel.setLayout(innerGridBag); c2.weightx= 0.0; c2.insets = new Insets(0,0,0,10); c2.fill = GridBagConstraints.HORIZONTAL; innerGridBag.setConstraints(browseLabel,c2); innerBrowsePanel.add(browseLabel); c2.weightx = 1.0; innerGridBag.setConstraints(file,c2); innerBrowsePanel.add(file); c2.weightx = 0.0; innerGridBag.setConstraints(browseButton,c2); innerBrowsePanel.add(browseButton); c.anchor = GridBagConstraints.EAST; c.gridwidth = GridBagConstraints.REMAINDER; c.insets = new Insets(0,0,0,10); gridBag.setConstraints(info,c); locationPanel.add(info); c.insets = new Insets(0,0,15,10); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = GridBagConstraints.RELATIVE; gridBag.setConstraints(chooseLabel,c); locationPanel.add(chooseLabel); c.gridwidth = GridBagConstraints.REMAINDER; gridBag.setConstraints(choice,c); locationPanel.add(choice); c.weightx = 1.0; //c.insets = new Insets(0,0,0,10); gridBag.setConstraints(browsePanel,c); locationPanel.add(browsePanel); c.insets = new Insets(0,0,0,10); gridBag.setConstraints(lineLabel,c); locationPanel.add(lineLabel); gridBag.setConstraints(buttonPanel,c); locationPanel.add(buttonPanel); } public LWMap getSelectedMap() { return selectedMap; } public File getSelectedFile() { return selectedFile; } public void setSelectedMap(LWMap map) { selectedMap = map; } //public void actionPerformed(ActionEvent e) { tufts.Util.printStackTrace("IS THIS BEING USED"); } public void actionPerformed(ActionEvent e) { if(e.getSource() == cancelButton) { setSelectedMap(null); this.dispose(); } if(e.getSource() == generateButton) { try { if(getSelectedMap()!=null) { LWMap m = getSelectedMap(); // connectivity matrix ConnectivityMatrix matrix = new ConnectivityMatrix(m); // todo: the matrix should just write directly to the PrintWriter String sMatrix = matrix.asString(); File temp = File.createTempFile("ConnectivityMatrixTemp",".txt"); String fileName = temp.getAbsolutePath(); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); writer.write(sMatrix); writer.close(); VueUtil.openURL(FILE_URL + fileName); // I believe that the code below was so broken, or is now // so bit-rotten, that it can never have any effect... //metadata /*PropertyMap props = m.getMetadata(); java.util.Collection c = props.keySet(); java.util.Iterator i = c.iterator(); System.out.println("about to output metadata: "); while(i.hasNext()) { Object key = i.next(); System.out.println("mc: metadata key: " + key); System.out.println("mc: value for key: " + props.get(key)); } System.out.println("done outputting metadata"); */ int nodeCount = m.getChildList().size(); java.util.Iterator<LWNode> i = m.getAllNodesIterator(); int jmax = 0; while(i.hasNext()) { LWComponent c = i.next(); tufts.vue.filter.NodeFilter filter = c.getNodeFilter(); int rows = filter.getRowCount(); if(rows>jmax) jmax = rows; } java.util.Iterator<LWNode> i2 = m.getAllNodesIterator(); String categories = ""; String[][] metadata = new String[nodeCount][jmax]; int ni = 0; while(i2.hasNext()) { LWComponent c = i2.next(); tufts.vue.filter.NodeFilter filter = c.getNodeFilter(); int rows = filter.getRowCount(); int cols = filter.getColumnCount(); for(int j=0;j<rows;j++) { for(int k=0;k<cols;k++) { //System.out.print(filter.getValueAt(j,k) +","); if(k==0) { categories += filter.getValueAt(j,k); if(j!=(rows-1)) { categories+=","; } } if(k==1) { metadata[ni][j] = filter.getValueAt(j,k).toString(); } } //System.out.println("\n"); } if(ni<nodeCount-1) { categories += "\n"; } ni++; } System.out.println("mc: categories " + categories ); if(categories.length() > 0) { File temp2 = File.createTempFile("MetadataCategoriesTemp",".txt"); String fileName2 = temp2.getAbsolutePath(); PrintWriter writer2 = new PrintWriter(new BufferedWriter(new FileWriter(fileName2))); writer2.write(categories); writer2.close(); //VueUtil.openURL(FILE_URL + fileName2); } String md = ""; for(int ji = 0;ji<jmax;ji++) { for(int ki=0;ki<nodeCount;ki++) { if(metadata[ki][ji]!=null) { md += metadata[ki][ji]; } if(ki!=(nodeCount-1)) md +=","; } if(ji < jmax-1) md += System.getProperty("line.separator"); } if(md.length() > 0) { File temp3 = File.createTempFile("MetadataValueTemp",".txt"); String fileName3 = temp3.getAbsolutePath(); PrintWriter writer3 = new PrintWriter(new BufferedWriter(new FileWriter(fileName3))); writer3.write(md); writer3.close(); //VueUtil.openURL(FILE_URL + fileName3); } } } catch(Exception ex) { ex.printStackTrace(); } this.dispose(); } if(e.getSource() == choice) { if(choice.getSelectedIndex()==0) { browsePanel.remove(innerBrowsePanel); generateButton.setEnabled(true); file.setText(""); setSelectedMap(VUE.getActiveMap()); pack(); } if(choice.getSelectedIndex()==1) { browsePanel.add(innerBrowsePanel); generateButton.setEnabled(false); getRootPane().setDefaultButton(browseButton); pack(); } } if(e.getSource() == browseButton) { try { file.setText(""); generateButton.setEnabled(false); VueFileChooser chooseFile = VueFileChooser.getVueFileChooser(); chooseFile.setFileFilter(new VueFileFilter(VueFileFilter.VUE_DESCRIPTION)); chooseFile.showDialog(this,VueResources.getString("dialog.select.title")); selectedFile = chooseFile.getSelectedFile(); if(selectedFile!=null) { setSelectedMap(ActionUtil.unmarshallMap(selectedFile)); file.setText(selectedFile.getName()); getRootPane().setDefaultButton(generateButton); generateButton.setEnabled(true); } } catch(Exception ex) { ex.printStackTrace(); } } } }