Esempio n. 1
0
  /**
   * Open project. Does nothing if a project is already open and closeCurrent is false.
   *
   * @param projectDirectory project directory or null if user must choose it
   * @param closeCurrent whether or not to close the current project first, if any
   */
  public static void projectOpen(final File projectDirectory, boolean closeCurrent) {
    UIThreadsUtil.mustBeSwingThread();

    if (Core.getProject().isProjectLoaded()) {
      if (closeCurrent) {
        // Register to try again after closing the current project.
        CoreEvents.registerProjectChangeListener(
            new IProjectEventListener() {
              public void onProjectChanged(PROJECT_CHANGE_TYPE eventType) {
                if (eventType == PROJECT_CHANGE_TYPE.CLOSE) {
                  projectOpen(projectDirectory, false);
                  CoreEvents.unregisterProjectChangeListener(this);
                }
              }
            });
        projectClose();
      }
      return;
    }

    final File projectRootFolder;
    if (projectDirectory == null) {
      // select existing project file - open it
      OmegaTFileChooser pfc = new OpenProjectFileChooser();
      if (OmegaTFileChooser.APPROVE_OPTION
          != pfc.showOpenDialog(Core.getMainWindow().getApplicationFrame())) {
        return;
      }
      projectRootFolder = pfc.getSelectedFile();
    } else {
      projectRootFolder = projectDirectory;
    }

    new SwingWorker<Object, Void>() {
      protected Object doInBackground() throws Exception {

        IMainWindow mainWindow = Core.getMainWindow();
        Cursor hourglassCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
        Cursor oldCursor = mainWindow.getCursor();
        mainWindow.setCursor(hourglassCursor);

        try {
          // convert old projects if need
          ConvertProject.convert(projectRootFolder);
        } catch (Exception ex) {
          Log.logErrorRB(ex, "PP_ERROR_UNABLE_TO_CONVERT_PROJECT");
          Core.getMainWindow().displayErrorRB(ex, "PP_ERROR_UNABLE_TO_CONVERT_PROJECT");
          mainWindow.setCursor(oldCursor);
          return null;
        }

        // check if project okay
        ProjectProperties props;
        try {
          props = ProjectFileStorage.loadProjectProperties(projectRootFolder.getAbsoluteFile());
        } catch (Exception ex) {
          Log.logErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
          Core.getMainWindow().displayErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
          mainWindow.setCursor(oldCursor);
          return null;
        }

        try {
          boolean needToSaveProperties = false;
          if (props.hasRepositories()) {
            // team project - non-exist directories could be created from repo
            props.autocreateDirectories();
          } else {
            // not a team project - ask for non-exist directories
            while (!props.isProjectValid()) {
              needToSaveProperties = true;
              // something wrong with the project - display open dialog
              // to fix it
              ProjectPropertiesDialog prj =
                  new ProjectPropertiesDialog(
                      Core.getMainWindow().getApplicationFrame(),
                      props,
                      new File(projectRootFolder, OConsts.FILE_PROJECT).getAbsolutePath(),
                      ProjectPropertiesDialog.Mode.RESOLVE_DIRS);
              prj.setVisible(true);
              props = prj.getResult();
              prj.dispose();
              if (props == null) {
                // user clicks on 'Cancel'
                mainWindow.setCursor(oldCursor);
                return null;
              }
            }
          }

          final ProjectProperties propsP = props;
          Core.executeExclusively(true, () -> ProjectFactory.loadProject(propsP, true));
          if (needToSaveProperties) {
            Core.getProject().saveProjectProperties();
          }
        } catch (Exception ex) {
          Log.logErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
          Core.getMainWindow().displayErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
          mainWindow.setCursor(oldCursor);
          return null;
        }

        RecentProjects.add(projectRootFolder.getAbsolutePath());

        mainWindow.setCursor(oldCursor);
        return null;
      }

      protected void done() {
        try {
          get();
          SwingUtilities.invokeLater(Core.getEditor()::requestFocus);
        } catch (Exception ex) {
          Log.logErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
          Core.getMainWindow().displayErrorRB(ex, "PP_ERROR_UNABLE_TO_READ_PROJECT_FILE");
        }
      }
    }.execute();
  }
Esempio n. 2
0
 /** Close project. */
 public void projectCloseMenuItemActionPerformed() {
   ProjectUICommands.projectClose();
 }