Package org.locationtech.udig.catalog.ui

Source Code of org.locationtech.udig.catalog.ui.DataSourceSelectionPage$WizardViewer

/*
*    uDig - User Friendly Desktop Internet GIS client
*    http://udig.refractions.net
*    (C) 2012, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.catalog.ui;

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

import org.locationtech.udig.catalog.ui.internal.Messages;
import org.locationtech.udig.catalog.ui.workflow.DataSourceSelectionState;
import org.locationtech.udig.catalog.ui.workflow.WorkflowWizardPage;
import org.locationtech.udig.internal.ui.UiPlugin;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;

/**
* This is a wizard page which is used to select from a set of data sources.
* <p>
* Each data source is described an instance of
*
* @see org.locationtech.udig.catalog.ui.UDIGImportPageDescriptor.
*      </p>
*      <p>
*      Client code may instantiate objects of this class,but may only call
*      setSelectedDescriptor(UDIGImportPageDescriptor). All other methods are
*      wizard lifecycle methods.page
*      </p>
* @author Justin Deoliveira,Refractions Research Inc.,jdeolive@refractions.net
*/
public class DataSourceSelectionPage extends WorkflowWizardPage implements
    ISelectionChangedListener {

  /** the selected extension * */
  private IStructuredSelection selected;

  /** list of wizard page extension* */
  private List<UDIGConnectionFactoryDescriptor> descriptors;
 
  /** the viewer to select * */
  private WizardViewer viewer;

  public DataSourceSelectionPage() {
    super("dataSourceWizardPage"); //$NON-NLS-1$
    setTitle(Messages.DataSourceSelectionPage_pageTitle);
    setDescription(Messages.DataSourceSelectionPage_defaultMessage);
  }

  /**
   * Sets the selected set of import page descriptiors.
   *
   * @param ids
   *            A list of import page identifiers.
   *
   */
  public void select(List<String> ids) {
    descriptors=ConnectionFactoryManager.instance().getConnectionFactoryDescriptors(ids);
    setSelection(descriptors);
  }

  /**
   * Sets the selected import page descriptor.
   *
   * @param id
   *            The id of the import page to select.
   */
  public void select(String id) {
    ArrayList<String> l = new ArrayList<String>();
    l.add(id);
    select(l);
  }

  /**
   * Sets the selected import page descriptor.
   *
   * @param descriptor
   *            The descriptor to be selected.
   */
  public void setSelection(List<UDIGConnectionFactoryDescriptor> descriptors) {
      selected = new StructuredSelection(descriptors);
    if (viewer != null) {
      // only set first in viewer
      if (!selected.isEmpty()) {
        viewer.setSelection(new StructuredSelection(selected
            .getFirstElement()));
      } else {
        viewer.setSelection(new StructuredSelection());
      }
    }
  }

  @Override
  public boolean canFlipToNextPage() {
    boolean more = super.canFlipToNextPage();
    if (more) {
      // if selection set, we are done
      if (selected != null && selected.size() == 1) {
        return true;
      }

      // if there is only one choice, we are also done
      if (descriptors != null && descriptors.size() == 1){
        return true;
      }
      return false;
    }

    return false;
  }

  @Override
  public DataSourceSelectionState getState() {
      return (DataSourceSelectionState) super.getState();
  }
 
  @Override
  public void shown() {
      this.selected = (IStructuredSelection) viewer.getSelection();
        syncStateWithUI();
  }
  /**
   * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
   */
  public void createControl(Composite parent) {
    Composite comp = new Composite(parent, SWT.NONE);
        comp.setLayout(new FillLayout());
   
        DataSourceSelectionState state = (DataSourceSelectionState) getState();
        List<UDIGConnectionFactoryDescriptor> descriptorList;
        if (state.getShortlist() != null) {
            descriptorList = state.getShortlist();
        }
        else {
            descriptorList = getDescriptors();
        }
       
    viewer = new WizardViewer(comp, SWT.SINGLE | SWT.BORDER);
    viewer.setInput(descriptorList.toArray());
    viewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
        IWizardContainer container = getContainer();
        if (container instanceof Dialog) {
          Dialog d = (Dialog) container;
          Button button = findButton(d.buttonBar,
              IDialogConstants.NEXT_ID);
          if (button != null)
            button.notifyListeners(SWT.Selection, new Event());
        }
      }
    });
    viewer.addSelectionChangedListener(this);

    // check the state for an initial selection
    if (state.getDescriptor() != null){
      viewer.setSelection(new StructuredSelection(state.getDescriptor()));
    }
    setControl(comp);
  }

  protected Button findButton(Control buttonBar, int buttonID) {
    if (buttonBar instanceof Composite) {
      Composite composite = (Composite) buttonBar;
      Control[] children = composite.getChildren();
      for (Control control : children) {
        if (control instanceof Button) {
          Button button = (Button) control;
          if (((Integer) button.getData()).intValue() == buttonID)
            return button;
        } else if (control instanceof Composite) {
          Button button = findButton(control, buttonID);
          if (button != null)
            return button;
        }
      }
    }
    if (buttonBar instanceof Button) {
      Button button = (Button) buttonBar;
      if (((Integer) button.getData()).intValue() == buttonID)
        return button;
    }

    return null;
  }

  /**
   * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
   */
  public void selectionChanged(SelectionChangedEvent event) {
    selected = (IStructuredSelection) event.getSelection();
    syncStateWithUI();
  }

    private void syncStateWithUI() {
        if (selected != null && !selected.isEmpty()) {
      UDIGConnectionFactoryDescriptor descriptor = (UDIGConnectionFactoryDescriptor) selected
          .getFirstElement();

      // change the page description + image
      setImageDescriptor(descriptor.getDescriptionImage(0));
      setMessage(descriptor.getDescription(0));

      // update the underlying state
      DataSourceSelectionState state = getState();
      state.setDescriptor(descriptor);
    }

    // update the container buttons
    getWizard().getContainer().updateButtons();
    }

  public Viewer getViewer() {
    return viewer;
  }

  public List<UDIGConnectionFactoryDescriptor> getDescriptors() {
        List<UDIGConnectionFactoryDescriptor> connectionFactoryDescriptors = ConnectionFactoryManager.instance().getConnectionFactoryDescriptors();
        return connectionFactoryDescriptors;
 
 
  protected void saveSelectedDescriptor() {
    IStructuredSelection selection = (IStructuredSelection) viewer
        .getSelection();
    if (selection.isEmpty())
      return;
  }

  private static class WizardViewer extends TableViewer {
    public WizardViewer(Composite parent, int style) {
      super(parent, style);

      setContentProvider(new ArrayContentProvider());
      setLabelProvider(new LabelProvider() {
        public String getText(Object object) {
          UDIGConnectionFactoryDescriptor descriptor = (UDIGConnectionFactoryDescriptor) object;
            return descriptor.getLabel(0);
        }

        public Image getImage(Object object) {
          UDIGConnectionFactoryDescriptor descriptor = (UDIGConnectionFactoryDescriptor) object;

          String id = descriptor.getId();
          ImageRegistry registry = UiPlugin.getDefault()
              .getImageRegistry();
          ImageDescriptor image = descriptor.getImage(0);
          synchronized (registry) {
              if (registry.get(id) == null && image != null) {
                  registry.put(id, image);
              }

          return registry.get(id);
          }
        }
      });
    }
  }
}
TOP

Related Classes of org.locationtech.udig.catalog.ui.DataSourceSelectionPage$WizardViewer

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.