You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cactus-dev@jakarta.apache.org by pt...@apache.org on 2008/03/18 11:39:18 UTC

svn commit: r638311 - in /jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src: conf/ main/java/org/apache/cactus/eclipse/quickfix/ main/java/org/apache/cactus/eclipse/runner/ui/

Author: ptahchiev
Date: Tue Mar 18 03:39:14 2008
New Revision: 638311

URL: http://svn.apache.org/viewvc?rev=638311&view=rev
Log:
Added the Cactus quickFix feature. See issue #187

Added:
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java   (with props)
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java   (with props)
Modified:
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/conf/plugin.xml
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactifyActionDelegate.java
    jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactusPlugin.java

Modified: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/conf/plugin.xml
URL: http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/conf/plugin.xml?rev=638311&r1=638310&r2=638311&view=diff
==============================================================================
--- jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/conf/plugin.xml (original)
+++ jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/conf/plugin.xml Tue Mar 18 03:39:14 2008
@@ -161,6 +161,16 @@
       <extraClasspathEntry
             library="org.apache.cactus.eclipse.runner-1.8.0-SNAPSHOT-src.zip">
       </extraClasspathEntry>
+   </extension>
+   
+   <extension
+         id="org.apache.cactus.runner.quickfix"
+         name="CactusQuickFixProcessor"
+         point="org.eclipse.jdt.ui.quickFixProcessors">
+		<quickFixProcessor
+	            class="org.apache.cactus.eclipse.quickfix.CactusQuickFixProcessor"
+	            id="org.apache.cactus.eclipse.quickfix.CactusQuickFixProcessor">
+	    </quickFixProcessor>
    </extension>
 
 </plugin>

Added: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java
URL: http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java?rev=638311&view=auto
==============================================================================
--- jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java (added)
+++ jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java Tue Mar 18 03:39:14 2008
@@ -0,0 +1,91 @@
+/* 
+ * ========================================================================
+ * 
+ * Copyright 2001-2003 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * ========================================================================
+ */
+package org.apache.cactus.eclipse.quickfix;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.cactus.eclipse.runner.ui.CactifyActionDelegate;
+import org.apache.cactus.eclipse.runner.ui.CactusPlugin;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+public class AddCactusClassesCompletionProposal  implements IJavaCompletionProposal  {
+
+	private final String name;
+	private final String proposalInfo;
+	private final int relevance;
+	private IJavaProject project;
+  
+	public AddCactusClassesCompletionProposal(
+			String name,
+			int relevance, 
+			IJavaProject theWorkingProject) {
+		this.name = name;
+		this.relevance = relevance;
+		this.project = theWorkingProject;
+
+		final StringBuffer buffer = new StringBuffer(80);
+		buffer.append("Cactify this project ...<br>" +
+						"Add the Cactus jars to the classpath <br/>");
+		this.proposalInfo = buffer.toString();
+	}
+
+	public int getRelevance() {
+		return relevance;
+	}
+
+	public void apply(IDocument document) {
+		CactifyActionDelegate cactifyDelegate = new CactifyActionDelegate();
+		cactifyDelegate.setSelectedProject(project);
+		//We add null and empty string because CactifyActionDelegate does not need these.
+		cactifyDelegate.run(null);
+	}
+
+	public Point getSelection(IDocument document) {
+		return null;
+	}
+
+	public String getAdditionalProposalInfo() {
+		return proposalInfo;
+	}
+
+	public String getDisplayString() {
+		return name;
+	}
+
+	public Image getImage() {
+		return CactusPlugin.getDefault().getImageRegistry().get(CactusPlugin.CACTUS_RUN_IMAGE);
+	}
+
+	public IContextInformation getContextInformation() {
+		return null;
+	}
+  
+	public IJavaCompletionProposal createTypeProposal() {
+		return null;
+	}
+}
+

