Package org.fusesource.ide.fabric8.ui.navigator.properties

Source Code of org.fusesource.ide.fabric8.ui.navigator.properties.VersionTableSheetPage

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.fabric8.ui.navigator.properties;

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

import org.eclipse.jface.action.Separator;
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.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.fusesource.ide.commons.Viewers;
import org.fusesource.ide.commons.tree.Refreshables;
import org.fusesource.ide.commons.ui.Selections;
import org.fusesource.ide.commons.ui.actions.SeparatorFactory;
import org.fusesource.ide.commons.ui.views.TableViewSupport;
import org.fusesource.ide.commons.util.Function1;
import org.fusesource.ide.fabric8.core.dto.ProfileStatusDTO;
import org.fusesource.ide.fabric8.core.dto.VersionDTO;
import org.fusesource.ide.fabric8.ui.actions.CreateVersionAction;
import org.fusesource.ide.fabric8.ui.navigator.Fabric;
import org.fusesource.ide.fabric8.ui.navigator.ProfileNode;
import org.fusesource.ide.fabric8.ui.navigator.VersionNode;
import org.fusesource.ide.fabric8.ui.navigator.VersionsNode;
import org.jboss.tools.jmx.core.tree.Node;

public class VersionTableSheetPage extends TableViewSupport implements IPropertySheetPage {

  protected static final String VIEW_ID = VersionTableSheetPage.class.getName();
  protected static SeparatorFactory separatorFactory = new SeparatorFactory(VIEW_ID);
 
  public static VersionDTO asVersionDTO(Object element) {
        if (element instanceof VersionDTO) {
            return (VersionDTO) element;
        } else if (element instanceof VersionNode) {
          return ((VersionNode)element).getVersion();
        }
        return null;
    }
 
  private CreateVersionAction createVersionAction;
  private Separator separator1 = separatorFactory.createSeparator();
  private Separator separator2 = separatorFactory.createSeparator();
 
  private final Fabric fabric;
  private Runnable refreshRunnable = new Runnable() {

    @Override
    public void run() {
      refresh();
    }
  };

  public VersionTableSheetPage(Fabric fabric) {
    this.fabric = fabric;
    updateActionStatus();
  }

  @Override
  public void dispose() {
    super.dispose();
    fabric.removeFabricUpdateRunnable(refreshRunnable);
  }

  @Override
  public void refresh() {
    Viewers.async(new Runnable() {

      @Override
      public void run() {
        Refreshables.refresh(fabric.getVersionsNode());
        updateData();
        Refreshables.refresh(getViewer());
        updateActionStatus();
      }
    });
  }

  public Fabric getFabric() {
    return fabric;
  }

