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.JTree;
031: import javax.swing.event.TreeSelectionEvent;
032: import javax.swing.event.TreeSelectionListener;
033: import javax.swing.tree.DefaultMutableTreeNode;
034: import javax.swing.tree.DefaultTreeModel;
035:
036: import com.jgoodies.forms.extras.SimpleFormBuilder;
037:
038: import de.finix.contelligent.client.i18n.Resources;
039: import de.finix.contelligent.client.util.bookmark.Bookmark;
040: import de.finix.contelligent.client.util.bookmark.BookmarkFolder;
041: import de.finix.contelligent.client.util.bookmark.BookmarkManager;
042: import de.finix.contelligent.client.util.bookmark.BookmarkUtil;
043:
044: public class ManageBookmarkDialog extends JDialog {
045:
046: static Logger log = Logger.getLogger(ManageBookmarkDialog.class
047: .getName());
048:
049: private JPanel rootPanel = null;
050:
051: private JPanel editButtonPanel = null;
052:
053: private JButton propertyButton = null;
054:
055: private JButton deleteButton = null;
056:
057: private JScrollPane bookmarksTreeScrollPane = null;
058:
059: private JTree bookmarksTreeJTree = null;
060:
061: private JLabel componentPathLabel = null;
062:
063: private JPanel controlButtonPanel = null;
064:
065: private JButton createFolderButton = null;
066:
067: private JButton closeButton = null;
068:
069: /**
070: * This is the default constructor
071: */
072: public ManageBookmarkDialog() {
073: super ();
074:
075: initialize();
076: }
077:
078: /**
079: *
080: */
081: public ManageBookmarkDialog getManageBookmarkFrame() {
082: return this ;
083: }
084:
085: /**
086: * This method initializes this
087: *
088: * @return void
089: */
090: private void initialize() {
091:
092: rootPanel = new JPanel();
093:
094: // wenn mit einfügen per maus funktioniert, die beiden verschiebe buttons heir wieder raus
095:
096: // // init layoutManager
097: // SimpleFormBuilder builder = new SimpleFormBuilder(
098: // "related,fieldColumn=pref,related,related",
099: // "related,editButtonPanelRow=pref,related,bookmarkListRow=pref:grow,related,componentPathRow=pref,related,controlButtonPanelRow=pref,related");
100: // // Spalten und Zeilen
101:
102: // builder.add(getEditButtonPanel(), "fieldColumn,editButtonPanelRow");
103:
104: // builder.add(getTreeManagementPanel(), "fieldColumn,bookmarkListRow,2,2");
105:
106: // builder.add(getComponentPathLabel(), "fieldColumn,componentPathRow");
107:
108: // builder.add(getControlButtonPanel(), "fieldColumn,controlButtonPanelRow");
109:
110: // init layoutManager
111: SimpleFormBuilder builder = new SimpleFormBuilder(
112: "related,fieldColumn=pref:grow,related,related",
113: "related,editButtonPanelRow=pref,related,bookmarkListRow=pref:grow,related,related,componentPathRow=pref,related,controlButtonPanelRow=pref,related");
114: // Spalten und Zeilen
115:
116: builder.add(getEditButtonPanel(),
117: "fieldColumn,editButtonPanelRow,2,1");
118:
119: builder.add(getBookmarkTreeScrollPane(),
120: "fieldColumn,bookmarkListRow,2,2");
121:
122: builder.add(getComponentPathLabel(),
123: "fieldColumn,componentPathRow,2,1");
124:
125: builder.add(getControlButtonPanel(),
126: "fieldColumn,controlButtonPanelRow,2,1");
127:
128: rootPanel = builder.getPanel();
129: rootPanel.setOpaque(false);
130:
131: setContentPane(rootPanel);
132: setTitle(Resources.getLocalStringForPackage(
133: "bookmark_manager_frame_title", "languages.language"));
134:
135: getRootPane().setDefaultButton(closeButton);
136:
137: setLocationByPlatform(true);
138: setSize(500, 315);
139: setResizable(true);
140:
141: setModal(true);
142: }
143:
144: /**
145: * @return the editButtonPanel
146: */
147: public JPanel getEditButtonPanel() {
148:
149: if (editButtonPanel == null) {
150: editButtonPanel = new JPanel();
151:
152: // init layoutManager
153: SimpleFormBuilder builder = new SimpleFormBuilder(
154: "related,propertyButtonColumn=pref,related,deleteButtonColumn=pref,related",
155: "row=pref");
156: // Spalten und Zeilen
157:
158: builder
159: .add(getPropertyButton(),
160: "propertyButtonColumn,row");
161: builder.add(getDeleteButton(), "deleteButtonColumn,row");
162:
163: editButtonPanel = builder.getPanel();
164: editButtonPanel.setOpaque(false);
165: }
166: return editButtonPanel;
167: }
168:
169: /**
170: * @return the propertyButton
171: */
172: public JButton getPropertyButton() {
173:
174: if (propertyButton == null) {
175: propertyButton = new JButton(editPropertyAction);
176:
177: propertyButton.setText(Resources.getLocalStringForPackage(
178: "bookmark_manager_property_button",
179: "languages.language"));
180:
181: propertyButton.setEnabled(false);
182: }
183: return propertyButton;
184: }
185:
186: /**
187: * @return the deleteButton
188: */
189: public JButton getDeleteButton() {
190:
191: if (deleteButton == null) {
192: deleteButton = new JButton(deleteBookmarkAction);
193:
194: deleteButton.setText(Resources.getLocalStringForPackage(
195: "bookmark_manager_delete_button",
196: "languages.language"));
197:
198: deleteButton.setEnabled(false);
199: }
200: return deleteButton;
201: }
202:
203: /**
204: * @return the bookmarkList
205: */
206: public JScrollPane getBookmarkTreeScrollPane() {
207:
208: if (bookmarksTreeScrollPane == null) {
209: bookmarksTreeScrollPane = new JScrollPane(
210: getBookmarksTreeJTree());
211:
212: // bookmarkListScrollPane.setViewportView(getBookmarkList());
213:
214: bookmarksTreeScrollPane.getViewport().setOpaque(false);
215: bookmarksTreeScrollPane.setOpaque(false);
216: }
217: return bookmarksTreeScrollPane;
218: }
219:
220: /**
221: * @return the tree of bookmarkFolders and Bookmarks
222: */
223: public JTree getBookmarksTreeJTree() {
224:
225: if (bookmarksTreeJTree == null) {
226: // Create tree
227: bookmarksTreeJTree = BookmarkUtil
228: .convertDomTreeToJTree(BookmarkManager
229: .getInstance().getBookmarks(), false);
230: bookmarksTreeJTree.setVisibleRowCount(12);
231: bookmarksTreeJTree
232: .addTreeSelectionListener(new BookmarkTreeSelectionListener());
233: }
234: return bookmarksTreeJTree;
235: }
236:
237: /**
238: * @return the componentPathLabel
239: */
240: public JLabel getComponentPathLabel() {
241: if (componentPathLabel == null) {
242: componentPathLabel = new JLabel();
243: componentPathLabel.setText(" "
244: + Resources.getLocalStringForPackage(
245: "bookmark_name_frame_componentpath_label",
246: "languages.language") + ": ");
247: }
248: return componentPathLabel;
249: }
250:
251: /**
252: * @return the controlButtonPanel
253: */
254: public JPanel getControlButtonPanel() {
255:
256: if (controlButtonPanel == null) {
257: controlButtonPanel = new JPanel();
258:
259: // init layoutManager
260: SimpleFormBuilder builder = new SimpleFormBuilder(
261: "related,createFolderButtonColumn=pref,related,closeButtonColumn=pref,related",
262: "row=pref");
263: // Spalten und Zeilen
264:
265: builder.add(getCreateFolderButton(),
266: "createFolderButtonColumn,row");
267: builder.add(getCloseButton(), "closeButtonColumn,row");
268:
269: controlButtonPanel = builder.getPanel();
270: controlButtonPanel.setOpaque(false);
271: }
272: return controlButtonPanel;
273: }
274:
275: /**
276: * @return the confirmButton
277: */
278: public JButton getCreateFolderButton() {
279: if (createFolderButton == null) {
280: createFolderButton = new JButton(createFolderAction);
281:
282: createFolderButton.setText(Resources
283: .getLocalStringForPackage(
284: "bookmark_name_frame_folder_new_folder",
285: "languages.language")
286: + "...");
287: }
288: return createFolderButton;
289: }
290:
291: /**
292: * @return the closeButton
293: */
294: public JButton getCloseButton() {
295:
296: if (closeButton == null) {
297: closeButton = new JButton(closeFrameAction);
298:
299: closeButton.setText(Resources.getLocalStringForPackage(
300: "bookmark_manager_close_button",
301: "languages.language"));
302: }
303: return closeButton;
304: }
305:
306: /**
307: *
308: */
309: Action editPropertyAction = new AbstractAction("editPropertyButton") {
310:
311: // This method is called when the button is pressed
312: public void actionPerformed(ActionEvent evt) {
313: // get selected node
314: DefaultMutableTreeNode node = (DefaultMutableTreeNode) bookmarksTreeJTree
315: .getLastSelectedPathComponent();
316:
317: if (node == null) {
318: return;
319: } else {
320: if (node.isRoot()) {
321: return;
322: }
323:
324: if (node.getUserObject() instanceof Bookmark) {
325:
326: Bookmark bookmark = (Bookmark) node.getUserObject();
327:
328: // open bookmark properties dialog
329: BookmarkPropertyDialog bookmarkPropertyDialog = new BookmarkPropertyDialog(
330: getManageBookmarkFrame(), bookmark,
331: bookmarksTreeJTree);
332: bookmarkPropertyDialog.setVisible(true);
333:
334: } else {
335: if (node.getUserObject() instanceof BookmarkFolder) {
336:
337: BookmarkFolder bookmarkFolder = (BookmarkFolder) node
338: .getUserObject();
339:
340: // open bookmarkFolder properties dialog
341: BookmarkFolderPropertyDialog bookmarkFolderPropertyDialog = new BookmarkFolderPropertyDialog(
342: getManageBookmarkFrame(),
343: bookmarkFolder, bookmarksTreeJTree);
344: bookmarkFolderPropertyDialog.setVisible(true);
345: }
346: }
347: }
348: }
349: };
350:
351: /**
352: *
353: */
354: Action deleteBookmarkAction = new AbstractAction(
355: "deleteBookmarkButton") {
356:
357: // This method is called when the button is pressed
358: public void actionPerformed(ActionEvent evt) {
359: // get selected bookmark
360: DefaultMutableTreeNode node = (DefaultMutableTreeNode) bookmarksTreeJTree
361: .getLastSelectedPathComponent();
362:
363: if (node != null) {
364: if (node.isRoot()) {
365: // if selected node is root, don't delete that node/do nothing
366: return;
367: }
368: BookmarkManager.getInstance()
369: .remove(
370: ((BookmarkFolder) node.getUserObject())
371: .getId());
372:
373: // Because we know, that the model is of type DefaultTreeModel, we can explicit cast on it.
374: DefaultTreeModel treeModel = (DefaultTreeModel) bookmarksTreeJTree
375: .getModel();
376: treeModel.removeNodeFromParent(node);
377: }
378: }
379: };
380:
381: /**
382: *
383: */
384: Action createFolderAction = new AbstractAction("createFolderButton") {
385:
386: // This method is called when the button is pressed
387: public void actionPerformed(ActionEvent evt) {
388: // get selected folder node
389: DefaultMutableTreeNode node = (DefaultMutableTreeNode) bookmarksTreeJTree
390: .getLastSelectedPathComponent();
391: BookmarkFolder parentBookmarkFolder = null;
392:
393: if (node != null) {
394: if (node.getUserObject() instanceof Bookmark) {
395: // if selected node is a bookmark, don't create new folder.
396: return;
397: }
398: parentBookmarkFolder = (BookmarkFolder) node
399: .getUserObject();
400: }
401: CreateBookmarkFolderDialog createBookmarkFolderDialog = new CreateBookmarkFolderDialog(
402: parentBookmarkFolder, bookmarksTreeJTree);
403: createBookmarkFolderDialog.setVisible(true);
404: }
405: };
406:
407: /**
408: *
409: */
410: Action closeFrameAction = new AbstractAction("closeButton") {
411:
412: // This method is called when the button is pressed
413: public void actionPerformed(ActionEvent evt) {
414: // close the frame
415: dispose();
416: }
417: };
418:
419: /**
420: *
421: *
422: */
423: class BookmarkTreeSelectionListener implements
424: TreeSelectionListener {
425:
426: /* (non-Javadoc)
427: * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
428: */
429: public void valueChanged(TreeSelectionEvent event) {
430:
431: componentPathLabel.setText(" "
432: + Resources.getLocalStringForPackage(
433: "bookmark_name_frame_componentpath_label",
434: "languages.language") + ": ");
435:
436: if (event.isAddedPath()) {
437: // if node selected
438: // get selected node
439: DefaultMutableTreeNode node = (DefaultMutableTreeNode) bookmarksTreeJTree
440: .getLastSelectedPathComponent();
441:
442: if (node != null) {
443:
444: if (node.isRoot()) {
445: getPropertyButton().setEnabled(false);
446: getDeleteButton().setEnabled(false);
447: } else {
448: getPropertyButton().setEnabled(true);
449: getDeleteButton().setEnabled(true);
450: }
451:
452: // if node is a bookmark, set componentPath
453: if (node.getUserObject() instanceof Bookmark) {
454: Bookmark bookmark = (Bookmark) node
455: .getUserObject();
456:
457: componentPathLabel
458: .setText(" "
459: + Resources
460: .getLocalStringForPackage(
461: "bookmark_name_frame_componentpath_label",
462: "languages.language")
463: + ": "
464: + bookmark.getComponentPath());
465:
466: getCreateFolderButton().setEnabled(false);
467: } else {
468: getCreateFolderButton().setEnabled(true);
469: }
470: }
471: } else {
472: getPropertyButton().setEnabled(false);
473: getDeleteButton().setEnabled(false);
474: }
475: }
476: }
477: }
|