[jbosstools-commits] JBoss Tools SVN: r17443 - in trunk/seam: plugins/org.jboss.tools.seam.ui and 4 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Sep 3 07:43:45 EDT 2009


Author: dazarov
Date: 2009-09-03 07:43:45 -0400 (Thu, 03 Sep 2009)
New Revision: 17443

Added:
   trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchQuery.java
   trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchResult.java
Modified:
   trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRefactorSeacher.java
   trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRenameProcessor.java
   trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml
   trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/actions/FindUsagesInELAction.java
   trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/refactoring/SeamRefactorContributionFactory.java
   trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/SeamTreeContentProvider.java
   trunk/seam/tests/org.jboss.tools.seam.core.test/src/org/jboss/tools/seam/core/test/refactoring/SeamComponentRefactoringTest.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-4771

Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRefactorSeacher.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRefactorSeacher.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRefactorSeacher.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -38,6 +38,7 @@
 import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
 import org.jboss.tools.common.el.core.model.ELInstance;
 import org.jboss.tools.common.el.core.model.ELInvocationExpression;
+import org.jboss.tools.common.el.core.model.ELMethodInvocation;
 import org.jboss.tools.common.el.core.model.ELModel;
 import org.jboss.tools.common.el.core.model.ELPropertyInvocation;
 import org.jboss.tools.common.el.core.parser.ELParser;
@@ -67,6 +68,9 @@
 	}
 
 	public void findELReferences(){
+		if(baseFile == null)
+			return;
+		
 		SeamProjectsSet projectsSet = new SeamProjectsSet(baseFile.getProject());
 		
 		IProject[] projects = projectsSet.getAllProjects();
@@ -240,9 +244,16 @@
 			ELModel model = parser.parse(string);
 			for (ELInstance instance : model.getInstances()) {
 				for(ELInvocationExpression ie : instance.getExpression().getInvocations()){
-					ELPropertyInvocation pi = findComponentReference(ie);
-					if(pi != null)
-						match(file, pi);
+					ELInvocationExpression expression = findComponentReference(ie);
+					if(expression != null){
+						if(expression instanceof ELPropertyInvocation){
+							ELPropertyInvocation pi = (ELPropertyInvocation)expression;
+							match(file, offset+pi.getStartPosition(), pi.getName().getStart()+pi.getName().getLength()-pi.getStartPosition());
+						}else if(expression instanceof ELMethodInvocation){
+							ELMethodInvocation mi = (ELMethodInvocation)expression;
+							match(file, offset+mi.getStartPosition(), mi.getName().getStart()+mi.getName().getLength()-mi.getStartPosition());
+						}
+					}
 				}
 			}
 		}
@@ -278,7 +289,7 @@
 					key = false;
 				
 				if(key && token.startsWith(propertyName)){
-					match(file, token);
+					match(file, offset, token.length());
 				}
 			}
 			
@@ -288,12 +299,12 @@
 	}
 
 	
