package dods.clients.importwizard; import javax.swing.*; import java.awt.*; import java.awt.event.*; import gnu.regexp.*; public class MatlabFormatSelector extends DataFormatSelector implements ActionListener { private JPanel mainPanel; private DodsURL[] urls; private JList urlList; private JScrollPane urlScroller; private JPanel urlPanel; private ButtonGroup flattened; private JPanel flattenedPanel; private JRadioButton flattenedButton; private JRadioButton structureButton; private ButtonGroup namingOption; private JPanel namingPanel; private JRadioButton simpleButton; private JRadioButton regexpButton; private JTextField simpleField; private JTextField regexpField; private JTextField replaceField; public MatlabFormatSelector() { mainPanel = new JPanel(); urlList = new JList(); urlScroller = new JScrollPane(urlList); urlPanel = new JPanel(); namingOption = new ButtonGroup(); namingPanel = new JPanel(); simpleButton = new JRadioButton("Prefix: "); regexpButton = new JRadioButton("Regexp: "); simpleField = new JTextField(); regexpField = new JTextField(); replaceField = new JTextField(); flattened = new ButtonGroup(); flattenedPanel = new JPanel(); flattenedButton = new JRadioButton("Flattened"); structureButton = new JRadioButton("Structure"); // // Setup the Return Data Format Panel // flattened.add(flattenedButton); flattened.add(structureButton); flattenedPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Data Format")); flattenedPanel.setMaximumSize(new Dimension(300,70)); flattenedPanel.setAlignmentX(Component.CENTER_ALIGNMENT); flattenedPanel.add(flattenedButton); structureButton.setSelected(true); flattenedPanel.add(structureButton); // // Setup the Variable Names panel // namingOption.add(simpleButton); namingOption.add(regexpButton); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); namingPanel.setLayout(gridbag); namingPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Variable Naming Scheme")); namingPanel.setMaximumSize(new Dimension(32768,70)); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; c.gridy = 0; c.weightx = 0; simpleButton.addActionListener(this); simpleButton.setActionCommand("simpleName"); simpleButton.setSelected(true); gridbag.setConstraints(simpleButton,c); namingPanel.add(simpleButton); c.gridx = 1; c.gridy = 0; c.gridwidth = 3; c.weightx = 1; simpleField.setText("data"); gridbag.setConstraints(simpleField,c); namingPanel.add(simpleField); c.gridx = 0; c.gridy = 1; c.gridwidth = 1; c.weightx = 0; regexpButton.addActionListener(this); regexpButton.setActionCommand("regexpName"); gridbag.setConstraints(regexpButton,c); namingPanel.add(regexpButton); c.gridx = 1; c.gridy = 1; c.weightx = 0.5; regexpField.setEnabled(false); gridbag.setConstraints(regexpField,c); namingPanel.add(regexpField); c.gridx = 2; c.gridy = 1; c.weightx = 0; JLabel replaceLabel = new JLabel("Replace: "); gridbag.setConstraints(replaceLabel,c); namingPanel.add(replaceLabel); c.gridx = 3; c.gridy = 1; c.weightx = 0.5; replaceField.setEnabled(false); gridbag.setConstraints(replaceField,c); namingPanel.add(replaceField); setLayout(new BorderLayout()); //urlList.setListData(urls); urlPanel.setLayout(new BoxLayout(urlPanel, BoxLayout.Y_AXIS)); urlPanel.setPreferredSize(new Dimension(200,3)); urlPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "DODS URLs"), BorderFactory.createEmptyBorder(1,1,1,1))); urlPanel.add(urlScroller); // // Setup the main (CENTER) panel // mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); mainPanel.add(Box.createRigidArea(new Dimension(0,10))); mainPanel.add(flattenedPanel); mainPanel.add(Box.createRigidArea(new Dimension(0,20))); mainPanel.add(namingPanel); mainPanel.add(Box.createVerticalGlue()); add(urlPanel, BorderLayout.EAST); add(mainPanel, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("simpleName")) { simpleField.setEnabled(true); regexpField.setEnabled(false); } else if(e.getActionCommand().equals("regexpName")) { simpleField.setEnabled(false); regexpField.setEnabled(true); replaceField.setEnabled(true); String[] names = new String[urls.length]; try { RE regexp = new RE(regexpField.getText()); RE number = new RE("%n"); for(int i=0;i<urls.length;i++) { if(!replaceField.getText().equals("")) names[i] = regexp.substituteAll(urls[i].toString(), replaceField.getText()); else names[i] = regexp.getMatch(urls[i].toString()).toString(); names[i] = number.substituteAll(names[i],String.valueOf(i)); System.out.println(names[i]); } } catch(Exception excp) { excp.printStackTrace(); } } } public String[] getOptions() { String[] ret = new String[1]; if(structureButton.isSelected()) ret[0] = "-S"; else ret[0] = ""; return ret; } public String[] getNames() { String names[] = new String[urls.length]; if(simpleButton.isSelected()) { String base = simpleField.getText(); for(int i=0;i<urls.length;i++) { if(urls.length > 9 && i <= 9) names[i] = base + "0" + i; else names[i] = base + i; } } else { try { RE regexp = new RE(regexpField.getText()); RE number = new RE("%n"); for(int i=0;i<urls.length;i++) { if(!replaceField.getText().equals("")) names[i] = regexp.substituteAll(urls[i].toString(), replaceField.getText()); else names[i] = regexp.getMatch(urls[i].toString()).toString(); names[i] = number.substituteAll(names[i],String.valueOf(i)); } } catch(Exception excp) { excp.printStackTrace(); } } return names; } public DodsURL[] getURLs() { return urls; } public void setURLs(DodsURL[] newURLs) { urls = newURLs; urlList.setListData(urls); } }