Package com.onpositive.google.scrapbook

Source Code of com.onpositive.google.scrapbook.ConsoleEditor

package com.onpositive.google.scrapbook;

import java.util.ArrayList;

//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ImportDeclaration;
import org.eclipse.jdt.core.eval.IEvaluationContext;
import org.eclipse.jdt.internal.debug.ui.JDIContentAssistPreference;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.JDISourceViewer;
import org.eclipse.jdt.internal.debug.ui.snippeteditor.SnippetMessages;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.text.JavaPairMatcher;
import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.text.IJavaPartitions;
import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration;
import org.eclipse.jdt.ui.text.JavaTextTools;
import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.source.ICharacterPairMatcher;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;

@SuppressWarnings("restriction")
public class ConsoleEditor extends AbstractDecoratedTextEditor {

  private static final String DESCR = "<h3>Type snippet, press launch button, and enjoy the results</h3>"+
  "<i>Hint:use 'out' variable to print results to console.</i>";
  private Browser browser;
 
 
 
  private IJavaProject fJavaProject;
 

  private IEvaluationContext fEvaluationContext;
  private Action debugMode;
  private ISourceViewer viewer;
  //private String[] fImports;

  public ConsoleEditor() {
    setDocumentProvider(JDIDebugUIPlugin.getDefault()
        .getSnippetDocumentProvider());
    IPreferenceStore store = new ChainedPreferenceStore(
        new IPreferenceStore[] {
            PreferenceConstants.getPreferenceStore(),
            EditorsUI.getPreferenceStore() });
    setSourceViewerConfiguration(new JavaSnippetViewerConfiguration(
        JDIDebugUIPlugin.getDefault().getJavaTextTools(), store, this));
    setPreferenceStore(store);
  }
 
  public boolean isSaveAsAllowed() {
    return true;
  }

 
  public void init(IEditorSite site, IEditorInput input)
      throws PartInitException {
    super.setSite(site);
    super.setInput(input);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.texteditor.AbstractTextEditor#createSourceViewer(org.eclipse
   * .swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler,
   * int)
   */
  protected ISourceViewer createSourceViewer(Composite parent,
      IVerticalRuler ruler, int styles) {
    fAnnotationAccess = getAnnotationAccess();
    fOverviewRuler = createOverviewRuler(getSharedColors());

    ISourceViewer viewer = new JDISourceViewer(parent, ruler,
        getOverviewRuler(), isOverviewRulerVisible(), styles
            | SWT.LEFT_TO_RIGHT);

    // ensure decoration support has been created and configured.
    getSourceViewerDecorationSupport(viewer);
    this.viewer=viewer;
    return viewer;
  }
  public ISourceViewer getViewer(){
    return getSourceViewer();
  }
 
 
  protected void configureSourceViewerDecorationSupport(
      SourceViewerDecorationSupport support) {
    support.setMatchingCharacterPainterPreferenceKeys(PreferenceConstants.EDITOR_MATCHING_BRACKETS, PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR);
    support.setCharacterPairMatcher(new JavaPairMatcher(new char[]{ '{', '}', '(', ')', '[', ']', '<', '>' }));
    super.configureSourceViewerDecorationSupport(support);   
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.texteditor.AbstractTextEditor#handlePreferenceStoreChanged
   * (org.eclipse.jface.util.PropertyChangeEvent)
   */
  protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
    JDISourceViewer isv = (JDISourceViewer) getSourceViewer();
    if (isv != null) {
      IContentAssistant assistant = isv.getContentAssistant();
      if (assistant instanceof ContentAssistant) {
        JDIContentAssistPreference.changeConfiguration(
            (ContentAssistant) assistant, event);
      }
      SourceViewerConfiguration configuration = getSourceViewerConfiguration();
      if (configuration instanceof JavaSourceViewerConfiguration) {
        JavaSourceViewerConfiguration jsv = (JavaSourceViewerConfiguration) configuration;
        if (jsv.affectsTextPresentation(event)) {
          jsv.handlePropertyChangeEvent(event);
          isv.invalidateTextPresentation();
        }
      }
      super.handlePreferenceStoreChanged(event);
    }
  }

  public void dispose() {
    ISourceViewer viewer = getSourceViewer();
    if (viewer != null) {
      ((JDISourceViewer) viewer).dispose();
    }
    // getSite().getWorkbenchWindow().getPartService().removePartListener(
    // fActivationListener);
    super.dispose();
  }
 

 
  public void createPartControl(Composite parent) {
    IDocument document = getDocumentProvider().getDocument(getEditorInput());
    JavaTextTools tools= JavaPlugin.getDefault().getJavaTextTools();
    tools.setupJavaDocumentPartitioner(document, IJavaPartitions.JAVA_PARTITIONING);
   
    FormToolkit tk = new FormToolkit(parent.getDisplay());
    Form createForm = tk.createForm(parent);
    createForm.setText(getTitle()+" ("+getJavaProject().getElementName()+" )");
/*    Action launch = new Action() {
      public void run() {
        doIt(this,true);
               
      }
    };*/
    //launch.setText("Run snippet on local server");
    debugMode = new Action("Run snippet") { // in context of deployed application
      public void run(){
        //com.onpositive.gae.baseviewer.Activator
       
        //IPreferenceStore ps = com.onpositive.gae.baseviewer.Activator.getDefault().getPreferenceStore();
        boolean isLocal = Platform.getPreferencesService().getBoolean("com.onpositive.gae.base.manager","CONNECTION_MODE",false,null);
        //boolean isLocal = ps.getBoolean("CONNECTION_MODE");
        doIt(this,isLocal);
      }
     
    };
//    ImageDescriptor imageDescriptorFromPlugin = Activator.imageDescriptorFromPlugin(
//        Activator.PLUGIN_ID, "/icons/launch_run.gif");
    //launch.setImageDescriptor(imageDescriptorFromPlugin);
    debugMode.setImageDescriptor(Activator.imageDescriptorFromPlugin(
        Activator.PLUGIN_ID, "/icons/exec_view_obj.gif"));
    IToolBarManager toolBarManager = createForm.getToolBarManager();
    //toolBarManager.add(launch);
    toolBarManager.add(debugMode);
    toolBarManager.update(true);
    Composite body = createForm.getBody();
    body.setLayout(new FillLayout());
    tk.decorateFormHeading(createForm);
    SashForm composite = new SashForm(body, SWT.NONE);
    super.createPartControl(composite);
    createForm.setLayoutData(GridDataFactory.fillDefaults()
        .grab(true, true).create());
    browser = new Browser(composite, SWT.NONE);
    browser
        .setText(DESCR);
    // browser.setUrl(getConsoleRootUrl());
    // composite.setWeights(new int[]{3,2});
    Control textWidget = getSourceViewer().getTextWidget();
    while (textWidget.getParent() != composite) {
      textWidget = textWidget.getParent();
    }
   

  }

 
  public void setFocus() {

  }

