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

Source Code of edu.hawaii.ics.csdl.jupiter.ui.wizard.ReviewIdNewReviewerPage

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

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;

import edu.hawaii.ics.csdl.jupiter.ReviewI18n;
import edu.hawaii.ics.csdl.jupiter.ReviewPlugin;
import edu.hawaii.ics.csdl.jupiter.file.PropertyResource;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewerId;

/**
* Provides reviewer page.
*
* @author Takuya Yamashita
* @version $Id: ReviewIdNewReviewerPage.java 181 2011-01-18 03:57:18Z jsakuda $
*/
public class ReviewIdNewReviewerPage extends WizardPage {
  private Table reviewerListTable;
  private Button addButton;
  private Button removeButton;
  private Combo previousReviewIdCombo;
  private Map<String, ReviewerId> reviewers = new TreeMap<String, ReviewerId>();
  private IProject project;

  /**
   * Instantiates the config reviewer page.
   *
   * @param project the project.
   * @param pageName the page name
   * @param imageFilePath the image file path.
   */
  protected ReviewIdNewReviewerPage(IProject project, String pageName, String imageFilePath) {
    super(pageName);
    setImageDescriptor(ReviewPlugin.createImageDescriptor(imageFilePath));
    setTitle(ReviewI18n.getString("ReviewIdNewReviewerPage.label.title"));
    setDescription(ReviewI18n.getString("ReviewIdNewReviewerPage.label.title.description"));
    this.project = project;
  }

  /**
   * Creates control.
   *
   * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
   */
  public void createControl(Composite ancestor) {
    Composite parent = createsGeneralComposite(ancestor);
    createrReviewerListContent(parent);
    fillReviewerTable(false);
    setControl(parent);
    setPageComplete(isTableNonEmpty());
  }

  /**
   * Creates view preference frame and return the child composite.
   *
   * @param parent the parent composite.
   * @return the child composite.
   */
  private Composite createsGeneralComposite(Composite parent) {
    Composite child = new Composite(parent, SWT.LEFT);
    FormLayout layout = new FormLayout();
    layout.marginWidth = 7;
    layout.marginHeight = 7;
    child.setLayout(layout);
    return child;
  }

