/plugins/ProjectViewer/tags/pv_2_1_1/projectviewer/action/EditProjectAction.java

# · Java · 209 lines · 135 code · 27 blank · 47 comment · 51 complexity · cb94e1aad3b6396baea283354a31b285 MD5 · raw file

  1. /*
  2. * :tabSize=4:indentSize=4:noTabs=false:
  3. * :folding=explicit:collapseFolds=1:
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License
  7. * as published by the Free Software Foundation; either version 2
  8. * of the License, or any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. */
  19. package projectviewer.action;
  20. //{{{ Imports
  21. import java.awt.event.ActionEvent;
  22. import javax.swing.Icon;
  23. import javax.swing.JMenuItem;
  24. import javax.swing.JOptionPane;
  25. import org.gjt.sp.jedit.jEdit;
  26. import org.gjt.sp.jedit.GUIUtilities;
  27. import projectviewer.ProjectViewer;
  28. import projectviewer.ProjectManager;
  29. import projectviewer.vpt.VPTGroup;
  30. import projectviewer.vpt.VPTNode;
  31. import projectviewer.vpt.VPTProject;
  32. import projectviewer.config.ProjectOptions;
  33. import projectviewer.config.ProjectViewerConfig;
  34. import projectviewer.importer.RootImporter;
  35. //}}}
  36. /**
  37. * Action that when executed creates a new project or edits an existing one.
  38. *
  39. * @author Marcelo Vanzin
  40. * @version $Id: EditProjectAction.java 6349 2005-08-24 07:42:35Z vanza $
  41. */
  42. public class EditProjectAction extends Action {
  43. //{{{ Private members
  44. private boolean forceNew;
  45. private VPTGroup parent;
  46. //}}}
  47. //{{{ Constructors
  48. /** Default constructor. */
  49. public EditProjectAction() {
  50. this(false, null);
  51. }
  52. /**
  53. * If forceNew is true, creation of new project will be forced. The
  54. * default parent is only allowed to be set if forceNew is true.
  55. */
  56. public EditProjectAction(boolean forceNew, VPTGroup parent) {
  57. super("projectviewer_wrapper_edit");
  58. this.forceNew = forceNew;
  59. if (forceNew)
  60. this.parent = parent;
  61. }
  62. //}}}
  63. //{{{ getText() method
  64. /** Returns the text to be shown on the button and/or menu item. */
  65. public String getText() {
  66. return jEdit.getProperty("projectviewer.action.a_e_project");
  67. } //}}}
  68. //{{{ getIcon() method
  69. /**
  70. * Returns the icon to be shown on the toolbar button. The default
  71. * implementation returns "null" so that actions that will only be
  72. * used in the context menu don't need to implement this.
  73. */
  74. public Icon getIcon() {
  75. return GUIUtilities.loadIcon("Drive.png");
  76. } //}}}
  77. //{{{ actionPerformed(ActionEvent) method
  78. /** Creates a new project. */
  79. public void actionPerformed(ActionEvent e) {
  80. VPTNode selected = null;
  81. String lookupPath = null;
  82. VPTProject proj = null;
  83. String oldName = null;
  84. String oldRoot = null;
  85. if (viewer == null) {
  86. viewer = ProjectViewer.getViewer(jEdit.getActiveView());
  87. }
  88. if (viewer != null && parent == null) {
  89. VPTNode sel = viewer.getSelectedNode();
  90. if (sel != null && sel.isGroup()) {
  91. parent = (VPTGroup) sel;
  92. }
  93. }
  94. if (!forceNew) {
  95. if (viewer != null) {
  96. selected = viewer.getSelectedNode();
  97. if (selected != null) {
  98. lookupPath = selected.getNodePath();
  99. } else {
  100. selected = viewer.getRoot();
  101. if (lookupPath == null && selected.isProject())
  102. lookupPath = selected.getNodePath();
  103. }
  104. proj = VPTNode.findProjectFor(selected);
  105. } else {
  106. proj = ProjectViewer.getActiveProject(jEdit.getActiveView());
  107. }
  108. if (proj != null
  109. && !ProjectManager.getInstance().isLoaded(proj.getName()))
  110. {
  111. proj = ProjectManager.getInstance().getProject(proj.getName());
  112. }
  113. if (proj != null) {
  114. oldName = proj.getName();
  115. oldRoot = proj.getRootPath();
  116. }
  117. }
  118. boolean add = forceNew | (proj == null);
  119. proj = ProjectOptions.run(proj, parent, lookupPath);
  120. if (proj != null) {
  121. boolean newParent = false;
  122. if (proj.getObjectProperty("projectviewer.new-parent") != null) {
  123. parent = (VPTGroup) proj.getObjectProperty("projectviewer.new-parent");
  124. proj.removeProperty("projectviewer.new-parent");
  125. newParent = true;
  126. }
  127. if (add) {
  128. ProjectManager.getInstance().addProject(proj, parent);
  129. RootImporter ipi = new RootImporter(proj, null, viewer, jEdit.getActiveView());
  130. ipi.doImport();
  131. if (viewer != null)
  132. viewer.setRootNode(proj);
  133. else
  134. ProjectViewerConfig.getInstance().setLastNode(proj);
  135. } else {
  136. if (!proj.getName().equals(oldName)) {
  137. ProjectManager.getInstance().renameProject(oldName, proj.getName());
  138. }
  139. if (!proj.getRootPath().equals(oldRoot)) {
  140. RootImporter ipi;
  141. if (JOptionPane.showConfirmDialog(jEdit.getActiveView(),
  142. jEdit.getProperty("projectviewer.action.clean_old_root"),
  143. jEdit.getProperty("projectviewer.action.clean_old_root.title"),
  144. JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
  145. ipi = new RootImporter(proj, oldRoot, viewer, jEdit.getActiveView());
  146. } else {
  147. ipi = new RootImporter(proj, null, viewer, jEdit.getActiveView());
  148. }
  149. ipi.doImport();
  150. }
  151. proj.firePropertiesChanged();
  152. boolean notify = true;
  153. if (viewer == null) {
  154. viewer = ProjectViewer.getViewer(jEdit.getActiveView());
  155. notify = viewer.getRoot().isNodeDescendant(proj);
  156. }
  157. if (newParent) {
  158. VPTGroup oldParent = (VPTGroup) proj.getParent();
  159. ProjectViewer.removeNodeFromParent(proj);
  160. ProjectViewer.insertNodeInto(proj, parent);
  161. ProjectManager.getInstance().saveProjectList();
  162. ProjectViewer.fireNodeMovedEvent(proj, oldParent);
  163. } else if (notify) {
  164. ProjectViewer.nodeChanged(proj);
  165. }
  166. ProjectManager.getInstance().fireDynamicMenuChange();
  167. }
  168. }
  169. } //}}}
  170. //{{{ prepareForNode(VPTNode) method
  171. /** Enable action only for the root node. */
  172. public void prepareForNode(VPTNode node) {
  173. if (forceNew || (node != null && (node.isGroup() || node.isProject()))) {
  174. cmItem.setVisible(true);
  175. ((JMenuItem)cmItem).setText( (forceNew || node.isGroup()) ?
  176. jEdit.getProperty("projectviewer.action.add_project") :
  177. jEdit.getProperty("projectviewer.action.edit_project"));
  178. } else {
  179. cmItem.setVisible(false);
  180. }
  181. } //}}}
  182. }