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

Source Code of edu.hawaii.ics.csdl.jupiter.ui.property.ReviewIdEditDialog

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

import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.graphics.Image;
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.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Scrollable;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;

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.file.FieldItem;
import edu.hawaii.ics.csdl.jupiter.file.FileResource;
import edu.hawaii.ics.csdl.jupiter.file.PropertyConstraints;
import edu.hawaii.ics.csdl.jupiter.file.PropertyResource;
import edu.hawaii.ics.csdl.jupiter.file.PropertyXmlSerializer;
import edu.hawaii.ics.csdl.jupiter.file.ReviewResource;
import edu.hawaii.ics.csdl.jupiter.file.property.Review;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewId;
import edu.hawaii.ics.csdl.jupiter.model.review.ReviewerId;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.ResolutionKeyManager;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.SeverityKeyManager;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.StatusKeyManager;
import edu.hawaii.ics.csdl.jupiter.model.reviewissue.TypeKeyManager;
import edu.hawaii.ics.csdl.jupiter.ui.ReviewFileContentProvider;
import edu.hawaii.ics.csdl.jupiter.ui.ReviewFileLabelProvider;
import edu.hawaii.ics.csdl.jupiter.ui.ReviewFileSelectionStatusValidator;
import edu.hawaii.ics.csdl.jupiter.ui.view.table.FilterEntry;
import edu.hawaii.ics.csdl.jupiter.ui.view.table.FilterPhase;
import edu.hawaii.ics.csdl.jupiter.util.JupiterLogger;
import edu.hawaii.ics.csdl.jupiter.util.TabFolderLayout;

/**
* Provides review id edit dialog.
*
* @author Takuya Yamashita
* @version $Id: ReviewIdEditDialog.java 144 2008-10-19 22:49:03Z jsakuda $
*/
public class ReviewIdEditDialog extends Dialog {
  /** Jupiter logger */
  private JupiterLogger log = JupiterLogger.getLogger();

  private Text reviewIdText;
  private Text reviewIdDescriptionText;
  private IProject project;
  private ReviewId reviewId;
  private Table reviewerListTable;
  private Button addButtonInReviewer;
  private Button removeButtonInReviewer;
  private Button addButtonInFile;
  private Button removeButtonInFile;
  private Map<String, ReviewerId> reviewers;
  private Set<String> files;
  private Combo authorCombo;
  private Text storageText;
  private static final int WIDTH = 400;
  private int folderWidth;
  private Combo defaultTypeCombo;
  private Combo defaultSeverityCombo;
  private Combo defaultResolutionCombo;
  private Combo defaultStatusCombo;
  private Table fileListTable;
  private Combo itemCombo;
  /** The map of the String field item id - <code>FieldItem</code> instance. */
  private Map<String, FieldItem> fieldItemIdFieldItemMap;
  /** The list of the String field item IDs. */
  private List<String> fieldItemIdList;
  private Table itemListTable;
  private Button newButtonInItemEntries;
  private Button removeButtonInItemEntries;
  private Button editButtonInItemEntries;
  private Button upButtonInItemEntries;
  private Button downButtonInItemEntries;
  private Button restoreButtonInItemEntries;
  private Combo phaseCombo;
  private Map<String, FilterPhase> phaseNameFilterPhaseMap;
  private Button enabledCheckButton;
  private Button intervalCheckButton;
  private Text intervalFilterText;
  private Button reviewerCheckButton;
  private Combo reviewerFilterCombo;
  private Button typeCheckButton;
  private Combo typeFilterCombo;
  private Button severityCheckButton;
  private Combo severityFilterCombo;
  private Button assignedToCheckButton;
  private Combo assignedToFilterCombo;
  private Button resolutionCheckButton;
  private Combo resolutionFilterCombo;
  private Button statusCheckButton;
  private Combo statusFilterCombo;
  private Button fileCheckButton;
  private Combo fileFilterCombo;

  /**
   * Instantiates the review id edit dialog.
   *
   * @param parentShell the shell.
   * @param project the project.
   * @param reviewId the review id.
   */
  public ReviewIdEditDialog(Shell parentShell, IProject project, ReviewId reviewId) {
    super(parentShell);
    String imageFilePath = "icons/jupiter.gif";
    Image iconJupiter = ReviewPlugin.createImageDescriptor(imageFilePath).createImage();
    setDefaultImage(iconJupiter);
    this.project = project;
    this.reviewId = reviewId;
  }

  /**
   * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
   */
  protected Control createDialogArea(Composite parent) {
    getShell().setText(ReviewI18n.getString("ReviewIdEditDialog.label.title"));
    Composite composite = (Composite) super.createDialogArea(parent);
    Composite dialog = createsGeneralComposite(composite);
    FormLayout layout = (FormLayout) dialog.getLayout();
    folderWidth += (WIDTH - layout.marginWidth * 2);
    createReviewIdContent(dialog);
    createReviewIdDescriptionContent(dialog);
    TabFolder folder = createTabFolder(dialog);
    FormData folderData = (FormData) folder.getLayoutData();
    createFileTabContent(folder);
    createReviewerTabContent(folder);
    craeteAuthorTabContent(folder);
    createStorageTabContent(folder);
    createItemEntriesTabContent(folder);
    createDefaultItemsTabContent(folder);
    createFiltersTabContent(folder);
    return composite;
  }

  /**
   * 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 review ID content.
   *
   * @param parent the composite.
   */
  private void createReviewIdContent(Composite parent) {
    Label reviewIdLabel = new Label(parent, SWT.NONE);
    reviewIdLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.reviewId"));
    this.reviewIdText = new Text(parent, SWT.SINGLE | SWT.BORDER);
    FormData reviewIdLabelData = new FormData();
    reviewIdLabelData.top = new FormAttachment(reviewIdText, 0, SWT.CENTER);
    reviewIdLabel.setLayoutData(reviewIdLabelData);
    FormData reviewIdTextData = new FormData();
    reviewIdTextData.left = new FormAttachment(reviewIdLabel, 20, SWT.RIGHT);
    reviewIdTextData.right = new FormAttachment(100, 0);
    reviewIdText.setLayoutData(reviewIdTextData);
    reviewIdText.setEditable(false);
    reviewIdText.setText(reviewId.getReviewId());
  }

  /**
   * Creates review id description content.
   *
   * @param parent the composite.
   */
  private void createReviewIdDescriptionContent(Composite parent) {
    Label reviewIdDescriptionLabel = new Label(parent, SWT.NONE);
    String description = ReviewI18n.getString("ReviewIdEditDialog.label.description");
    reviewIdDescriptionLabel.setText(description);
    this.reviewIdDescriptionText = new Text(parent, SWT.SINGLE | SWT.BORDER);
    FormData reviewIdDescriptionLabelData = new FormData();
    reviewIdDescriptionLabelData.top = new FormAttachment(reviewIdDescriptionText, 0,
        SWT.CENTER);
    reviewIdDescriptionLabel.setLayoutData(reviewIdDescriptionLabelData);
    FormData reviewIdDescriptionTextData = new FormData();
    reviewIdDescriptionTextData.top = new FormAttachment(reviewIdText, 5);
    reviewIdDescriptionTextData.left = new FormAttachment(reviewIdText, 0, SWT.LEFT);
    reviewIdDescriptionTextData.right = new FormAttachment(100, 0);
    reviewIdDescriptionText.setLayoutData(reviewIdDescriptionTextData);
    reviewIdDescriptionText.setText(ReviewI18n.getString(reviewId.getDescription()));
    if (reviewId.getReviewId().equals(PropertyConstraints.DEFAULT_REVIEW_ID)) {
      reviewIdDescriptionText.setEditable(false);
    }
  }

  /**
   * Creates tab folder.
   *
   * @param dialog the composite.
   * @return the <code>TabFolder</code> instance.
   */
  private TabFolder createTabFolder(Composite dialog) {
    TabFolder folder = new TabFolder(dialog, SWT.NONE);
    folder.setLayout(new TabFolderLayout());
    FormData folderData = new FormData();
    folderData.width = folderWidth;
    folderData.top = new FormAttachment(reviewIdDescriptionText, 5);
    folderData.left = new FormAttachment(0, 0);
    folderData.right = new FormAttachment(100, 0);
    folder.setLayoutData(folderData);
    return folder;
  }