  /* (non-Javadoc)
   * @see org.fusesource.ide.commons.ui.views.TableViewSupport#configureViewer()
   */
  @Override
  protected void configureViewer() {
    addLocalMenuActions(
        separator1,
        getCreateVersionAction(),
        separator2);
   
    addToolBarActions(getCreateVersionAction());
   
    getViewer().addDoubleClickListener(new IDoubleClickListener() {     
      @Override
      public void doubleClick(DoubleClickEvent event) {
        VersionsNode versionsNode = fabric.getVersionsNode();
        if (versionsNode != null) {
          List<VersionDTO> selectedVersions = getSelectedVersions();
          if (!selectedVersions.isEmpty()) {
            VersionDTO version = selectedVersions.get(0);
            VersionNode versionNode = versionsNode.getVersionNode(version.getId());
            if (versionNode != null) {
              Selections.setSingleSelection(fabric.getRefreshableUI(), versionNode);
            }
          }
        }
      }

    });

    getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
      @Override
      public void selectionChanged(SelectionChangedEvent event) {
        updateActionStatus();
      }
    });

    fabric.addFabricUpdateRunnable(refreshRunnable);
    updateData();
  }

  protected ProfileNode getSelectedProfileNode() {
    Object first = Selections.getFirstSelection(getViewer());
    if (first instanceof ProfileStatusDTO) {
      ProfileStatusDTO status = (ProfileStatusDTO) first;
      String id = status.getProfile();
      VersionNode version = getFabric().getDefaultVersionNode();
      if (version != null) {
        return version.getProfileNode(id);
      }
    }
    return null;
  }

 
  protected List<VersionDTO> getSelectedVersions() {
    List<VersionDTO> versions = new ArrayList<VersionDTO>();
    IStructuredSelection selection = Selections.getStructuredSelection(getViewer());
    if (selection != null) {
      Iterator iterator = selection.iterator();
      while (iterator.hasNext()) {
        VersionDTO version = VersionNode.toVersion(iterator.next());
        if (version != null) {
          versions.add(version);
        }
      }
    }
    return versions;
  }

  protected Set<String> getSelectedIds() {
    Set<String> answer = new HashSet<String>();
    List<VersionDTO> versions = getSelectedVersions();
    for (VersionDTO version : versions) {
      String id = version.getId();
      if (id != null) {
        answer.add(id);
      }
    }
    return answer;
  }
 
    protected CreateVersionAction getCreateVersionAction() {
        if (createVersionAction == null) {
          createVersionAction = createCreateVersionAction((VersionNode) null);
        }
        return createVersionAction;
    }
   
    protected CreateVersionAction createCreateVersionAction(VersionNode version) {
      if (version == null && fabric != null) {
        return new CreateVersionAction(fabric.getVersionsNode());
      }
        return new CreateVersionAction(version);
    }
 
  public void updateData() {
    VersionsNode versionsNode = fabric.getVersionsNode();
    if (versionsNode != null) {
      setInput(versionsNode.getChildrenList());
    }
  }
 
    protected VersionNode getSelectedVersionNode() {
        Object first = Selections.getFirstSelection(getViewer());
        if (first instanceof VersionDTO) {
            VersionDTO version = (VersionDTO) first;
            String id = version.getId();
            for (Node n : fabric.getVersionsNode().getChildrenList()) {
              if (n != null && n instanceof VersionNode && ((VersionNode)n).getVersionId().equals(id)) {
                return (VersionNode)n;
              }
            }
        }
        return null;
    }

  protected void updateActionStatus() {
    VersionNode versionNode = getSelectedVersionNode();
    getCreateVersionAction().setFabric(fabric);
        getCreateVersionAction().setVersioNode(versionNode);
  }

  /* (non-Javadoc)
   * @see org.fusesource.ide.commons.ui.IConfigurableColumns#getColumnConfigurationId()
   */
  @Override
  public String getColumnConfigurationId() {
    return VIEW_ID;
  }

  /* (non-Javadoc)
   * @see org.fusesource.ide.commons.ui.views.TableViewSupport#createColumns()
   */
  @Override
  protected void createColumns() {
    clearColumns();

        int bounds = 100;
        int column = 0;

        Function1 function = new Function1() {
            @Override
            public Object apply(Object element) {
                VersionDTO version = asVersionDTO(element);
                if (version != null) {
                    return version.getId();
                }
                return null;
            }
        };
        column = addColumnFunction(250, column, function, "Id");

        function = new Function1() {
            @Override
            public Boolean apply(Object element) {
              VersionDTO version = asVersionDTO(element);
                if (version != null) {
                    return version.isDefaultVersion();
                }
                return null;
            }
        };
        column = addColumnFunction(bounds, column, function, "Default");
  }

  /* (non-Javadoc)
   * @see org.fusesource.ide.commons.ui.views.TableViewSupport#createContentProvider()
   */
  @Override
  protected IStructuredContentProvider createContentProvider() {
    return ArrayContentProvider.getInstance();
  }

  /* (non-Javadoc)
   * @see org.fusesource.ide.commons.ui.views.ColumnViewSupport#getHelpID()
   */
  @Override
  protected String getHelpID() {
    return VIEW_ID;
  }
}
TOP

Related Classes of org.fusesource.ide.fabric8.ui.navigator.properties.VersionTableSheetPage

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.