  public void codeComplete(CompletionProposalCollector fCollector)
      throws JavaModelException {
    ITextSelection selection = (ITextSelection) getSelectionProvider()
        .getSelection();
    int start = selection.getOffset();
    String snippet = getSourceViewer().getDocument().get();
    IEvaluationContext e = getEvaluationContext();
    if (e != null) {
      e.codeComplete(snippet, start, fCollector);
     
     
    }
   
  }

  protected String[] getImports() {
    String snippet = getSourceViewer().getDocument().get();
    ASTParser newParser = ASTParser.newParser(AST.JLS3);
    newParser.setSource(snippet.toCharArray());
    CompilationUnit createAST = (CompilationUnit) newParser.createAST(null);
    ArrayList<String> results = new ArrayList<String>();
    for (Object n : createAST.imports()) {
      ImportDeclaration decl = (ImportDeclaration) n;
      String name = decl.getName().getFullyQualifiedName();
      if (decl.isOnDemand()) {
        results.add(name + ".*");
      } else {
        results.add(name);
      }
    }
    return results.toArray(new String[results.size()]);
  }

  protected IEvaluationContext getEvaluationContext() {
    if (fEvaluationContext == null) {
      IJavaProject project = getJavaProject();
      if (project != null) {
        fEvaluationContext = project.newEvaluationContext();
      }
    }
    if (fEvaluationContext != null) {
      if (getImports() != null) {
        fEvaluationContext.setImports(getImports());
      } else {
        fEvaluationContext.setImports(new String[] {});
      }
      fEvaluationContext.newVariable("java.io.PrintWriter", "out", "null");
     
    }
    return fEvaluationContext;
  }

  protected IJavaProject getJavaProject() {
    if (fJavaProject == null) {
      try {
        fJavaProject = findJavaProject();
      } catch (CoreException e) {
        JDIDebugUIPlugin.log(e);
        showError(e.getStatus());
      }
    }
    return fJavaProject;
  }

  public IFile getFile() {
    IEditorInput input = getEditorInput();
    return (IFile) input.getAdapter(IFile.class);
  }

  protected IJavaProject findJavaProject() throws CoreException {
    IEditorInput input = getEditorInput();
    Object adapter = input.getAdapter(IJavaProject.class);
    if (adapter!=null){
      return (IJavaProject) adapter;
    }
    IFile file = getFile();
    if (file != null) {
      IProject p = file.getProject();
      if (p.getNature(JavaCore.NATURE_ID) != null) {
        return JavaCore.create(p);
      }
    }
    return null;
  }

  protected void showError(IStatus status) {
    if (!status.isOK()) {
      ErrorDialog
          .openError(
              getShell(),
              SnippetMessages
                  .getString("SnippetEditor.error.evaluating2"), null, status); //$NON-NLS-1$
    }
  }

  protected Shell getShell() {
    return getSite().getShell();
  }

  protected void showError(String message) {
    Status status = new Status(IStatus.ERROR, JDIDebugUIPlugin
        .getUniqueIdentifier(), IStatus.ERROR, message, null);
    showError(status);
  }
 
 

  private void doIt(final Action action,final boolean isDebug) {
    if (!com.onpositive.gae.tools.license.LicenseChecker.checkLicense(isDebug)){
      return;
    }
    final IJavaProject pr = getJavaProject();
    action.setEnabled(false);
    browser.setText("<i>Evaluating...</i>");
    Job job = new Job("Evaluating"){

     
      protected IStatus run(IProgressMonitor monitor) {
        byte[] compile = new CompilerFacade().compile(getSourceViewer()
            .getDocument().get(), pr);
        if (compile != null) {
          final String evaluate = ConsoleServletCommunicatorFactory
              .getCommunicator().evaluate(compile, pr,isDebug);
          if (evaluate != null ) {
            Display.getDefault().asyncExec(new Runnable() {
             
             
              public void run() {
                if (!browser.isDisposed()){                 
                  browser.setText(evaluate);     
                }
               
              }
            });
           
          }
        }
        return Status.OK_STATUS;
      }
     
    };
    job.addJobChangeListener(new JobChangeAdapter(){

     
      public void done(IJobChangeEvent event) {
        action.setEnabled(true);
      }
     
    });
    job.schedule();
  }
}
TOP

Related Classes of com.onpositive.google.scrapbook.ConsoleEditor

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.