[jbosstools-commits] JBoss Tools SVN: r42742 - in trunk: jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Jul 26 17:44:26 EDT 2012


Author: dazarov
Date: 2012-07-26 17:44:16 -0400 (Thu, 26 Jul 2012)
New Revision: 42742

Modified:
   trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/ModelUIImages.java
   trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/AddTLDMarkerResolution.java
   trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java
Log:
Make Quick Fix "Add tag library definition" work with KB Model instead of using plain tag library list https://issues.jboss.org/browse/JBIDE-12304

Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/ModelUIImages.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/ModelUIImages.java	2012-07-26 19:09:05 UTC (rev 42741)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/ModelUIImages.java	2012-07-26 21:44:16 UTC (rev 42742)
@@ -39,6 +39,8 @@
 	public static String JAVA_CLASS 			= "java/class.gif"; //$NON-NLS-1$
 	public static String JAVA_INTERFACE 		= "java/interface.gif"; //$NON-NLS-1$
 	public static String JAVA_PACKAGE 			= "java/package.gif"; //$NON-NLS-1$
+	
+	public static String TAGLIB_FILE 			= "editors/taglibs_file.gif"; //$NON-NLS-1$
 
 	// this blok staye witout changes for compatibility
 	private static ModelUIImages INSTANCE;

Modified: trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/AddTLDMarkerResolution.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/AddTLDMarkerResolution.java	2012-07-26 19:09:05 UTC (rev 42741)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/AddTLDMarkerResolution.java	2012-07-26 21:44:16 UTC (rev 42742)
@@ -29,6 +29,7 @@
 import org.eclipse.ui.part.FileEditorInput;
 import org.eclipse.ui.texteditor.DocumentProviderRegistry;
 import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.jboss.tools.common.model.ui.ModelUIImages;
 import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
 import org.jboss.tools.common.quickfix.IBaseMarkerResolution;
 import org.jboss.tools.jst.jsp.jspeditor.dnd.JSPPaletteInsertHelper;