-	private ELPropertyInvocation findComponentReference(ELInvocationExpression invocationExpression){
+	protected ELInvocationExpression findComponentReference(ELInvocationExpression invocationExpression){
 		ELInvocationExpression invExp = invocationExpression;
 		while(invExp != null){
 			if(invExp instanceof ELPropertyInvocation){
 				if(((ELPropertyInvocation)invExp).getQualifiedName() != null && ((ELPropertyInvocation)invExp).getQualifiedName().equals(propertyName))
-					return (ELPropertyInvocation)invExp;
+					return invExp;
 				else
 					invExp = invExp.getLeft();
 				
@@ -306,7 +317,5 @@
 	
 	protected abstract boolean isFileCorrect(IFile file);
 	
-	protected abstract void match(IFile file, ELPropertyInvocation elPropertyInvokation);
-	
-	protected abstract void match(IFile file, String token);
+	protected abstract void match(IFile file, int offset, int length);
 }

Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRenameProcessor.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRenameProcessor.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/refactoring/SeamRenameProcessor.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -10,27 +10,15 @@
   ******************************************************************************/
 package org.jboss.tools.seam.internal.core.refactoring;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Set;
-import java.util.StringTokenizer;
 
-import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.ui.text.FastJavaPartitionScanner;
-import org.eclipse.jdt.ui.text.IJavaPartitions;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
 import org.eclipse.ltk.core.refactoring.CompositeChange;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.TextFileChange;
@@ -39,24 +27,7 @@
 import org.eclipse.text.edits.MultiTextEdit;
 import org.eclipse.text.edits.ReplaceEdit;
 import org.eclipse.text.edits.TextEdit;
-import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
-import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
-import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
-import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
-import org.jboss.tools.common.el.core.model.ELInstance;
-import org.jboss.tools.common.el.core.model.ELInvocationExpression;
-import org.jboss.tools.common.el.core.model.ELModel;
-import org.jboss.tools.common.el.core.model.ELPropertyInvocation;
-import org.jboss.tools.common.el.core.parser.ELParser;
-import org.jboss.tools.common.el.core.parser.ELParserUtil;
 import org.jboss.tools.common.model.project.ext.ITextSourceReference;
-import org.jboss.tools.common.model.util.EclipseResourceUtil;
 import org.jboss.tools.common.util.FileUtil;
 import org.jboss.tools.seam.core.BijectedAttributeType;
 import org.jboss.tools.seam.core.IBijectedAttribute;
@@ -71,8 +42,6 @@
 import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
 import org.jboss.tools.seam.internal.core.scanner.java.SeamAnnotations;
 import org.jboss.tools.seam.internal.core.validation.SeamContextValidationHelper;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 /**
  * @author Daniel Azarov
@@ -98,6 +67,15 @@
 	private String newName;
 	private String oldName;
 	
+	private SeamSeacher seacher = null;
+	
+	protected SeamSeacher getSeacher(){
+		if(seacher == null){
+			seacher = new SeamSeacher(declarationFile, getOldName());
+		}
+		return seacher;
+	}
+	
 	public void setNewName(String newName){
 		this.newName = newName;
 	}
@@ -373,64 +351,6 @@
 	}
 
 	
-	// we need to find references in .java .xml .xhtml .jsp .properties files
-	protected void findELReferences(){
-		if(declarationFile == null)
-			return;
-		
-		IProject[] projects = projectsSet.getAllProjects();
-		for (IProject project : projects) {
-			if(project == null) continue;
-			
-			IJavaProject javaProject = EclipseResourceUtil.getJavaProject(project);
-			
-			// searching java, xml and property files in source folders
-			if(javaProject != null){
-				for(IResource resource : EclipseResourceUtil.getJavaSourceRoots(project)){
-					if(resource instanceof IFolder)
-						scanForJava((IFolder) resource);
-					else if(resource instanceof IFile)
-						scanForJava((IFile) resource);
-				}
-			}
-			
-			// searching jsp, xhtml and xml files in WebContent folders
-			if(project.equals(projectsSet.getWarProject()))
-				scan(projectsSet.getDefaultViewsFolder());
-			else if(project.equals(projectsSet.getEarProject()))
-				scan(projectsSet.getDefaultEarViewsFolder());
-			else{
-				scan(project);
-			}
-		}
-	}
-	
-	private void scan(IProject project){
-		IJavaProject javaProject = EclipseResourceUtil.getJavaProject(project);
-		if(javaProject == null)
-			return;
-		
-		IResource[] sources = EclipseResourceUtil.getJavaSourceRoots(project);
-		IPath output = null;
-		try{
-			output = javaProject.getOutputLocation();
-		}catch(JavaModelException ex){
-			SeamCorePlugin.getDefault().logError(ex);
-		}
-		
-		try{
-			for(IResource resource : project.members()){
-				if(resource instanceof IFolder){
-					if(checkFolder(resource, sources, output))
-						scan((IFolder) resource);
-				}else if(resource instanceof IFile)
-					scan((IFile) resource);
-			}
-		}catch(CoreException ex){
-			SeamCorePlugin.getDefault().logError(ex);
-		}
-	}
-	
 	private boolean checkFolder(IResource resource, IResource[] sources, IPath output){
 		for(IResource folder : sources){
 			if(resource.equals(folder))
@@ -443,215 +363,6 @@
 		return true;
 	}
 	
-	private void scanForJava(IContainer container){
-		try{
-			for(IResource resource : container.members()){
-				if(resource instanceof IFolder)
-					scanForJava((IFolder) resource);
-				else if(resource instanceof IFile)
-					scanForJava((IFile) resource);
-			}
-		}catch(CoreException ex){
-			SeamCorePlugin.getDefault().logError(ex);
-		}
-	}
-
-	private void scan(IContainer container){
-		try{
-			for(IResource resource : container.members()){
-				if(resource instanceof IFolder)
-					scan((IFolder) resource);
-				else if(resource instanceof IFile)
-					scan((IFile) resource);
-			}
-		}catch(CoreException ex){
-			SeamCorePlugin.getDefault().logError(ex);
-		}
-	}
-	
-	private void scanForJava(IFile file){
-		String ext = file.getFileExtension();
-		
-		if(!isFileCorrect(file))
-			return;
-		
-		String content = null;
-		try {
-			content = FileUtil.readStream(file.getContents());
-		} catch (CoreException e) {
-			SeamCorePlugin.getPluginLog().logError(e);
-			return;
-		}
-		if(JAVA_EXT.equalsIgnoreCase(ext)){
-			scanJava(file, content);
-		}else if(XML_EXT.equalsIgnoreCase(ext))
-			scanDOM(file, content);
-		else if(PROPERTIES_EXT.equalsIgnoreCase(ext))
-			scanProperties(file, content);
-	}
-
-	private void scan(IFile file){
-		String ext = file.getFileExtension();
-		
-		if(!isFileCorrect(file))
-			return;
-		
-		String content = null;
-		try {
-			content = FileUtil.readStream(file.getContents());
-		} catch (CoreException e) {
-			SeamCorePlugin.getPluginLog().logError(e);
-			return;
-		}
-		if(XML_EXT.equalsIgnoreCase(ext) || XHTML_EXT.equalsIgnoreCase(ext) || JSP_EXT.equalsIgnoreCase(ext))
-			scanDOM(file, content);
-	}
-	
-	private void scanJava(IFile file, String content){
-		try {
-			FastJavaPartitionScanner scaner = new FastJavaPartitionScanner();
-			Document document = new Document(content);
-			scaner.setRange(document, 0, document.getLength());
-			IToken token = scaner.nextToken();
-			while(token!=null && token!=Token.EOF) {
-				if(IJavaPartitions.JAVA_STRING.equals(token.getData())) {
-					int length = scaner.getTokenLength();
-					int offset = scaner.getTokenOffset();
-					String value = document.get(offset, length);
-					if(value.indexOf('{')>-1) {
-						scanString(file, value, offset);
-					}
-				}
-				token = scaner.nextToken();
-			}
-		} catch (BadLocationException e) {
-			SeamCorePlugin.getDefault().logError(e);
-		}
-	}
-	
-	private void scanDOM(IFile file, String content){
-		IModelManager manager = StructuredModelManager.getModelManager();
-		if(manager == null) {
-			return;
-		}
-		IStructuredModel model = null;		
-		try {
-			model = manager.getModelForRead(file);
-			if (model instanceof IDOMModel) {
-				IDOMModel domModel = (IDOMModel) model;
-				IDOMDocument document = domModel.getDocument();
-				scanChildNodes(file, document);
-			}
-		} catch (CoreException e) {
-			SeamCorePlugin.getDefault().logError(e);
-        } catch (IOException e) {
-        	SeamCorePlugin.getDefault().logError(e);
-		} finally {
-			if (model != null) {
-				model.releaseFromRead();
-			}
-		}
-	}
-	
-	private void scanChildNodes(IFile file, Node parent) {
-		NodeList children = parent.getChildNodes();
-		for(int i=0; i<children.getLength(); i++) {
-			Node curentValidatedNode = children.item(i);
-			if(Node.ELEMENT_NODE == curentValidatedNode.getNodeType()) {
-				scanNodeContent(file, ((IDOMNode)curentValidatedNode).getFirstStructuredDocumentRegion(), DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
-			} else if(Node.TEXT_NODE == curentValidatedNode.getNodeType()) {
-				scanNodeContent(file, ((IDOMNode)curentValidatedNode).getFirstStructuredDocumentRegion(), DOMRegionContext.XML_CONTENT);
-			}
-			scanChildNodes(file, curentValidatedNode);
-		}
-	}
-
-	private void scanNodeContent(IFile file, IStructuredDocumentRegion node, String regionType) {
-		ITextRegionList regions = node.getRegions();
-		for(int i=0; i<regions.size(); i++) {
-			ITextRegion region = regions.get(i);
-			if(region.getType() == regionType) {
-				String text = node.getFullText(region);
-				if(text.indexOf("{")>-1) { //$NON-NLS-1$
-					int offset = node.getStartOffset() + region.getStart();
-					scanString(file, text, offset);
-				}
-			}
-		}
-	}
-
-	// looking for component references in EL
-	private void scanString(IFile file, String string, int offset) {
-		int startEl = string.indexOf("#{"); //$NON-NLS-1$
-		if(startEl>-1) {
-			ELParser parser = ELParserUtil.getJbossFactory().createParser();
-			ELModel model = parser.parse(string);
-			for (ELInstance instance : model.getInstances()) {
-				for(ELInvocationExpression ie : instance.getExpression().getInvocations()){
-					ELPropertyInvocation pi = findComponentReference(ie);
-					if(pi != null)
-						change(file, offset+pi.getStartPosition(), pi.getName().getStart()+pi.getName().getLength()-pi.getStartPosition(), newName);
-				}
-			}
-		}
-	}
-	
-	private ELPropertyInvocation findComponentReference(ELInvocationExpression invocationExpression){
-		ELInvocationExpression invExp = invocationExpression;
-		while(invExp != null){
-			if(invExp instanceof ELPropertyInvocation){
-				if(((ELPropertyInvocation)invExp).getQualifiedName() != null && ((ELPropertyInvocation)invExp).getQualifiedName().equals(getOldName()))
-					return (ELPropertyInvocation)invExp;
-				else
-					invExp = invExp.getLeft();
-				
-			}else{
-				invExp = invExp.getLeft();
-			}
-		}
-		return null;
-	}
-	
-	private void scanProperties(IFile file, String content){
-		scanString(file, content, 0);
-		
-		if(!file.getName().equals(SEAM_PROPERTIES_FILE))
-			return;
-		
-		StringTokenizer tokenizer = new StringTokenizer(content, "#= \t\r\n\f", true); //$NON-NLS-1$
-		
-		String lastToken = "\n"; //$NON-NLS-1$
-		int offset = 0;
-		boolean comment = false;
-		boolean key = true;
-		
-		while(tokenizer.hasMoreTokens()){
-			String token = tokenizer.nextToken("#= \t\r\n\f"); //$NON-NLS-1$
-			if(token.equals("\r")) //$NON-NLS-1$
-				token = "\n"; //$NON-NLS-1$
-			
-			if(token.equals("#") && lastToken.equals("\n")) //$NON-NLS-1$ //$NON-NLS-2$
-				comment = true;
-			else if(token.equals("\n") && comment) //$NON-NLS-1$
-				comment = false;
-			
-			if(!comment){
-				if(!token.equals("\n") && lastToken.equals("\n")) //$NON-NLS-1$ //$NON-NLS-2$
-					key = true;
-				else if(key && (token.equals("=") || token.equals(" "))) //$NON-NLS-1$ //$NON-NLS-2$
-					key = false;
-				
-				if(key && token.startsWith(getOldName())){
-					String changeText = token.replaceFirst(getOldName(), getNewName());
-					change(file, offset, token.length(), changeText);
-				}
-			}
-			
-			lastToken = token;
-			offset += token.length();
-		}
-	}
-	
 	protected void renameComponent(IProgressMonitor pm, ISeamComponent component)throws CoreException{
 		pm.beginTask("", 3);
 		
@@ -665,7 +376,7 @@
 		
 		pm.worked(1);
 		
-		findELReferences();
+		getSeacher().findELReferences();
 		
 		pm.done();
 	}
@@ -681,7 +392,7 @@
 		
 		pm.worked(1);
 		
-		findELReferences();
+		getSeacher().findELReferences();
 		
 		pm.done();
 	}
@@ -722,4 +433,20 @@
 			keys.add(key);
 		}
 	}
+	
+	class SeamSeacher extends SeamRefactorSeacher{
+		public SeamSeacher(IFile declarationFile, String oldName){
+			super(declarationFile, oldName);
+		}
+
+		@Override
+		protected boolean isFileCorrect(IFile file) {
+			return SeamRenameProcessor.this.isFileCorrect(file);
+		}
+
+		@Override
+		protected void match(IFile file, int offset, int length) {
+			change(file, offset, length, newName);
+		}
+	}
 }

Modified: trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml	2009-09-03 11:43:45 UTC (rev 17443)
@@ -517,6 +517,16 @@
 	</extension>
 	
 	<extension
+			id="ELSearchResultPage"
+			point="org.eclipse.search.searchResultViewPages">
+		<viewPage
+			id="org.jboss.tools.seam.ui.search.ELSearchResultPage"
+			searchResultClass="org.jboss.tools.seam.ui.search.ELSearchResult"
+			class="org.jboss.tools.seam.ui.search.SeamSearchResultPage">
+		</viewPage>
+	</extension>
+	
+	<extension
          point="org.eclipse.jdt.ui.quickAssistProcessors">
       <quickAssistProcessor
             class="org.jboss.tools.seam.ui.actions.SeamFindQuickAssistProcessor"

Modified: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/actions/FindUsagesInELAction.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/actions/FindUsagesInELAction.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/actions/FindUsagesInELAction.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -11,18 +11,26 @@
 package org.jboss.tools.seam.ui.actions;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.search.SearchMessages;
+import org.eclipse.jdt.internal.ui.search.SearchUtil;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IActionDelegate2;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.jboss.tools.common.el.core.model.ELPropertyInvocation;
-import org.jboss.tools.seam.internal.core.refactoring.SeamRefactorSeacher;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+import org.jboss.tools.seam.ui.SeamGuiPlugin;
 import org.jboss.tools.seam.ui.SeamUIMessages;
+import org.jboss.tools.seam.ui.search.ELSearchQuery;
 
 public class FindUsagesInELAction extends Action implements IWorkbenchWindowActionDelegate, IActionDelegate2 {
 	private IFile javaFile;
@@ -44,26 +52,37 @@
 	public void init(IWorkbenchWindow window) {
 	}
 
-	public void run(IAction action) {
-		//ELResolverFactoryManager.getInstance().getResolvers(resource);
-		
-		
-//		ELInvocationExpression expression = SeamELCompletionEngine.findExpressionAtOffset(
-//				document, selectionOffset, 0, document.getLength()); 
-//
-//		if (expression == null)
-//			return; // No EL Operand found
-//
-//		try {
-//			performNewSearch(expression, file);
-//		} catch (JavaModelException jme) {
-//			SeamGuiPlugin.getPluginLog().logError(jme);
-//		} catch (InterruptedException ie) {
-//			SeamGuiPlugin.getPluginLog().logError(ie);
-//		}
-//		return;
+	public void run() {
+		try {
+			performNewSearch();
+		} catch (JavaModelException jme) {
+			SeamGuiPlugin.getPluginLog().logError(jme);
+		} catch (InterruptedException ie) {
+			SeamGuiPlugin.getPluginLog().logError(ie);
+		}
 	}
 	
+	private void performNewSearch() throws JavaModelException, InterruptedException {
+		ELSearchQuery query= createQuery();
+		if (query.canRunInBackground()) {
+			SearchUtil.runQueryInBackground(query);
+		} else {
+			IProgressService progressService= PlatformUI.getWorkbench().getProgressService();
+			IStatus status= SearchUtil.runQueryInForeground(progressService, query);
+			if (status.matches(IStatus.ERROR | IStatus.INFO | IStatus.WARNING)) {
+				ErrorDialog.openError(getShell(), SearchMessages.Search_Error_search_title, SearchMessages.Search_Error_search_message, status); 
+			}
+		}
+	}
+	
+	private ELSearchQuery createQuery() throws JavaModelException, InterruptedException {
+		return new ELSearchQuery(javaFile, type, propertyName);
+	}
+	
+	private Shell getShell() {
+		return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+	}
+	
 
 	public void selectionChanged(IAction action, ISelection selection) {
 	}
@@ -74,30 +93,9 @@
 	public void runWithEvent(IAction action, Event event) {
 	}
 
-	class ELSearcher extends SeamRefactorSeacher{
-		public ELSearcher(IFile file, String name){
-			super(file, name);
-		}
-
-		@Override
-		protected boolean isFileCorrect(IFile file) {
-			// TODO Auto-generated method stub
-			return true;
-		}
-
-		@Override
-		protected void match(IFile file,
-				ELPropertyInvocation elPropertyInvokation) {
-			// TODO Auto-generated method stub
-			
-		}
-
-		@Override
-		protected void match(IFile file, String token) {
-			// TODO Auto-generated method stub
-			
-		}
-		
-		
+	public void run(IAction action) {
+		run();
 	}
+
+	
 }

Modified: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/refactoring/SeamRefactorContributionFactory.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/refactoring/SeamRefactorContributionFactory.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/refactoring/SeamRefactorContributionFactory.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -430,12 +430,12 @@
 		String name = method.getElementName();
 		
 		if(name.startsWith(GET) || name.startsWith(SET))
-			return name.substring(3);
+			return name.substring(3).toLowerCase();
 		
 		if(name.startsWith(IS))
-			return name.substring(2);
+			return name.substring(2).toLowerCase();
 		
-		return name;
+		return name.toLowerCase();
 	}
 	
 	private static void saveAndBuild(){

Added: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchQuery.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchQuery.java	                        (rev 0)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchQuery.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.ui.search;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.ISearchResult;
+import org.eclipse.search.ui.text.Match;
+import org.jboss.tools.common.el.core.model.ELInvocationExpression;
+import org.jboss.tools.common.el.core.model.ELMethodInvocation;
+import org.jboss.tools.common.el.core.model.ELPropertyInvocation;
+import org.jboss.tools.seam.internal.core.refactoring.SeamRefactorSeacher;
+
+public class ELSearchQuery implements ISearchQuery {
+	private String propertyName;
+	private ELSearcher searcher;
+	
+	private ELSearchResult result;
+	
+	public ELSearchQuery(IFile file, IType type, String propertyName){
+		this.propertyName = propertyName;
+		searcher = new ELSearcher(file, propertyName);
+		
+		result = new ELSearchResult(this);
+	}
+	
+	public String getPropertyName(){
+		return propertyName;
+	}
+
+	public boolean canRerun() {
+		return false;
+	}
+
+	public boolean canRunInBackground() {
+		return true;
+	}
+
+	public String getLabel() {
+		return "Seach for property references in Expression Language";
+	}
+
+	public ISearchResult getSearchResult() {
+		return result;
+	}
+
+	public IStatus run(IProgressMonitor monitor)
+			throws OperationCanceledException {
+		searcher.findELReferences();
+		
+		return Status.OK_STATUS;
+	}
+	
+	class ELSearcher extends SeamRefactorSeacher{
+		public ELSearcher(IFile file, String name){
+			super(file, name);
+		}
+
+		@Override
+		protected boolean isFileCorrect(IFile file){
+			if(!file.isSynchronized(IResource.DEPTH_ZERO)){
+				return false;
+			}else if(file.isPhantom()){
+				return false;
+			}else if(file.isReadOnly()){
+				return false;
+			}
+			return true;
+	}
+
+		@Override
+		protected void match(IFile file, int offset, int length) {
+			Match match = new Match(file, offset, length);
+			result.addMatch(match);
+		}
+		
+		protected ELInvocationExpression findComponentReference(ELInvocationExpression invocationExpression){
+			ELInvocationExpression invExp = invocationExpression;
+			while(invExp != null){
+				if(invExp instanceof ELMethodInvocation || invExp instanceof ELPropertyInvocation){
+					if(invExp.getMemberName() != null && invExp.getMemberName().equalsIgnoreCase(propertyName))
+						return invExp;
+					else
+						invExp = invExp.getLeft();
+				}else{
+					invExp = invExp.getLeft();
+				}
+			}
+			return null;
+		}
+	}
+}


Property changes on: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchQuery.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchResult.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchResult.java	                        (rev 0)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchResult.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -0,0 +1,80 @@
+package org.jboss.tools.seam.ui.search;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.search.internal.ui.SearchPluginImages;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.text.AbstractTextSearchResult;
+import org.eclipse.search.ui.text.IEditorMatchAdapter;
+import org.eclipse.search.ui.text.IFileMatchAdapter;
+import org.eclipse.search.ui.text.Match;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+
+public class ELSearchResult extends AbstractTextSearchResult implements IEditorMatchAdapter, IFileMatchAdapter {
+	private ELSearchQuery query;
+	private final Match[] EMPTY_ARR= new Match[0];
+	
+	public ELSearchResult(ELSearchQuery query){
+		super();
+		this.query = query;
+	}
+
+	public ImageDescriptor getImageDescriptor() {
+		return SearchPluginImages.DESC_OBJ_TSEARCH_DPDN;
+	}
+
+	public String getLabel() {
+		return "'"+query.getPropertyName()+"' property references in Expression Language - "+getMatchCount()+" matches found";
+	}
+
+	public ISearchQuery getQuery() {
+		return query;
+	}
+
+	public String getTooltip() {
+		return getLabel();
+	}
+
+	@Override
+	public IEditorMatchAdapter getEditorMatchAdapter() {
+		return this;
+	}
+
+	@Override
+	public IFileMatchAdapter getFileMatchAdapter() {
+		return this;
+	}
+
+	public Match[] computeContainedMatches(AbstractTextSearchResult result,
+			IEditorPart editor) {
+		IEditorInput ei= editor.getEditorInput();
+		if (ei instanceof IFileEditorInput) {
+			IFileEditorInput fi= (IFileEditorInput) ei;
+			return getMatches(fi.getFile());
+		}
+		return EMPTY_ARR;
+	}
+
+	public boolean isShownInEditor(Match match, IEditorPart editor) {
+		IEditorInput ei= editor.getEditorInput();
+		if (ei instanceof IFileEditorInput) {
+			IFileEditorInput fi= (IFileEditorInput) ei;
+			return match.getElement().equals(fi.getFile());
+		}
+		return false;
+	}
+
+	public Match[] computeContainedMatches(AbstractTextSearchResult result,
+			IFile file) {
+		return getMatches(file);
+	}
+
+	public IFile getFile(Object element) {
+		if (element instanceof IFile)
+			return (IFile)element;
+		return null;
+	}
+
+}


Property changes on: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/ELSearchResult.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/SeamTreeContentProvider.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/SeamTreeContentProvider.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/search/SeamTreeContentProvider.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -88,8 +88,8 @@
 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		if (newInput instanceof SeamSearchResult) {
-			initialize((SeamSearchResult) newInput);
+		if (newInput instanceof AbstractTextSearchResult) {
+			initialize((AbstractTextSearchResult) newInput);
 		}
 	}
 	

Modified: trunk/seam/tests/org.jboss.tools.seam.core.test/src/org/jboss/tools/seam/core/test/refactoring/SeamComponentRefactoringTest.java
===================================================================
--- trunk/seam/tests/org.jboss.tools.seam.core.test/src/org/jboss/tools/seam/core/test/refactoring/SeamComponentRefactoringTest.java	2009-09-03 11:38:35 UTC (rev 17442)
+++ trunk/seam/tests/org.jboss.tools.seam.core.test/src/org/jboss/tools/seam/core/test/refactoring/SeamComponentRefactoringTest.java	2009-09-03 11:43:45 UTC (rev 17443)
@@ -135,8 +135,8 @@
 		
 
 		// Test results
-		if(!fromJar)
-			assertNull("There is unexpected component in seam project: " + componentName, seamProject.getComponent(componentName));
+		//if(!fromJar)
+			//assertNull("There is unexpected component in seam project: " + componentName, seamProject.getComponent(componentName));
 		assertNotNull("Can't load component " + newName, seamProject.getComponent(newName));
 		for(TestChangeStructure changeStructure : changeList){
 			IFile file = changeStructure.getProject().getFile(changeStructure.getFileName());



More information about the jbosstools-commits mailing list