  /**
   * Creates reviewer tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createReviewerTabContent(TabFolder folder) {
    TabItem reviewerTabItem = new TabItem(folder, SWT.NONE);
    String reviewerLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.reviewer");
    reviewerTabItem.setText(reviewerLabel);
    reviewerTabItem.setControl(createReviewerFolder(folder));
  }

  /**
   * Creates author tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void craeteAuthorTabContent(TabFolder folder) {
    TabItem authorTabItem = new TabItem(folder, SWT.NONE);
    String authorLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.author");
    authorTabItem.setText(authorLabel);
    authorTabItem.setControl(createAuthorFolder(folder));
  }

  /**
   * Creates storage tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createStorageTabContent(TabFolder folder) {
    TabItem storageTabItem = new TabItem(folder, SWT.NONE);
    String authorLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.storage");
    storageTabItem.setText(authorLabel);
    storageTabItem.setControl(createStorageFolder(folder));
  }

  /**
   * Creates the default items tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createDefaultItemsTabContent(TabFolder folder) {
    TabItem defaultItemsTabItem = new TabItem(folder, SWT.NONE);
    String defaultItemsLabel = ReviewI18n
        .getString("ReviewIdEditDialog.label.tab.defaultItems");
    defaultItemsTabItem.setText(defaultItemsLabel);
    defaultItemsTabItem.setControl(createDefaultItemsFolder(folder));
  }

  /**
   * Creates the filters tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createFiltersTabContent(TabFolder folder) {
    TabItem filtersTabItem = new TabItem(folder, SWT.NONE);
    String filtersLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.filters");
    filtersTabItem.setText(filtersLabel);
    filtersTabItem.setControl(createfiltersFolder(folder));
  }

  /**
   * Creates the item entries tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createItemEntriesTabContent(TabFolder folder) {
    TabItem itemEntriesTabItem = new TabItem(folder, SWT.NONE);
    String itemEntriesLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.itemEntries");
    itemEntriesTabItem.setText(itemEntriesLabel);
    itemEntriesTabItem.setControl(createItemEntriesFolder(folder));
  }

  /**
   * Creates the file tab content in the <code>TabFolder</code>.
   *
   * @param folder the <code>TabFolder</code> instance.
   */
  private void createFileTabContent(TabFolder folder) {
    TabItem fileTabItem = new TabItem(folder, SWT.NONE);
    String fileLabel = ReviewI18n.getString("ReviewIdEditDialog.label.tab.file");
    fileTabItem.setText(fileLabel);
    fileTabItem.setControl(createFileFolder(folder));
  }

