Package edu.hawaii.ics.csdl.jupiter.ui.menu

Source Code of edu.hawaii.ics.csdl.jupiter.ui.menu.PhaseSelectionMenu

package edu.hawaii.ics.csdl.jupiter.ui.menu;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.TableItem;

import edu.hawaii.ics.csdl.jupiter.ReviewException;
import edu.hawaii.ics.csdl.jupiter.ReviewI18n;
import edu.hawaii.ics.csdl.jupiter.ReviewPlugin;
import edu.hawaii.ics.csdl.jupiter.event.ReviewEvent;
import edu.hawaii.ics.csdl.jupiter.event.ReviewIssueModelEvent;
import edu.hawaii.ics.csdl.jupiter.file.FileResource;
import edu.hawaii.ics.csdl.jupiter.file.PrefResource;
import edu.hawaii.ics.csdl.jupiter.file.PropertyResource;
import edu.hawaii.ics.csdl.jupiter.file.ReviewResource;
import edu.hawaii.ics.csdl.jupiter.model.columndata.ColumnDataModel;
import edu.hawaii.ics.csdl.jupiter.model.columndata.ColumnDataModelManager;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewId;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewModel;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewerId;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.ReviewIssue;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.ReviewIssueModel;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.ReviewIssueModelManager;
import edu.hawaii.ics.csdl.jupiter.ui.perspective.ReviewPerspectiveFactory;
import edu.hawaii.ics.csdl.jupiter.ui.preference.FilterPreferencePage;
import edu.hawaii.ics.csdl.jupiter.ui.view.editor.ReviewEditorView;
import edu.hawaii.ics.csdl.jupiter.ui.view.table.FilterPhase;
import edu.hawaii.ics.csdl.jupiter.ui.view.table.ReviewTableView;
import edu.hawaii.ics.csdl.jupiter.ui.view.table.ReviewTableViewAction;
import edu.hawaii.ics.csdl.jupiter.util.JupiterLogger;
import edu.hawaii.ics.csdl.jupiter.util.ReviewDialog;

/**
* Provides phase selection menu.
* @author Takuya Yamashita
* @version $Id: PhaseSelectionMenu.java 84 2008-03-07 10:11:27Z jsakuda $
*/
public class PhaseSelectionMenu {
  /** Jupiter logger */
  private static JupiterLogger log = JupiterLogger.getLogger();

  /**
   * Creates phase selection pulldown menu.
   * @param menu the menu of the parent.
   * @return the menu of the pulldown menu.
   */
  public static Menu createPhaseSelectionPullDownMenu(Menu menu) {
    createRefreshMenu(menu);
    createPhaseSelectionMenu(menu);
    return menu;
  }
 
  /**
   * Creates menu separator.
   * @param menu the menu.
   */
  private static void createSepareator(Menu menu) {
    new MenuItem(menu, SWT.SEPARATOR);
  }
 
