001: package com.xoetrope.carousel.services.dialog;
002:
003: import java.util.Properties;
004: import java.util.StringTokenizer;
005:
006: import java.awt.BorderLayout;
007: import java.awt.Color;
008: import java.awt.Dimension;
009: import java.awt.GridLayout;
010: import java.awt.event.ActionEvent;
011: import java.awt.event.ActionListener;
012: import java.awt.event.ItemEvent;
013: import java.awt.event.ItemListener;
014: import java.awt.event.KeyEvent;
015: import java.awt.event.KeyListener;
016: import javax.swing.ButtonGroup;
017: import javax.swing.DefaultListModel;
018: import javax.swing.JButton;
019: import javax.swing.JCheckBox;
020: import javax.swing.JComboBox;
021: import javax.swing.JDialog;
022: import javax.swing.JLabel;
023: import javax.swing.JList;
024: import javax.swing.JPanel;
025: import javax.swing.JRadioButton;
026: import javax.swing.JTextField;
027: import javax.swing.border.LineBorder;
028: import javax.swing.border.TitledBorder;
029: import net.xoetrope.xui.XProjectManager;
030: import net.xoetrope.editor.project.XEditorProject;
031: import com.xoetrope.carousel.services.RouteManager;
032: import com.xoetrope.carousel.services.ModelManager;
033:
034: // import com.xoetrope.carousel.services.ProjectRouteManager;
035:
036: /**
037: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
038: * the GNU Public License (GPL), please see license.txt for more details. If
039: * you make commercial use of this software you must purchase a commercial
040: * license from Xoetrope.</p>
041: * <p> $Revision: 1.7 $</p>
042: */
043: public class XLibSaveConfig extends JDialog implements ItemListener,
044: ActionListener, KeyListener {
045: JCheckBox chkCreateSaveConfig;
046: JRadioButton chkSingleFile, chkCreateIndex;
047: JTextField txtFileName, txtSaveConfigFile;
048: JPanel pnlMain, pnlVisible, pnlSingleFile, pnlMultiFile,
049: pnlIndexControls;
050: JPanel pnlEdit;
051: JList lstIndex;
052: XEditorProject currentProject;
053: JButton btnAddIndex, btnRemoveIndex, btnOK, btnCancel;
054: JComboBox routesCombo;
055: DefaultListModel lstModel;
056: boolean isOK;
057: private RouteManager routeManager;
058:
059: private String filename;
060:
061: public XLibSaveConfig(XEditorProject proj) {
062: routeManager = (RouteManager) RouteManager
063: .setupRouteManager(XProjectManager.getCurrentProject());
064: setSize(400, 400);
065: setModal(true);
066: currentProject = proj;
067: createComponents();
068: filename = getModelManager().getSaveConfigFilename();
069: openSaveConfig();
070: }
071:
072: private ModelManager getModelManager() {
073: // RouteManager routeMgr = ( RouteManager ) currentProject.getObject( ProjectRouteManager.ROUTE_MGR_LOOKUP );
074: // return routeMgr.getModelMgr();
075: return null;
076: }
077:
078: private void openSaveConfig() {
079: Properties props = getModelManager().getSaveCfgProps();
080: txtSaveConfigFile.setText(getModelManager()
081: .getSaveConfigFilename());
082: if (props != null) {
083: chkCreateSaveConfig.setSelected(true);
084: txtSaveConfigFile.setEnabled(true);
085: pnlEdit.setVisible(chkCreateSaveConfig.isSelected());
086: if (props != null) {
087: if ((props.get("SingleFile") != null)
088: && props.get("SingleFile").toString()
089: .compareTo("true") == 0) {
090: chkSingleFile.setSelected(true);
091: } else
092: chkSingleFile.setSelected(false);
093: if (props.get("IndexFile").toString().compareTo("true") == 0)
094: chkCreateIndex.setSelected(true);
095: else
096: chkCreateIndex.setSelected(false);
097: if (props.get("Filename") != null)
098: txtFileName.setText(props.get("Filename")
099: .toString());
100: if (props.get("IndexKeys") != null) {
101: setPanelVisibility(pnlMultiFile);
102: String indexKeys = props.get("IndexKeys")
103: .toString();
104: loadIndexKeys(indexKeys);
105: pnlIndexControls.setVisible(chkCreateIndex
106: .isSelected());
107: }
108: if (props.get("Route") != null) {
109: routesCombo.setSelectedItem(props.get("Route"));
110: }
111: }
112: }
113: }
114:
115: private void loadIndexKeys(String keys) {
116: StringTokenizer token = new StringTokenizer(keys, ";");
117: while (token.hasMoreElements()) {
118: String temp = token.nextElement().toString();
119: this .lstModel.addElement(temp);
120: }
121: }
122:
123: private void createComponents() {
124: pnlMain = new JPanel(new BorderLayout());
125: getContentPane().add(pnlMain);
126:
127: addMainOption();
128: pnlEdit = new JPanel(new GridLayout(3, 1));
129: pnlEdit.setBorder(new LineBorder(Color.black));
130: pnlEdit.setVisible(false);
131: pnlMain.add(pnlEdit, BorderLayout.CENTER);
132:
133: addRadios();
134:
135: pnlVisible = new JPanel(new BorderLayout());
136: pnlEdit.add(pnlVisible, BorderLayout.CENTER);
137:
138: addPanels();
139: addOKCancel();
140: }
141:
142: private void addMainOption() {
143: JPanel mainOptionPanel = new JPanel(new GridLayout(2, 1));
144: chkCreateSaveConfig = new JCheckBox("Create a save config file");
145: chkCreateSaveConfig.addActionListener(this );
146: mainOptionPanel.add(chkCreateSaveConfig);
147:
148: txtSaveConfigFile = new JTextField();
149: txtSaveConfigFile.addKeyListener(this );
150: txtSaveConfigFile.setEnabled(false);
151: JPanel temp = new JPanel(new GridLayout(1, 2));
152: temp.add(new JLabel("Save config filename :"));
153: temp.add(txtSaveConfigFile);
154: mainOptionPanel.add(temp);
155: pnlMain.add(mainOptionPanel, BorderLayout.NORTH);
156: }
157:
158: private void addRadios() {
159: JPanel temp = new JPanel(new GridLayout(1, 2));
160: chkSingleFile = new JRadioButton("Save in a single file");
161: chkCreateIndex = new JRadioButton("Save in multiple files");
162: ButtonGroup group = new ButtonGroup();
163: group.add(chkSingleFile);
164: group.add(chkCreateIndex);
165: chkSingleFile.addActionListener(this );
166: chkCreateIndex.addActionListener(this );
167: temp.add(chkSingleFile);
168: temp.add(chkCreateIndex);
169: pnlEdit.add(temp);
170: temp.setPreferredSize(new Dimension(300, 100));
171: }
172:
173: private void addPanels() {
174: pnlSingleFile = new JPanel();
175: pnlSingleFile.setLayout(new GridLayout(1, 2));
176: txtFileName = new JTextField();
177: txtFileName.addKeyListener(this );
178: pnlSingleFile.add(new JLabel("Filename :"));
179: pnlSingleFile.add(txtFileName);
180:
181: pnlMultiFile = new JPanel(new BorderLayout());
182:
183: pnlVisible.add(pnlMultiFile, BorderLayout.CENTER);
184: pnlVisible.add(pnlSingleFile, BorderLayout.SOUTH);
185: pnlMultiFile.setVisible(false);
186: pnlSingleFile.setVisible(false);
187:
188: JPanel btnPanel = new JPanel(new GridLayout(1, 2));
189: btnAddIndex = new JButton("Add field");
190: btnRemoveIndex = new JButton("Remove field");
191: btnAddIndex.addActionListener(this );
192: btnRemoveIndex.addActionListener(this );
193: btnPanel.add(btnAddIndex);
194: btnPanel.add(btnRemoveIndex);
195:
196: lstModel = new DefaultListModel();
197: lstIndex = new JList(lstModel);
198: lstIndex.setBorder(new LineBorder(Color.black));
199: lstIndex.setPreferredSize(new Dimension(200, 50));
200: pnlIndexControls = new JPanel(new BorderLayout());
201:
202: pnlIndexControls.add(lstIndex, BorderLayout.NORTH);
203: pnlIndexControls.add(btnPanel, BorderLayout.CENTER);
204: pnlIndexControls.setBorder(new TitledBorder(new LineBorder(
205: Color.black), "Index details"));
206:
207: pnlMultiFile.add(pnlIndexControls, BorderLayout.CENTER);
208: }
209:
210: private void addOKCancel() {
211: JPanel routePnl = new JPanel(new GridLayout(1, 2));
212: JLabel lbl = new JLabel("Use route:");
213: routesCombo = new JComboBox();
214: routePnl.add(lbl);
215: routePnl.add(routesCombo);
216: addRoutes();
217:
218: JPanel btnsPnl = new JPanel(new GridLayout(1, 2));
219: btnOK = new JButton("OK");
220: btnCancel = new JButton("Cancel");
221: btnsPnl.add(btnOK);
222: btnsPnl.add(btnCancel);
223: btnOK.addActionListener(this );
224: btnCancel.addActionListener(this );
225:
226: JPanel temp = new JPanel(new GridLayout(2, 1));
227: temp.add(routePnl);
228: temp.add(btnsPnl);
229: pnlMain.add(temp, BorderLayout.SOUTH);
230: }
231:
232: private void addRoutes() {
233: /*Hashtable routes = routeManager.getRoutes();
234: Enumeration e = routes.keys();
235:
236: DefaultComboBoxModel model = new DefaultComboBoxModel();
237: while ( e.hasMoreElements() ) {
238: model.addElement( e.nextElement() );
239: }
240: routesCombo.setModel( model );
241: */
242: }
243:
244: private String getSaveConfigFileName() {
245: filename = getModelManager().getSaveConfigFilename();
246: if (filename == null || filename.length() == 0) {
247: filename = "XLibSaveConfig.properties";
248: }
249: return filename;
250: }
251:
252: private void setPanelVisibility(JPanel pnl) {
253: pnlSingleFile.setVisible(false);
254: pnlMultiFile.setVisible(false);
255: pnl.setVisible(true);
256: }
257:
258: public void itemStateChanged(ItemEvent evt) {
259: }
260:
261: public void actionPerformed(ActionEvent evt) {
262: Properties props = getModelManager().getSaveCfgProps();
263: if (evt.getSource().equals(chkCreateSaveConfig)) {
264: txtSaveConfigFile.setEnabled(chkCreateSaveConfig
265: .isSelected());
266: pnlEdit.setVisible(chkCreateSaveConfig.isSelected());
267: } else if (evt.getSource().equals(chkSingleFile)) {
268: setPanelVisibility(chkSingleFile.isSelected() ? pnlSingleFile
269: : pnlMultiFile);
270: } else if (evt.getSource().equals(chkCreateIndex)) {
271: setPanelVisibility(chkSingleFile.isSelected() ? pnlSingleFile
272: : pnlMultiFile);
273: } else if (evt.getSource().equals(btnAddIndex)) {
274: XLibDataChooser dlg = new XLibDataChooser();
275: String node = dlg.showDlg("");
276: if (node != null) {
277: lstModel.addElement(node);
278: }
279: } else if (evt.getSource().equals(btnRemoveIndex)) {
280: lstModel.remove(lstIndex.getSelectedIndex());
281: } else if (evt.getSource().equals(btnOK)) {
282: isOK = true;
283: setProperties();
284: setVisible(false);
285: } else if (evt.getSource().equals(btnCancel)) {
286: isOK = false;
287: setVisible(false);
288: }
289: JButton btnAddIndex, btnRemoveIndex;
290: }
291:
292: public String generateIndexKey() {
293: StringBuffer sb = new StringBuffer();
294: for (int i = 0; i < lstModel.size(); i++) {
295: sb.append(lstModel.get(i));
296: sb.append(";");
297: }
298: if (sb.length() > 0)
299: return sb.toString().substring(0,
300: sb.toString().length() - 1);
301: else
302: return "";
303: }
304:
305: public void keyReleased(KeyEvent evt) {
306: }
307:
308: public void keyPressed(KeyEvent evt) {
309: }
310:
311: public void keyTyped(KeyEvent evt) {
312: }
313:
314: public void setSaveConfigFile() {
315: currentProject.setStartupProperty("SaveConfigFile",
316: txtSaveConfigFile.getText());
317: }
318:
319: private void setProperties() {
320: Properties props = getModelManager().getSaveCfgProps();
321: props.put("SingleFile", chkSingleFile.isSelected() ? "true"
322: : "false");
323: props.put("IndexFile", chkCreateIndex.isSelected() ? "true"
324: : "false");
325: props.put("IndexKeys", generateIndexKey());
326: props.put("Route", routesCombo.getSelectedItem());
327: }
328:
329: public boolean showDlg() {
330: return isOK;
331: }
332: }
|