package hep.aida.ref.plotter.style.registry;
import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import org.freehep.application.RecentItemTextField;
import org.freehep.application.studio.Studio;
public class CreateStyleStorePanel extends JPanel {
private Component parent;
private String title;
private JPanel thisPanel;
private JPanel dbPanel;
private JTextField storeName = new JTextField(15);
private RecentItemTextField inputFile;
private JFileChooser inputChooser = new JFileChooser();
private JButton browse;
private RecentItemTextField inputDB;
private JTextField inputUser = new JTextField(20);
private JPasswordField inputPass = new JPasswordField(20);
private JTextField inputTable = new JTextField(20);
private JTextField inputColumn = new JTextField(20);
private JRadioButton createNew;
private JRadioButton createFromFile;
private JRadioButton createFromDB;
public CreateStyleStorePanel() {
this(null, "Create Style Store");
}
public CreateStyleStorePanel(Component parent) {
this(parent, "Create Style Store");
}
public CreateStyleStorePanel(Component parent, String title) {
this(parent, title, new String[] { XMLStyleStore.TYPE } );
}
public CreateStyleStorePanel(String title, String[] types) {
this(null, title, types);
}
public CreateStyleStorePanel(Component parent, String title, String[] types) {
super();
this.parent = parent;
this.title = title;
thisPanel = this;
initComponents();
}
private void initComponents() {
inputFile = new RecentItemTextField("hep.aida.ref.plotter.style.registry.CreateStyleStorePanel.InputFile", 15, false);
inputFile.setMinWidth(30);
if (inputFile.getItemCount() <= 0) {
inputFile.setText("ftp://ftp.slac.stanford.edu/software/jas/JAS3/XMLStyleStore.xml");
inputFile.saveState();
}
inputDB = new RecentItemTextField("hep.aida.ref.plotter.style.registry.CreateStyleStorePanel.InputDB", 15, false);
inputDB.setMinWidth(30);
if (inputDB.getItemCount() <= 0) {
inputDB.setText("jdbc:oracle:thin:@glast-oracle01.slac.stanford.edu:1521:GLASTP");
inputDB.saveState();
}
browse = new JButton("Browse...");
browse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
String fileName = inputFile.getText();
int returnVal = inputChooser.showOpenDialog(thisPanel);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = inputChooser.getSelectedFile();
fileName = file.getAbsolutePath();
inputFile.setText(fileName);
} else { }
}
});
createNew = new JRadioButton("Create New StyleStore. Name:");
createNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
if (ev.getSource() instanceof JRadioButton) {
boolean selected = ((JRadioButton) ev.getSource()).isSelected();
storeName.setEditable(selected);
if (selected) {
inputDB.setEnabled(!selected);
inputFile.setEnabled(!selected);
browse.setEnabled(!selected);
}
}
}
});
createFromFile = new JRadioButton("Read StyleStore from File ");
createFromFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
if (ev.getSource() instanceof JRadioButton) {
boolean selected = ((JRadioButton) ev.getSource()).isSelected();
inputFile.setEnabled(selected);
browse.setEnabled(selected);
if (selected) {
storeName.setEditable(!selected);
inputDB.setEnabled(!selected);
}
}
}
});
createFromDB = new JRadioButton("Read StyleStore from DB ");
createFromDB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
if (ev.getSource() instanceof JRadioButton) {
boolean selected = ((JRadioButton) ev.getSource()).isSelected();
inputDB.setEnabled(selected);
if (selected) {
inputFile.setEnabled(!selected);
browse.setEnabled(!selected);
storeName.setEditable(!selected);
}
}
}
});
ButtonGroup rbg = new ButtonGroup();
rbg.add(createNew);
rbg.add(createFromFile);
rbg.add(createFromDB);
createNew.setSelected(true);
inputFile.setEnabled(false);
inputDB.setEnabled(false);
browse.setEnabled(false);
storeName.setEditable(true);
//this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setBorder(new TitledBorder(new EtchedBorder(), title));
java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
gbc.anchor = java.awt.GridBagConstraints.WEST;
gbc.insets = new java.awt.Insets(2, 2, 2, 2);
this.setLayout(new java.awt.GridBagLayout());
gbc.gridy=0; gbc.gridx=0;
this.add(createNew, gbc);
gbc.gridx=1;
this.add(storeName, gbc);
gbc.gridy=1; gbc.gridx=0;
this.add(createFromFile, gbc);
gbc.gridx=1;
this.add(inputFile, gbc);
gbc.gridx=2;
this.add(browse, gbc);
gbc.gridy=2; gbc.gridx=0;
this.add(createFromDB, gbc);
gbc.gridx=1;
this.add(inputDB, gbc);
// Create DB panel with username and password
inputUser.setText("GLASTGEN");
//inputPass.setText("");
inputTable.setText("STYLES");
inputColumn.setText("STYLE");
dbPanel = new JPanel();
dbPanel.setLayout(new java.awt.GridBagLayout());
gbc.gridy=0; gbc.gridx=0;
dbPanel.add(new JLabel("User Name: "), gbc);
gbc.gridx=1;
dbPanel.add(inputUser, gbc);
gbc.gridy=1; gbc.gridx=0;
dbPanel.add(new JLabel("Password: "), gbc);
gbc.gridx=1;
dbPanel.add(inputPass, gbc);
gbc.gridy=2; gbc.gridx=0;
dbPanel.add(new JLabel("Table: "), gbc);
gbc.gridx=1;
dbPanel.add(inputTable, gbc);
gbc.gridy=3; gbc.gridx=0;
dbPanel.add(new JLabel("Column: "), gbc);
gbc.gridx=1;
dbPanel.add(inputColumn, gbc);
}
IStyleStore createStoreAction() {
String sn = storeName.getText();
if (sn == null || sn.trim().equals(""))
throw new IllegalArgumentException("Store Name can not be Empty, please correct");
IStyleStore store = new XMLStyleStore(storeName.getText(), XMLStyleStore.TYPE, false);
return store;
}
IStyleStore readStoreAction() throws IOException, org.jdom.JDOMException {
IStyleStore store = null;
File file = null;
String fileName = inputFile.getText();
store = StyleStoreXMLReader.restoreFromFile(fileName);
return store;
}
IStyleStore dbStoreAction() throws Exception {
IStyleStore store = null;
String dbTitle = "DB Connection";
String fileName = inputDB.getText();
int reply = JOptionPane.showOptionDialog(this, dbPanel, dbTitle, JOptionPane.YES_NO_OPTION, JOptionPane.DEFAULT_OPTION, null, new String[] {"Ok", "Cancel"}, "Cancel");
if (reply == JOptionPane.YES_OPTION) {
String user = inputUser.getText();
String pass = inputPass.getText();
String table = inputTable.getText();
String col = inputColumn.getText();
store = StyleStoreXMLReader.restoreFromDB(fileName, user, pass, table, col);
}
return store;
}
public IStyleStore createStore() throws IOException, org.jdom.JDOMException {
IStyleStore store = null;
Component comp = parent;
if (comp == null) comp = (Component) SwingUtilities.getAncestorOfClass(Frame.class, this);
boolean wrongInput = true;
while (wrongInput) {
int reply = JOptionPane.showOptionDialog(comp, this, title, JOptionPane.YES_NO_OPTION, JOptionPane.DEFAULT_OPTION, null, new String[] {"Ok", "Cancel"}, "Cancel");
try {
if (reply == JOptionPane.YES_OPTION) {
String fileName = inputFile.getText();
if (createNew.isSelected()) store = createStoreAction();
else if (createFromFile.isSelected()) {
store = readStoreAction();
inputFile.saveState();
} else if (createFromDB.isSelected()) {
store = dbStoreAction();
inputDB.saveState();
}
}
wrongInput = false;
} catch (Exception e) {
String message = "Error: "+e.getMessage();
if (parent != null && parent instanceof Studio) ((Studio) parent).error(this, message, e);
e.printStackTrace();
}
}
return store;
}
}