  /**
   * Creates update menu.
   * @param menu the menu.
   */
  private static void createRefreshMenu(Menu menu) {
    ReviewModel reviewModel = ReviewModel.getInstance();
    String reviewPhaseNameKey = reviewModel.getPhaseManager().getPhaseNameKey();
    //String[] menuNameKeys = PrefResource.getInstance().getPhaseArray(true);
   
    // Creates refresh item if the current review phase name key exists.
    if (reviewPhaseNameKey != null) {
      MenuItem lastInvokedItem = new MenuItem(menu, SWT.NONE);
      String beforeKey = "PhaseSelectionActionDelegate.actionSet.label.default.before";
      String afterKey = "PhaseSelectionActionDelegate.actionSet.label.default.after";
      String beforeText = ReviewI18n.getString(beforeKey);
      String afterText = ReviewI18n.getString(afterKey);
      String reviewerPhaseName = ReviewI18n.getString(reviewPhaseNameKey);
      String imagePath = "icons/refresh.gif";
      lastInvokedItem.setImage(ReviewPlugin.createImageDescriptor(imagePath).createImage());
      lastInvokedItem.setText(beforeText + reviewerPhaseName + afterText);
      lastInvokedItem.setData(reviewPhaseNameKey);
      lastInvokedItem.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
          ReviewPerspectiveFactory.showPerspective();
          String reviewPhaseNameKey = (String) event.widget.getData();
          doUpdateMenuCommand(reviewPhaseNameKey);
          int type = ReviewEvent.TYPE_COMMAND;
          int kind = ReviewEvent.KIND_PHASE_SELECTION;
          ReviewPlugin.getInstance().notifyListeners(type, kind);
        }
      });
      // Separator.
      createSepareator(menu);
    }
  }
 
  /**
   * Creates phase selection menu.
   * @param menu the menu.
   */
  private static void createPhaseSelectionMenu(Menu menu) {
    //final ReviewPlugin plugin = ReviewPlugin.getInstance();
    //ReviewModel reviewModel = ReviewModel.getInstance();
    //String reviewPhaseNameKey = reviewModel.getPhaseManager().getPhaseNameKey();
    //ColumnDataModelManager columnDataModelManager = ColumnDataModelManager.getInstance();
    //final ColumnDataModel columnDataModel = columnDataModelManager.getModel(reviewPhaseNameKey);
   
    String[] menuNameKeys = PrefResource.getInstance().getPhaseArray(true);
    for (int i = 0; i < menuNameKeys.length; i++) {
      MenuItem menuItem = new MenuItem(menu, SWT.NONE);
      menuItem.setText((i + 1) + " " + ReviewI18n.getString(menuNameKeys[i]));
      menuItem.setData(menuNameKeys[i]);
      String gifFile = "icons/" + (i + 1) + ".gif";
      menuItem.setImage(ReviewPlugin.createImageDescriptor(gifFile).createImage());
      menuItem.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
          ReviewPerspectiveFactory.showPerspective();
          String reviewPhaseNameKey = (String) event.widget.getData();
          boolean isSuccess = doSelectionMenuCommand(reviewPhaseNameKey);
          if (!isSuccess) {
            return;
          }
          int type = ReviewEvent.TYPE_COMMAND;
          int kind = ReviewEvent.KIND_PHASE_SELECTION;
          ReviewPlugin.getInstance().notifyListeners(type, kind);
        }
      });
    }
  }
 
  /**
   * Invokes the selection menu's command.
   * @param reviewPhaseNameKey the review phase name key.
   * @return <code>true</code> if selection process was completed.
   */
  private static boolean doSelectionMenuCommand(String reviewPhaseNameKey) {
    // set the selected review phase name key int review model.
    ReviewModel.getInstance().notifyListeners(reviewPhaseNameKey);
   
    IProject project = FileResource.getActiveProject();
    // assertion project should not be null.
    if (project == null) {
      String[] projects = FileResource.getOpenedAndReviewIdContainedProjects();
      if (projects.length <= 0) {
        String titleKey = "ReviewDialog.noProjectOpenedAndReviewIdNotification"
                           + ".simpleConfirm.messageDialog.title";
        String title = ReviewI18n.getString(titleKey);
        String messageKey = "ReviewDialog.noProjectOpenedAndReviewIdNotification"
                            + ".simpleConfirm.messageDialog.message";
        String message = ReviewI18n.getString(messageKey);
        ReviewDialog.openSimpleComfirmMessageDialog(title, message);
        return false;
      }
      String projectName = projects[0];
      project = FileResource.getProject(projectName);
    }
     
    ReviewModel reviewModel = ReviewModel.getInstance();
    ReviewId reviewId = reviewModel.getReviewIdManager().getReviewId();
    reviewPhaseNameKey = reviewModel.getPhaseManager().getPhaseNameKey();
    // whatever review id is null or not,
    int result = ReviewDialog.processReviewIdSelectionWizardDialog(reviewPhaseNameKey,
                                                                   project, true);
    if (result == WizardDialog.CANCEL) {
      return false;
    }
    // update review Id.
    reviewModel = ReviewModel.getInstance();
    project = reviewModel.getProjectManager().getProject();
    reviewId = reviewModel.getReviewIdManager().getReviewId();
    ReviewerId reviewerId = reviewModel.getReviewerIdManager().getReviewerId();
    // assertion review file should not be null.
    IFile iReviewFile = FileResource.getReviewFile(project, reviewId, reviewerId);
    if (iReviewFile == null) {
      String tkey = "ReviewDialog.noReviewFileDetermined.simpleConfirm.messageDialog.title";
      String title = ReviewI18n.getString(tkey);
      String mKey = "ReviewDialog.noReviewFileDetermined.simpleConfirm.messageDialog.message";
      String message = ReviewI18n.getString(mKey);
      ReviewDialog.openSimpleComfirmMessageDialog(title, message);
      log.debug(message);
      return false;
    }
   
    // check file written permission
    if (iReviewFile.isReadOnly()) {
        String message = "Review file " + iReviewFile + " is readonly. Please make it writable " +
                         "to save your issues.";
        ReviewDialog.openSimpleComfirmMessageDialog("Review Management", message);
    }

    ReviewTableView tableView = ReviewTableView.getActiveView();
    String selectedIssueId = "";
    if (tableView != null) {
      TableItem[] selecteItems = tableView.getTable().getSelection();
      if (selecteItems.length > 0) {
        selectedIssueId = ((ReviewIssue) selecteItems[0].getData()).getIssueId();
      }
    }
   
    ReviewIssueModelManager reviewIssueModelManager = ReviewIssueModelManager.getInstance();
    ReviewIssueModel reviewIssueModel = reviewIssueModelManager.getModel(project, reviewId);
    reviewIssueModel.notifyListeners(ReviewIssueModelEvent.MERGE);

    ColumnDataModelManager columnDataModelManager = ColumnDataModelManager.getInstance();
    ColumnDataModel columnDataModel = columnDataModelManager.getModel(reviewPhaseNameKey);
   
    reviewModel = ReviewModel.getInstance();
    project = reviewModel.getProjectManager().getProject();
    reviewId = reviewModel.getReviewIdManager().getReviewId();
    reviewerId = reviewModel.getReviewerIdManager().getReviewerId();
    iReviewFile = FileResource.getReviewFile(project, reviewId, reviewerId);
    // null happens when the view is not opened yet after Eclipse startup.
    if (tableView == null) {
      tableView = ReviewTableView.bringViewToTop();
    }
    tableView.createColumns(columnDataModel);
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    String reviewIdString = reviewId.getReviewId();
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
    IPreferenceStore store = ReviewPlugin.getInstance().getPreferenceStore();
    String prefFilterKey = FilterPreferencePage.ENABLE_FILTER_STORE_KEY;
    boolean isPrefFilterEnabled = store.getBoolean(prefFilterKey);
    if (isPrefFilterEnabled) {
      tableView.setFilterStatus(isPrefFilterEnabled);
    }
    else {
      if (reviewResource != null) {
        FilterPhase filterPhase = reviewResource.getFilterPhase(reviewPhaseNameKey);
        tableView.setFilterStatus(filterPhase.isEnabled());
      }
    }
   
    // Opens editor view.
    try {
      ReviewEditorView editorView = ReviewEditorView.bringViewToTop();
      TableItem[] tableItems = tableView.getTable().getItems();
      boolean isFound = false;
      // select the previous selected item.
      for (int i = 0; i < tableItems.length; i++) {
        String issueId = ((ReviewIssue) tableItems[i].getData()).getIssueId();
        if (issueId.equals(selectedIssueId)) {
          tableView.getTable().select(i);
          isFound = true;
          break;
        }
      }
      if (!isFound) {
        if (tableView.getTable().getItemCount() > 0) {
          tableView.getTable().select(0);
        }
        else {
          editorView.clearAllFields();
          editorView.setEnable(false);
        }
      }
      ReviewTableViewAction.NOTIFY_EDITOR.run();
      editorView.bringTagToTop(reviewPhaseNameKey);
    }
    catch (ReviewException e) {
      return false;
    }
    return true;
  }
 
  /**
   * Invokes the update menu's command.
   * @param reviewPhaseNameKey the review phase name key.
   * @return <code>true</code> if update process was completed.
   */
  public static boolean doUpdateMenuCommand(String reviewPhaseNameKey) {
    // set the selected review phase name key into review model.
    ReviewModel.getInstance().notifyListeners(reviewPhaseNameKey);
    IProject project = FileResource.getActiveProject();
    // assertion project should not be null.
    if (project == null) {
      String[] projects = FileResource.getOpenedAndReviewIdContainedProjects();
      if (projects.length <= 0) {
        String titleKey = "ReviewDialog.noProjectOpenedAndReviewIdNotification"
                           + ".simpleConfirm.messageDialog.title";
        String title = ReviewI18n.getString(titleKey);
        String messageKey = "ReviewDialog.noProjectOpenedAndReviewIdNotification"
                            + ".simpleConfirm.messageDialog.message";
        String message = ReviewI18n.getString(messageKey);
        ReviewDialog.openSimpleComfirmMessageDialog(title, message);
        return false;
      }
      String projectName = projects[0];
      project = FileResource.getProject(projectName);
    }
    ReviewModel reviewModel = ReviewModel.getInstance();
    ReviewId reviewId = reviewModel.getReviewIdManager().getReviewId();
    reviewPhaseNameKey = reviewModel.getPhaseManager().getPhaseNameKey();
    // if review id is null,
    if (reviewId == null) {
      int result = ReviewDialog.processReviewIdSelectionWizardDialog(reviewPhaseNameKey,
                                                                     project, true);
      if (result == WizardDialog.CANCEL) {
        return false;
      }
    }
    // update review Id.
    reviewModel = ReviewModel.getInstance();
    project = reviewModel.getProjectManager().getProject();
    reviewId = reviewModel.getReviewIdManager().getReviewId();
    ReviewerId reviewerId = reviewModel.getReviewerIdManager().getReviewerId();
    // assertion review file should not be null.
    IFile iReviewFile = FileResource.getReviewFile(project, reviewId, reviewerId);
    if (iReviewFile == null) {
      String titleKey = "ReviewDialog.noReviewFileDetermined.simpleConfirm.messageDialog.title";
      String title = ReviewI18n.getString(titleKey);
      String messageKey = "ReviewDialog.noReviewFileDetermined.simpleConfirm.messageDialog.message";
      String message = ReviewI18n.getString(messageKey);
      ReviewDialog.openSimpleComfirmMessageDialog(title, message);
      log.debug(message);
      return false;
    }
    // check file written permission
    if (iReviewFile.isReadOnly()) {
        String message = "Review file " + iReviewFile + " is readonly. Please make it writable " +
                         "to save your issues.";
        ReviewDialog.openSimpleComfirmMessageDialog("Review Management", message);
    }

    ReviewTableView view = ReviewTableView.getActiveView();
    int previousIndex = 0;
    if (view != null) {
      previousIndex = view.getTable().getSelectionIndex();
    }
   
    ReviewIssueModelManager reviewIssueModelManager = ReviewIssueModelManager.getInstance();
    ReviewIssueModel reviewIssueModel = reviewIssueModelManager.getModel(project, reviewId);
    log.debug("review issue model size: " + reviewIssueModel.size());
    reviewIssueModel.notifyListeners(ReviewIssueModelEvent.MERGE);

    ColumnDataModelManager columnDataModelManager = ColumnDataModelManager.getInstance();
    ColumnDataModel columnDataModel = columnDataModelManager.getModel(reviewPhaseNameKey);
   
    reviewModel = ReviewModel.getInstance();
    project = reviewModel.getProjectManager().getProject();
    reviewId = reviewModel.getReviewIdManager().getReviewId();
    reviewerId = reviewModel.getReviewerIdManager().getReviewerId();
    iReviewFile = FileResource.getReviewFile(project, reviewId, reviewerId);
    // null happens when the view is not opened yet after Eclipse startup.
    if (view == null) {
      log.debug("view is null");
      view = ReviewTableView.bringViewToTop();
    }
    view.createColumns(columnDataModel);
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    String reviewIdString = reviewId.getReviewId();
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
    IPreferenceStore store = ReviewPlugin.getInstance().getPreferenceStore();
    String prefFilterKey = FilterPreferencePage.ENABLE_FILTER_STORE_KEY;
    boolean isPrefFilterEnabled = store.getBoolean(prefFilterKey);
    if (isPrefFilterEnabled) {
      view.setFilterStatus(isPrefFilterEnabled);
    }
    else {
      if (reviewResource != null) {
        FilterPhase filterPhase = reviewResource.getFilterPhase(reviewPhaseNameKey);
        view.setFilterStatus(filterPhase.isEnabled());
      }
    }
   
    // Opens editor view.
    try {     
      ReviewEditorView editorView = ReviewEditorView.bringViewToTop();
      if (previousIndex != -1 && previousIndex < view.getTable().getItemCount()) {
        view.getTable().select(previousIndex);
        ReviewTableViewAction.NOTIFY_EDITOR.run();
      }
      else {
        editorView.setEnable(false);
      }
      editorView.bringTagToTop(reviewPhaseNameKey);
    }
    catch (ReviewException e) {
      log.debug(e.getMessage());
      return false;
    }
    return true;
  }
}
TOP

Related Classes of edu.hawaii.ics.csdl.jupiter.ui.menu.PhaseSelectionMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.