package org.buzztroll.mud; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import java.lang.*; import java.awt.*; import java.net.*; import java.io.*; import java.util.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import com.ibm.wsdl.util.xml.DOM2Writer; public class ConfigFrame extends JDialog implements ActionListener { protected HostSetupPanel hostSetupPanel; protected ActionPanel actionPanel; public NameSetupPanel namePanel; protected PreferencesPanel preferencesPanel; public JButton saveButton; public JButton cancelButton; public JTextField hostnameText; public JTextField portText; public JTextField contactName; protected JTabbedPane tabs; protected String fileName = null; protected boolean result = false; protected Vector transformVector; public ConfigFrame( MudFrame owner) throws Exception { super(owner, "Setup new Connection", true); init(owner); } public ConfigFrame( MudFrame owner, String fname) throws Exception { super(owner, "Setup " + fname, true); fileName = new String(fname); init(owner); Document doc = readFile(fname); hostSetupPanel.parse(doc); namePanel.parse(doc); actionPanel.parse(doc); preferencesPanel.parse(doc); } public void init( MudFrame owner) { JPanel mainP = new JPanel(); JPanel buttonP = new JPanel(); this.setSize(450, 300); transformVector = new Vector(10, 10); namePanel = new NameSetupPanel(); hostSetupPanel = new HostSetupPanel(); actionPanel = new ActionPanel(owner); preferencesPanel = new PreferencesPanel(); saveButton = new JButton("Save"); cancelButton = new JButton("Cancel"); saveButton.addActionListener(this); cancelButton.addActionListener(this); buttonP.add(saveButton); buttonP.add(cancelButton); tabs = new JTabbedPane(); tabs.add("Host", hostSetupPanel); addTransformPanel(namePanel); addTransformPanel(actionPanel); tabs.add("Preferences", preferencesPanel); mainP.setLayout(new BorderLayout()); mainP.add("Center", tabs); mainP.add("South", buttonP); this.getContentPane().add(mainP); } public String getContactName() { return this.hostSetupPanel.getContactName(); } public String getUsername() { return this.hostSetupPanel.getUsername(); } public String getPassword() { return this.hostSetupPanel.getPassword(); } public String getHostname() { return this.hostSetupPanel.getHostname(); } public int getPort() { return this.hostSetupPanel.getPort(); } public String getUrlViewerCmd() { return this.preferencesPanel.getUrlViewerCmd(); } public Color getBackgroundColor() { return this.preferencesPanel.getBackgroundColor(); } public DisplayMessage transform( String msg) { DisplayMessage dm; int ctr; dm = new DisplayMessage(msg, Color.lightGray, null); for(ctr = 0; ctr < transformVector.size(); ctr++) { TransformPanel tp = (TransformPanel) transformVector.elementAt(ctr); dm = tp.transform(dm); } return dm; } public void writeFile( String fname) throws Exception { DocumentBuilderFactory builderFactory; DocumentBuilder factory; FileWriter fw; builderFactory = DocumentBuilderFactory.newInstance(); builderFactory.setNamespaceAware(false); factory = builderFactory.newDocumentBuilder(); Document doc = factory.newDocument(); Element root = doc.createElement("mud"); root.appendChild(namePanel.createDoc(doc)); root.appendChild(hostSetupPanel.createDoc(doc)); root.appendChild(actionPanel.createDoc(doc)); root.appendChild(preferencesPanel.createDoc(doc)); doc.appendChild(root); String txt = DOM2Writer.nodeToString(doc); fw = new FileWriter(fname); fw.write(txt); fw.close(); } public void pn(Node n) { if(n == null) { return; } String tempS = DOM2Writer.nodeToString(n); pn(n.getFirstChild()); pn(n.getNextSibling()); } public Document readFile( String fname) throws Exception { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); builderFactory.setNamespaceAware(false); DocumentBuilder factory = builderFactory.newDocumentBuilder(); Document doc = factory.parse(fname); return doc; } protected void clear() { for(int ctr = 0; ctr < transformVector.size(); ctr++) { TransformPanel tp = (TransformPanel) transformVector.elementAt(ctr); tp.clear(); } } public void actionPerformed( ActionEvent e) { try { if(fileName == null) { String fname = new String( System.getProperty("user.home") + System.getProperty("file.separator") + ".btmudrc" + System.getProperty("file.separator") + getContactName() + ".xml"); fileName = fname; } if(e.getSource() == saveButton) { writeFile(fileName); clear(); Document doc = readFile(fileName); hostSetupPanel.parse(doc); namePanel.parse(doc); actionPanel.parse(doc); preferencesPanel.parse(doc); result = true; } this.hide(); } catch(Exception exp) { System.err.println(exp); exp.printStackTrace(); } } public boolean getResult() { return this.result; } public void addTransformPanel( TransformPanel tp) { transformVector.add(tp); tabs.addTab(tp.getName(), tp); } }