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