Package org.apache.hadoop.eclipse.view.servers

Source Code of org.apache.hadoop.eclipse.view.servers.ServerView$StartAction

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.hadoop.eclipse.view.servers;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.hadoop.eclipse.Activator;
import org.apache.hadoop.eclipse.actions.EditServerAction;
import org.apache.hadoop.eclipse.actions.NewServerAction;
import org.apache.hadoop.eclipse.server.HadoopJob;
import org.apache.hadoop.eclipse.server.HadoopServer;
import org.apache.hadoop.eclipse.server.IJobListener;
import org.apache.hadoop.eclipse.server.JarModule;
import org.apache.hadoop.eclipse.servers.IHadoopServerListener;
import org.apache.hadoop.eclipse.servers.ServerRegistry;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.ViewPart;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

/**
* Code for displaying/updating the MapReduce Servers view panel
*/
public class ServerView extends ViewPart implements IContentProvider,
    IStructuredContentProvider, ITreeContentProvider, ITableLabelProvider,
    IJobListener, IHadoopServerListener {

  /**
   * This object is the root content for this content provider
   */
  private static final Object CONTENT_ROOT = new Object();

  private final IAction DELETE = new DeleteAction();

  private final IAction PROPERTIES = new EditServerAction(this);

  private final IAction NEWSERVER = new NewServerAction();

  private Map<String, Image> images = new HashMap<String, Image>();

  private TreeViewer viewer;

  public ServerView() {
  }

  /* @inheritDoc */
  @Override
  public void init(IViewSite site) throws PartInitException {
    super.init(site);

    try {
      images.put("hadoop", ImageDescriptor.createFromURL(
          (FileLocator.toFileURL(FileLocator.find(Activator.getDefault()
              .getBundle(), new Path("resources/hadoop_small.gif"), null))))
          .createImage(true));
      images.put("job", ImageDescriptor.createFromURL(
          (FileLocator.toFileURL(FileLocator.find(Activator.getDefault()
              .getBundle(), new Path("resources/job.gif"), null))))
          .createImage(true));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  /* @inheritDoc */
  @Override
  public void dispose() {
    for (String key : images.keySet()) {
      if (images.containsKey(key))
        ((Image) images.get(key)).dispose();
    }

    ServerRegistry.getInstance().removeListener(this);

    images.clear();
  }

  /**
   * Creates the columns for the view
   */
  @Override
  public void createPartControl(Composite parent) {
    Tree main =
        new Tree(parent, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL
            | SWT.V_SCROLL);
    main.setHeaderVisible(true);
    main.setLinesVisible(false);
    main.setLayoutData(new GridData(GridData.FILL_BOTH));

    TreeColumn serverCol = new TreeColumn(main, SWT.SINGLE);
    serverCol.setText("Server");
    serverCol.setWidth(185);
    serverCol.setResizable(true);

    TreeColumn locationCol = new TreeColumn(main, SWT.SINGLE);
    locationCol.setText("Location");
    locationCol.setWidth(185);
    locationCol.setResizable(true);

    TreeColumn stateCol = new TreeColumn(main, SWT.SINGLE);
    stateCol.setText("State");
    stateCol.setWidth(95);
    stateCol.setResizable(true);

    TreeColumn statusCol = new TreeColumn(main, SWT.SINGLE);
    statusCol.setText("Status");
    statusCol.setWidth(300);
    statusCol.setResizable(true);

    viewer = new TreeViewer(main);
    viewer.setContentProvider(this);
    viewer.setLabelProvider(this);
    viewer.setInput(CONTENT_ROOT); // dont care

    getViewSite().setSelectionProvider(viewer);
    getViewSite().getActionBars().setGlobalActionHandler(
        ActionFactory.DELETE.getId(), DELETE);

    getViewSite().getActionBars().getToolBarManager().add(PROPERTIES);

    // getViewSite().getActionBars().getToolBarManager().add(new
    // StartAction());
    getViewSite().getActionBars().getToolBarManager().add(NEWSERVER);
  }

  // NewServerAction moved to actions package for cheat sheet access --
  // eyhung

  public class DeleteAction extends Action {
    @Override
    public void run() {
      ISelection selection =
          getViewSite().getSelectionProvider().getSelection();
      if ((selection != null) && (selection instanceof IStructuredSelection)) {
        Object selItem =
            ((IStructuredSelection) selection).getFirstElement();

        if (selItem instanceof HadoopServer) {
          HadoopServer location = (HadoopServer) selItem;
          ServerRegistry.getInstance().removeServer(location);

        } else if (selItem instanceof HadoopJob) {

          // kill the job
          HadoopJob job = (HadoopJob) selItem;
          HadoopServer server = job.getServer();
          String jobId = job.getJobId();

          if (job.isCompleted())
            return;

          try {
            Session session = server.createSession();

            String command =
                server.getInstallPath() + "/bin/hadoop job -kill " + jobId;
            Channel channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand(command);
            channel.connect();
            channel.disconnect();

            session.disconnect();
          } catch (JSchException e) {
            e.printStackTrace();
          }
        }
      }
    }
  }

  public static class StartAction extends Action {
    public StartAction() {
      setText("Start");

      // NOTE(jz) - all below from internal api, worst case no images
      setImageDescriptor(DebugPluginImages
          .getImageDescriptor(IDebugUIConstants.IMG_ACT_RUN));
    }
  }

  /* @inheritDoc */
  @Override
  public void setFocus() {

  }

  /* @inheritDoc */
  public void serverChanged(HadoopServer location, int type) {
    Display.getDefault().syncExec(new Runnable() {
      public void run() {
        ServerView.this.viewer.refresh();
      }
    });
  }

  /* @inheritDoc */
  public void inputChanged(final Viewer viewer, Object oldInput,
      Object newInput) {
    if (oldInput == CONTENT_ROOT)
      ServerRegistry.getInstance().removeListener(this);
    if (newInput == CONTENT_ROOT)
      ServerRegistry.getInstance().addListener(this);
  }

  /* @inheritDoc */
  public Object[] getElements(Object inputElement) {
    return ServerRegistry.getInstance().getServers().toArray();
  }

  /* @inheritDoc */
  public Object[] getChildren(Object parentElement) {
    if (parentElement instanceof HadoopServer) {
      ((HadoopServer) parentElement).addJobListener(this);

      return ((HadoopServer) parentElement).getChildren();
    }

    return null;
  }

  /* @inheritDoc */
  public Object getParent(Object element) {
    if (element instanceof HadoopServer) {
      return CONTENT_ROOT;
    } else if (element instanceof HadoopJob) {
      return ((HadoopJob) element).getServer();
    }
    return null;
  }

  /* @inheritDoc */
  public boolean hasChildren(Object element) {
    /* Only server entries have children */
    return (element instanceof HadoopServer);
  }

  /* @inheritDoc */
  public void addListener(ILabelProviderListener listener) {
    // no listeners handling
  }

  public boolean isLabelProperty(Object element, String property) {
    return false;
  }

  /* @inheritDoc */
  public void removeListener(ILabelProviderListener listener) {
    // no listener handling
  }

  /* @inheritDoc */
  public Image getColumnImage(Object element, int columnIndex) {
    if ((columnIndex == 0) && (element instanceof HadoopServer)) {
      return images.get("hadoop");
    } else if ((columnIndex == 0) && (element instanceof HadoopJob)) {
      return images.get("job");
    }
    return null;
  }

  /* @inheritDoc */
  public String getColumnText(Object element, int columnIndex) {
    if (element instanceof HadoopServer) {
      HadoopServer server = (HadoopServer) element;

      switch (columnIndex) {
        case 0:
          return server.getName();
        case 1:
          return server.getHostName().toString();
        case 2:
          return server.getState();
        case 3:
          return "";
      }
    } else if (element instanceof HadoopJob) {
      HadoopJob job = (HadoopJob) element;

      switch (columnIndex) {
        case 0:
          return job.getId();
        case 1:
          return "";
        case 2:
          return job.getState();
        case 3:
          return job.getStatus();
      }
    } else if (element instanceof JarModule) {
      JarModule jar = (JarModule) element;

      switch (columnIndex) {
        case 0:
          return jar.toString();
        case 1:
          return "Publishing jar to server..";
        case 2:
          return "";
      }
    }

    return null;
  }

  public void jobAdded(HadoopJob job) {
    viewer.refresh();
  }

  public void jobChanged(HadoopJob job) {
    viewer.refresh(job);
  }

  public void publishDone(JarModule jar) {
    viewer.refresh();
  }

  public void publishStart(JarModule jar) {
    viewer.refresh();
  }

  /**
   * Return the currently selected server (null if there is no selection or
   * if the selection is not a server)
   *
   * @return the currently selected server entry
   */
  public HadoopServer getSelectedServer() {
    ITreeSelection selection = (ITreeSelection) viewer.getSelection();
    Object first = selection.getFirstElement();
    if (first instanceof HadoopServer) {
      return (HadoopServer) first;
    }
    return null;
  }

}
TOP

Related Classes of org.apache.hadoop.eclipse.view.servers.ServerView$StartAction

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.