Propchange: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/AddCactusClassesCompletionProposal.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java
URL: http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java?rev=638311&view=auto
==============================================================================
--- jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java (added)
+++ jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java Tue Mar 18 03:39:14 2008
@@ -0,0 +1,107 @@
+/* 
+ * ========================================================================
+ * 
+ * Copyright 2001-2003 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * ========================================================================
+ */
+package org.apache.cactus.eclipse.quickfix;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.text.java.IInvocationContext;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jdt.ui.text.java.IProblemLocation;
+import org.eclipse.jdt.ui.text.java.IQuickFixProcessor;
+
+public class CactusQuickFixProcessor implements IQuickFixProcessor {
+
+	private static final int IMPORT_NOT_FOUND = 268435846;
+	
+	private static final int IS_CLASSPATH_CORRECT = 16777218;
+	
+	private static final int UNDEFINED_TYPE = 16777218;
+
+	public boolean hasCorrections(final ICompilationUnit unit, final int problemId) {
+		if (problemId == 1000) {
+			return true;
+		}
+		return false;
+	}
+
+	public IJavaCompletionProposal[] getCorrections(
+			final IInvocationContext context,
+			final IProblemLocation[] locations) throws CoreException {
+		if (locations == null || locations.length == 0) {
+			return null;
+		}
+		final ArrayList resultingCollections = new ArrayList();
+		for (int i=0;i< locations.length;i++) {
+			IProblemLocation problemLocation = (IProblemLocation) locations[i];
+			process(context, problemLocation, resultingCollections);
+		}
+		IJavaCompletionProposal[] proposals = new IJavaCompletionProposal[resultingCollections.size()];
+    
+		for(int i=0;i<resultingCollections.size();i++) {
+			proposals[i] = (IJavaCompletionProposal) resultingCollections.get(i);
+		}
+		return proposals;
+	}
+
+	private void process(
+			final IInvocationContext context,
+			final IProblemLocation problem,
+			final ArrayList proposals) {
+		if (problem.getProblemId() == 0) { // no proposals for none-problem locations
+			return;
+		}
+		
+	    final String source;
+	    try {
+	      source = context.getCompilationUnit().getSource();
+	    }
+	    catch (final JavaModelException e) {
+	      //ignore
+	      return;
+	    }
+	    final int offset = problem.getOffset();
+	    final int length = problem.getLength();
+
+	    final String substring = source.substring(offset, offset + length);
+	    
+	    
+	    
+	    IJavaProject theWorkingProject = context.getCompilationUnit().getJavaProject();
+	    
+	    boolean cactusProblem = (problem.getProblemId() == IMPORT_NOT_FOUND && substring.startsWith("org.apache.cactus")) ||
+	    						(problem.getProblemId() == IS_CLASSPATH_CORRECT && isCactusPrefixesMatch(substring));
+	    
+		if(cactusProblem) {
+			final String name = "Cactify this project...";
+			proposals.add(new AddCactusClassesCompletionProposal(name, 1, theWorkingProject));
+		}
+	}
+	
+	private boolean isCactusPrefixesMatch(String prefix) {
+		return (prefix.startsWith("ServletTestCase") || 
+				prefix.startsWith("JspTestCase") || 
+				prefix.startsWith("EJBTestCase") || 
+				prefix.startsWith("JettyTestSetup"));
+	}
+}
\ No newline at end of file

Propchange: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/quickfix/CactusQuickFixProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactifyActionDelegate.java
URL: http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactifyActionDelegate.java?rev=638311&r1=638310&r2=638311&view=diff
==============================================================================
--- jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactifyActionDelegate.java (original)
+++ jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactifyActionDelegate.java Tue Mar 18 03:39:14 2008
@@ -66,15 +66,15 @@
      */
     public void run(IAction theAction)
     {
-        if (part != null && selectedProject != null)
+        if (selectedProject != null)
         {
             CactusPlugin thePlugin = CactusPlugin.getDefault();
 				File commonLibDir = null;
 				File clientLibDir = null;
 
             try {
-					commonLibDir = new File(Platform.asLocalURL(thePlugin.getBundle().getEntry("/" +CactusPlugin.CACTUS_LIBRARY_PATH +"/" +CactusPlugin.CACTUS_COMMON_LIBRARY_PATH)).getPath());
-					clientLibDir = new File(Platform.asLocalURL(thePlugin.getBundle().getEntry("/" +CactusPlugin.CACTUS_LIBRARY_PATH +"/" +CactusPlugin.CACTUS_CLIENT_LIBRARY_PATH)).getPath());
+				commonLibDir = new File(Platform.asLocalURL(thePlugin.getBundle().getEntry("/" +CactusPlugin.CACTUS_LIBRARY_PATH +"/" +CactusPlugin.CACTUS_COMMON_LIBRARY_PATH)).getPath());
+				clientLibDir = new File(Platform.asLocalURL(thePlugin.getBundle().getEntry("/" +CactusPlugin.CACTUS_LIBRARY_PATH +"/" +CactusPlugin.CACTUS_CLIENT_LIBRARY_PATH)).getPath());
             } catch (Exception ex) {
             	CactusPlugin.log(ex);
             }
@@ -200,4 +200,8 @@
         return (IClasspathEntry[]) result.toArray(
             new IClasspathEntry[result.size()]);
     }
+
+	public void setSelectedProject(IJavaProject selectedProject) {
+		this.selectedProject = selectedProject;
+	}
 }

Modified: jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactusPlugin.java
URL: http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactusPlugin.java?rev=638311&r1=638310&r2=638311&view=diff
==============================================================================
--- jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactusPlugin.java (original)
+++ jakarta/cactus/trunk/integration/eclipse/org.apache.cactus.eclipse.runner/src/main/java/org/apache/cactus/eclipse/runner/ui/CactusPlugin.java Tue Mar 18 03:39:14 2008
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.FilenameFilter;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Vector;
 
@@ -34,6 +35,8 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbench;
@@ -87,6 +90,8 @@
      * Name of the client libraries folder
      */
     public static final String CACTUS_CLIENT_LIBRARY_PATH = "client";
+
+	public static final String CACTUS_RUN_IMAGE = "cactus.run.image";
     
     
 
@@ -388,5 +393,22 @@
         }
         return (String[]) containers.toArray(new String[containers.size()]);
     }
+    
+    
+    protected ImageRegistry createImageRegistry() {
+	    final ImageRegistry registry = super.createImageRegistry();
+	    
+		URL url = null;
+		try {
+			url = new URL(CactusPlugin.getDefault().getDescriptor().getInstallURL(),"icons/calaunch.gif");
+		} catch (MalformedURLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	    //ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(CactusPlugin
+	    //    .getDefault().getBundle().getResource("icons/calaunch.gif"));
+	    registry.put(CACTUS_RUN_IMAGE, ImageDescriptor.createFromURL(url));
+	    return registry;
+	}
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: cactus-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: cactus-dev-help@jakarta.apache.org