Package com.dubture.composer.ui.commands

Source Code of com.dubture.composer.ui.commands.InjectAutoloadCommand

package com.dubture.composer.ui.commands;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;

import com.dubture.composer.core.ComposerPlugin;
import com.dubture.composer.core.log.Logger;
import com.dubture.composer.core.resources.IComposerProject;
import com.dubture.getcomposer.core.ComposerConstants;

/**
* Injects the statement "require_once __DIR__ '../../<vendor-dir>/autoload.php'" into
* the current cursor position with the correct path to the autoload.php file.
*
*/
public class InjectAutoloadCommand extends AbstractHandler {

  @Override
  public Object execute(ExecutionEvent event) throws ExecutionException {

    IEditorInput input = HandlerUtil.getActiveEditorInput(event);

    if (!(input instanceof IFileEditorInput)) {
      return null;
    }

    IFileEditorInput fileEditor = (IFileEditorInput) input;
    IFile file = fileEditor.getFile();

    if (file == null) {
      return null;
    }

    IPath filePath = file.getFullPath();
    IProject project = file.getProject();
    IComposerProject composerProject = getComposerProject(project);
    String vendorDir = composerProject.getVendorDir();
    String vendor = vendorDir != null ? vendorDir : ComposerConstants.VENDOR_DIR_DEFAULT;
   
    IFile autoload = project.getFile(vendor + "/autoload.php");
    if (autoload == null || autoload.exists() == false) {
      return null;
    }

    IPath autoloadPath = autoload.getFullPath();
    IPath relativeTo = autoloadPath.makeRelativeTo(filePath);
   
    if (relativeTo == null || relativeTo.segmentCount() <= 1) {
      return null;
    }
   
    relativeTo = relativeTo.removeFirstSegments(1);
    insertText("require_once __DIR__ . '/" + relativeTo.toString() + "';");

    return null;
  }
 
  protected IComposerProject getComposerProject(IProject project) {
    IComposerProject composerProject = null;
    composerProject = ComposerPlugin.getDefault().getComposerProject(project);
    return composerProject;
  }

  protected IScriptProject getProject() {
    IEditorPart editorPart = PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getActivePage().getActiveEditor();

    if (editorPart != null) {
      IFileEditorInput input = (IFileEditorInput) editorPart
          .getEditorInput();
      IFile file = input.getFile();
      IProject activeProject = file.getProject();
      return DLTKCore.create(activeProject);
    }
    return null;
  }

  protected void doInsert(ITextEditor editor, String text) {
    ISelectionProvider selectionProvider = editor.getSelectionProvider();
    ISelection selection = selectionProvider.getSelection();

    if (selection instanceof ITextSelection) {
      ITextSelection textSelection = (ITextSelection) selection;

      int offset = textSelection.getOffset();
      IDocumentProvider dp = editor.getDocumentProvider();
      IDocument doc = dp.getDocument(editor.getEditorInput());
      try {
        doc.replace(offset, 0, text);
      } catch (BadLocationException e) {
        Logger.logException(e);
      }
    }

  }

  protected void insertText(String text) {
    IEditorPart editor = PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getActivePage().getActiveEditor();

    if (editor instanceof MultiPageEditorPart) {
      MultiPageEditorPart multiEditor = (MultiPageEditorPart) editor;
      if (multiEditor.getSelectedPage() instanceof ITextEditor) {
        doInsert((ITextEditor) multiEditor.getSelectedPage(), text);
      }
    } else if (editor instanceof ITextEditor) {
      doInsert((ITextEditor) editor, text);
    }
  }

}
TOP

Related Classes of com.dubture.composer.ui.commands.InjectAutoloadCommand

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.