  /**
   * Creates reviewer table folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createReviewerFolder(TabFolder folder) {
    Composite composite = createsGeneralComposite(folder);
    this.reviewerListTable = new Table(composite, 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);
    reviewerListTableData.height = 150;
    reviewerListTable.setLayoutData(reviewerListTableData);
    reviewerListTable.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        handleReviewListSelection();
      }
    });
    fillReviewerTable(false);

    this.addButtonInReviewer = new Button(composite, SWT.PUSH);
    String addKey = "ReviewIdEditDialog.label.tab.reviewer.button.add";
    addButtonInReviewer.setText(ReviewI18n.getString(addKey));
    addButtonInReviewer.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);
    addButtonInReviewer.setLayoutData(addButtonData);

    this.removeButtonInReviewer = new Button(composite, SWT.PUSH);
    String removeKey = "ReviewIdEditDialog.label.tab.reviewer.button.remove";
    removeButtonInReviewer.setText(ReviewI18n.getString(removeKey));
    removeButtonInReviewer.setEnabled(false);
    removeButtonInReviewer.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        removeReviewer();
      }
    });
    FormData removeButtonData = new FormData();
    removeButtonData.top = new FormAttachment(addButtonInReviewer, 5);
    removeButtonData.left = new FormAttachment(addButtonInReviewer, 0, SWT.LEFT);
    removeButtonData.right = new FormAttachment(100, 0);
    removeButtonInReviewer.setLayoutData(removeButtonData);

    return composite;
  }

  /**
   * Creates author folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createAuthorFolder(TabFolder folder) {
    Composite composite = createsGeneralComposite(folder);
    int marginWidth = ((FormLayout) composite.getLayout()).marginWidth;
    Label authorLabel = new Label(composite, SWT.NONE);
    authorLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.author"));
    this.authorCombo = new Combo(composite, SWT.READ_ONLY);
    authorCombo.setData(authorCombo);
    authorCombo.setItems((String[]) this.reviewers.keySet().toArray(new String[] {}));
    authorCombo.setText(reviewId.getAuthor());

    FormData authorLabelData = new FormData();
    authorLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    authorLabelData.top = new FormAttachment(authorCombo, 0, SWT.CENTER);
    authorLabel.setLayoutData(authorLabelData);
    FormData authorComboData = new FormData();
    authorComboData.left = new FormAttachment(authorLabel, 0);
    authorComboData.right = new FormAttachment(100, 0);
    authorCombo.setLayoutData(authorComboData);
    return composite;
  }

  /**
   * Creates storage folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createStorageFolder(TabFolder folder) {
    Composite composite = createsGeneralComposite(folder);
    int marginWidth = ((FormLayout) composite.getLayout()).marginWidth;
    Label storageLabel = new Label(composite, SWT.NONE);
    storageLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.storage"));
    this.storageText = new Text(composite, SWT.BORDER);
    storageText.setText(reviewId.getDirectory());

    FormData storageLabelData = new FormData();
    storageLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    storageLabelData.top = new FormAttachment(storageText, 0, SWT.CENTER);
    storageLabel.setLayoutData(storageLabelData);
    FormData storageTextData = new FormData();
    storageTextData.left = new FormAttachment(storageLabel, 0);
    storageTextData.right = new FormAttachment(100, 0);
    storageText.setLayoutData(storageTextData);
    return composite;
  }

  /**
   * Creates default items folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createDefaultItemsFolder(TabFolder folder) {
    Composite composite = createsGeneralComposite(folder);
    int marginWidth = ((FormLayout) composite.getLayout()).marginWidth;
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    String reviewIdString = reviewId.getReviewId();
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);

    // create type label and its combo.
    Label defaultTypeLabel = new Label(composite, SWT.NONE);
    defaultTypeLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.type"));
    this.defaultTypeCombo = new Combo(composite, SWT.READ_ONLY);
    defaultTypeCombo.setData(defaultTypeCombo);
    defaultTypeCombo.setItems(TypeKeyManager.getInstance(project, reviewId).getElements());
    String typeName = PropertyConstraints.ATTRIBUTE_VALUE_TYPE;
    String typeKey = (reviewResource != null) ? reviewResource.getDefaultField(typeName) : "";
    defaultTypeCombo.setText(ReviewI18n.getString(typeKey));
    defaultTypeCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String nameId = PropertyConstraints.ATTRIBUTE_VALUE_TYPE;
        FieldItem fieldItem = (FieldItem) fieldItemIdFieldItemMap.get(nameId);
        fieldItem.setDefaultKey(ReviewI18n.getKey(defaultTypeCombo.getText()));
      }
    });

    FormData defaultTypeLabelData = new FormData();
    defaultTypeLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    defaultTypeLabelData.top = new FormAttachment(defaultTypeCombo, 0, SWT.CENTER);
    defaultTypeLabel.setLayoutData(defaultTypeLabelData);
    FormData defaultTypeComboData = new FormData();
    defaultTypeComboData.left = new FormAttachment(defaultTypeLabel, 0);
    defaultTypeComboData.right = new FormAttachment(100, 0);
    defaultTypeCombo.setLayoutData(defaultTypeComboData);

    // create severity label and its combo.
    Label defaultSeverityLabel = new Label(composite, SWT.NONE);
    defaultSeverityLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.severity"));
    this.defaultSeverityCombo = new Combo(composite, SWT.READ_ONLY);
    defaultSeverityCombo.setData(defaultSeverityCombo);
    defaultSeverityCombo.setItems(SeverityKeyManager.getInstance(project, reviewId)
        .getElements());
    String severityName = PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY;
    String severityKey = (reviewResource != null) ? reviewResource
        .getDefaultField(severityName) : "";
    defaultSeverityCombo.setText(ReviewI18n.getString(severityKey));
    defaultSeverityCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String nameId = PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY;
        FieldItem fieldItem = (FieldItem) fieldItemIdFieldItemMap.get(nameId);
        fieldItem.setDefaultKey(ReviewI18n.getKey(defaultSeverityCombo.getText()));
      }
    });

    FormData defaultSeverityLabelData = new FormData();
    defaultSeverityLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    defaultSeverityLabelData.top = new FormAttachment(defaultSeverityCombo, 0, SWT.CENTER);
    defaultSeverityLabel.setLayoutData(defaultSeverityLabelData);
    FormData defaultSeverityComboData = new FormData();
    defaultSeverityComboData.top = new FormAttachment(defaultTypeCombo, 5);
    defaultSeverityComboData.left = new FormAttachment(defaultSeverityLabel, 0);
    defaultSeverityComboData.right = new FormAttachment(100, 0);
    defaultSeverityCombo.setLayoutData(defaultSeverityComboData);

    // create resolution label and its combo.
    Label defaultResolutionLabel = new Label(composite, SWT.NONE);
    defaultResolutionLabel
        .setText(ReviewI18n.getString("ReviewIdEditDialog.label.resolution"));
    this.defaultResolutionCombo = new Combo(composite, SWT.READ_ONLY);
    defaultResolutionCombo.setData(defaultResolutionCombo);
    ResolutionKeyManager resolutionKeyManager = ResolutionKeyManager.getInstance(project,
        reviewId);
    defaultResolutionCombo.setItems(resolutionKeyManager.getElements());
    String resolutionName = PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION;
    String resolutionKey = (reviewResource != null) ? reviewResource
        .getDefaultField(resolutionName) : "";
    defaultResolutionCombo.setText(ReviewI18n.getString(resolutionKey));
    defaultResolutionCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String nameId = PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION;
        FieldItem fieldItem = (FieldItem) fieldItemIdFieldItemMap.get(nameId);
        fieldItem.setDefaultKey(ReviewI18n.getKey(defaultResolutionCombo.getText()));
      }
    });

    FormData defaultResolutionLabelData = new FormData();
    defaultResolutionLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    defaultResolutionLabelData.top = new FormAttachment(defaultResolutionCombo, 0, SWT.CENTER);
    defaultResolutionLabel.setLayoutData(defaultResolutionLabelData);
    FormData defaultResolutionComboData = new FormData();
    defaultResolutionComboData.top = new FormAttachment(defaultSeverityCombo, 5);
    defaultResolutionComboData.left = new FormAttachment(defaultResolutionLabel, 0);
    defaultResolutionComboData.right = new FormAttachment(100, 0);
    defaultResolutionCombo.setLayoutData(defaultResolutionComboData);

    // create status label and its combo.
    Label defaultStatusLabel = new Label(composite, SWT.NONE);
    defaultStatusLabel.setText(ReviewI18n.getString("ReviewIdEditDialog.label.status"));
    this.defaultStatusCombo = new Combo(composite, SWT.READ_ONLY);
    defaultStatusCombo.setData(defaultStatusCombo);
    defaultStatusCombo.setItems(StatusKeyManager.getInstance(project, reviewId).getElements());
    String statusName = PropertyConstraints.ATTRIBUTE_VALUE_STATUS;
    String statusKey = (reviewResource != null) ? reviewResource.getDefaultField(statusName)
        : "";
    defaultStatusCombo.setText(ReviewI18n.getString(statusKey));
    defaultStatusCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String nameId = PropertyConstraints.ATTRIBUTE_VALUE_STATUS;
        FieldItem fieldItem = (FieldItem) fieldItemIdFieldItemMap.get(nameId);
        fieldItem.setDefaultKey(ReviewI18n.getKey(defaultStatusCombo.getText()));
      }
    });

    FormData defaultStatusLabelData = new FormData();
    defaultStatusLabelData.width = (int) ((folderWidth - marginWidth * 2) * 0.45);
    defaultStatusLabelData.top = new FormAttachment(defaultStatusCombo, 0, SWT.CENTER);
    defaultStatusLabel.setLayoutData(defaultStatusLabelData);
    FormData defaultStatusComboData = new FormData();
    defaultStatusComboData.top = new FormAttachment(defaultResolutionCombo, 5);
    defaultStatusComboData.left = new FormAttachment(defaultStatusLabel, 0);
    defaultStatusComboData.right = new FormAttachment(100, 0);
    defaultStatusCombo.setLayoutData(defaultStatusComboData);
    return composite;
  }

  /**
   * Creates filters folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createfiltersFolder(TabFolder folder) {
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    String reviewIdString = reviewId.getReviewId();
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
    this.phaseNameFilterPhaseMap = reviewResource.getPhaseNameToFilterPhaseMap();
    List<String> phaseNameList = reviewResource.getPhaseNameList();
    Composite composite = createsGeneralComposite(folder);
    this.phaseCombo = new Combo(composite, SWT.READ_ONLY);
    phaseCombo.setData(phaseCombo);
    String[] items = (String[]) phaseNameList.toArray(new String[] {});
    phaseCombo.setItems(items);
    phaseCombo.setText(items[0]);
    phaseCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        fillNewValueInCombos(phaseCombo.getText());
      }
    });
    FormData phaseComboData = new FormData();
    phaseComboData.left = new FormAttachment(0, 0);
    phaseComboData.right = new FormAttachment(100, 0);
    phaseCombo.setLayoutData(phaseComboData);

    this.enabledCheckButton = new Button(composite, SWT.CHECK);
    String enableKey = "ReviewIdEditDialog.label.tab.filters.check.enabled";
    enabledCheckButton.setText(ReviewI18n.getString(enableKey));
    String phaseName = this.phaseCombo.getText();
    FilterPhase filterPhase = (FilterPhase) this.phaseNameFilterPhaseMap.get(phaseName);
    enabledCheckButton.setSelection(filterPhase.isEnabled());
    enabledCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        handleEnabledCheck();
        boolean isEnabled = enabledCheckButton.getSelection();
        updateFilterEnabled(null, isEnabled);
      }
    });

    FormData enabledCheckButtonData = new FormData();
    enabledCheckButtonData.top = new FormAttachment(phaseCombo, 10);
    enabledCheckButtonData.left = new FormAttachment(phaseCombo, 0, SWT.LEFT);
    enabledCheckButtonData.right = new FormAttachment(100, 0);
    enabledCheckButton.setLayoutData(enabledCheckButtonData);

    this.intervalCheckButton = new Button(composite, SWT.CHECK);
    String intervalKey = "ReviewIdEditDialog.label.tab.filters.check.interval";
    intervalCheckButton.setText(ReviewI18n.getString(intervalKey));
    int x = intervalCheckButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x;
    FormData intervalCheckButtonData = new FormData();
    intervalCheckButtonData.top = new FormAttachment(enabledCheckButton, 20);
    intervalCheckButton.setLayoutData(intervalCheckButtonData);
    FilterEntry entry = filterPhase
        .getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_INTERVAL);
    intervalCheckButton.setSelection(entry.isEnabled());
    this.intervalFilterText = new Text(composite, SWT.BORDER);
    intervalFilterText.addFocusListener(new FocusListener() {
      public void focusGained(FocusEvent event) {
      }

      public void focusLost(FocusEvent event) {
        String key = intervalFilterText.getText();
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_INTERVAL, key);
      }
    });
    FormData intervalFilterTextData = new FormData();
    intervalFilterTextData.top = new FormAttachment(intervalCheckButton, 0, SWT.CENTER);
    intervalFilterTextData.left = new FormAttachment(intervalCheckButton, x + 20, SWT.LEFT);
    intervalFilterTextData.right = new FormAttachment(100, 0);
    intervalFilterText.setLayoutData(intervalFilterTextData);
    intervalFilterText.setText(ReviewI18n.getString(entry.getValueKey()));
    intervalFilterText.setEnabled(intervalCheckButton.getSelection());
    intervalCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = intervalCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, intervalFilterText);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_INTERVAL, isEnabled);
      }
    });

    this.reviewerCheckButton = new Button(composite, SWT.CHECK);
    String reviewerKey = "ReviewIdEditDialog.label.tab.filters.check.reviewer";
    reviewerCheckButton.setText(ReviewI18n.getString(reviewerKey));
    FormData reviewerCheckButtonData = new FormData();
    reviewerCheckButtonData.top = new FormAttachment(intervalCheckButton, 10);
    reviewerCheckButton.setLayoutData(reviewerCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_REVIEWER);
    reviewerCheckButton.setSelection(entry.isEnabled());
    this.reviewerFilterCombo = new Combo(composite, SWT.READ_ONLY);
    reviewerFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = reviewerFilterCombo.getText();
        if (value.equals(ReviewI18n.getString(ReviewerId.AUTOMATIC_KEY))) {
          value = ReviewerId.AUTOMATIC_KEY;
        }
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_REVIEWER, value);
      }
    });
    FormData reviewerFilterComboData = new FormData();
    reviewerFilterComboData.top = new FormAttachment(reviewerCheckButton, 0, SWT.CENTER);
    reviewerFilterComboData.left = new FormAttachment(reviewerCheckButton, x + 20, SWT.LEFT);
    reviewerFilterComboData.right = new FormAttachment(100, 0);
    reviewerFilterCombo.setLayoutData(reviewerFilterComboData);
    reviewerFilterCombo.setEnabled(reviewerCheckButton.getSelection());
    String reviewerNameId = PropertyConstraints.ATTRIBUTE_VALUE_REVIEWER;
    Map<String, ReviewerId> reviewers = reviewResource.getReviewers();
    reviewerFilterCombo.setItems(reviewers.keySet().toArray(new String[] {}));
    reviewerFilterCombo.add(ReviewI18n.getString(ReviewerId.AUTOMATIC_KEY), 0);
    reviewerFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    reviewerCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = reviewerCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, reviewerFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_REVIEWER, isEnabled);
      }
    });

    this.typeCheckButton = new Button(composite, SWT.CHECK);
    String typeKey = "ReviewIdEditDialog.label.tab.filters.check.type";
    typeCheckButton.setText(ReviewI18n.getString(typeKey));
    FormData typeCheckButtonData = new FormData();
    typeCheckButtonData.top = new FormAttachment(reviewerCheckButton, 10);
    typeCheckButton.setLayoutData(typeCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_TYPE);
    typeCheckButton.setSelection(entry.isEnabled());
    this.typeFilterCombo = new Combo(composite, SWT.READ_ONLY);
    typeFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = typeFilterCombo.getText();
        String key = TypeKeyManager.getInstance(project, reviewId).getKey(value);
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_TYPE, key);
      }
    });
    FormData typeFilterComboData = new FormData();
    typeFilterComboData.top = new FormAttachment(typeCheckButton, 0, SWT.CENTER);
    typeFilterComboData.left = new FormAttachment(typeCheckButton, x + 20, SWT.LEFT);
    typeFilterComboData.right = new FormAttachment(100, 0);
    typeFilterCombo.setLayoutData(typeFilterComboData);
    typeFilterCombo.setEnabled(typeCheckButton.getSelection());
    String typeNameId = PropertyConstraints.ATTRIBUTE_VALUE_TYPE;
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(typeNameId);
    if (fieldItem != null) {
      typeFilterCombo.setItems(fieldItem.getEntryNameList().toArray(new String[] {}));
    }
    typeFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    typeCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = typeCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, typeFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_TYPE, isEnabled);
      }
    });

    this.severityCheckButton = new Button(composite, SWT.CHECK);
    String severityKey = "ReviewIdEditDialog.label.tab.filters.check.severity";
    severityCheckButton.setText(ReviewI18n.getString(severityKey));
    FormData severityCheckButtonData = new FormData();
    severityCheckButtonData.top = new FormAttachment(typeCheckButton, 10);
    severityCheckButton.setLayoutData(severityCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY);
    severityCheckButton.setSelection(entry.isEnabled());
    this.severityFilterCombo = new Combo(composite, SWT.READ_ONLY);
    severityFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = severityFilterCombo.getText();
        String key = SeverityKeyManager.getInstance(project, reviewId).getKey(value);
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY, key);
      }
    });
    FormData severityFilterComboData = new FormData();
    severityFilterComboData.top = new FormAttachment(severityCheckButton, 0, SWT.CENTER);
    severityFilterComboData.left = new FormAttachment(severityCheckButton, x + 20, SWT.LEFT);
    severityFilterComboData.right = new FormAttachment(100, 0);
    severityFilterCombo.setLayoutData(severityFilterComboData);
    severityFilterCombo.setEnabled(severityCheckButton.getSelection());
    String severityNameId = PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY;
    fieldItem = this.fieldItemIdFieldItemMap.get(severityNameId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      severityFilterCombo.setItems(itemNameList.toArray(new String[] {}));
    }
    severityFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    severityCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = severityCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, severityFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY, isEnabled);
      }
    });

    this.assignedToCheckButton = new Button(composite, SWT.CHECK);
    String assignedToKey = "ReviewIdEditDialog.label.tab.filters.check.assignedTo";
    assignedToCheckButton.setText(ReviewI18n.getString(assignedToKey));
    FormData assignedToCheckButtonData = new FormData();
    assignedToCheckButtonData.top = new FormAttachment(severityCheckButton, 10);
    assignedToCheckButton.setLayoutData(assignedToCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_ASSIGNED_TO);
    assignedToCheckButton.setSelection(entry.isEnabled());
    this.assignedToFilterCombo = new Combo(composite, SWT.READ_ONLY);
    assignedToFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = assignedToFilterCombo.getText();
        if (value.equals(ReviewI18n.getString(ReviewerId.AUTOMATIC_KEY))) {
          value = ReviewerId.AUTOMATIC_KEY;
        }
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_ASSIGNED_TO, value);
      }
    });
    FormData assignedToFilterComboData = new FormData();
    assignedToFilterComboData.top = new FormAttachment(assignedToCheckButton, 0, SWT.CENTER);
    assignedToFilterComboData.left = new FormAttachment(assignedToCheckButton, x + 20,
        SWT.LEFT);
    assignedToFilterComboData.right = new FormAttachment(100, 0);
    assignedToFilterCombo.setLayoutData(assignedToFilterComboData);
    assignedToFilterCombo.setEnabled(assignedToCheckButton.getSelection());
    reviewers = reviewResource.getReviewers();
    assignedToFilterCombo.setItems((String[]) reviewers.keySet().toArray(new String[] {}));
    assignedToFilterCombo.add(ReviewI18n.getString(ReviewerId.AUTOMATIC_KEY), 0);
    assignedToFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    assignedToCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = assignedToCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, assignedToFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_ASSIGNED_TO, isEnabled);
      }
    });

    this.resolutionCheckButton = new Button(composite, SWT.CHECK);
    String resolutionKey = "ReviewIdEditDialog.label.tab.filters.check.resolution";
    resolutionCheckButton.setText(ReviewI18n.getString(resolutionKey));
    FormData resolutionCheckButtonData = new FormData();
    resolutionCheckButtonData.top = new FormAttachment(assignedToCheckButton, 10);
    resolutionCheckButton.setLayoutData(resolutionCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION);
    resolutionCheckButton.setSelection(entry.isEnabled());
    this.resolutionFilterCombo = new Combo(composite, SWT.READ_ONLY);
    resolutionFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = resolutionFilterCombo.getText();
        String key = ResolutionKeyManager.getInstance(project, reviewId).getKey(value);
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION, key);
      }
    });
    FormData resolutionFilterComboData = new FormData();
    resolutionFilterComboData.top = new FormAttachment(resolutionCheckButton, 0, SWT.CENTER);
    resolutionFilterComboData.left = new FormAttachment(resolutionCheckButton, x + 20,
        SWT.LEFT);
    resolutionFilterComboData.right = new FormAttachment(100, 0);
    resolutionFilterCombo.setLayoutData(resolutionFilterComboData);
    resolutionFilterCombo.setEnabled(resolutionCheckButton.getSelection());
    String resolutionNameId = PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION;
    fieldItem = this.fieldItemIdFieldItemMap.get(resolutionNameId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      resolutionFilterCombo.setItems(itemNameList.toArray(new String[] {}));
    }
    resolutionFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    resolutionCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = resolutionCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, resolutionFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION, isEnabled);
      }
    });

    this.statusCheckButton = new Button(composite, SWT.CHECK);
    String statusKey = "ReviewIdEditDialog.label.tab.filters.check.status";
    statusCheckButton.setText(ReviewI18n.getString(statusKey));
    FormData statusCheckButtonData = new FormData();
    statusCheckButtonData.top = new FormAttachment(resolutionCheckButton, 10);
    statusCheckButton.setLayoutData(statusCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_STATUS);
    statusCheckButton.setSelection(entry.isEnabled());
    this.statusFilterCombo = new Combo(composite, SWT.READ_ONLY);
    statusFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = statusFilterCombo.getText();
        String key = StatusKeyManager.getInstance(project, reviewId).getKey(value);
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_STATUS, key);
      }
    });
    FormData statusFilterComboData = new FormData();
    statusFilterComboData.top = new FormAttachment(statusCheckButton, 0, SWT.CENTER);
    statusFilterComboData.left = new FormAttachment(statusCheckButton, x + 20, SWT.LEFT);
    statusFilterComboData.right = new FormAttachment(100, 0);
    statusFilterCombo.setLayoutData(statusFilterComboData);
    statusFilterCombo.setEnabled(statusCheckButton.getSelection());
    String statusNameId = PropertyConstraints.ATTRIBUTE_VALUE_STATUS;
    fieldItem = this.fieldItemIdFieldItemMap.get(statusNameId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      statusFilterCombo.setItems(itemNameList.toArray(new String[] {}));
    }
    statusFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    statusCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = statusCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, statusFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_STATUS, isEnabled);
      }
    });

    this.fileCheckButton = new Button(composite, SWT.CHECK);
    String fileKey = "ReviewIdEditDialog.label.tab.filters.check.file";
    fileCheckButton.setText(ReviewI18n.getString(fileKey));
    FormData fileCheckButtonData = new FormData();
    fileCheckButtonData.top = new FormAttachment(statusCheckButton, 10);
    fileCheckButton.setLayoutData(fileCheckButtonData);
    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_FILE);
    fileCheckButton.setSelection(entry.isEnabled());
    this.fileFilterCombo = new Combo(composite, SWT.READ_ONLY);
    fileFilterCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        String value = fileFilterCombo.getText();
        updateFilterValue(PropertyConstraints.ATTRIBUTE_VALUE_FILE, value);
      }
    });
    FormData fileFilterComboData = new FormData();
    fileFilterComboData.top = new FormAttachment(fileCheckButton, 0, SWT.CENTER);
    fileFilterComboData.left = new FormAttachment(fileCheckButton, x + 20, SWT.LEFT);
    fileFilterComboData.right = new FormAttachment(100, 0);
    fileFilterCombo.setLayoutData(fileFilterComboData);
    fileFilterCombo.setEnabled(fileCheckButton.getSelection());
    Set<String> fileSet = reviewResource.getFileSet();
    fileFilterCombo.setItems(fileSet.toArray(new String[] {}));
    fileFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));
    fileCheckButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        boolean isEnabled = fileCheckButton.getSelection();
        handleFilterEnabledCheck(isEnabled, fileFilterCombo);
        updateFilterEnabled(PropertyConstraints.ATTRIBUTE_VALUE_FILE, isEnabled);
      }
    });
    handleEnabledCheck();
    return composite;
  }

  /**
   * updates the filter value.
   *
   * @param filterName the filter name.
   * @param key the key of the filter.
   */
  private void updateFilterValue(String filterName, String key) {
    String phaseName = this.phaseCombo.getText();
    FilterPhase filterPhase = (FilterPhase) this.phaseNameFilterPhaseMap.get(phaseName);
    FilterEntry entry = filterPhase.getFilterEntry(filterName);
    entry.setKey(key);
  }

