Package com.simonepezzano.hshare.views

Source Code of com.simonepezzano.hshare.views.MainView

package com.simonepezzano.hshare.views;

import hshare.Activator;

import java.io.IOException;
import java.util.Iterator;

import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.mortbay.jetty.Server;

import com.simonepezzano.hshare.HFiles;
import com.simonepezzano.hshare.HLog;
import com.simonepezzano.hshare.Statics;
import com.simonepezzano.hshare.composites.InfoComposite;
import com.simonepezzano.hshare.composites.StuffComposite;

/**
* The main MooSharee view
* @author Simone Pezzano
*
*/
public class MainView extends ViewPart implements SelectionListener,ISelectionChangedListener,IHShareView{
  public static final String LABEL_START="Start Server";
  public static final String LABEL_STOP="Stop Server";
  public static final String ID="HShare.view";
 
  private InfoComposite ic;
  private StuffComposite sc;
  ToolItem serverItem,addItem,removeItem,refreshItem,editItem;
  private Server server;
 

  @Override
  public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout());
    Statics.checkResDir();
    Statics.checkDirTemplatesDir();
    server = Statics.getServerInstance();
    ic = new InfoComposite(parent,SWT.BORDER);
    ic.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    ToolBar tb = new ToolBar(parent,SWT.HORIZONTAL);
    serverItem = new ToolItem(tb,SWT.NONE);
    serverItem.setText(LABEL_START);
    serverItem.setImage(Activator.getImageDescriptor("icons/mix_world_32.png").createImage());
    serverItem.addSelectionListener(this);
   
    new ToolItem(tb,SWT.SEPARATOR);
   
    addItem = new ToolItem(tb,SWT.NONE);
    addItem.setText("Add directory");
    addItem.setImage(Activator.getImageDescriptor("icons/folder_32.png").createImage());
    addItem.addSelectionListener(this);
   
    removeItem = new ToolItem(tb,SWT.NONE);
    removeItem.setText("Remove directory");
    removeItem.setImage(Activator.getImageDescriptor("icons/trash_arrow_32.png").createImage());
    removeItem.setEnabled(false);
    removeItem.addSelectionListener(this);
   
    new ToolItem(tb,SWT.SEPARATOR);
    editItem = new ToolItem(tb,SWT.NONE);
    editItem.setText("Edit properties");
    editItem.setImage(Activator.getImageDescriptor("icons/application-edit.png").createImage());
    editItem.setEnabled(false);
    editItem.addSelectionListener(this);
   
    new ToolItem(tb,SWT.SEPARATOR);
    refreshItem = new ToolItem(tb,SWT.NONE);
    refreshItem.setText("Refresh");
    refreshItem.setImage(Activator.getImageDescriptor("icons/reload_32.png").createImage());
    refreshItem.addSelectionListener(this);
    tb.pack();
   
    sc = new StuffComposite(parent,SWT.NONE);
    sc.setLayoutData(new GridData(GridData.FILL_BOTH));
   
    sc.getTv().addSelectionChangedListener(this);
    sc.addMouseListener(new MouseListener() {
      public void mouseUp(MouseEvent e) {}
      public void mouseDown(MouseEvent e) {}
      public void mouseDoubleClick(MouseEvent e) {
        // Double click any folder to edit properties
        sc.startEdit();
      }
    });
  }
 
  /**
   * Refreshes the tree
   * @throws DocumentException
   */
  public void refreshTree() throws DocumentException{
      sc.refresh();
  }
  @Override
  public void setFocus() {
    sc.getTv().getTree().setFocus();
   
  }

  public void widgetDefaultSelected(SelectionEvent e) {}
  @SuppressWarnings("unchecked")
  public void widgetSelected(SelectionEvent e) {
    if(e.getSource().equals(serverItem)){
      try{
        if(isStarted()){
          LogsView.instance.addItem("Stopping server");
          server.stop();
          ic.setStatus(InfoComposite.STATUS_DISCONNECTED);
          serverItem.setText(LABEL_START);
          LogsView.instance.addItem("Server stopped");
         
        }
        else{
          LogsView.instance.addItem("Starting server");
          server.start();
          ic.setStatus(InfoComposite.STATUS_CONNECTED);
          serverItem.setText(LABEL_STOP);
          LogsView.instance.addItem("Server started");
        }
        return;
      }catch(Exception ex){
        LogsView.instance.addItem("Could not start server!");
        HLog.netlogger.fatal("Unable to start server. Big issue here...",ex);
      }
    }
     if(e.getSource().equals(addItem)){
        DirectoryDialog dd = new DirectoryDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
        try {
          HFiles.getInstance().add(dd.open());
          refreshTree();
        } catch (DocumentException e1) {
          HLog.doclogger.fatal("The document seems to be corrupted after adding item",e1);
        } catch (IOException e2) {
          HLog.doclogger.error("Could not read important info from disk",e2);
        }
       
       }
     if(e.getSource().equals(removeItem))
       try {
           Iterator<Element> items = ((IStructuredSelection)sc.getTv().getSelection()).iterator();
           while(items.hasNext()){
             Element el = items.next();
             if(Statics.isAFile(el))
               el = el.getParent();
             HFiles.getInstance().removeDir(el);
            
            }
           HFiles.getInstance().saveHFiles();
           sc.refresh();
           } catch (DocumentException e1) {
             HLog.doclogger.fatal("The document seems to be corrupted after item removal",e1);
           } catch (IOException e2) {
             HLog.iologger.fatal("Could not save document after item removal",e2);
           }
    if(e.getSource().equals(editItem)){
      sc.startEdit();
    }
    if(e.getSource().equals(refreshItem))
      try {
        HFiles.getInstance().checkTree();
        sc.refresh();
      } catch (DocumentException e1) {
        HLog.doclogger.fatal("The document seems to be corrupted after refreshing",e1);
      }
   }
   
  /**
   * @return true if the server started or is starting
   */
  private boolean isStarted(){
    return server.isStarted()||server.isStarting();
  }

  public void selectionChanged(SelectionChangedEvent event) {
    IStructuredSelection sel = (IStructuredSelection) event.getSelection();
    if(sel!=null){
      boolean enabled = sel.getFirstElement()!=null;
      editItem.setEnabled(enabled);
      removeItem.setEnabled(enabled);
      return;
    }
    removeItem.setEnabled(false);
  }
  public void updateData() {
    ic.fillData();
  }
}
TOP

Related Classes of com.simonepezzano.hshare.views.MainView

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.