ServerView.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:13k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.eclipse.view.servers;
  19. import java.util.Collection;
  20. import org.apache.hadoop.eclipse.ImageLibrary;
  21. import org.apache.hadoop.eclipse.actions.EditLocationAction;
  22. import org.apache.hadoop.eclipse.actions.NewLocationAction;
  23. import org.apache.hadoop.eclipse.server.HadoopJob;
  24. import org.apache.hadoop.eclipse.server.HadoopServer;
  25. import org.apache.hadoop.eclipse.server.IJobListener;
  26. import org.apache.hadoop.eclipse.server.JarModule;
  27. import org.apache.hadoop.eclipse.servers.IHadoopServerListener;
  28. import org.apache.hadoop.eclipse.servers.ServerRegistry;
  29. import org.eclipse.jface.action.Action;
  30. import org.eclipse.jface.action.IAction;
  31. import org.eclipse.jface.action.IMenuListener;
  32. import org.eclipse.jface.action.IMenuManager;
  33. import org.eclipse.jface.action.MenuManager;
  34. import org.eclipse.jface.dialogs.MessageDialog;
  35. import org.eclipse.jface.viewers.ILabelProviderListener;
  36. import org.eclipse.jface.viewers.ISelection;
  37. import org.eclipse.jface.viewers.ISelectionChangedListener;
  38. import org.eclipse.jface.viewers.IStructuredSelection;
  39. import org.eclipse.jface.viewers.ITableLabelProvider;
  40. import org.eclipse.jface.viewers.ITreeContentProvider;
  41. import org.eclipse.jface.viewers.ITreeSelection;
  42. import org.eclipse.jface.viewers.SelectionChangedEvent;
  43. import org.eclipse.jface.viewers.TreeViewer;
  44. import org.eclipse.jface.viewers.Viewer;
  45. import org.eclipse.swt.SWT;
  46. import org.eclipse.swt.graphics.Image;
  47. import org.eclipse.swt.layout.GridData;
  48. import org.eclipse.swt.widgets.Composite;
  49. import org.eclipse.swt.widgets.Display;
  50. import org.eclipse.swt.widgets.Menu;
  51. import org.eclipse.swt.widgets.Tree;
  52. import org.eclipse.swt.widgets.TreeColumn;
  53. import org.eclipse.ui.IViewSite;
  54. import org.eclipse.ui.PartInitException;
  55. import org.eclipse.ui.actions.ActionFactory;
  56. import org.eclipse.ui.part.ViewPart;
  57. /**
  58.  * Map/Reduce locations view: displays all available Hadoop locations and the
  59.  * Jobs running/finished on these locations
  60.  */
  61. public class ServerView extends ViewPart implements ITreeContentProvider,
  62.     ITableLabelProvider, IJobListener, IHadoopServerListener {
  63.   /**
  64.    * Deletion action: delete a Hadoop location, kill a running job or remove
  65.    * a finished job entry
  66.    */
  67.   class DeleteAction extends Action {
  68.     DeleteAction() {
  69.       setText("Delete");
  70.       setImageDescriptor(ImageLibrary.get("server.view.action.delete"));
  71.     }
  72.     /* @inheritDoc */
  73.     @Override
  74.     public void run() {
  75.       ISelection selection =
  76.           getViewSite().getSelectionProvider().getSelection();
  77.       if ((selection != null) && (selection instanceof IStructuredSelection)) {
  78.         Object selItem =
  79.             ((IStructuredSelection) selection).getFirstElement();
  80.         if (selItem instanceof HadoopServer) {
  81.           HadoopServer location = (HadoopServer) selItem;
  82.           if (MessageDialog.openConfirm(Display.getDefault()
  83.               .getActiveShell(), "Confirm delete Hadoop location",
  84.               "Do you really want to remove the Hadoop location: "
  85.                   + location.getLocationName())) {
  86.             ServerRegistry.getInstance().removeServer(location);
  87.           }
  88.         } else if (selItem instanceof HadoopJob) {
  89.           // kill the job
  90.           HadoopJob job = (HadoopJob) selItem;
  91.           if (job.isCompleted()) {
  92.             // Job already finished, remove the entry
  93.             job.getLocation().purgeJob(job);
  94.           } else {
  95.             // Job is running, kill the job?
  96.             if (MessageDialog.openConfirm(Display.getDefault()
  97.                 .getActiveShell(), "Confirm kill running Job",
  98.                 "Do you really want to kill running Job: " + job.getJobID())) {
  99.               job.kill();
  100.             }
  101.           }
  102.         }
  103.       }
  104.     }
  105.   }
  106.   /**
  107.    * This object is the root content for this content provider
  108.    */
  109.   private static final Object CONTENT_ROOT = new Object();
  110.   private final IAction deleteAction = new DeleteAction();
  111.   private final IAction editServerAction = new EditLocationAction(this);
  112.   private final IAction newLocationAction = new NewLocationAction();
  113.   private TreeViewer viewer;
  114.   public ServerView() {
  115.   }
  116.   /* @inheritDoc */
  117.   @Override
  118.   public void init(IViewSite site) throws PartInitException {
  119.     super.init(site);
  120.   }
  121.   /* @inheritDoc */
  122.   @Override
  123.   public void dispose() {
  124.     ServerRegistry.getInstance().removeListener(this);
  125.   }
  126.   /**
  127.    * Creates the columns for the view
  128.    */
  129.   @Override
  130.   public void createPartControl(Composite parent) {
  131.     Tree main =
  132.         new Tree(parent, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL
  133.             | SWT.V_SCROLL);
  134.     main.setHeaderVisible(true);
  135.     main.setLinesVisible(false);
  136.     main.setLayoutData(new GridData(GridData.FILL_BOTH));
  137.     TreeColumn serverCol = new TreeColumn(main, SWT.SINGLE);
  138.     serverCol.setText("Location");
  139.     serverCol.setWidth(300);
  140.     serverCol.setResizable(true);
  141.     TreeColumn locationCol = new TreeColumn(main, SWT.SINGLE);
  142.     locationCol.setText("Master node");
  143.     locationCol.setWidth(185);
  144.     locationCol.setResizable(true);
  145.     TreeColumn stateCol = new TreeColumn(main, SWT.SINGLE);
  146.     stateCol.setText("State");
  147.     stateCol.setWidth(95);
  148.     stateCol.setResizable(true);
  149.     TreeColumn statusCol = new TreeColumn(main, SWT.SINGLE);
  150.     statusCol.setText("Status");
  151.     statusCol.setWidth(300);
  152.     statusCol.setResizable(true);
  153.     viewer = new TreeViewer(main);
  154.     viewer.setContentProvider(this);
  155.     viewer.setLabelProvider(this);
  156.     viewer.setInput(CONTENT_ROOT); // don't care
  157.     getViewSite().setSelectionProvider(viewer);
  158.     
  159.     getViewSite().getActionBars().setGlobalActionHandler(
  160.         ActionFactory.DELETE.getId(), deleteAction);
  161.     getViewSite().getActionBars().getToolBarManager().add(editServerAction);
  162.     getViewSite().getActionBars().getToolBarManager().add(newLocationAction);
  163.     createActions();
  164.     createContextMenu();
  165.   }
  166.   /**
  167.    * Actions
  168.    */
  169.   private void createActions() {
  170.     /*
  171.      * addItemAction = new Action("Add...") { public void run() { addItem(); } };
  172.      * addItemAction.setImageDescriptor(ImageLibrary
  173.      * .get("server.view.location.new"));
  174.      */
  175.     /*
  176.      * deleteItemAction = new Action("Delete") { public void run() {
  177.      * deleteItem(); } };
  178.      * deleteItemAction.setImageDescriptor(getImageDescriptor("delete.gif"));
  179.      * 
  180.      * selectAllAction = new Action("Select All") { public void run() {
  181.      * selectAll(); } };
  182.      */
  183.     // Add selection listener.
  184.     viewer.addSelectionChangedListener(new ISelectionChangedListener() {
  185.       public void selectionChanged(SelectionChangedEvent event) {
  186.         updateActionEnablement();
  187.       }
  188.     });
  189.   }
  190.   private void addItem() {
  191.     System.out.printf("ADD ITEMn");
  192.   }
  193.   private void updateActionEnablement() {
  194.     IStructuredSelection sel = (IStructuredSelection) viewer.getSelection();
  195.     // deleteItemAction.setEnabled(sel.size() > 0);
  196.   }
  197.   /**
  198.    * Contextual menu
  199.    */
  200.   private void createContextMenu() {
  201.     // Create menu manager.
  202.     MenuManager menuMgr = new MenuManager();
  203.     menuMgr.setRemoveAllWhenShown(true);
  204.     menuMgr.addMenuListener(new IMenuListener() {
  205.       public void menuAboutToShow(IMenuManager mgr) {
  206.         fillContextMenu(mgr);
  207.       }
  208.     });
  209.     // Create menu.
  210.     Menu menu = menuMgr.createContextMenu(viewer.getControl());
  211.     viewer.getControl().setMenu(menu);
  212.     // Register menu for extension.
  213.     getSite().registerContextMenu(menuMgr, viewer);
  214.   }
  215.   private void fillContextMenu(IMenuManager mgr) {
  216.     mgr.add(newLocationAction);
  217.     mgr.add(editServerAction);
  218.     mgr.add(deleteAction);
  219.     /*
  220.      * mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
  221.      * mgr.add(deleteItemAction); mgr.add(new Separator());
  222.      * mgr.add(selectAllAction);
  223.      */
  224.   }
  225.   /* @inheritDoc */
  226.   @Override
  227.   public void setFocus() {
  228.   }
  229.   /*
  230.    * IHadoopServerListener implementation
  231.    */
  232.   /* @inheritDoc */
  233.   public void serverChanged(HadoopServer location, int type) {
  234.     Display.getDefault().syncExec(new Runnable() {
  235.       public void run() {
  236.         ServerView.this.viewer.refresh();
  237.       }
  238.     });
  239.   }
  240.   /*
  241.    * IStructuredContentProvider implementation
  242.    */
  243.   /* @inheritDoc */
  244.   public void inputChanged(final Viewer viewer, Object oldInput,
  245.       Object newInput) {
  246.     if (oldInput == CONTENT_ROOT)
  247.       ServerRegistry.getInstance().removeListener(this);
  248.     if (newInput == CONTENT_ROOT)
  249.       ServerRegistry.getInstance().addListener(this);
  250.   }
  251.   /**
  252.    * The root elements displayed by this view are the existing Hadoop
  253.    * locations
  254.    */
  255.   /* @inheritDoc */
  256.   public Object[] getElements(Object inputElement) {
  257.     return ServerRegistry.getInstance().getServers().toArray();
  258.   }
  259.   /*
  260.    * ITreeStructuredContentProvider implementation
  261.    */
  262.   /**
  263.    * Each location contains a child entry for each job it runs.
  264.    */
  265.   /* @inheritDoc */
  266.   public Object[] getChildren(Object parent) {
  267.     if (parent instanceof HadoopServer) {
  268.       HadoopServer location = (HadoopServer) parent;
  269.       location.addJobListener(this);
  270.       Collection<HadoopJob> jobs = location.getJobs();
  271.       return jobs.toArray();
  272.     }
  273.     return null;
  274.   }
  275.   /* @inheritDoc */
  276.   public Object getParent(Object element) {
  277.     if (element instanceof HadoopServer) {
  278.       return CONTENT_ROOT;
  279.     } else if (element instanceof HadoopJob) {
  280.       return ((HadoopJob) element).getLocation();
  281.     }
  282.     return null;
  283.   }
  284.   /* @inheritDoc */
  285.   public boolean hasChildren(Object element) {
  286.     /* Only server entries have children */
  287.     return (element instanceof HadoopServer);
  288.   }
  289.   /*
  290.    * ITableLabelProvider implementation
  291.    */
  292.   /* @inheritDoc */
  293.   public void addListener(ILabelProviderListener listener) {
  294.     // no listeners handling
  295.   }
  296.   public boolean isLabelProperty(Object element, String property) {
  297.     return false;
  298.   }
  299.   /* @inheritDoc */
  300.   public void removeListener(ILabelProviderListener listener) {
  301.     // no listener handling
  302.   }
  303.   /* @inheritDoc */
  304.   public Image getColumnImage(Object element, int columnIndex) {
  305.     if ((columnIndex == 0) && (element instanceof HadoopServer)) {
  306.       return ImageLibrary.getImage("server.view.location.entry");
  307.     } else if ((columnIndex == 0) && (element instanceof HadoopJob)) {
  308.       return ImageLibrary.getImage("server.view.job.entry");
  309.     }
  310.     return null;
  311.   }
  312.   /* @inheritDoc */
  313.   public String getColumnText(Object element, int columnIndex) {
  314.     if (element instanceof HadoopServer) {
  315.       HadoopServer server = (HadoopServer) element;
  316.       switch (columnIndex) {
  317.         case 0:
  318.           return server.getLocationName();
  319.         case 1:
  320.           return server.getMasterHostName().toString();
  321.         case 2:
  322.           return server.getState();
  323.         case 3:
  324.           return "";
  325.       }
  326.     } else if (element instanceof HadoopJob) {
  327.       HadoopJob job = (HadoopJob) element;
  328.       switch (columnIndex) {
  329.         case 0:
  330.           return job.getJobID().toString();
  331.         case 1:
  332.           return "";
  333.         case 2:
  334.           return job.getState().toString();
  335.         case 3:
  336.           return job.getStatus();
  337.       }
  338.     } else if (element instanceof JarModule) {
  339.       JarModule jar = (JarModule) element;
  340.       switch (columnIndex) {
  341.         case 0:
  342.           return jar.toString();
  343.         case 1:
  344.           return "Publishing jar to server..";
  345.         case 2:
  346.           return "";
  347.       }
  348.     }
  349.     return null;
  350.   }
  351.   /*
  352.    * IJobListener (Map/Reduce Jobs listener) implementation
  353.    */
  354.   /* @inheritDoc */
  355.   public void jobAdded(HadoopJob job) {
  356.     viewer.refresh();
  357.   }
  358.   /* @inheritDoc */
  359.   public void jobRemoved(HadoopJob job) {
  360.     viewer.refresh();
  361.   }
  362.   /* @inheritDoc */
  363.   public void jobChanged(HadoopJob job) {
  364.     viewer.refresh(job);
  365.   }
  366.   /* @inheritDoc */
  367.   public void publishDone(JarModule jar) {
  368.     viewer.refresh();
  369.   }
  370.   /* @inheritDoc */
  371.   public void publishStart(JarModule jar) {
  372.     viewer.refresh();
  373.   }
  374.   /*
  375.    * Miscellaneous
  376.    */
  377.   /**
  378.    * Return the currently selected server (null if there is no selection or
  379.    * if the selection is not a server)
  380.    * 
  381.    * @return the currently selected server entry
  382.    */
  383.   public HadoopServer getSelectedServer() {
  384.     ITreeSelection selection = (ITreeSelection) viewer.getSelection();
  385.     Object first = selection.getFirstElement();
  386.     if (first instanceof HadoopServer) {
  387.       return (HadoopServer) first;
  388.     }
  389.     return null;
  390.   }
  391. }