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

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

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

import java.util.Iterator;
import java.util.List;
import java.util.Map;

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.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.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.FieldItem;
import edu.hawaii.ics.csdl.jupiter.file.PropertyConstraints;
import edu.hawaii.ics.csdl.jupiter.file.PropertyResource;
import edu.hawaii.ics.csdl.jupiter.file.ReviewResource;

/**
* Provides item entries page.
* @author Takuya Yamashita
* @version $Id: ReviewIdNewItemEntriesPage.java 82 2008-02-22 09:34:57Z jsakuda $
*/
public class ReviewIdNewItemEntriesPage extends WizardPage {

  private IProject project;
  private Combo itemCombo;
  private Table itemListTable;
  private Button newButtonInItemEntries;
  private Button editButtonInItemEntries;
  private Button removeButtonInItemEntries;
  private Button upButtonInItemEntries;
  private Button downButtonInItemEntries;
  private Button restoreButtonInItemEntries;
  private Map<String, FieldItem> fieldItemIdFieldItemMap;
  private List<String> fieldItemIdList;
  /**
   * @param project the project name.
   * @param pageName the page name.
   * @param imageFilePath the image file path.
   */
  protected ReviewIdNewItemEntriesPage(IProject project, String pageName, String imageFilePath) {
    super(pageName);
    setImageDescriptor(ReviewPlugin.createImageDescriptor(imageFilePath));
    setTitle(ReviewI18n.getString("ReviewIdNewItemEntriesPage.label.title"));
    setDescription(ReviewI18n.getString("ReviewIdNewItemEntriesPage.label.title.description"));
    this.project = project;
  }

  /**
   * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
   */
  public void createControl(Composite ancestor) {
    Composite parent = createsGeneralComposite(ancestor);
    createItemEntriesContent(parent);
    setControl(parent);
  }
 
  /**
   * 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 item entries content.
   * @param composite the composite.
   * @return the control.
   */
  private Control createItemEntriesContent(Composite composite) {
    PropertyResource propertyResource = PropertyResource.getInstance(this.project, true);
    String reviewIdString = PropertyConstraints.DEFAULT_REVIEW_ID;
    ReviewResource reviewResource = propertyResource.getReviewResource(reviewIdString, true);
    if (reviewResource != null) {
      this.fieldItemIdFieldItemMap = reviewResource.getFieldItemMap();
      this.fieldItemIdList = reviewResource.getFieldItemIdList();
    }
    this.itemCombo = new Combo(composite, SWT.READ_ONLY);
    itemCombo.setData(itemCombo);
    itemCombo.setItems(fieldItemIdList.toArray(new String[] {}));
    itemCombo.setText(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);
  }
 
  /**
   * 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);
      IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_FILTERS);
      ReviewIdNewFilterPage filterPage = (ReviewIdNewFilterPage) page;
      filterPage.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);
      IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_FILTERS);
      ReviewIdNewFilterPage filterPage = (ReviewIdNewFilterPage) page;
      filterPage.updateFilterItems(fieldItemId);
    }
  }
 
  /**
   * 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);
      IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_FILTERS);
      ReviewIdNewFilterPage filterPage = (ReviewIdNewFilterPage) page;
      filterPage.updateFilterItems(fieldItemId);
    }
  }
 
  /**
   * 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);
        IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_FILTERS);
        ReviewIdNewFilterPage filterPage = (ReviewIdNewFilterPage) page;
        filterPage.updateFilterItems(fieldItemId);
      }
    }
  }
 
  /**
   * Restores the item entries from the default review id.
   */
  protected void restoreItemEntries() {
    // read from .jupiter.
    PropertyResource propertyResource = PropertyResource.getInstance(project, true);
    String defaultReviewID = PropertyConstraints.DEFAULT_REVIEW_ID;
    ReviewResource reviewResource = propertyResource.getReviewResource(defaultReviewID, true);
    if (reviewResource != null) {
      String fieldItemId = this.itemCombo.getText();
      FieldItem fieldItem = reviewResource.getFieldItem(fieldItemId);
      this.fieldItemIdFieldItemMap.put(fieldItemId, fieldItem);
      fillItemTable(fieldItemId);
      updateDefaultItems(fieldItemId);
      IWizardPage page = getWizard().getPage(ReviewIdNewWizard.PAGE_FILTERS);
      ReviewIdNewFilterPage filterPage = (ReviewIdNewFilterPage) page;
      filterPage.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 = (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;
  }
 
  /**
   * 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) {
    removeItems();
    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 removeItems() {
    TableItem[] items = this.itemListTable.getItems();
    for (int i = 0; i < items.length; i++) {
      TableItem item  = items[i];
      item.dispose();
    }
  }
 
  /**
   * Updates the default items folder.
   * @param fieldItemId the field item id.
   */
  private void updateDefaultItems(String fieldItemId) {
    String pageName = ReviewIdNewWizard.PAGE_DEFAULT_ITEMS;
    ReviewIdNewDefaultItemsPage page = (ReviewIdNewDefaultItemsPage) getWizard().getPage(pageName);
    FieldItem fieldItem = (FieldItem) this.fieldItemIdFieldItemMap.get(fieldItemId);
    if (fieldItem != null) {
      List<String> itemNameList = fieldItem.getEntryNameList();
      if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_TYPE)) {
        page.setItemType(itemNameList.toArray(new String[] {}));
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_SEVERITY)) {
        page.setItemSeverity(itemNameList.toArray(new String[] {}));
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_RESOLUTION)) {
        page.setItemResolution(itemNameList.toArray(new String[] {}));
      }
      else if (fieldItemId.equals(PropertyConstraints.ATTRIBUTE_VALUE_STATUS)) {
        page.setItemStatus(itemNameList.toArray(new String[] {}));
      }
    }
  }
 
  /**
   * 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() {
    String pageName = ReviewIdNewWizard.PAGE_DEFAULT_ITEMS;
    return ((ReviewIdNewWizard) getWizard()).getPage(pageName);
  }
 
  /**
   * Gets the map of the String field item id - the list of the String item name.
   * @return the map of the String field item id - the list of the String item name.
   */
  public Map<String, FieldItem> getFieldItemIdFieldItemMap() {
    return this.fieldItemIdFieldItemMap;
  }

}
TOP

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

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.