  /**
   * Creates view preference content.
   *
   * @param parent the parent composite.
   */
  private void createrReviewerListContent(Composite parent) {
    this.reviewerListTable = new Table(parent, SWT.BORDER | SWT.MULTI);
    FormData reviewerListTableData = new FormData();
    reviewerListTableData.left = new FormAttachment(0, 0);
    reviewerListTableData.right = new FormAttachment(80, 0);
    reviewerListTableData.top = new FormAttachment(0, 0);
    reviewerListTableData.bottom = new FormAttachment(100, 0);
    reviewerListTable.setLayoutData(reviewerListTableData);
    reviewerListTable.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        handleReviewListSelection();
      }
    });

    this.addButton = new Button(parent, SWT.PUSH);
    addButton.setText(ReviewI18n.getString("ReviewIdNewReviewerPage.label.button.add"));
    addButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        addReviewer();
      }
    });
    FormData addButtonData = new FormData();
    addButtonData.top = new FormAttachment(reviewerListTable, 0, SWT.TOP);
    addButtonData.left = new FormAttachment(reviewerListTable, 10);
    addButtonData.right = new FormAttachment(100, 0);
    addButton.setLayoutData(addButtonData);

    this.removeButton = new Button(parent, SWT.PUSH);
    removeButton.setText(ReviewI18n.getString("ReviewIdNewReviewerPage.label.button.remove"));
    removeButton.setEnabled(false);
    removeButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        removeReviewer();
      }
    });
    FormData removeButtonData = new FormData();
    removeButtonData.top = new FormAttachment(addButton, 5);
    removeButtonData.left = new FormAttachment(addButton, 0, SWT.LEFT);
    removeButtonData.right = new FormAttachment(100, 0);
    removeButton.setLayoutData(removeButtonData);
  }

  /**
   * Fills the reviewer table with reviewers. Sets <code>true</code> if items are just
   * updated. Sets <code>false</code> if items are read from the property resource.
   *
   * @param isUpdate <code>true</code> if items are just updated. <code>false</code> if
   *          items are read from the property resource.
   */
  public void fillReviewerTable(boolean isUpdate) {
    removeAllItemsInReviewerTable();
    if (!isUpdate) {
      PropertyResource reviewIdResource = PropertyResource.getInstance(this.project, true);
      Map<String, ReviewerId> reviewersMap = reviewIdResource
          .getReviewers(PropertyResource.DEFAULT_ID);
      this.reviewers = new TreeMap<String, ReviewerId>(reviewersMap);
    }
    for (Iterator<String> i = this.reviewers.keySet().iterator(); i.hasNext();) {
      String reviewerId = i.next();
      TableItem item = new TableItem(this.reviewerListTable, SWT.NONE);
      item.setText(reviewerId);
    }
  }

  /**
   * Removes all items in the review table.
   */
  private void removeAllItemsInReviewerTable() {
    TableItem[] items = this.reviewerListTable.getItems();
    for (int i = 0; i < items.length; i++) {
      items[i].dispose();
    }
  }

  /**
   * Creates review id list.
   *
   * @param parent the composite.
   */
  private void createReviewIdList(Composite parent) {
    this.previousReviewIdCombo = new Combo(parent, SWT.READ_ONLY);
    previousReviewIdCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        // modifyWidth();
      }
    });
    FormData previousReviewIdComboData = new FormData();
    previousReviewIdComboData.top = new FormAttachment(reviewerListTable, 5);
    previousReviewIdComboData.left = new FormAttachment(reviewerListTable, 0, SWT.LEFT);
    previousReviewIdComboData.right = new FormAttachment(80, 0);
    previousReviewIdCombo.setLayoutData(previousReviewIdComboData);
  }

  /**
   * Creates candidate reviewer list.
   *
   * @param parent the composite.
   */
  private void createCandidateReviewerList(Composite parent) {
    Table previousReviewerListTable = new Table(parent, SWT.CHECK | SWT.BORDER);
    FormData previousReviewerListTableData = new FormData();
    previousReviewerListTableData.left = new FormAttachment(reviewerListTable, 0, SWT.LEFT);
    previousReviewerListTableData.right = new FormAttachment(80, 0);
    previousReviewerListTableData.top = new FormAttachment(previousReviewIdCombo, 5);
    previousReviewerListTableData.bottom = new FormAttachment(100, 0);
    previousReviewerListTable.setLayoutData(previousReviewerListTableData);
    previousReviewerListTable.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        // handleSelection((TableItem) e.item);
      }
    });

    Button addPreviousReviewerButton = new Button(parent, SWT.PUSH);
    addPreviousReviewerButton.setText("Add above");
    addPreviousReviewerButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        // modifyWidth();
      }
    });
    FormData addPreviousReviewerButtonData = new FormData();
    addPreviousReviewerButtonData.top = new FormAttachment(previousReviewerListTable, 0,
        SWT.TOP);
    addPreviousReviewerButtonData.left = new FormAttachment(previousReviewerListTable, 10);
    addPreviousReviewerButtonData.right = new FormAttachment(100, 0);
    addPreviousReviewerButton.setLayoutData(addPreviousReviewerButtonData);
  }

  /**
   * Adds a reviewer to the reviewer list.
   */
  protected void addReviewer() {
    IInputValidator validator = new IInputValidator() {
      public String isValid(String newText) {
        if (!reviewers.containsKey(newText)) {
          return null;
        }
        else {
          String errorKey = "ReviewIdNewReviewerPage.dialogMessage.label.error";
          return ReviewI18n.getString(errorKey);
        }
      }
    };
    InputDialog dialog = new InputDialog(getShell(), ReviewI18n
        .getString("ReviewIdNewReviewerPage.dialogMessage.label.short"), ReviewI18n
        .getString("ReviewIdNewReviewerPage.dialogMessage.label.long"), null, validator); //$NON-NLS-1$ //$NON-NLS-2$
    dialog.open();
    if (dialog.getReturnCode() != InputDialog.OK) {
      return;
    }
    String reviewerId = dialog.getValue();
    ReviewerId reviewer = new ReviewerId(reviewerId, reviewerId);
    this.reviewers.put(reviewerId, reviewer);
    fillReviewerTable(true);
    updateAuthorCandidates(this.reviewers);
    getWizard().getContainer().updateButtons();
    setPageComplete(isTableNonEmpty());
  }

  /**
   * Removes a reviewer form the reviewer list.
   */
  private void removeReviewer() {
    TableItem[] items = this.reviewerListTable.getSelection();
    for (int i = 0; i < items.length; i++) {
      TableItem item = items[i];
      this.reviewers.remove(item.getText());
      item.dispose();
    }
    fillReviewerTable(true);
    this.removeButton.setEnabled(this.reviewerListTable.getItemCount() > 0);
    getWizard().getContainer().updateButtons();
    setPageComplete(isTableNonEmpty());
  }

  /**
   * Handles the table selection.
   */
  private void handleReviewListSelection() {
    boolean isSelected = (this.reviewerListTable.getSelectionIndex() >= 0);
    this.addButton.setEnabled(isSelected);
    this.removeButton.setEnabled(isSelected);
  }

  /**
   * Updates the author candidate list.
   *
   * @param reviewers the reviewers which would be the candidates for the author.
   */
  private void updateAuthorCandidates(Map<String, ReviewerId> reviewers) {
    IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_AUTHOR);
    ReviewIdNewAuthorPage configAuthorPage = (ReviewIdNewAuthorPage) page;
    String selectedAuthor = configAuthorPage.getAuthor();
    configAuthorPage.setAuthorItems(this.reviewers.keySet().toArray(new String[] {}));
    configAuthorPage.setDefaultAuthor(selectedAuthor);
  }

  /**
   * Returns the next page. Saves the values from this page in the model associated with the
   * wizard. Initializes the widgets on the next page.
   *
   * @return the next page.
   */
  public IWizardPage getNextPage() {
    return getWizard().getPage(ReviewIdNewWizard.PAGE_AUTHOR);
  }

  /**
   * Checks if the wizard can flip to the next page.
   *
   * @return <code>true</code> if it can flip to the next page.
   */
  public boolean canFlipToNextPage() {
    return isPageComplete();
  }

  /**
   * Checks if the table has at least one reviewer.
   *
   * @return <code>true</code> if the table has at least one reviewer.
   */
  private boolean isTableNonEmpty() {
    return (this.reviewers.size() > 0);
  }

  /**
   * Gets the map of the String reviewer id - ReviewerId instance.
   *
   * @return the map of the String reviewer id - ReviewerId instance.
   */
  public Map<String, ReviewerId> getReviewers() {
    return this.reviewers;
  }
}
TOP

Related Classes of edu.hawaii.ics.csdl.jupiter.ui.wizard.ReviewIdNewReviewerPage

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.