1 56 package org.objectstyle.cayenne.modeler.action; 57 58 import java.awt.event.ActionEvent ; 59 import java.awt.event.KeyEvent ; 60 import java.io.File ; 61 62 import javax.swing.JOptionPane ; 63 import javax.swing.KeyStroke ; 64 65 import org.apache.log4j.Logger; 66 import org.objectstyle.cayenne.conf.Configuration; 67 import org.objectstyle.cayenne.conf.DefaultConfiguration; 68 import org.objectstyle.cayenne.modeler.Application; 69 import org.objectstyle.cayenne.modeler.dialog.ErrorDebugDialog; 70 import org.objectstyle.cayenne.modeler.util.RecentFileMenuItem; 71 import org.objectstyle.cayenne.project.Project; 72 import org.objectstyle.cayenne.project.ProjectException; 73 74 77 public class OpenProjectAction extends ProjectAction { 78 79 private static Logger logObj = Logger.getLogger(OpenProjectAction.class); 80 81 protected ProjectOpener fileChooser; 82 83 public static String getActionName() { 84 return "Open Project"; 85 } 86 87 90 public OpenProjectAction(Application application) { 91 super(getActionName(), application); 92 this.fileChooser = new ProjectOpener(); 93 } 94 95 public String getIconName() { 96 return "icon-open.gif"; 97 } 98 99 public KeyStroke getAcceleratorKey() { 100 return KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK); 101 } 102 103 public void performAction(ActionEvent e) { 104 if (getProjectController() != null && !closeProject()) { 106 return; 107 } 108 File f = null; 109 if (e.getSource() instanceof RecentFileMenuItem) { 110 RecentFileMenuItem menu = (RecentFileMenuItem) e.getSource(); 111 f = menu.getFile(); 112 } 113 114 if (f == null) { 115 openProject(); 116 } 117 else { 118 openProject(f); 119 } 120 } 121 122 125 public void openProject() { 126 try { 127 File file = fileChooser.openProjectFile(Application.getFrame()); 129 if (file != null) { 130 openProject(file); 131 } 132 } 133 catch (Exception e) { 134 logObj.warn("Error loading project file.", e); 135 } 136 } 137 138 139 public void openProject(File file) { 140 ConfigurationHack.setResourceLoader(getApplication() 142 .getClassLoadingService() 143 .getClassLoader()); 144 145 try { 146 getApplication().getFrameController().addToLastProjListAction( 147 file.getAbsolutePath()); 148 149 Project project = Project.createProject(file); 150 getProjectController().setProject(project); 151 152 if (project.isUpgradeNeeded() && !processUpgrades(project)) { 154 closeProject(); 155 } 156 else { 157 getApplication().getFrameController().projectOpenedAction(project); 158 } 159 } 160 catch (Exception ex) { 161 logObj.warn("Error loading project file.", ex); 162 ErrorDebugDialog.guiWarning(ex, "Error loading project"); 163 } 164 } 165 166 protected boolean processUpgrades(Project project) throws ProjectException { 167 String msg = (String ) project.getUpgradeMessages().get(0); 169 int returnCode = JOptionPane.showConfirmDialog( 171 Application.getFrame(), 172 "Project needs an upgrade to a newer version. " + msg + ". Upgrade?", 173 "Upgrade Needed", 174 JOptionPane.YES_NO_OPTION); 175 if (returnCode == JOptionPane.NO_OPTION) { 176 return false; 177 } 178 179 logObj.info("Will upgrade project " + project.getMainFile()); 181 project.upgrade(); 182 return true; 183 } 184 185 static final class ConfigurationHack extends DefaultConfiguration { 186 187 static void setResourceLoader(ClassLoader loader) { 189 Configuration.resourceLoader = loader; 190 } 191 } 192 } | Popular Tags |