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

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

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

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.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.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.PropertyPage;

import edu.hawaii.ics.csdl.jupiter.ReviewException;
import edu.hawaii.ics.csdl.jupiter.ReviewI18n;
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.model.review.ReviewId;
import edu.hawaii.ics.csdl.jupiter.util.JupiterLogger;
import edu.hawaii.ics.csdl.jupiter.util.ReviewDialog;

/**
* Provides configuration property page.
*
* @author Takuya Yamashita
* @version $Id: ReviewPropertyPage.java 84 2008-03-07 10:11:27Z jsakuda $
*/
public class ReviewPropertyPage extends PropertyPage implements IWorkbenchPropertyPage {
  /** Jupiter logger */
  private JupiterLogger log = JupiterLogger.getLogger();

  private static final String TABLE_COLUMN = "TableColumn";
  private static final String COLUMN_KEY = "ColumnKey";
  private IProject project;
  private TableViewer tableViewer;
  private Button newButton;
  private Table table;
  private Button removeButton;
  private Button editButton;
  private Composite composite;
  /** The column review ID key. */
  public static final String COLUMN_REVIEW_ID_KEY = "ReviewPropertyPage.label.column.reviewId";
  /** The column description key. */
  public static final String COLUMN_DESCRIPTION_KEY = "ReviewPropertyPage.label.column.description";
  /** The column date key. */
  public static final String COLUMN_DATE_KEY = "ReviewPropertyPage.label.column.date";

  /**
   * Creates content.
   *
   * @param ancestor the composite.
   * @return the control.
   */
  protected Control createContents(Composite ancestor) {
    this.composite = ancestor;
    this.project = (IProject) getElement();
    noDefaultAndApplyButton();
    Composite parent = createsGeneralComposite(ancestor);
    createReviewIdTableContent(parent);
    createButtonsContent(parent);
    return 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 review id table.
   *
   * @param parent the composite.
   */
  private void createReviewIdTableContent(Composite parent) {
    this.table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION);
    FormData tableData = new FormData();
    tableData.left = new FormAttachment(0, 0);
    tableData.right = new FormAttachment(80, 0);
    tableData.top = new FormAttachment(0, 0);
    tableData.bottom = new FormAttachment(100, 0);
    table.setLayoutData(tableData);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    table.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        handleReviewIdSelection();
      }
    });
    TableColumn columnReviewId = new TableColumn(table, SWT.NONE);
    columnReviewId.setText(ReviewI18n.getString(COLUMN_REVIEW_ID_KEY));
    columnReviewId.setData(COLUMN_KEY, COLUMN_REVIEW_ID_KEY);
    TableColumn columnDescription = new TableColumn(table, SWT.NONE);
    String description = ReviewI18n.getString(COLUMN_DESCRIPTION_KEY);
    columnDescription.setText(description);
    columnDescription.setData(COLUMN_KEY, COLUMN_DESCRIPTION_KEY);
    TableColumn columnDate = new TableColumn(table, SWT.NONE);
    columnDate.setText(ReviewI18n.getString(COLUMN_DATE_KEY));
    columnDate.setData(COLUMN_KEY, COLUMN_DATE_KEY);

    List<TableColumn> columnList = new ArrayList<TableColumn>();
    columnList.add(columnReviewId);
    columnList.add(columnDescription);
    columnList.add(columnDate);
    hookSelectionListener(columnList);

    TableLayout tableLayout = new TableLayout();
    tableLayout.addColumnData(new ColumnWeightData(22));
    tableLayout.addColumnData(new ColumnWeightData(48));
    tableLayout.addColumnData(new ColumnWeightData(20));
    table.setLayout(tableLayout);

    this.tableViewer = new TableViewer(table);
    tableViewer.setLabelProvider(new ReviewPropertyLabelProvider());
    tableViewer.setContentProvider(new ReviewPropertyContentProvider());
    tableViewer.setSorter(ReviewPropertyViewerSorter.getViewerSorter(COLUMN_DATE_KEY));
    tableViewer.setInput(PropertyResource.getInstance(this.project, true).getReviewIdList());

    // routine for the version 1 compatibility.