@@ -44,16 +45,18 @@
  */
 public class AddTLDMarkerResolution implements IBaseMarkerResolution, IJavaCompletionProposal{
 	private IFile file;
-	private Properties properties;
 	
 	private String resolutionName;
 	private int start, end;
 	private String uri, prefix;
 	
-	public AddTLDMarkerResolution(IFile file, String name, Properties properties){
+	public AddTLDMarkerResolution(IFile file, String name, int start, int end, String uri, String prefix){
 		this.file = file;
-		this.properties = properties;
 		this.resolutionName = name;
+		this.start = start;
+		this.end = end;
+		this.uri = uri;
+		this.prefix = prefix;
 	}
 	
 	public AddTLDMarkerResolution(String name, int start, int end, String uri, String prefix){
@@ -63,6 +66,35 @@
 		this.uri = uri;
 		this.prefix = prefix;
 	}
+	
+	private Properties getProperties(){
+		Properties properties = new Properties();
+		properties.put(JSPPaletteInsertHelper.PROPOPERTY_ADD_TAGLIB, "true"); //$NON-NLS-1$
+		properties.put(PaletteInsertHelper.PROPOPERTY_START_TEXT, ""); //$NON-NLS-1$
+		properties.put(JSPPaletteInsertHelper.PROPOPERTY_TAGLIBRARY_URI, uri);
+		properties.put(JSPPaletteInsertHelper.PROPOPERTY_DEFAULT_PREFIX, prefix);
+		properties.put(PaletteInsertHelper.PROPOPERTY_SELECTION_PROVIDER, new ISelectionProvider() {
+			
+			@Override
+			public void setSelection(ISelection selection) {
+			}
+			
+			@Override
+			public void removeSelectionChangedListener(
+					ISelectionChangedListener listener) {
+			}
+			
+			@Override
+			public ISelection getSelection() {
+				return new TextSelection(start, end-start);
+			}
+			
+			@Override
+			public void addSelectionChangedListener(ISelectionChangedListener listener) {
+			}
+		});
+		return properties;
+	}
 
 	@Override
 	public String getLabel() {
@@ -81,7 +113,7 @@
 			IDocument document = provider.getDocument(input);
 			
 			PaletteTaglibInserter inserter = new PaletteTaglibInserter();
-			inserter.inserTaglib(document, properties);
+			inserter.inserTaglib(document, getProperties());
 			
 			if(!dirty){
 				provider.aboutToChange(input);
@@ -102,39 +134,15 @@
 
 	@Override
 	public Image getImage() {
-		return null;//ImageDescriptor.createFromFile(AddTLDMarkerResolution.class,	"images/xstudio/editors/taglibs_file.gif").createImage(); //$NON-NLS-1$
+		return ModelUIImages.getImageDescriptor(ModelUIImages.TAGLIB_FILE).createImage();
 	}
 
 	@Override
 	public void apply(IDocument document) {
-		properties = new Properties();
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_ADD_TAGLIB, "true"); //$NON-NLS-1$
-		properties.put(PaletteInsertHelper.PROPOPERTY_START_TEXT, ""); //$NON-NLS-1$
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_TAGLIBRARY_URI, uri);
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_DEFAULT_PREFIX, prefix);
-		properties.put(PaletteInsertHelper.PROPOPERTY_SELECTION_PROVIDER, new ISelectionProvider() {
-			
-			@Override
-			public void setSelection(ISelection selection) {
-			}
-			
-			@Override
-			public void removeSelectionChangedListener(
-					ISelectionChangedListener listener) {
-			}
-			
-			@Override
-			public ISelection getSelection() {
-				return new TextSelection(start, end-start);
-			}
-			
-			@Override
-			public void addSelectionChangedListener(ISelectionChangedListener listener) {
-			}
-		});
 		
+		Properties properties = getProperties();
 		
-		Properties p = PaletteTaglibInserter.getPrefixes(document, properties);
+		PaletteTaglibInserter.getPrefixes(document, properties);
 		
 		PaletteTaglibInserter inserter = new PaletteTaglibInserter();
 		inserter.inserTaglib(document, properties);

Modified: trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java	2012-07-26 19:09:05 UTC (rev 42741)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java	2012-07-26 21:44:16 UTC (rev 42742)
@@ -12,33 +12,28 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Properties;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.text.source.Annotation;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.ui.IMarkerResolution;
 import org.eclipse.ui.IMarkerResolutionGenerator2;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.texteditor.DocumentProviderRegistry;
-import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.sse.ui.internal.reconcile.TemporaryAnnotation;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
 import org.jboss.tools.common.quickfix.IQuickFixGenerator;
-import org.jboss.tools.jst.jsp.jspeditor.dnd.JSPPaletteInsertHelper;
-import org.jboss.tools.jst.jsp.jspeditor.dnd.PaletteTaglibInserter;
+import org.jboss.tools.common.refactoring.MarkerResolutionUtils;
+import org.jboss.tools.jst.web.kb.IKbProject;
+import org.jboss.tools.jst.web.kb.KbProjectFactory;
+import org.jboss.tools.jst.web.kb.internal.taglib.TLDLibrary;
+import org.jboss.tools.jst.web.kb.taglib.INameSpace;
+import org.jboss.tools.jst.web.kb.taglib.ITagLibrary;
 import org.jboss.tools.jst.web.ui.WebUiPlugin;
 
 /**
@@ -66,142 +61,134 @@
 		libs.put("c", "http://java.sun.com/jstl/core"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
-	private IFile file;
-	private Properties properties;
-	private String resolutionName;
-	
 	@Override
 	public IMarkerResolution[] getResolutions(IMarker marker) {
 		try{
-			if(isOurCase(marker)){
-				return new IMarkerResolution[] {
-					new AddTLDMarkerResolution(file, resolutionName, properties)
-				};
-			}
+			return isOurCase(marker);
 		}catch(CoreException ex){
 			WebUiPlugin.getPluginLog().logError(ex);
 		}
 		return new IMarkerResolution[]{};
 	}
 	
-	private IJavaCompletionProposal isOurCase(Annotation annotation){
+	private IJavaCompletionProposal[] isOurCase(Annotation annotation){
+		ArrayList<IJavaCompletionProposal> proposals = new ArrayList<IJavaCompletionProposal>();
 		if(!(annotation instanceof TemporaryAnnotation)){
-			return null;
+			return new IJavaCompletionProposal[]{};
 		}
 		TemporaryAnnotation ta = (TemporaryAnnotation)annotation;
 		
-		
 		String message = annotation.getText();
 		if(ta.getPosition() == null)
-			return null;
+			return new IJavaCompletionProposal[]{};
 		
 		final int start = ta.getPosition().getOffset();
 		
 		final int end = ta.getPosition().getOffset()+ta.getPosition().getLength();
 		
 		if(!message.startsWith(UNKNOWN_TAG))
-			return null;
+			return new IJavaCompletionProposal[]{};
 		
 		String prefix = getPrifix(message);
 		if(prefix == null)
-			return null;
+			return new IJavaCompletionProposal[]{};
 		
-		if(!libs.containsKey(prefix))
-			return null;
-		
 		Object additionalInfo = ta.getAdditionalFixInfo();
 		if(additionalInfo instanceof IDocument){
 			IStructuredModel model = StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument)additionalInfo);
 			IDOMDocument xmlDocument = (model instanceof IDOMModel) ? ((IDOMModel) model).getDocument() : null;
-			if(xmlDocument != null && xmlDocument.isXMLType()){
-				resolutionName = "xmlns: "+prefix+" = \""+libs.get(prefix)+"\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}else{
-				resolutionName = "<%@ taglib uri = \""+libs.get(prefix)+"\" prefix=\""+prefix+"\" %>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			
+			IFile file = MarkerResolutionUtils.getFile();
+			if(file == null)
+				return new IJavaCompletionProposal[]{};
+			
+			IKbProject kbProject = KbProjectFactory.getKbProject(file.getProject(), true);
+			
+			ITagLibrary[] libraries = kbProject.getTagLibraries();
+			for(ITagLibrary l : libraries){
+				if(l instanceof TLDLibrary){
+					((TLDLibrary) l).createDefaultNameSpace();
+				}
+				INameSpace ns = l.getDefaultNameSpace();
+				if(ns != null && ns.getPrefix() != null && ns.getPrefix().equals(prefix)){
+					String uri = ns.getURI();
+					String resolutionName = getResolutionName(xmlDocument != null && xmlDocument.isXMLType(), true, prefix, uri);
+					if(resolutionName != null){
+						proposals.add(new AddTLDMarkerResolution(resolutionName, start, end, uri, prefix));
+					}
+				}
 			}
 			
+			if(proposals.size() == 0 && libs.containsKey(prefix)){
+				String uri = libs.get(prefix);
+				String resolutionName = getResolutionName(xmlDocument != null && xmlDocument.isXMLType(), true, prefix, uri);
+				if(resolutionName != null){
+					proposals.add(new AddTLDMarkerResolution(resolutionName, start, end, uri, prefix));
+				}
+			}
 		}
 		
-		
-		
-		return new AddTLDMarkerResolution(resolutionName, start, end, libs.get(prefix), prefix);
+		return proposals.toArray(new IJavaCompletionProposal[]{});
 	}
 	
-	private boolean isOurCase(IMarker marker) throws CoreException{
+	private String getResolutionName(boolean xml, boolean noXML, String prefix, String uri){
+		if(xml){
+			return "xmlns: "+prefix+" = \""+uri+"\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}else if(noXML){
+			return "<%@ taglib uri = \""+uri+"\" prefix=\""+prefix+"\" %>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+		return null;
+	}
+	
+	private IMarkerResolution[] isOurCase(IMarker marker) throws CoreException{
+		ArrayList<IMarkerResolution> resolutions = new ArrayList<IMarkerResolution>();
 		String message = (String)marker.getAttribute(IMarker.MESSAGE);
 		
 		Integer attribute =  ((Integer)marker.getAttribute(IMarker.CHAR_START));
 		if(attribute == null)
-			return false;
+			return new IMarkerResolution[]{};
 		final int start = attribute.intValue();
 		
 		attribute = ((Integer)marker.getAttribute(IMarker.CHAR_END));
 		if(attribute == null)
-			return false;
+			return new IMarkerResolution[]{};
 		final int end = attribute.intValue();
 		
 		if(!message.startsWith(UNKNOWN_TAG))
-			return false;
+			return new IMarkerResolution[]{};
 		
 		String prefix = getPrifix(message);
 		if(prefix == null)
-			return false;
+			return new IMarkerResolution[]{};
 		
-		if(!libs.containsKey(prefix))
-			return false;
 		
-		file = (IFile)marker.getResource();
+		IFile file = (IFile)marker.getResource();
 		
-		FileEditorInput input = new FileEditorInput(file);
-		IDocumentProvider provider = DocumentProviderRegistry.getDefault().getDocumentProvider(input);
-		try {
-			provider.connect(input);
-		} catch (CoreException e) {
-			WebUiPlugin.getPluginLog().logError(e);
-		}
+		IKbProject kbProject = KbProjectFactory.getKbProject(file.getProject(), true);
 		
-		IDocument document = provider.getDocument(input);
-
-		properties = new Properties();
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_ADD_TAGLIB, "true"); //$NON-NLS-1$
-		properties.put(PaletteInsertHelper.PROPOPERTY_START_TEXT, ""); //$NON-NLS-1$
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_TAGLIBRARY_URI, libs.get(prefix));
-		properties.put(JSPPaletteInsertHelper.PROPOPERTY_DEFAULT_PREFIX, prefix);
-		properties.put(PaletteInsertHelper.PROPOPERTY_SELECTION_PROVIDER, new ISelectionProvider() {
-			
-			@Override
-			public void setSelection(ISelection selection) {
+		ITagLibrary[] libraries = kbProject.getTagLibraries();
+		for(ITagLibrary l : libraries){
+			if(l instanceof TLDLibrary){
+				((TLDLibrary) l).createDefaultNameSpace();
 			}
-			
-			@Override
-			public void removeSelectionChangedListener(
-					ISelectionChangedListener listener) {
+			INameSpace ns = l.getDefaultNameSpace();
+			if(ns != null && ns.getPrefix() != null && ns.getPrefix().equals(prefix)){
+				String uri = ns.getURI();
+				String resolutionName = getResolutionName(marker.getType().equals(HTML_VALIDATOR_MARKER) || marker.isSubtypeOf(HTML_VALIDATOR_MARKER), marker.getType().equals(JSP_VALIDATOR_MARKER) || marker.isSubtypeOf(JSP_VALIDATOR_MARKER), prefix, uri);
+				if(resolutionName != null){
+					resolutions.add(new AddTLDMarkerResolution(file, resolutionName, start, end, uri, prefix));
+				}
 			}
-			
-			@Override
-			public ISelection getSelection() {
-				return new TextSelection(start, end-start);
-			}
-			
-			@Override
-			public void addSelectionChangedListener(ISelectionChangedListener listener) {
-			}
-		});
-		
-		
-		Properties p = PaletteTaglibInserter.getPrefixes(document, properties);
-		
-		provider.disconnect(input);
-		
-		if(p.containsValue(prefix))
-			return false;
-		
-		if(marker.getType().equals(HTML_VALIDATOR_MARKER) || marker.isSubtypeOf(HTML_VALIDATOR_MARKER)){
-			resolutionName = "xmlns: "+prefix+" = \""+libs.get(prefix)+"\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}else if(marker.getType().equals(JSP_VALIDATOR_MARKER) || marker.isSubtypeOf(JSP_VALIDATOR_MARKER)){
-			resolutionName = "<%@ taglib uri = \""+libs.get(prefix)+"\" prefix=\""+prefix+"\" %>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
 		
-		return true;
+		if(resolutions.size() == 0 && libs.containsKey(prefix)){
+			String uri = libs.get(prefix);
+			String resolutionName = getResolutionName(marker.getType().equals(HTML_VALIDATOR_MARKER) || marker.isSubtypeOf(HTML_VALIDATOR_MARKER), marker.getType().equals(JSP_VALIDATOR_MARKER) || marker.isSubtypeOf(JSP_VALIDATOR_MARKER), prefix, uri);
+			if(resolutionName != null){
+				resolutions.add(new AddTLDMarkerResolution(file, resolutionName, start, end, uri, prefix));
+			}
+		}
+		return resolutions.toArray(new IMarkerResolution[]{});
 	}
 	
 	public static String getPrifix(String message){
@@ -239,11 +226,6 @@
 
 	@Override
 	public IJavaCompletionProposal[] getProposals(Annotation annotation) {
-		ArrayList<IJavaCompletionProposal> proposals = new ArrayList<IJavaCompletionProposal>();
-		IJavaCompletionProposal proposal = isOurCase(annotation); 
-		if(proposal != null){
-			proposals.add(proposal);
-		}
-		return proposals.toArray(new IJavaCompletionProposal[]{});
+		return isOurCase(annotation); 
 	}
 }
\ No newline at end of file



More information about the jbosstools-commits mailing list