001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.client.gui.explorer;
019:
020: import java.awt.event.ActionEvent;
021: import java.util.logging.Logger;
022:
023: import javax.swing.AbstractAction;
024: import javax.swing.Action;
025: import javax.swing.JButton;
026: import javax.swing.JDialog;
027: import javax.swing.JLabel;
028: import javax.swing.JPanel;
029: import javax.swing.JScrollPane;
030: import javax.swing.JTextField;
031: import javax.swing.JTree;
032: import javax.swing.event.TreeSelectionEvent;
033: import javax.swing.event.TreeSelectionListener;
034: import javax.swing.tree.DefaultMutableTreeNode;
035:
036: import com.jgoodies.forms.extras.SimpleFormBuilder;
037:
038: import de.finix.contelligent.client.base.ComponentFactory;
039: import de.finix.contelligent.client.base.ComponentNotFoundException;
040: import de.finix.contelligent.client.i18n.Resources;
041: import de.finix.contelligent.client.util.bookmark.Bookmark;
042: import de.finix.contelligent.client.util.bookmark.BookmarkFolder;
043: import de.finix.contelligent.client.util.bookmark.BookmarkManager;
044: import de.finix.contelligent.client.util.bookmark.BookmarkUtil;
045:
046: public class CreateBookmarkDialog extends JDialog {
047:
048: static Logger log = Logger.getLogger(CreateBookmarkDialog.class
049: .getName());
050:
051: private String componentPath = null;
052:
053: private JPanel panel = null;
054:
055: private JLabel nameLabel = null;
056:
057: private JTextField nameTextField = null;
058:
059: private JLabel folderLabel = null;
060:
061: private JTextField folderTextField = null;
062:
063: private JScrollPane folderTreeScrollPane = null;
064:
065: private JTree folderTreeJTree = null;
066:
067: private JPanel buttonPanel = null;
068:
069: private JButton createFolderButton = null;
070:
071: private JButton confirmButton = null;
072:
073: private JButton closeButton = null;
074:
075: /**
076: * This is the default constructor
077: */
078: public CreateBookmarkDialog(String componentPath) {
079: super ();
080:
081: this .componentPath = componentPath;
082:
083: initialize();
084: }
085:
086: /**
087: * This method initializes this
088: *
089: * @return void
090: */
091: private void initialize() {
092:
093: panel = new JPanel();
094:
095: // init layoutManager
096: SimpleFormBuilder builder = new SimpleFormBuilder(
097: "related,labelColumn=pref,related,fieldColumn=pref:grow,related,related",
098: "related,nameRow=pref,related,folderRow=pref,related,folderTreeRow=pref:grow,related,related,buttonRow=pref,related");
099: // Spalten und Zeilen
100:
101: builder.add(getNameLabel(), "labelColumn,nameRow");
102: builder.add(getNameTextField(), "fieldColumn,nameRow,2,1");
103:
104: builder.add(getFolderLabel(), "labelColumn,folderRow");
105: builder.add(getFolderTextField(), "fieldColumn,folderRow,2,1");
106:
107: builder.add(getBookmarkListScrollPane(),
108: "labelColumn,folderTreeRow,4,2");
109:
110: builder.add(getButtonPanel(), "fieldColumn,buttonRow,2,1");
111:
112: panel = builder.getPanel();
113: panel.setOpaque(false);
114:
115: setContentPane(panel);
116: setTitle(Resources.getLocalStringForPackage(
117: "bookmark_name_frame_title", "languages.language"));
118:
119: getRootPane().setDefaultButton(confirmButton);
120:
121: setLocationByPlatform(true);
122: setSize(500, 315);
123: setResizable(true);
124:
125: setModal(true);
126: }
127:
128: /**
129: * @return the nameLabel
130: */
131: public JLabel getNameLabel() {
132: if (nameLabel == null) {
133: nameLabel = new JLabel();
134: nameLabel.setText(Resources.getLocalStringForPackage(
135: "bookmark_name_frame_name_label",
136: "languages.language")
137: + ": ");
138: }
139: return nameLabel;
140: }
141:
142: /**
143: * @return the nameTextField
144: */
145: private JTextField getNameTextField() {
146: if (nameTextField == null) {
147: nameTextField = new JTextField();
148: nameTextField.setText(componentPath);
149: nameTextField
150: .setToolTipText(Resources
151: .getLocalStringForPackage(
152: "bookmark_name_frame_name_text_field_tool_tip",
153: "languages.language"));
154: nameTextField.setEditable(true);
155: nameTextField.setEnabled(true);
156: }
157: return nameTextField;
158: }
159:
160: /**
161: * @return the nameLabel
162: */
163: public JLabel getFolderLabel() {
164: if (folderLabel == null) {
165: folderLabel = new JLabel();
166: folderLabel.setText(Resources.getLocalStringForPackage(
167: "bookmark_name_frame_folder_name_label",
168: "languages.language")
169: + ": ");
170: }
171: return folderLabel;
172:
173: }
174:
175: /**
176: * @return the nameTextField
177: */
178: private JTextField getFolderTextField() {
179: if (folderTextField == null) {
180: folderTextField = new JTextField();
181: folderTextField.setText(Resources.getLocalStringForPackage(
182: "bookmarks", "languages.language"));
183: folderTextField.setEditable(false);
184: folderTextField.setEnabled(true);
185: }
186: return folderTextField;
187: }
188:
189: /**
190: * @return the bookmarkList
191: */
192: public JScrollPane getBookmarkListScrollPane() {
193:
194: if (folderTreeScrollPane == null) {
195: folderTreeScrollPane = new JScrollPane(getFolderTreeJTree());
196:
197: folderTreeScrollPane.getViewport().setOpaque(false);
198: folderTreeScrollPane.setOpaque(false);
199: }
200: return folderTreeScrollPane;
201: }
202:
203: /**
204: * @return the tree of folders
205: */
206: public JTree getFolderTreeJTree() {
207:
208: if (folderTreeJTree == null) {
209: // Create tree
210: folderTreeJTree = BookmarkUtil.convertDomTreeToJTree(
211: BookmarkManager.getInstance().getBookmarks(), true);
212: folderTreeJTree.setVisibleRowCount(12);
213: folderTreeJTree
214: .addTreeSelectionListener(new BookmarkFolderTreeSelectionListener());
215: }
216: return folderTreeJTree;
217: }
218:
219: /**
220: * @return
221: */
222: public JPanel getButtonPanel() {
223: if (buttonPanel == null) {
224: buttonPanel = new JPanel();
225:
226: // init layoutManager
227: SimpleFormBuilder builder = new SimpleFormBuilder(
228: "related,createFolderButton=left:pref,related,confirmButtonColumn=pref,related,closeButtonColumn=pref,related",
229: "row=pref");
230: // Spalten und Zeilen
231:
232: builder.add(getCreateFolderButton(),
233: "createFolderButton,row");
234: builder.add(getConfirmButton(), "confirmButtonColumn,row");
235: builder.add(getCloseButton(), "closeButtonColumn,row");
236:
237: buttonPanel = builder.getPanel();
238: buttonPanel.setOpaque(false);
239: }
240: return buttonPanel;
241: }
242:
243: /**
244: * @return the confirmButton
245: */
246: public JButton getCreateFolderButton() {
247: if (createFolderButton == null) {
248: createFolderButton = new JButton(createFolderAction);
249:
250: createFolderButton.setText(Resources
251: .getLocalStringForPackage(
252: "bookmark_name_frame_folder_new_folder",
253: "languages.language")
254: + "...");
255: }
256: return createFolderButton;
257: }
258:
259: /**
260: * @return the confirmButton
261: */
262: public JButton getConfirmButton() {
263: if (confirmButton == null) {
264: confirmButton = new JButton(confirmAction);
265:
266: confirmButton.setText(Resources.getLocalStringForPackage(
267: "bookmark_name_frame_confirm_button",
268: "languages.language"));
269: }
270: return confirmButton;
271: }
272:
273: /**
274: * @return the closeButton
275: */
276: public JButton getCloseButton() {
277: if (closeButton == null) {
278: closeButton = new JButton(closeFrameAction);
279:
280: closeButton.setText(Resources.getLocalStringForPackage(
281: "bookmark_name_frame_close_button",
282: "languages.language"));
283: }
284: return closeButton;
285: }
286:
287: /**
288: *
289: */
290: Action createFolderAction = new AbstractAction("createFolderButton") {
291:
292: // This method is called when the button is pressed
293: public void actionPerformed(ActionEvent evt) {
294: // get selected folder node
295: DefaultMutableTreeNode node = (DefaultMutableTreeNode) folderTreeJTree
296: .getLastSelectedPathComponent();
297: BookmarkFolder parentBookmarkFolder = null;
298:
299: if (node != null) {
300: parentBookmarkFolder = (BookmarkFolder) node
301: .getUserObject();
302: }
303:
304: CreateBookmarkFolderDialog createBookmarkFolderDialog = new CreateBookmarkFolderDialog(
305: parentBookmarkFolder, folderTreeJTree);
306: createBookmarkFolderDialog.setVisible(true);
307: }
308: };
309:
310: /**
311: *
312: */
313: Action confirmAction = new AbstractAction("confirmButton") {
314: // This method is called when the button is pressed
315: public void actionPerformed(ActionEvent evt) {
316: // get selected folder node
317: DefaultMutableTreeNode node = (DefaultMutableTreeNode) folderTreeJTree
318: .getLastSelectedPathComponent();
319:
320: String name = getNameTextField().getText().trim();
321: String type = null;
322:
323: try {
324: type = ComponentFactory.getInstance().getComponent(
325: componentPath).getTypeName();
326: } catch (ComponentNotFoundException e) {
327: log
328: .warning("Could not get component '"
329: + componentPath
330: + "' to determine its component type and icon.");
331:
332: // bacause the componentPath might be invalid, determining the type might fail. so we set it here.
333: type = "";
334: }
335:
336: Bookmark bookmark = new Bookmark(componentPath, name, type);
337:
338: BookmarkManager bookmarkManager = BookmarkManager
339: .getInstance();
340:
341: if (node == null) {
342: // if no folder node selected, add below root folder.
343: bookmarkManager.add(bookmark);
344: } else {
345: BookmarkFolder parentBookmarkFolder = (BookmarkFolder) node
346: .getUserObject();
347: bookmarkManager.add(bookmark, parentBookmarkFolder
348: .getId());
349: }
350: dispose();
351: }
352: };
353:
354: /**
355: *
356: */
357: Action closeFrameAction = new AbstractAction("closeButton") {
358: // This method is called when the button is pressed
359: public void actionPerformed(ActionEvent evt) {
360:
361: dispose();
362: }
363: };
364:
365: /**
366: *
367: *
368: */
369: class BookmarkFolderTreeSelectionListener implements
370: TreeSelectionListener {
371:
372: /* (non-Javadoc)
373: * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
374: */
375: public void valueChanged(TreeSelectionEvent event) {
376:
377: if (event.isAddedPath()) {
378: // if node selected
379: // get selected node
380: DefaultMutableTreeNode node = (DefaultMutableTreeNode) folderTreeJTree
381: .getLastSelectedPathComponent();
382:
383: if (node == null) {
384: return;
385: }
386:
387: BookmarkFolder bookmarkFolder = (BookmarkFolder) node
388: .getUserObject();
389: getFolderTextField().setText(bookmarkFolder.getName());
390: } else {
391: // if node deselected
392: getFolderTextField().setText(
393: Resources.getLocalStringForPackage("bookmarks",
394: "languages.language"));
395: }
396: }
397: }
398: }
|