//    if (tableViewer.getTable().getItemCount() <= 0) {
//      // version 1.
//      List<ReviewId> reviewIdList = Ver1PropertyHelper.getReviewIdList(this.project.getName(),
//          false);
//      IFile jupiterConfigFile = project.getFile(PropertyXmlSerializer.PROPERTY_XML_FILE);
//      FileResource.remove(new IFile[] { jupiterConfigFile });
//      // create version 2 .jupiter file.
//      String defaultName = PropertyConstraints.DEFAULT_REVIEW_ID;
//      PropertyResource propertyResource = null;
//      for (Iterator<ReviewId> i = reviewIdList.iterator(); i.hasNext();) {
//        ReviewId reviewId = (ReviewId) i.next();
//        propertyResource = PropertyResource.getInstance(this.project, true);
//        ReviewResource reviewResource = propertyResource.getReviewResource(defaultName, true);
//        ReviewId defaultReviewId = reviewResource.getReviewId();
//        String directory = defaultReviewId.getDirectory();
//        reviewId.setDirectory(directory);
//        reviewResource.setReviewId(reviewId);
//        try {
//          propertyResource.addReviewResource(reviewResource);
//        }
//        catch (ReviewException e) {
//          log.debug(e.getMessage());
//        }
//      }
//      tableViewer.setInput(propertyResource.getReviewIdList());
//    }
    tableViewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
        editReviewId();
      }
    });
  }

  /**
   * Creates buttons content.
   *
   * @param parent the parent.
   */
  private void createButtonsContent(Composite parent) {
    this.newButton = new Button(parent, SWT.PUSH);
    newButton.setText(ReviewI18n.getString("ReviewPropertyPage.label.button.new"));
    newButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        addReviewId();
      }
    });
    FormData newButtonData = new FormData();
    newButtonData.top = new FormAttachment(table, 0, SWT.TOP);
    newButtonData.left = new FormAttachment(table, 10);
    newButtonData.right = new FormAttachment(100, 0);
    newButton.setLayoutData(newButtonData);

    this.editButton = new Button(parent, SWT.PUSH);
    editButton.setText(ReviewI18n.getString("ReviewPropertyPage.label.button.edit"));
    editButton.setEnabled(false);
    editButton.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        editReviewId();
      }
    });
    FormData editButtonData = new FormData();
    editButtonData.top = new FormAttachment(newButton, 5);
    editButtonData.left = new FormAttachment(newButton, 0, SWT.LEFT);
    editButtonData.right = new FormAttachment(100, 0);
    editButton.setLayoutData(editButtonData);

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

  /**
   * Hooks selection listener for each <code>TableColumn</code> element of the list.
   *
   * @param columnList the list of the <code>TableColumn</code> elements.
   */
  private void hookSelectionListener(List<TableColumn> columnList) {
    for (Iterator<TableColumn> i = columnList.iterator(); i.hasNext();) {
      TableColumn column = i.next();
      column.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
          String columnKey = (String) event.widget.getData(COLUMN_KEY);
          sortBy(columnKey);
        }
      });
    }
  }

  /**
   * Sorts by the <code>String</code> columnKey.
   *
   * @param columnKey the <code>String</code> columnKey.
   */
  protected void sortBy(String columnKey) {
    ViewerSorter viewerSorter = ReviewPropertyViewerSorter.getViewerSorter(columnKey);
    if (viewerSorter != null) {
      ViewerSorter previousSorter = tableViewer.getSorter();
      if (previousSorter == viewerSorter) {
        ReviewPropertyViewerSorter.setReverse(!ReviewPropertyViewerSorter.isReverse());
        // Resets sorter.
        tableViewer.setSorter(null);
      }
      else {
        ReviewPropertyViewerSorter.setReverse(false);
      }
      tableViewer.setSorter(viewerSorter);
    }
  }

  /**
   * Adds review ID so as to open review id addition wizard.
   */
  private void addReviewId() {
    ReviewDialog.processConfigWizardDialog(this.project);
    List<ReviewId> reviewIdList = PropertyResource.getInstance(this.project, true).getReviewIdList();
    tableViewer.setInput(reviewIdList);
  }

  /**
   * Edits the selected review ID.
   */
  private void editReviewId() {
    int selectedIndex = table.getSelectionIndex();
    if (selectedIndex >= 0) {
      ReviewId reviewId = (ReviewId) tableViewer.getElementAt(selectedIndex);
      Dialog dialog = new ReviewIdEditDialog(composite.getShell(), this.project, reviewId);
      dialog.open();
      this.tableViewer.setInput(PropertyResource.getInstance(this.project, true)
          .getReviewIdList());
    }
  }

  /**
   * Removes the selected review ID
   */
  private void removeReviewId() {
    int selectedIndex = table.getSelectionIndex();
    if (selectedIndex >= 0) {
      ReviewId reviewId = (ReviewId) tableViewer.getElementAt(selectedIndex);
      IFile[] reviewIFiles = FileResource.getReviewIFiles(this.project, reviewId);
      Dialog dialog = new ReviewIdRemovalDialog(composite.getShell(), reviewIFiles);
      dialog.open();
      if (dialog.getReturnCode() == Dialog.OK) {
        // remove review files associated with the review id.
        FileResource.remove(reviewIFiles);
        try {
          PropertyResource propertyResource = PropertyResource
              .getInstance(this.project, false);
          propertyResource.removeReviewResource(reviewId);
        }
        catch (ReviewException e) {
          log.error(e);
        }
      }
    }
    tableViewer.setInput(PropertyResource.getInstance(this.project, true).getReviewIdList());
  }

  /**
   * Handles review id selection
   */
  protected void handleReviewIdSelection() {
    int index = this.table.getSelectionIndex();
    boolean isSelected = (index >= 0);
    this.newButton.setEnabled(isSelected);
    this.editButton.setEnabled(isSelected);
    this.removeButton.setEnabled(isSelected);
    TableItem item = this.table.getItem(index);
    ReviewId reviewId = (ReviewId) item.getData();
    if (reviewId.getReviewId().equals(PropertyConstraints.DEFAULT_REVIEW_ID)) {
      this.removeButton.setEnabled(false);
    }
  }
}
TOP

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

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.