  /**
   * updates the filter enable status.
   *
   * @param filterName the filter name. null if the filter in the phase is to be set.
   * @param isEnabled the enabled status of the filter. <code>true</code> if the filter is
   *          enabled.
   */
  private void updateFilterEnabled(String filterName, boolean isEnabled) {
    String phaseName = this.phaseCombo.getText();
    FilterPhase filterPhase = this.phaseNameFilterPhaseMap.get(phaseName);
    if (filterName != null) {
      FilterEntry entry = filterPhase.getFilterEntry(filterName);
      entry.setEnabled(isEnabled);
    }
    else {
      filterPhase.setEnabled(isEnabled);
    }
  }

  /**
   * Fills new values in combos
   *
   * @param phaseName the phase name.
   */
  protected void fillNewValueInCombos(String phaseName) {
    FilterPhase filterPhase = this.phaseNameFilterPhaseMap.get(phaseName);

    FilterEntry entry = filterPhase
        .getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_INTERVAL);
    this.intervalCheckButton.setSelection(entry.isEnabled());
    this.intervalFilterText.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_REVIEWER);
    this.reviewerCheckButton.setSelection(entry.isEnabled());
    this.reviewerFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_TYPE);
    this.typeCheckButton.setSelection(entry.isEnabled());
    this.typeFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY);
    this.severityCheckButton.setSelection(entry.isEnabled());
    this.severityFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_ASSIGNED_TO);
    this.assignedToCheckButton.setSelection(entry.isEnabled());
    this.assignedToFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION);
    this.resolutionCheckButton.setSelection(entry.isEnabled());
    this.resolutionFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_STATUS);
    this.statusCheckButton.setSelection(entry.isEnabled());
    this.statusFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    entry = filterPhase.getFilterEntry(PropertyConstraints.ATTRIBUTE_VALUE_FILE);
    this.fileCheckButton.setSelection(entry.isEnabled());
    this.fileFilterCombo.setText(ReviewI18n.getString(entry.getValueKey()));

    this.enabledCheckButton.setSelection(filterPhase.isEnabled());
    handleEnabledCheck();
  }

  /**
   * Handles the filter enabled check status.
   *
   * @param isEnabled <code>true</code>if the combo associating check box is enabled.
   * @param scrollable the scrollable to be reflected.
   */
  protected void handleFilterEnabledCheck(boolean isEnabled, Scrollable scrollable) {
    scrollable.setEnabled(isEnabled);
  }

  /**
   * Handles the enabled check status.
   */
  protected void handleEnabledCheck() {
    boolean isEnabled = this.enabledCheckButton.getSelection();
    this.intervalCheckButton.setEnabled(isEnabled);
    this.reviewerCheckButton.setEnabled(isEnabled);
    this.typeCheckButton.setEnabled(isEnabled);
    this.severityCheckButton.setEnabled(isEnabled);
    this.assignedToCheckButton.setEnabled(isEnabled);
    this.resolutionCheckButton.setEnabled(isEnabled);
    this.statusCheckButton.setEnabled(isEnabled);
    this.fileCheckButton.setEnabled(isEnabled);
    if (isEnabled) {
      handleFilterEnabledCheck(intervalCheckButton.getSelection(), intervalFilterText);
      handleFilterEnabledCheck(reviewerCheckButton.getSelection(), reviewerFilterCombo);
      handleFilterEnabledCheck(typeCheckButton.getSelection(), typeFilterCombo);
      handleFilterEnabledCheck(severityCheckButton.getSelection(), severityFilterCombo);
      handleFilterEnabledCheck(assignedToCheckButton.getSelection(), assignedToFilterCombo);
      handleFilterEnabledCheck(resolutionCheckButton.getSelection(), resolutionFilterCombo);
      handleFilterEnabledCheck(statusCheckButton.getSelection(), statusFilterCombo);
      handleFilterEnabledCheck(fileCheckButton.getSelection(), fileFilterCombo);
    }
    else {
      this.intervalFilterText.setEnabled(isEnabled);
      this.reviewerFilterCombo.setEnabled(isEnabled);
      this.typeFilterCombo.setEnabled(isEnabled);
      this.severityFilterCombo.setEnabled(isEnabled);
      this.assignedToFilterCombo.setEnabled(isEnabled);
      this.resolutionFilterCombo.setEnabled(isEnabled);
      this.statusFilterCombo.setEnabled(isEnabled);
      this.fileFilterCombo.setEnabled(isEnabled);
    }
  }

  /**
   * Creates item entries folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createItemEntriesFolder(TabFolder folder) {
    PropertyResource propertyResource = PropertyResource.getInstance(this.project, true);
    String reviewIdString = this.reviewId.getReviewId();
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
    if (reviewResource != null) {
      this.fieldItemIdFieldItemMap = reviewResource.getFieldItemMap();
      this.fieldItemIdList = reviewResource.getFieldItemIdList();
    }
    Composite composite = createsGeneralComposite(folder);
    this.itemCombo = new Combo(composite, SWT.READ_ONLY);
    itemCombo.setData(itemCombo);
    itemCombo.setItems((String[]) fieldItemIdList.toArray(new String[] {}));
    itemCombo.setText((String) fieldItemIdList.get(0));
    itemCombo.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        Combo selectedItemCombo = (Combo) event.widget.getData();
        handleItemIdComboSelection(selectedItemCombo);
      }
    });
    FormData itemComboData = new FormData();
    itemComboData.left = new FormAttachment(0, 0);
    itemComboData.right = new FormAttachment(100, 0);
    itemCombo.setLayoutData(itemComboData);

    createItemEntriesTable(composite);
    return composite;
  }

  /**
   * Creates item entries table.
   *
   * @param composite the composite.
   */
  private void createItemEntriesTable(Composite composite) {
    int verticalSpan = 3;
    this.itemListTable = new Table(composite, SWT.BORDER | SWT.MULTI);
    FormData itemListTableData = new FormData();
    itemListTableData.left = new FormAttachment(0, 0);
    itemListTableData.right = new FormAttachment(80, 0);
    itemListTableData.top = new FormAttachment(this.itemCombo, 10);
    itemListTableData.bottom = new FormAttachment(100, 0);
    itemListTableData.height = 150;
    itemListTable.setLayoutData(itemListTableData);
    itemListTable.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        handleItemListTableSelection();
      }
    });
    fillItemTable(this.itemCombo.getText());

    this.newButtonInItemEntries = new Button(composite, SWT.PUSH);
    String newKey = "ReviewIdEditDialog.label.tab.itemEntries.button.new";
    newButtonInItemEntries.setText(ReviewI18n.getString(newKey));
    newButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        newItemEntry();
      }
    });
    FormData newButtonData = new FormData();
    newButtonData.top = new FormAttachment(this.itemListTable, 0, SWT.TOP);
    newButtonData.left = new FormAttachment(this.itemListTable, 10);
    newButtonData.right = new FormAttachment(100, 0);
    newButtonInItemEntries.setLayoutData(newButtonData);

    this.editButtonInItemEntries = new Button(composite, SWT.PUSH);
    String editKey = "ReviewIdEditDialog.label.tab.itemEntries.button.edit";
    editButtonInItemEntries.setText(ReviewI18n.getString(editKey));
    editButtonInItemEntries.setEnabled(false);
    editButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        editItemEntry();
      }
    });
    FormData editButtonData = new FormData();
    editButtonData.top = new FormAttachment(newButtonInItemEntries, verticalSpan);
    editButtonData.left = new FormAttachment(this.itemListTable, 10);
    editButtonData.right = new FormAttachment(100, 0);
    editButtonInItemEntries.setLayoutData(editButtonData);

    this.removeButtonInItemEntries = new Button(composite, SWT.PUSH);
    String removeKey = "ReviewIdEditDialog.label.tab.itemEntries.button.remove";
    removeButtonInItemEntries.setText(ReviewI18n.getString(removeKey));
    removeButtonInItemEntries.setEnabled(false);
    removeButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        removeItemEntries();
      }
    });
    FormData removeButtonData = new FormData();
    removeButtonData.top = new FormAttachment(editButtonInItemEntries, verticalSpan);
    removeButtonData.left = new FormAttachment(newButtonInItemEntries, 0, SWT.LEFT);
    removeButtonData.right = new FormAttachment(100, 0);
    removeButtonInItemEntries.setLayoutData(removeButtonData);

    this.upButtonInItemEntries = new Button(composite, SWT.PUSH);
    Image upImage = ReviewPlugin.createImageDescriptor("icons/up.gif").createImage();
    upButtonInItemEntries.setImage(upImage);
    upButtonInItemEntries.setEnabled(false);
    upButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        moveItemEntry(true);
      }
    });
    FormData upButtonData = new FormData();
    upButtonData.top = new FormAttachment(removeButtonInItemEntries, verticalSpan);
    upButtonData.left = new FormAttachment(newButtonInItemEntries, 0, SWT.LEFT);
    upButtonData.right = new FormAttachment(100, 0);
    upButtonInItemEntries.setLayoutData(upButtonData);

    this.downButtonInItemEntries = new Button(composite, SWT.PUSH);
    Image downImage = ReviewPlugin.createImageDescriptor("icons/down.gif").createImage();
    downButtonInItemEntries.setImage(downImage);
    downButtonInItemEntries.setEnabled(false);
    downButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        moveItemEntry(false);
      }
    });
    FormData downButtonData = new FormData();
    downButtonData.top = new FormAttachment(upButtonInItemEntries, verticalSpan);
    downButtonData.left = new FormAttachment(newButtonInItemEntries, 0, SWT.LEFT);
    downButtonData.right = new FormAttachment(100, 0);
    downButtonInItemEntries.setLayoutData(downButtonData);

    this.restoreButtonInItemEntries = new Button(composite, SWT.PUSH);
    String restoreKey = "ReviewIdEditDialog.label.tab.itemEntries.button.restore";
    restoreButtonInItemEntries.setText(ReviewI18n.getString(restoreKey));
    restoreButtonInItemEntries.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        restoreItemEntries();
      }
    });
    FormData restoreButtonData = new FormData();
    restoreButtonData.top = new FormAttachment(downButtonInItemEntries, verticalSpan + 30);
    restoreButtonData.left = new FormAttachment(newButtonInItemEntries, 0, SWT.LEFT);
    restoreButtonData.right = new FormAttachment(100, 0);
    restoreButtonInItemEntries.setLayoutData(restoreButtonData);
  }

  /**
   * Moves the selected item entry by one upward if <code>isUpward</code> is <code>true</code>.
   * Otherwise, moves the selected item entry by one downward.
   *
   * @param isUpward <code>true</code> if moving the selected item entry by one upward.
   *          <code>false</code> if moving the selected item entry by one downward.
   */
  protected void moveItemEntry(boolean isUpward) {
    String fieldItemId = this.itemCombo.getText();
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    TableItem[] selectedItems = this.itemListTable.getSelection();
    if (selectedItems.length > 0 && fieldItem != null) {
      TableItem selectedItem = selectedItems[0];
      String itemName = selectedItem.getText();
      List<String> itemList = fieldItem.getEntryNameList();
      int index = itemList.indexOf(itemName);
      if ((isUpward) ? index > 0 : index < itemList.size() - 1) {
        int nextIndex = (isUpward) ? index - 1 : index + 1;
        itemList.remove(index);
        itemList.add(nextIndex, itemName);
        fillItemTable(fieldItemId);
        this.itemListTable.select(nextIndex);
        handleItemListTableSelection();
        updateDefaultItems(fieldItemId);
        updateFilterItems(fieldItemId);
      }
    }
  }

  /**
   * Creates new item entry.
   */
  protected void newItemEntry() {
    String shortMessageKey = "ReviewIdEditDialog.dialogMessage.label.tab.itemEntries.new.short";
    String longMessageKey = "ReviewIdEditDialog.dialogMessage.label.tab.itemEntries.new.long";
    InputDialog dialog = openDialog("", shortMessageKey, longMessageKey);
    if (dialog.getReturnCode() != InputDialog.OK) {
      return;
    }
    String itemName = dialog.getValue();
    TableItem item = new TableItem(this.itemListTable, SWT.NONE);
    String fieldItemId = this.itemCombo.getText();
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemList = fieldItem.getEntryNameList();
      itemList.add(itemName);
      fillItemTable(fieldItemId);
      updateDefaultItems(fieldItemId);
      updateFilterItems(fieldItemId);
    }
  }

  /**
   * Edits the item entry.
   */
  protected void editItemEntry() {
    String shortMessageKey = "ReviewIdEditDialog.dialogMessage.label.tab.itemEntries.edit.short";
    String longMessageKey = "ReviewIdEditDialog.dialogMessage.label.tab.itemEntries.edit.long";
    TableItem item = this.itemListTable.getSelection()[0];
    String oldName = item.getText();
    InputDialog dialog = openDialog(oldName, shortMessageKey, longMessageKey);
    if (dialog.getReturnCode() != InputDialog.OK) {
      return;
    }
    String newName = dialog.getValue();
    item.setText(newName);
    String fieldItemId = this.itemCombo.getText();
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemList = fieldItem.getEntryNameList();
      int index = itemList.indexOf(oldName);
      itemList.remove(index);
      itemList.add(index, newName);
      fillItemTable(fieldItemId);
      updateDefaultItems(fieldItemId);
      updateFilterItems(fieldItemId);
    }
  }

  /**
   * Opens the dialog window.
   *
   * @param existingItemName the existing item name.
   * @param shortMessageKey the short message key.
   * @param longMessageKey the long message key.
   * @return the input dialog the <code>InputDialog</code>.
   */
  private InputDialog openDialog(String existingItemName, String shortMessageKey,
      String longMessageKey) {
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(this.itemCombo.getText());
    if (fieldItem != null) {
      final List<String> itemList = fieldItem.getEntryNameList();
      IInputValidator validator = new IInputValidator() {
        public String isValid(String newText) {
          if (!itemList.contains(ReviewI18n.getKey(newText))) {
            return null;
          }
          else {
            String errorKey = "ReviewIdEditDialog.dialogMessage.label.tab.itemEntries.error";
            return ReviewI18n.getString(errorKey);
          }
        }
      };
      InputDialog dialog = new InputDialog(getShell(), ReviewI18n.getString(shortMessageKey),
          ReviewI18n.getString(longMessageKey), existingItemName, validator); //$NON-NLS-1$ //$NON-NLS-2$
      dialog.open();
      return dialog;
    }
    return null;
  }

  /**
   * Removes item entries form the table.
   */
  protected void removeItemEntries() {
    String fieldItemId = this.itemCombo.getText();
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemList = fieldItem.getEntryNameList();
      TableItem[] items = this.itemListTable.getSelection();
      for (int i = 0; i < items.length; i++) {
        String itemName = items[i].getText();
        itemList.remove(itemName);
      }
      fillItemTable(fieldItemId);
      updateDefaultItems(fieldItemId);
      updateFilterItems(fieldItemId);
    }
  }

  /**
   * Restores the item entries from the default review id.
   */
  protected void restoreItemEntries() {
    ReviewResource reviewResource = null;
    if (reviewId.getReviewId().equals(PropertyConstraints.DEFAULT_REVIEW_ID)) {
      // read from master property.xml
      Review defaultReview = PropertyXmlSerializer.cloneDefaultReview();
      reviewResource = new ReviewResource(defaultReview);
    }
    else {
      // read from .jupiter.
      PropertyResource propertyResource = PropertyResource.getInstance(project, true);
      reviewResource = propertyResource.getReviewResource(reviewId.getReviewId(), true);
    }
    if (reviewResource != null) {
      String fieldItemId = this.itemCombo.getText();
      FieldItem fieldItem = reviewResource.getFieldItem(fieldItemId);
      this.fieldItemIdFieldItemMap.put(fieldItemId, fieldItem);
      fillItemTable(fieldItemId);
      updateDefaultItems(fieldItemId);
      updateFilterItems(fieldItemId);
    }
  }

  /**
   * Updates the filter item folder.
   *
   * @param fieldItemId the field item id.
   */
  private void updateFilterItems(String fieldItemId) {
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_TYPE)) {
        String currentType = this.typeFilterCombo.getText();
        this.typeFilterCombo.setItems(itemNameList.toArray(new String[] {}));
        this.typeFilterCombo.setText(currentType);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY)) {
        String currentSeverity = this.severityFilterCombo.getText();
        this.severityFilterCombo.setItems((String[]) itemNameList.toArray(new String[] {}));
        this.severityFilterCombo.setText(currentSeverity);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION)) {
        String currentResolution = this.resolutionFilterCombo.getText();
        this.severityFilterCombo.setItems((String[]) itemNameList.toArray(new String[] {}));
        this.severityFilterCombo.setText(currentResolution);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_STATUS)) {
        String currentStatus = this.statusFilterCombo.getText();
        this.statusFilterCombo.setItems((String[]) itemNameList.toArray(new String[] {}));
        this.statusFilterCombo.setText(currentStatus);
      }
    }
  }

  /**
   * Updates the default items folder.
   *
   * @param fieldItemId the field item id.
   */
  private void updateDefaultItems(String fieldItemId) {
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_TYPE)) {
        String currentType = this.defaultTypeCombo.getText();
        this.defaultTypeCombo.setItems(itemNameList.toArray(new String[] {}));
        this.defaultTypeCombo.setText(currentType);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY)) {
        String currentSeverity = this.defaultSeverityCombo.getText();
        this.defaultSeverityCombo.setItems(itemNameList.toArray(new String[] {}));
        this.defaultSeverityCombo.setText(currentSeverity);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION)) {
        String currentResolution = this.defaultResolutionCombo.getText();
        this.defaultResolutionCombo.setItems(itemNameList.toArray(new String[] {}));
        this.defaultResolutionCombo.setText(currentResolution);
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_STATUS)) {
        String currentStatus = this.defaultStatusCombo.getText();
        this.defaultStatusCombo.setItems(itemNameList.toArray(new String[] {}));
        this.defaultStatusCombo.setText(currentStatus);
      }
    }
  }

  /**
   * Handles the item id combo selection.
   *
   * @param itemCombo the item combo.
   */
  protected void handleItemIdComboSelection(Combo itemCombo) {
    fillItemTable(itemCombo.getText());
    handleItemListTableSelection();
  }

  /**
   * Handles the item list table selection.
   */
  protected void handleItemListTableSelection() {
    boolean isOneItemEntry = (this.itemListTable.getSelectionCount() == 1);
    int index = this.itemListTable.getSelectionIndex();
    boolean isSelected = (index >= 0);
    this.editButtonInItemEntries.setEnabled(isOneItemEntry);
    this.removeButtonInItemEntries.setEnabled(isSelected);
    this.upButtonInItemEntries.setEnabled((index > 0) && isOneItemEntry);
    int lastIndex = this.itemListTable.getItemCount() - 1;
    this.downButtonInItemEntries.setEnabled((index < lastIndex) && isOneItemEntry);
  }

  /**
   * Fills item data in the item table.
   *
   * @param fieldItemId the field item id.
   */
  private void fillItemTable(String fieldItemId) {
    removeAllItemsInItemListTable();
    FieldItem fieldItem = this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      for (Iterator<String> i = fieldItem.getEntryNameList().iterator(); i.hasNext();) {
        String itemEntry = ReviewI18n.getString(i.next());
        TableItem item = new TableItem(this.itemListTable, SWT.NONE);
        item.setText(itemEntry);
      }
    }
  }

  /**
   * Removes item data from the item table.
   */
  private void removeAllItemsInItemListTable() {
    TableItem[] items = this.itemListTable.getItems();
    for (int i = 0; i < items.length; i++) {
      TableItem item = items[i];
      item.dispose();
    }
  }

  /**
   * Creates the file folder.
   *
   * @param folder the folder.
   * @return the control.
   */
  private Control createFileFolder(TabFolder folder) {
    Composite composite = createsGeneralComposite(folder);
    this.fileListTable = new Table(composite, SWT.BORDER | SWT.MULTI);
    FormData fileListTableData = new FormData();
    fileListTableData.left = new FormAttachment(0, 0);
    fileListTableData.right = new FormAttachment(80, 0);
    fileListTableData.top = new FormAttachment(0, 0);
    fileListTableData.bottom = new FormAttachment(100, 0);
    fileListTableData.height = 150;
    fileListTable.setLayoutData(fileListTableData);
    fileListTable.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        handleFileListSelection();
      }
    });
    fillFileTable(this.project.getName(), reviewId.getReviewId());

    this.addButtonInFile = new Button(composite, SWT.PUSH);
    String addKey = "ReviewIdEditDialog.label.tab.file.button.add";
    addButtonInFile.setText(ReviewI18n.getString(addKey));
    addButtonInFile.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        addFile();
      }
    });
    FormData addButtonData = new FormData();
    addButtonData.top = new FormAttachment(fileListTable, 0, SWT.TOP);
    addButtonData.left = new FormAttachment(fileListTable, 10);
    addButtonData.right = new FormAttachment(100, 0);
    addButtonInFile.setLayoutData(addButtonData);

    this.removeButtonInFile = new Button(composite, SWT.PUSH);
    String removeKey = "ReviewIdEditDialog.label.tab.file.button.remove";
    removeButtonInFile.setText(ReviewI18n.getString(removeKey));
    removeButtonInFile.setEnabled(false);
    removeButtonInFile.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        removeFile();
      }
    });
    FormData removeButtonData = new FormData();
    removeButtonData.top = new FormAttachment(addButtonInFile, 5);
    removeButtonData.left = new FormAttachment(addButtonInFile, 0, SWT.LEFT);
    removeButtonData.right = new FormAttachment(100, 0);
    removeButtonInFile.setLayoutData(removeButtonData);

    return composite;
  }

  /**
   * 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) {
      IProject project = FileResource.getProject(this.project.getName());
      String reviewIdString = reviewId.getReviewId();
      Map<String, ReviewerId> reviewersMap = PropertyResource.getInstance(project, true)
          .getReviewers(reviewIdString);
      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();
    }
  }

  /**
   * Fills the file table with files.
   *
   * @param projectName the project name.
   * @param reviewId the review id.
   */
  public void fillFileTable(String projectName, String reviewId) {
    IProject project = FileResource.getProject(projectName);
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewId, true);
    if (reviewResource != null) {
      Set<String> targetFiles = reviewResource.getFileSet();
      this.files = targetFiles;
      for (Iterator<String> i = this.files.iterator(); i.hasNext();) {
        String file = i.next();
        TableItem item = new TableItem(this.fileListTable, SWT.NONE);
        item.setText(file);
      }
    }
  }

  /**
   * 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);
  }

  /**
   * Adds a file to the file list.
   */
  protected void addFile() {
    IWorkbench workbench = PlatformUI.getWorkbench();
    Shell shell = workbench.getActiveWorkbenchWindow().getShell();

    ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell,
        new ReviewFileLabelProvider(), new ReviewFileContentProvider());
    dialog.setValidator(new ReviewFileSelectionStatusValidator());
    dialog.setBlockOnOpen(true);
    dialog.setInput(new File(this.project.getLocation().toString()));
    dialog.setTitle(ReviewI18n.getString("ReviewIdEditDialog.label.tab.file.add.title"));
    dialog.setMessage(ReviewI18n.getString("ReviewIdEditDialog.label.tab.file.add.message"));

    if (dialog.open() == ElementTreeSelectionDialog.OK) {
      Object[] results = (Object[]) dialog.getResult();
      for (int i = 0; i < results.length; i++) {
        File file = (File) results[i];
        String filePath = file.toString();
        String projectPath = this.project.getLocation().toFile().toString();
        int index = projectPath.length();
        String projectToFilePath = filePath.substring(index + 1);
        String targetFile = this.project.getFile(projectToFilePath).getProjectRelativePath()
            .toString();
        if (this.files.add(targetFile)) {
          TableItem item = new TableItem(this.fileListTable, SWT.NONE);
          item.setText(targetFile);
        }
      }
    }
  }

  /**
   * Updates the author candidate list.
   *
   * @param reviewers the reviewers which would be the candidates for the author.
   */
  private void updateAuthorCandidates(Map<String, ReviewerId> reviewers) {
    authorCombo.setItems(reviewers.keySet().toArray(new String[] {}));
    authorCombo.setText(reviewId.getAuthor());
  }

  /**
   * 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.removeButtonInReviewer.setEnabled(this.reviewerListTable.getItemCount() > 0);
  }

  /**
   * Removes a file from the file list.
   */
  protected void removeFile() {
    TableItem[] items = this.fileListTable.getSelection();
    for (int i = 0; i < items.length; i++) {
      TableItem item = items[i];
      this.files.remove(item.getText());
      item.dispose();
    }
    this.removeButtonInFile.setEnabled(this.fileListTable.getItemCount() > 0);
  }

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

  /**
   * Handles the file list table selection.
   */
  protected void handleFileListSelection() {
    boolean isSelected = (this.fileListTable.getSelectionIndex() >= 0);
    this.addButtonInFile.setEnabled(isSelected);
    this.removeButtonInFile.setEnabled(isSelected);
  }

  /**
   * @see org.eclipse.jface.dialogs.Dialog#okPressed()
   */
  protected void okPressed() {
    this.reviewId.setDescription(ReviewI18n.getKey(this.reviewIdDescriptionText.getText()));
    this.reviewId.setReviewers(this.reviewers);
    this.reviewId.setAuthor(this.authorCombo.getText());
    this.reviewId.setDirectory(this.storageText.getText());
    try {
      PropertyResource propertyResource = PropertyResource.getInstance(this.project, true);
      String reviewIdString = this.reviewId.getReviewId();
      ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
      if (reviewResource != null) {
        reviewResource.setReviewId(this.reviewId);
        reviewResource.setTargetFiles(this.files);
        String typeKey = ReviewI18n.getKey(this.defaultTypeCombo.getText());
        reviewResource.setDefaultField(PropertyConstraints.ATTRIBUTE_VALUE_TYPE, typeKey);
        String severityKey = ReviewI18n.getKey(this.defaultSeverityCombo.getText());
        reviewResource.setDefaultField(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY,
            severityKey);
        String resolutionKey = ReviewI18n.getKey(this.defaultResolutionCombo.getText());
        String resolutionName = PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION;
        reviewResource.setDefaultField(resolutionName, resolutionKey);
        String statusKey = ReviewI18n.getKey(this.defaultStatusCombo.getText());
        reviewResource.setDefaultField(PropertyConstraints.ATTRIBUTE_VALUE_STATUS, statusKey);
        reviewResource.setFieldItemMap(this.fieldItemIdFieldItemMap);
        reviewResource.setPhaseNameFilterPhaseMap(this.phaseNameFilterPhaseMap);

        propertyResource.removeReviewResource(this.reviewId);
        propertyResource.addReviewResource(reviewResource);
      }
    }
    catch (ReviewException e) {
      log.error(e);
    }
    super.okPressed();
  }
}
TOP

Related Classes of edu.hawaii.ics.csdl.jupiter.ui.property.ReviewIdEditDialog

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.