示例#1
0
  /** {@inheritDoc} */
  public void doSave(IProgressMonitor monitor) {
    monitor.beginTask(Messages.EditorsSaveEditors, IProgressMonitor.UNKNOWN);
    try {
      EditSupport editSupport = getEditorHelper().getEditSupport();
      final IPersistentObject perObj = editSupport.getWorkVersion();
      TimestampBP.refreshTimestamp((ITimestampPO) perObj);
      editSupport.saveWorkVersion();

      getEditorHelper().resetEditableState();
      getEditorHelper().setDirty(false);
    } catch (IncompatibleTypeException pmce) {
      handlePMCompNameException(pmce);
    } catch (PMException e) {
      PMExceptionHandler.handlePMExceptionForMasterSession(e);
      try {
        reOpenEditor(((NodeEditorInput) getEditorInput()).getNode());
      } catch (PMException e1) {
        PMExceptionHandler.handlePMExceptionForEditor(e, this);
      }
    } catch (ProjectDeletedException e) {
      PMExceptionHandler.handleProjectDeletedException();
    } finally {
      monitor.done();
    }
  }
  /**
   * Creates a new project, stops a started AUT, closes all opened editors.
   *
   * @param newProjectName the name for this project
   * @param monitor The progress monitor for this potentially long-running operation.
   * @throws InterruptedException if the operation is canceled.
   */
  private void createNewProject(final String newProjectName, IProgressMonitor monitor)
      throws InterruptedException {

    Plugin.closeAllOpenedJubulaEditors(false);
    m_newProject.setIsReusable(m_projectSettingWizardPage.isProjectReusable());
    m_newProject.setIsProtected(m_projectSettingWizardPage.isProjectProtected());
    if (m_autMain.getName() == null || StringConstants.EMPTY.equals(m_autMain.getName())) {
      m_newProject.removeAUTMain(m_autMain);
    }
    if (m_autConfig.getName() == null || StringConstants.EMPTY.equals(m_autConfig.getName())) {

      m_autMain.removeAutConfig(m_autConfig);
    }
    ParamNameBPDecorator paramNameMapper = new ParamNameBPDecorator(ParamNameBP.getInstance());
    final IWritableComponentNameMapper compNamesMapper =
        new ProjectComponentNameMapper(new ComponentNamesDecorator(null), m_newProject);
    List<INameMapper> mapperList = new ArrayList<INameMapper>();
    List<IWritableComponentNameMapper> compNameCacheList =
        new ArrayList<IWritableComponentNameMapper>();
    addUnboundModules(m_newProject);
    mapperList.add(paramNameMapper);
    compNameCacheList.add(compNamesMapper);
    try {
      GeneralStorage.getInstance().reset();
      ProjectPM.attachProjectToROSession(
          m_newProject, newProjectName, mapperList, compNameCacheList, monitor);
    } catch (PMSaveException e) {
      PMExceptionHandler.handlePMExceptionForMasterSession(
          new PMSaveException(e.getMessage(), MessageIDs.E_CREATE_NEW_PROJECT_FAILED));
    } catch (PMException e) {
      PMExceptionHandler.handlePMExceptionForMasterSession(e);
    } catch (ProjectDeletedException e) {
      PMExceptionHandler.handleProjectDeletedException();
    } catch (InterruptedException ie) {
      throw ie;
    }
  }
  /**
   * Deletes all selected items unless an error occurs.
   *
   * @param selection The selected items to delete.
   */
  private void deleteSelection(IStructuredSelection selection) {
    // cleanup set for entries, that are children of other contained nodes
    Set<INodePO> set = new HashSet<INodePO>(selection.toList());
    Set<INodePO> topNodesToDelete = new HashSet<INodePO>();
    for (INodePO node : set) {
      if (!containsParent(set, node)) {
        topNodesToDelete.add(node);
      }
    }

    // determine all nodes, which have to be deleted
    // (children of selected nodes which are CategoryPO or SpecTestCasePO
    List<INodePO> nodesToDelete = new ArrayList<INodePO>();
    for (INodePO node : topNodesToDelete) {
      MultipleNodePM.collectAffectedNodes(nodesToDelete, node);
    }

    // reverse List, to get the right order of deletion (child first)
    Collections.reverse(nodesToDelete);

    List<AbstractCmdHandle> cmds = getDeleteCommands(nodesToDelete);
    if (!cmds.isEmpty()) {
      try {
        MultipleNodePM.getInstance().executeCommands(cmds);

        List<DataChangedEvent> eventList = new ArrayList<DataChangedEvent>();
        for (INodePO node : topNodesToDelete) {
          eventList.add(new DataChangedEvent(node, DataState.Deleted, UpdateState.all));
        }
        DataEventDispatcher.getInstance()
            .fireDataChangedListener(eventList.toArray(new DataChangedEvent[0]));
      } catch (PMException e) {
        PMExceptionHandler.handlePMExceptionForMasterSession(e);
      } catch (ProjectDeletedException e) {
        PMExceptionHandler.handleProjectDeletedException();
      }
    }
  }