Package com.dubture.composer.ui.editor.composer

Source Code of com.dubture.composer.ui.editor.composer.DependencySection

package com.dubture.composer.ui.editor.composer;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;

import com.dubture.composer.ui.controller.DependencyController;
import com.dubture.composer.ui.dialogs.DependencyDialog;
import com.dubture.composer.ui.editor.ComposerFormPage;
import com.dubture.composer.ui.editor.FormLayoutFactory;
import com.dubture.composer.ui.editor.TableSection;
import com.dubture.composer.ui.job.UpdateDevJob;
import com.dubture.composer.ui.parts.TablePart;
import com.dubture.getcomposer.core.VersionedPackage;
import com.dubture.getcomposer.core.collection.Dependencies;

public class DependencySection extends TableSection implements PropertyChangeListener {

  private Dependencies dependencies;
  private TableViewer dependencyViewer;

  private IAction editAction;
  private IAction removeAction;
  private IAction updateAction;
 
  private UpdateDevJob updateJob;
 
  private static final int EDIT_INDEX = 0;
  private static final int REMOVE_INDEX = 1;
  private static final int UPDATE_INDEX = 2;
 
  public DependencySection(ComposerFormPage page, Composite parent, Dependencies dependencies, String title, String description, boolean expanded) {
    super(page, parent, Section.EXPANDED | Section.DESCRIPTION | Section.TWISTIE | Section.TITLE_BAR, new String[]{"Edit...", "Remove", "Update"});
   
    this.dependencies = dependencies;
    createClient(getSection(), page.getManagedForm().getToolkit(), title, description, expanded);
    updateJob = new UpdateDevJob(page.getComposerEditor().getProject());
    updateJob.setUser(true);
  }

  protected void createClient(final Section section, FormToolkit toolkit, String title, String description, boolean expanded) {
    section.setText(title);
    section.setDescription(description);
    section.setExpanded(expanded);
    section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.grabExcessVerticalSpace = expanded;
    section.setLayoutData(gd);
   
    Composite container = createClientContainer(section, 2, toolkit);
    createViewerPartControl(container, SWT.MULTI, 2, toolkit);
    TablePart tablePart = getTablePart();
    DependencyController dependencyController = new DependencyController();
    dependencyViewer = tablePart.getTableViewer();
    dependencyViewer.setContentProvider(dependencyController);
    dependencyViewer.setLabelProvider(dependencyController);
   
    toolkit.paintBordersFor(container);
    section.setClient(container);
   

    dependencyViewer.setInput(dependencies);
    dependencies.addPropertyChangeListener(this);
    updateButtons();
   
    makeActions();
    updateMenu();
  }
 
  public void setExpanded(boolean expanded) {
    getSection().setExpanded(expanded);
   
    if (expanded) {
      ((GridData)getSection().getLayoutData()).widthHint = 0;
    } else {
      ((GridData)getSection().getLayoutData()).widthHint = SWT.DEFAULT;
    }
  }
 
  protected boolean createCount() {
    return true;
  }
 
  private void updateButtons() {
    ISelection selection = dependencyViewer.getSelection();
   
    TablePart tablePart = getTablePart();
    tablePart.setButtonEnabled(EDIT_INDEX, !selection.isEmpty() && enabled);
    tablePart.setButtonEnabled(REMOVE_INDEX, !selection.isEmpty() && enabled);
    tablePart.setButtonEnabled(UPDATE_INDEX, !selection.isEmpty() && enabled);
  }
 
  private void updateMenu() {
    IStructuredSelection selection = (IStructuredSelection)dependencyViewer.getSelection();
   
    editAction.setEnabled(selection.size() > 0);
    removeAction.setEnabled(selection.size() > 0);
    updateAction.setEnabled(selection.size() > 0);
  }
 
  @Override
  public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    updateButtons();
   
    refresh();
    dependencyViewer.getTable().setEnabled(enabled);
  }

  public void refresh() {
    dependencyViewer.refresh();
    super.refresh();
  }

  @Override
  public void propertyChange(PropertyChangeEvent e) {
    refresh();
  }
 
  protected void selectionChanged(IStructuredSelection sel) {
    updateButtons();
    updateMenu();
  }
 
  private void makeActions() {
    editAction = new Action("Edit...") {
      @Override
      public void run() {
        handleEdit();
      }
    };
   
    removeAction = new Action("Remove") {
      @Override
      public void run() {
        handleRemove();
      }
    };
   
    updateAction = new Action("Update Selected") {
      @Override
      public void run() {
        handleUpdate();
      }
    };
  }
 
  @Override
  protected void fillContextMenu(IMenuManager manager) {
    manager.add(editAction);
    manager.add(removeAction);
    manager.add(updateAction);
  }
 
  private void handleEdit() {
    VersionedPackage dep = (VersionedPackage)((StructuredSelection)dependencyViewer.getSelection()).getFirstElement();
    DependencyDialog diag = new DependencyDialog(dependencyViewer.getTable().getShell(), dep.clone());
    if (diag.open() == Dialog.OK) {
      dep.setVersion(diag.getDependency().getVersion());
//      refresh();
    }
  }
 
  @SuppressWarnings("unchecked")
  private void handleRemove() {
    StructuredSelection selection = ((StructuredSelection)dependencyViewer.getSelection());
    Iterator<Object> it = selection.iterator();
    String[] names = new String[selection.size()];
    List<VersionedPackage> deps = new ArrayList<VersionedPackage>();

    for (int i = 0; it.hasNext(); i++) {
      VersionedPackage dep = (VersionedPackage)it.next();
      deps.add(dep);
      names[i] = dep.getName();
    }

    MessageDialog diag = new MessageDialog(
        dependencyViewer.getTable().getShell(),
        "Remove Dependenc" + (selection.size() > 1 ? "ies" : "y"),
        null,
        "Do you really wan't to remove " + StringUtils.join(names, ", ") + "?",
        MessageDialog.WARNING,
        new String[] {"Yes", "No"},
        0);

    if (diag.open() == Dialog.OK) {
      for (VersionedPackage dep : deps) {
        dependencies.remove(dep);
      }
    }
  }
 
  @SuppressWarnings("unchecked")
  private void handleUpdate() {
    StructuredSelection selection = ((StructuredSelection)dependencyViewer.getSelection());
    Iterator<Object> it = selection.iterator();
    String[] names = new String[selection.size()];
    List<VersionedPackage> deps = new ArrayList<VersionedPackage>();

    for (int i = 0; it.hasNext(); i++) {
      VersionedPackage dep = (VersionedPackage)it.next();
      deps.add(dep);
      names[i] = dep.getName();
    }
   
    updateJob.setPackages(names);
    updateJob.schedule();
  }
 
  @Override
  protected void buttonSelected(int index) {
    switch (index) {
     
    case EDIT_INDEX:
      handleEdit();
      break;
     
    case REMOVE_INDEX:
      handleRemove();
      break;
     
    case UPDATE_INDEX:
      handleUpdate();
      break;
    }
  }

  protected void createClient(Section section, FormToolkit toolkit) {
  }
}
TOP

Related Classes of com.dubture.composer.ui.editor.composer.DependencySection

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.