Package org.cfeclipse.cfml.snippets.views.snips

Source Code of org.cfeclipse.cfml.snippets.views.snips.SnipTreeView$SnipFilter

/*
* Created on Feb 27, 2004
*
* The MIT License
* Copyright (c) 2004 Rob Rohan
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software
* is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.cfeclipse.cfml.snippets.views.snips;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;

import org.cfeclipse.cfml.snippets.SnippetPlugin;
import org.cfeclipse.cfml.snippets.editors.actions.GenericEncloserAction;
import org.cfeclipse.cfml.snippets.preferences.CFMLPreferenceConstants;
import org.cfeclipse.cfml.snippets.preferences.CFMLPreferenceManager;
import org.cfeclipse.cfml.snippets.preferences.SnipExPreferenceConstants;
import org.cfeclipse.cfml.snippets.preferences.SnipExPreferencePage;
import org.cfeclipse.cfml.snippets.properties.CFMLPropertyManager;
import org.cfeclipse.cfml.snippets.util.CFPluginImages;
import org.cfeclipse.cfml.snippets.wizards.snipex.SnippetToSnipExWizard;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.preference.IPreferenceNode;
import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceNode;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.ViewPart;
import org.cfeclipse.snippet.snipex.Library;
import org.cfeclipse.snippet.snipex.SnipEx;
import org.cfeclipse.snippet.snipex.Snippet;

/**
* @author Rob
*
* This is a more complex view of snips with a tree view. This is the main
* view class
*
* @see ViewPart
*
* This class was influenced by the aricle:
* How to use the JFace Tree Viewer
* By Chris Grindstaff, Applied Reasoning (chrisg at appliedReasoning.com)
* May 5, 2002
*/
public class SnipTreeView extends ViewPart
  implements IPropertyChangeListener {
  public static final String ID_SNIPVIEWTREE = "org.cfeclipse.cfml.snippets.views.SnippetsView";

  public static final String DREAMWEAVER_SNIP_TYPE = "Dreamweaver";
  public static final String HOMESITE_SNIP_TYPE = "Homesite";
  public static final String CFECLIPSE_SNIP_TYPE = "CFEclipse";
  public static final String UNKNOWN_SNIP_TYPE = "Unknown";
 
  public static final String DW_SNIP_EXT  = "csn";
  public static final String CFE_SNIP_EXT = "xml";
 
  /** the treeviewer control */
  protected TreeViewer treeViewer;
  protected Text text, preview;
  protected Label previewLabel;
  protected LabelProvider labelProvider;
   
  /** the path to the icons. i.e. file://C/blah/plugin/icons/ */
  protected static IPath snipBase;
  /** used as a proxy action to add snips to the editor */
  private static GenericEncloserAction tmpAction;
  /** Config file is used to load simple xml documents and get to
   * simple items via DOM - not recommended for large documents
   */
  //private static XMLConfigFile xmlconfile;
  private static SnipReader snipReader;
  private String snippetType;
 
  MenuManager menuMgr;
 
  protected Action insertAction, createFolderAction, createSnippetAction, editSnippetAction, refreshSnippetsAction, deleteSnippetAction, deleteFolderAction;
 
  protected Action refreshSnipEx;
  protected Action exportToSnipEx;
  protected Action openSnipExPage;
 
  /** the root directory */
  protected File root;
 
  private CFMLPropertyManager propertyManager;

  private SnipFilter snipFilter;
 
 
 
  /**
   * The constructor.
   */
  public SnipTreeView() {
    super();
 
   
    propertyManager = SnippetPlugin.getDefault().getPropertyManager();
    // By default we want to use cfeclipse style snippets
    snippetType = CFECLIPSE_SNIP_TYPE;

    // This ensures that we are notified when the properties are saved
    SnippetPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
    propertyManager.addPropertyChangeListener(this);
    snipBase = new Path(propertyManager.getSnippetsPath());

    if(tmpAction == null)
      tmpAction = new GenericEncloserAction();
    //if(xmlconfile == null)
    //  xmlconfile = new XMLConfigFile();
    if(snipReader == null)
      snipReader = new SnipReader();
  }

  public class SnipFilter extends ViewerFilter {

    private String searchString;

    public void setSearchText(String s) {
      // Search must be a substring of the existing value
      this.searchString = ".*" + s + ".*";
    }

    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
      if (searchString == null || searchString.length() == 0 || searchString.equals(".*.*")) {
        return true;
      }
      SnipKeyCombos keyCombos = new SnipKeyCombos();
      String[] containingCombo = keyCombos.containgSequence(searchString);
      if(element instanceof File) {       
        File file = (File)element;
        String relPath = file.getAbsolutePath().replace(snipBase.toOSString(), "");
        if(Arrays.binarySearch(containingCombo, relPath)>-1){
          return true;
        }
        if(file.isDirectory()) {
          return true;
        } else {
          snipReader.read(file.getAbsolutePath());
          if(snipReader.getSnipDescription().matches(searchString)
              || file.getAbsolutePath().matches(searchString)){
            return true;
          }
        }
      } else if (element instanceof SnipEx){
        return true;
      } else if (element instanceof Library){
//        MessageBox warndialog = new MessageBox(viewer.getControl().getShell(),SWT.ICON_WARNING | SWT.YES | SWT.NO);
//        warndialog.setMessage("Also delete SnipEx cached snippets?");     
//        int response = warndialog.open();
        return false;
//        Library lib = (Library) element;
//        if(lib.getDescription().matches(searchString) || lib.getName().matches(searchString)) {         
//          return true;
//        }
       
      } else {
        Snippet snip = (Snippet) element;
        if(snip.getDescription().matches(searchString) || snip.getName().matches(searchString)) {         
          return true;
        }
      }

      return false;
    }
  }
  /*
   * @see IWorkbenchPart#createPartControl(Composite)
   */
  public void createPartControl(Composite parent)
  {
    //Create a grid layout object so the text and treeviewer
    GridLayout layout = new GridLayout();
    layout.numColumns = 1;
    layout.verticalSpacing = 2;
    layout.marginWidth = 0;
    layout.marginHeight = 2;
    parent.setLayout(layout);
   
   
   
    //Create a "label" to display information in. I'm
    //using a text field instead of a lable so you can
    //copy-paste out of it.
    text = new Text(parent, SWT.SINGLE | SWT.BORDER);
    // layout the text field above the treeviewer
    GridData layoutData = new GridData();
    layoutData.grabExcessHorizontalSpace = true;
    layoutData.horizontalAlignment = GridData.FILL;
    text.setLayoutData(layoutData);
   
   
    //Create the tree viewer as a child of the composite parent
    treeViewer = new TreeViewer(parent);
    snipFilter = new SnipFilter();
    treeViewer.addFilter(snipFilter);
    text.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent ke) {
        if(ke.keyCode == SWT.ARROW_DOWN) {
          treeViewer.getTree().setFocus();
        }
        setSnipFilter(text.getText());
      }
    });
    treeViewer.setContentProvider(new SnipTreeViewContentProvider(getRootInput()));
    labelProvider = new SnipTreeViewLabelProvider();
    treeViewer.setLabelProvider(labelProvider);
   
    treeViewer.setUseHashlookup(true);
   
    //layout the tree viewer below the text field
    layoutData = new GridData();
    layoutData.grabExcessHorizontalSpace = true;
    layoutData.grabExcessVerticalSpace = true;
    layoutData.horizontalAlignment = GridData.FILL;
    layoutData.verticalAlignment = GridData.FILL;
    treeViewer.getControl().setLayoutData(layoutData);
   
    previewLabel = new Label(parent, SWT.WRAP);
        GridData gridData = new GridData();
        gridData.horizontalSpan = 2;
        previewLabel.setLayoutData(gridData);
        previewLabel.setText("Preview"); //$NON-NLS-1$
   
   
    preview = new Text(parent, SWT.READ_ONLY | SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    // layout the text field above the treeviewer
    layoutData = new GridData();
    layoutData.grabExcessHorizontalSpace = true;
    layoutData.heightHint = 100;
    layoutData.horizontalAlignment = GridData.FILL;
    preview.setLayoutData(layoutData);
   
   
    //Create menu, toolbars, filters
    createActions();
    createMenus();
    createToolbar();
    createContextMenu();
    hookListeners();
   
    treeViewer.setInput(getRootInput());
    //treeViewer.expandAll();
  }
 
  public void setSnipFilter(String string){
    if(!string.equals(text.getText())) {     
      text.setText(string);
      text.setFocus();
    }
    snipFilter.setSearchText(string);
    treeViewer.refresh();
    if(string.length() == 0){         
      treeViewer.collapseAll();
    } else {
      treeViewer.expandAll();
    }
  }

 
  public static Object[] getSnipExURLs() {
    String[] prefKeys = SnipExPreferenceConstants.P_SNIPEX_URL1,
              SnipExPreferenceConstants.P_SNIPEX_URL2,
              SnipExPreferenceConstants.P_SNIPEX_URL3,
              SnipExPreferenceConstants.P_SNIPEX_URL4,
              SnipExPreferenceConstants.P_SNIPEX_URL5,
              SnipExPreferenceConstants.P_SNIPEX_URL6,
              SnipExPreferenceConstants.P_SNIPEX_URL7,
              SnipExPreferenceConstants.P_SNIPEX_URL8
            };
   
    Object[] snipex = new Object[0];
   
    CFMLPreferenceManager pm = SnippetPlugin.getDefault().getPreferenceManager();
   
    for(int i = 0; i < prefKeys.length; i++ ) {
     
      String url = pm.getStringPref( prefKeys[i] );
      if( url.trim().length() > 0 ) {
        try {
          Object[] temp = new Object[1];
          temp[0] = new SnipEx( new URL( url ) , false);
          snipex = appendArrays(snipex, temp);
        } catch(MalformedURLException e) {
          System.err.println("Snipex URL failed:"+e);
        } catch(Exception e) {
          System.err.println("Snipex failed to load:"+e);
        }
      }
    }
   
    return snipex;
  }

  public static Object[] appendArrays(Object[] array1, Object[] array2) {
    Object[] newArray = new Object[array1.length + array2.length];
    System.arraycopy(array1, 0, newArray, 0, array1.length);
    System.arraycopy(array2, 0, newArray, array1.length, array2.length);
    return newArray;
  }
 
  /*
  public void mouseEnter(MouseEvent e) {
  //System.out.println("Mouse entered viewer");
  }
 
  public void mouseHover(MouseEvent e) {
  //System.out.println("Mouse hovered over viewer");
  }
 
  public void mouseExit(MouseEvent e) {
  //System.out.println("Mouse exited viewer");
  }
  */
 
 
  protected void hookListeners()
  {
    //add a selection listener so we can look at the selected file and
    //get the help information out
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
      public void selectionChanged(SelectionChangedEvent event)
      {
        // if the selection is empty clear the label
        if(event.getSelection().isEmpty())
        {
          preview.setText("");
          return;
        }
       
        if(event.getSelection() instanceof IStructuredSelection)
        {
          IStructuredSelection selection = (IStructuredSelection)event.getSelection();
          StringBuffer toShow = new StringBuffer("");
          StringBuffer toPreview = new StringBuffer("");
         
          Object element = selection.getFirstElement();
          // Clear text/preview
          preview.setText("");
         
          if(element instanceof File) {
            //IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
            File selectedfile = (File)selection.getFirstElement();
            if(selectedfile.isDirectory()){
              return;
            }
            //get the full path to the file
            String f = selectedfile.getAbsolutePath();
            try
            {
              snipReader.read(f);
              toShow.append(snipReader.getSnipDescription());
              toPreview.append(snipReader.getSnipStartBlock() + snipReader.getSnipEndBlock());
            }
            catch(Exception e)
            {
              e.printStackTrace(System.err);
            }
            //text.setText(snipReader.snippetFile.getName().replace(".xml",""));
            preview.setText(toPreview.toString());
          } else if(element instanceof SnipEx) {
            SnipEx sx = (SnipEx)element;
            //text.setText(sx.toString());
            preview.setText(sx.getSource().toString());
           
          } else if(element instanceof Library) {
            Library lib = (Library)element;
            //text.setText(lib.getName());
            preview.setText(lib.getDescription());
           
          } else if(element instanceof Snippet) {
            Snippet snip = (Snippet)element;
            text.setText(snip.getDescription());
            preview.setText(snip.getStartText()+snip.getEndText());
           
          }
        }
      }
    });
   
    treeViewer.addDoubleClickListener(new SnipDoubleClickListener(this));
    /*
    try {
      this.getViewSite().getShell().addMouseTrackListener(this);
    }
    catch (Exception e) {
      e.printStackTrace(System.err);
    }
    */
  }
 
  /**
   * creates all the default actions
   */
  protected void createActions()
  {
   
   
    openSnipExPage = new Action("Edit SnipEx Servers", CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_SNIPEX)){
      public void run(){
           IPreferencePage page = new SnipExPreferencePage();
           PreferenceManager mgr = new PreferenceManager();
           IPreferenceNode node = new PreferenceNode("1", page);
           mgr.addToRoot(node);
           PreferenceDialog dialog = new PreferenceDialog(getSite().getShell(), mgr);
           dialog.create();
           dialog.setMessage(page.getTitle());
           dialog.open();
       
      }
     
     
    };
   
    refreshSnipEx = new Action("Refresh SnipEx Server", CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_REFRESH)){
      public void run(){
       
        System.out.println("Refreshing the snipex server");
      }
    };
   
   
    insertAction = new Action(
      "Insert",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_SNIP)
    ){
      public void run() {
        insertItem();
      }
    };
    insertAction.setToolTipText("Insert the selected snip into the document");
   
    createFolderAction = new Action(
      "Create Folder",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_PACKAGE)
    ){
      public void run() {
        createSnipFolder();
      }
    };
    createFolderAction.setToolTipText("Create a new snip package");
   
    createSnippetAction = new Action(
      "Create Snippet",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_ADD)
    ){
      public void run() {
        createSnippet();
      }
    };
    createSnippetAction.setToolTipText("Create a new snip");
   
    editSnippetAction = new Action(
      "Edit Snippet",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_EDIT)
    ){
      public void run() {
        editSnippet();
      }
    };
    editSnippetAction.setToolTipText("Edit the selected snip");
   
    refreshSnippetsAction = new Action(
      "Refresh Snippets",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_REFRESH)   
    ) {
      public void run() {
        reloadSnippets(true);
      }
    };
    refreshSnippetsAction.setToolTipText("Refresh snip view");
   
    deleteSnippetAction = new Action(
      "Delete Snippet",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_REMOVE)
    ){
      public void run() {
        deleteSnippet();
      }
    };
    deleteSnippetAction.setToolTipText("Delete selected snip");
   
    deleteFolderAction = new Action(
      "Delete Folder",
      CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_DELETE)
    ) {
      public void run() {
        deleteSnipFolder();
      }
    };
    deleteFolderAction.setToolTipText("Delete selected snip package (must be empty)");
   
   
    exportToSnipEx = new Action(
        "Export to SnipEx server",
        CFPluginImages.getImageRegistry().getDescriptor(CFPluginImages.ICON_SNIP_EXPORT)
    ){
      public void run(){
        IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
        File selectedfile = (File)selection.getFirstElement();

       
        Shell shell = getSite().getShell();
           SnippetToSnipExWizard wizard = new SnippetToSnipExWizard(selectedfile); //TODO: pass in the object we have selected
          
           WizardDialog dialog = new WizardDialog(shell, wizard);
           dialog.open();
       
        //Run the wizard
       
      }
    };
    exportToSnipEx.setToolTipText("Export the selected snippet to a SnipX Server");
  }
 
  /**
   * creates all the menus
   * This is here mosly because I have found Mac users dont like to right
   * click most of the time (ctrl+click actually)
   */
  protected void createMenus() {
    IMenuManager rootMenuManager = getViewSite().getActionBars().getMenuManager();
    rootMenuManager.add(refreshSnippetsAction);
    rootMenuManager.add(insertAction);
   
    rootMenuManager.add(createSnippetAction);
    rootMenuManager.add(editSnippetAction);
    rootMenuManager.add(deleteSnippetAction);
   
    rootMenuManager.add(createFolderAction);
    rootMenuManager.add(deleteFolderAction);
    rootMenuManager.add(openSnipExPage);
  }
 
  /**
   * Create context menu.
   */
  private void createContextMenu() {
    // Create menu manager.
    menuMgr = new MenuManager();
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager mgr) {
        fillContextMenu(mgr);
      }
    });
   
    // Create menu.
    Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
    treeViewer.getControl().setMenu(menu);
   
    // Register menu for extension.
    getSite().registerContextMenu(menuMgr, treeViewer);
  }
 
  private void fillContextMenu(IMenuManager mgr) {
    Object selectedItem = getSelection();
   
    if(selectedItem instanceof File) {     
      File selectedFile = (File) selectedItem;
      if(selectedFile.isDirectory()) {
        mgr.add(createFolderAction);
        mgr.add(createSnippetAction);
        String[] files = selectedFile.list();
        if (files.length == 0) {
          mgr.add(deleteFolderAction);
        }
       
      } else {
        mgr.add(insertAction);
        mgr.add(editSnippetAction);
        mgr.add(deleteSnippetAction);
        mgr.add(exportToSnipEx);
      }
    } else if(selectedItem instanceof Snippet) {
       mgr.add(insertAction);     
    }
   
   
    mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    //mgr.add(deleteItemAction);
    //mgr.add(new Separator());
    //mgr.add(selectAllAction);
  }
 
  /**
   * creates the toolbars
   */
  protected void createToolbar() {
    IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
    //toolbarManager.add(createSnippetAction);
    //toolbarManager.add(createFolderAction);
    toolbarManager.add(refreshSnippetsAction);
    toolbarManager.add(insertAction);
   
    toolbarManager.add(createSnippetAction);
    toolbarManager.add(editSnippetAction);
    toolbarManager.add(deleteSnippetAction);
   
    toolbarManager.add(createFolderAction);
    toolbarManager.add(deleteFolderAction);
   
  }
 
  /**
   * Gets the root directory used as the snips base
   * @return the root directory
   */
  public File getRootInput(){
    return snipBase.toFile();
  }
 
  /**
   * Gets the selected item parses it, and adds the defined stuff to the
   * editor
   */
  protected void insertItem()
  {
    //get a handle to the current editor and assign it to our temp action
    IEditorPart iep = this.getViewSite().getWorkbenchWindow().getActivePage().getActiveEditor();
    tmpAction.setActiveEditor(null,iep);
   
    Object element = null;
    String startBlock = null;
    String endBlock = null;
   
    if(treeViewer.getSelection().isEmpty()) {
      return;
    } else {
      IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
      element = (Object)selection.getFirstElement();
    }
   
    if(element instanceof File) {
      File selectedfile = (File)element;
      if(selectedfile.isDirectory()) return;
     
      snipReader.read( selectedfile.getAbsolutePath() );
     
      try
     
        IFile activeFile = null;
        if (iep.getEditorInput() instanceof IFileEditorInput) {
          activeFile = ((IFileEditorInput) iep.getEditorInput()).getFile();
        }
       
        startBlock = SnipVarParser.parse(snipReader.getSnipStartBlock(),activeFile,this.getViewSite().getShell());
        endBlock = SnipVarParser.parse(snipReader.getSnipEndBlock(),activeFile,this.getViewSite().getShell());
 
      } catch(Exception e) {
        e.printStackTrace(System.err);
      }
    } else if(element instanceof Snippet) {
     
      IFile activeFile = null;
      if (iep.getEditorInput() instanceof IFileEditorInput) {
        activeFile = ((IFileEditorInput) iep.getEditorInput()).getFile();
      }
     
      Snippet snip = (Snippet)element;
      startBlock = SnipVarParser.parse(snip.getStartText(),activeFile,this.getViewSite().getShell());
      endBlock = SnipVarParser.parse(snip.getEndText(),activeFile,this.getViewSite().getShell());
    }
   
   
    if (startBlock != null && endBlock != null) {
        tmpAction.setEnclosingStrings(startBlock,endBlock);
        tmpAction.run(null);
       
      //after the addition, they'll probably want to start typing
      iep.setFocus();
    }
  }

 
  /*
   * Returns the currently selected file or the root directory if nothing is selected
   */
 
  private Object getSelection() {
    Object selectedfile = null;
   
    if(treeViewer.getSelection().isEmpty())
    {
      selectedfile = getRootInput();
    }
    else
    {
      IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
      if(selection instanceof File) {       
        selectedfile = (File)selection.getFirstElement();
      } else {
        selectedfile = selection.getFirstElement();       
      }
      treeViewer.setExpandedState(selection.getFirstElement(),true);

    }
    return selectedfile;
  }

 
  public void reloadSnippets(Boolean prompt) {
   
    int response = SWT.NO;

    //Display a delete cache dialog
    if(prompt){
      MessageBox warndialog = new MessageBox(this.getViewSite().getShell(),SWT.ICON_WARNING | SWT.YES | SWT.NO);
      warndialog.setMessage("Also delete SnipEx cached snippets?");     
      response = warndialog.open();
    }
       
        if (response == SWT.YES){
      String dir = SnippetPlugin.getDefault().getStateLocation().toString()+"/snipex";
      File cacheFolder = new File(dir);
      if(cacheFolder.exists() && cacheFolder.isDirectory()){
          String[] list = cacheFolder.list();
          for (int i = 0; i < list.length; i++) {
            File cacheFile = new File(dir + File.separatorChar +  list[i]);
              boolean delete = cacheFile.delete();
            System.out.println("deleting " + cacheFile + " " + delete);
           
          }
         
      }
    }
    snipBase = new Path(propertyManager.getSnippetsPath());   
    treeViewer.setInput(getRootInput());
  }
 
 
  /**
   * Creates a new folder called below the currently active folder
   * If no folder is currently active it creates the folder below the root.
   *
   */
 
  protected void createSnipFolder() {
    Object selectedItem = getSelection();
   
    if(selectedItem instanceof File) {
      File selectedfile = (File) selectedItem;
      if(!selectedfile.isDirectory())  {
        selectedfile = selectedfile.getParentFile();
      }
     
      SnipWriter writer = new SnipWriter(selectedfile,snippetType,snipBase);
      SnipFolderDialog folderDialog = new SnipFolderDialog(this.getViewSite().getShell(),writer,this.treeViewer);
      folderDialog.open();
    }

  }
 
  protected void deleteSnipFolder() {
    Object selectedItem = getSelection();
   
    if (selectedItem instanceof File) {
      File selectedfile = (File) selectedItem;

      if (!selectedfile.isDirectory()) {
        selectedfile = selectedfile.getParentFile();
      }

      // SnipWriter writer = new
      // SnipWriter(selectedfile,snippetType,snipBase);
      MessageBox deleteDialog = new MessageBox(this.getViewSite().getShell(), SWT.YES | SWT.NO);

      if (selectedfile.listFiles().length > 0) {
        MessageBox warndialog = new MessageBox(this.getViewSite().getShell(), SWT.ICON_WARNING);
        warndialog.setMessage("You must delete the snippets in this folder first");
      } else {

        deleteDialog.setMessage("Are you sure you want to delete this folder?");
        if (deleteDialog.open() == SWT.YES) {

          selectedfile.delete();
          reloadSnippets(true);
        }

      }
    }

  }
 
 
  protected void createSnippet() {
    Object selectedItem = getSelection();
    if (selectedItem instanceof File) {
      File selectedfile = (File) selectedItem;

      if (!selectedfile.isDirectory()) {
        selectedfile = selectedfile.getParentFile();
      }
      snippetType = CFECLIPSE_SNIP_TYPE;
      SnipWriter writer = new SnipWriter(selectedfile, snippetType, snipBase);
      SnipFileDialog snippetDialog = new SnipFileDialog(this.getViewSite().getShell(), writer, this.treeViewer,
          "", "", "", "", "", false, "cfm");
      snippetDialog.open();
    }
  }
 
  protected void deleteSnippet() {
    Object selectedItem = getSelection();
    if (selectedItem instanceof File) {
      File selectedfile = (File) selectedItem;
      if (selectedfile.isDirectory()) {
        return;
      }
      MessageBox deleteDialog = new MessageBox(this.getViewSite().getShell(), SWT.YES | SWT.NO);
      deleteDialog.setMessage("Are you sure you want to delete this snippet?");
      if (deleteDialog.open() == SWT.YES) {
        selectedfile.delete();
        reloadSnippets(true);
      }
    }
  } 
 
  protected void editSnippet() {
    Object selectedItem = getSelection();

    if (selectedItem instanceof File) {
      File selectedfile = (File) selectedItem;

      if (selectedfile.isDirectory()) {
        return;
      }

      File parentDirectory = selectedfile.getParentFile();

      String f = selectedfile.getAbsolutePath().toLowerCase();

      if (f.endsWith(SnipTreeView.DW_SNIP_EXT)) {
        snippetType = DREAMWEAVER_SNIP_TYPE;
      } else {
        snippetType = CFECLIPSE_SNIP_TYPE;
      }

      snipReader.read(f);

      SnipKeyCombos keyCombos = new SnipKeyCombos();

      String filepath = selectedfile.getAbsolutePath().replaceAll("\\\\", "/");
      String basePath = snipBase.toString();

      String relativePath = filepath.replaceFirst(basePath, "");

      String snippetName = selectedfile.getName().substring(0, selectedfile.getName().length() - 4);
      String snippetKeyCombo = keyCombos.getSequence(relativePath);
      String snippetDescription = snipReader.getSnipDescription();
      String snippetStartText = snipReader.getSnipStartBlock();
      String snippetEndText = snipReader.getSnipEndBlock();
      boolean isTemplate = snipReader.isFileTemplate();
      String templateExtension = snipReader.getTemplateExtension();

      SnipWriter writer = new SnipWriter(parentDirectory, snippetType, snipBase);
      SnipFileDialog snippetDialog = new SnipFileDialog(this.getViewSite().getShell(), writer, this.treeViewer,
          snippetName, snippetKeyCombo, snippetDescription, snippetStartText, snippetEndText, isTemplate,
          templateExtension);
      snippetDialog.open();
    }
  } 
 
  /*
   *  (non-Javadoc)
   * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
   */
  public void propertyChange(PropertyChangeEvent event)
    {

      if (event.getProperty().equals(CFMLPreferenceConstants.P_SNIPPETS_PATH)) {
      snipBase = new Path(event.getNewValue().toString());
        treeViewer.setInput(getRootInput());                       
      }
    }
  /*
   * @see IWorkbenchPart#setFocus()
   */
  public void setFocus(){;}
}

TOP

Related Classes of org.cfeclipse.cfml.snippets.views.snips.SnipTreeView$SnipFilter

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.