SWT模拟Eclipse左侧菜单,简单实现新建工程,新建包,添加用例等功能.

来源:互联网 发布:你幸福吗我姓曾 知乎 编辑:程序博客网 时间:2024/04/29 17:55
 

package rcpdemo;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.Stack;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class View extends ViewPart {
 public static final String ID = "rcpdemo.view";

 private TableViewer viewer;

 /**
  * The content provider class is responsible for providing objects to the
  * view. It can wrap existing objects in adapters or simply return objects
  * as-is. These objects may be sensitive to the current input of the view,
  * or ignore it and always show the same content (like Task List, for
  * example).
  */
 class ViewContentProvider implements IStructuredContentProvider {
  public void inputChanged(Viewer v, Object oldInput, Object newInput) {
  }
 
  public void dispose() {
  }

  public Object[] getElements(Object parent) {
   if (parent instanceof Object[]) {
    return (Object[]) parent;
   }
         return new Object[0];
  }
 }

 class ViewLabelProvider extends LabelProvider implements
   ITableLabelProvider {
  public String getColumnText(Object obj, int index) {
   return getText(obj);
  }

  public Image getColumnImage(Object obj, int index) {
   return getImage(obj);
  }

  public Image getImage(Object obj) {
   return PlatformUI.getWorkbench().getSharedImages().getImage(
     ISharedImages.IMG_OBJ_ELEMENT);
  }
 }

 private static String fileSplitString = System.getProperty("file.separator");
 private static String projectPathString = "f:";
 
 private static String suepFlagString = ".suep";  
 private static File file = new File(projectPathString);
 
 Tree upTree = null;
 
 
 
 private void initProjectFile(File file,Set<File> projectSet){
  File allFile [] = file.listFiles();
  for (File allfile : allFile) {
   if(allfile.isDirectory()){
    String list [] = allfile.list(new FilenameFilter() {
     boolean flag = false;
     public boolean accept(File dir, String name) {
      if(name.endsWith(suepFlagString)){
       flag = true;
      }
      
      return flag;
     }
    });
    
    if(list !=null && list.length>0){
     projectSet.add(allfile);
    }
   }
  }
 }
 
 
 private void showAllProjectFile(Set<File> fileSet){
 for (File allfile : fileSet) {
  String fileName = allfile.getName();
  TreeItem treeItem  = new TreeItem(upTree, SWT.NONE);
  treeItem.setText(fileName);
  if(allfile.isDirectory()){   
   forShowProjectFile(treeItem,allfile);
  }
   
  
 }
}
 
 int i = 0 ;
 private void forShowProjectFile(TreeItem treeItem ,File file){
  File [] listFiles = file.listFiles();
  Map<TreeItem,File> childFileMap = new HashMap<TreeItem,File>();
  for (File allfile : listFiles) {
   i++;
   String fileName = allfile.getName();
   if(!fileName.endsWith(suepFlagString)){
    String treeName = /*fileName.indexOf(".") != -1 ? fileName.substring(0,fileName.indexOf(".")): */fileName;
    TreeItem flagTreeItem = new TreeItem(treeItem, SWT.NULL);
    flagTreeItem.setText(treeName);
    if(allfile.isDirectory() && allfile.list().length>0){    
     childFileMap.put(flagTreeItem,allfile);
    }
    if(i == listFiles.length){
     i = 0 ;
     if(childFileMap != null){
      Set<TreeItem> entrySet = childFileMap.keySet();
      for (TreeItem treeItem2 : entrySet) {
       forShowProjectFile(treeItem2,childFileMap.get(treeItem2));
      }
     }
    }
   }
  }
 }
 /**
  * This is a callback that will allow us to create the viewer and initialize
  * it.
  */
 public void createPartControl(Composite parent) {
  Set<File> projectSet = new HashSet<File>();
  SashForm sashForm = new SashForm(parent, SWT.VERTICAL|SWT.SMOOTH);
  Group upGroup = new Group(sashForm, SWT.NONE);
  upGroup.setLayout(new FillLayout());
  upTree = new Tree(upGroup, SWT.SINGLE);
  initProjectFile(file,projectSet);
  showAllProjectFile(projectSet);
  
  
  upTree.addMenuDetectListener(new MenuDetectListener() {
     
      @Override
      public void menuDetected(MenuDetectEvent e) {   
       TreeItem[] items = upTree.getSelection();
       if( (null == items)||(items.length == 0)){
        return ;
       }
        final TreeItem one = items[0];
        MenuManager mgr = new MenuManager();
        addProjectAction(one, mgr);
        Menu mu = mgr.createContextMenu(upTree);
        mu.setVisible(true);
      }  
     });

  viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
    | SWT.V_SCROLL);
  viewer.setContentProvider(new ViewContentProvider());
  viewer.setLabelProvider(new ViewLabelProvider());
  // Provide the input to the ContentProvider
  viewer.setInput(new String[] {"One", "Two", "Three"});
 }

 /**
   * 工程按钮
   * @param item
   * @param mgr
   */
 
 private void createProject(String projectName,String endPreFix){
   TreeItem treeItem  = new TreeItem(upTree, SWT.NONE);
   treeItem.setText(projectName);
   File createFile = new File(projectPathString+fileSplitString+projectName);
   if(!createFile.exists()){
    createFile.mkdir();  
      try {
    File createFlagFile = new File(projectPathString+fileSplitString+projectName+fileSplitString+projectName+endPreFix);
    PrintWriter print = new PrintWriter(createFlagFile);    
    print.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    print.flush();
    print.close();   
   } catch (IOException e) {
    e.printStackTrace();
   }
     }
 }
 
 private void addProjectAction(final TreeItem item, MenuManager mgr) {
   mgr.add(new Action("New Project"){   
    @Override
    public void run() {  
     String projectName = "testName";//+String.valueOf(Math.random()*100).substring(0,String.valueOf(Math.random()*100).indexOf("."));
     TreeItem [] treeItem = item.getParent().getItems();
     for (TreeItem treeItem2 : treeItem) {
      if(treeItem2.getText().equals(projectName)) {
       System.out.println("已存在的项目!");
       return;
      }
  }
    
     createProject(projectName,suepFlagString); 
    }
   
    @Override
    public ImageDescriptor getImageDescriptor() {
  return null;
//     return ImageRoom.getImageDescriptor(IImageName.FILE_NEW);
    }
   }); 
  
   mgr.add(new Action("Delete Project"){     
     @Override
     public void run() {
     String fileName = item.getText();
     File deleteFile = new File(projectPathString+fileSplitString+fileName);
    if(deleteFile.exists()){
     deleteFile.delete(); 
    }
     }
    
     @Override
     public ImageDescriptor getImageDescriptor() {
   return null;
//      return ImageRoom.getImageDescriptor(IImageName.FILE_NEW);
     }
    }); 
  
   addPackageCreateAction(item,mgr);
  
 }

 
 private Stack<String> getItemMappingFilePath(TreeItem treeItem,Stack<String> stack){
  if(treeItem != null){
   stack.push(treeItem.getText()); 
   TreeItem item = treeItem.getParentItem();
   if(item != null)
    getItemMappingFilePath(item,stack);
  }
  
  return stack;
  
 }
 
 
 private void addPackageCreateAction(final TreeItem item, MenuManager mgr){
   mgr.add(new Action("New TestCase"){  
    @Override
    public void run() {
     Stack<String> stack = new Stack<String>();
     String filePath = projectPathString;
     stack = getItemMappingFilePath(item, stack); 
     for(int i = stack.size()-1;i >= 0;i--){
      filePath += fileSplitString+stack.get(i);
     }
     String testCaseName = "testCase.xml"; 
   
     new TreeItem(item, SWT.NULL).setText(testCaseName);  
      File createFile = new File(filePath+fileSplitString+"testCase.proc");
    if(!createFile.exists()){
     createFile.mkdir();   
     TreeItem treeItem =  new TreeItem(item,  SWT.NULL);
     treeItem.setText(createFile.getName());  
       try {
     File createXmlFile = new File(filePath+fileSplitString+"testCase.xml");
     File createFlagFile = new File(filePath+fileSplitString+"testCase.proc"+fileSplitString+"testCase.rr");
     new TreeItem(treeItem,  SWT.NULL).setText(createFlagFile.getName());
     PrintWriter print = new PrintWriter(createXmlFile);
     PrintWriter prints = new PrintWriter(createFlagFile);  
     print.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
     print.flush();
     prints.flush();
     prints.close();
     print.close();   
    } catch (IOException e) {
     e.printStackTrace();
    }
      }
    
    }
   
    @Override
    public ImageDescriptor getImageDescriptor() {
     return null;
//     return ImageRoom.getImageDescriptor(IImageName.FILE_NEW);
    }
   }); 
  
   mgr.add(new Separator());
  
   // 打开
   mgr.add(new Action("Add Package"){
    @Override
    public void run() {
     Stack<String> stack = new Stack<String>();
     String filePath = projectPathString;
     stack = getItemMappingFilePath(item, stack); 
     for(int i = stack.size()-1;i >= 0;i--){
      filePath += fileSplitString+stack.get(i);
     }
     new TreeItem(item, SWT.NULL).setText("add package");  
      File createFile = new File(filePath+fileSplitString+"add package");
   if(!createFile.exists()){  
     createFile.mkdir(); 
    }
    
    }
   
    @Override
    public ImageDescriptor getImageDescriptor() {
     return null;
//     return ImageRoom.getImageDescriptor(IImageName.FOLDER_ADD);
    }
   });
 }

 

 /**
  * Passing the focus request to the viewer's control.
  */
 public void setFocus() {
  //viewer.getControl().setFocus();
 }
}

原创粉丝点击