Author: dazarov
Date: 2011-06-20 12:00:55 -0400 (Mon, 20 Jun 2011)
New Revision: 32218
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/MarkerAnnotationInfo.java
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/xpl/MarkerProblemAnnotationHoverProcessor.java
trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/composite/CompositeComponentValidator.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ComponentResolutionGenerator.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JSF2ValidatorTest.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/marker/SeamProblemMarkerResolutionGenerator.java
Log:
https://issues.jboss.org/browse/JBIDE-9138
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/marker/CDIProblemMarkerResolutionGenerator.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -57,19 +57,30 @@
}
return new IMarkerResolution[] {};
}
+
+ /**
+ * return message id or -1 if impossible to find
+ * @param marker
+ * @return
+ */
+ private int getMessageID(IMarker marker)throws CoreException{
+ Integer attribute = ((Integer)
marker.getAttribute(CDIValidationErrorManager.MESSAGE_ID_ATTRIBUTE_NAME));
+ if (attribute != null)
+ return attribute.intValue();
+ return -1;
+ }
+
private IMarkerResolution[] findResolutions(IMarker marker)
throws CoreException {
- Integer attribute = ((Integer) marker
- .getAttribute(CDIValidationErrorManager.MESSAGE_ID_ATTRIBUTE_NAME));
- if (attribute == null)
+
+ int messageId = getMessageID(marker);
+ if (messageId == -1)
return new IMarkerResolution[] {};
- int messageId = attribute.intValue();
-
final IFile file = (IFile) marker.getResource();
- attribute = ((Integer) marker.getAttribute(IMarker.CHAR_START));
+ Integer attribute = ((Integer) marker.getAttribute(IMarker.CHAR_START));
if (attribute == null)
return new IMarkerResolution[] {};
final int start = attribute.intValue();
@@ -352,8 +363,7 @@
public boolean hasResolutions(IMarker marker) {
try {
- if (findResolutions(marker).length != 0)
- return true;
+ return getMessageID(marker) >= 0;
} catch (CoreException ex) {
CDIUIPlugin.getDefault().logError(ex);
}
Modified:
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/MarkerAnnotationInfo.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/MarkerAnnotationInfo.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/MarkerAnnotationInfo.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -11,34 +11,119 @@
package org.jboss.tools.common.text.xml;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
import org.eclipse.core.resources.IMarker;
-import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext;
+import org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
+import org.eclipse.jface.text.quickassist.IQuickFixableAnnotation;
+import org.eclipse.jface.text.source.Annotation;
+import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.ui.IMarkerResolution;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.texteditor.SimpleMarkerAnnotation;
+import org.eclipse.wst.sse.ui.StructuredTextInvocationContext;
+import org.eclipse.wst.sse.ui.internal.correction.QuickFixRegistry;
+import org.eclipse.wst.sse.ui.internal.reconcile.TemporaryAnnotation;
public class MarkerAnnotationInfo {
- public final SimpleMarkerAnnotation annotation;
- public final Position position;
- public final ITextViewer viewer;
+ public final List<AnnotationInfo> infos;
+ public final SourceViewer viewer;
- public MarkerAnnotationInfo(SimpleMarkerAnnotation annotation, Position position,
ITextViewer textViewer) {
- this.annotation= annotation;
- this.position= position;
- this.viewer= textViewer;
+ public MarkerAnnotationInfo(List<AnnotationInfo> infos, SourceViewer textViewer)
{
+ this.infos = infos;
+ this.viewer = textViewer;
}
+
+ public List<ICompletionProposal> getCompletionProposals(AnnotationInfo info) {
- public QuickFixProposal[] getCompletionProposals() {
- ArrayList<QuickFixProposal> proposals = new ArrayList<QuickFixProposal>();
+ if(info.isTop())
+ return getMarkerProposals(info);
+ else
+ return getProposals(info);
+ }
+
+ public List<ICompletionProposal> getMarkerProposals(AnnotationInfo info) {
+ SimpleMarkerAnnotation annotation = (SimpleMarkerAnnotation)info.annotation;
+
+ ArrayList<ICompletionProposal> proposals = new
ArrayList<ICompletionProposal>();
+
IMarker marker = annotation.getMarker();
IMarkerResolution[] resolutions = IDE.getMarkerHelpRegistry().getResolutions(marker);
for (IMarkerResolution resolution : resolutions) {
proposals.add(new QuickFixProposal(resolution, marker));
}
- return proposals.toArray(new QuickFixProposal[proposals.size()]);
+ return proposals;
}
+
+ public List<ICompletionProposal> getProposals(AnnotationInfo info) {
+ TemporaryAnnotation annotation = (TemporaryAnnotation)info.annotation;
+
+ List<ICompletionProposal> allProposals = new
ArrayList<ICompletionProposal>();
+ List<IQuickAssistProcessor> processors = new
ArrayList<IQuickAssistProcessor>();
+ if (canFix(annotation)) {
+ Object o = annotation.getAdditionalFixInfo();
+ if (o instanceof IQuickAssistProcessor) {
+ processors.add((IQuickAssistProcessor)o);
+ }
+
+ // get all relevant quick fixes for this annotation
+ QuickFixRegistry registry = QuickFixRegistry.getInstance();
+ processors.addAll(Arrays.asList(registry.getQuickFixProcessors(annotation)));
+
+ // set up context
+ Map attributes = null;
+ attributes = annotation.getAttributes();
+ StructuredTextInvocationContext sseContext = new
StructuredTextInvocationContext(viewer, info.position.getOffset(),
info.position.getLength(), attributes);
+
+ // call each processor
+ for (int i = 0; i < processors.size(); ++i) {
+ List<ICompletionProposal> proposals = new
ArrayList<ICompletionProposal>();
+ collectProposals((IQuickAssistProcessor) processors.get(i), annotation, sseContext,
proposals);
+
+ if (proposals.size() > 0) {
+ allProposals.addAll(proposals);
+ }
+ }
+
+ }
+
+ return allProposals;
+ }
+
+ private void collectProposals(IQuickAssistProcessor processor, Annotation annotation,
IQuickAssistInvocationContext invocationContext, List<ICompletionProposal>
proposalsList) {
+ ICompletionProposal[] proposals =
processor.computeQuickAssistProposals(invocationContext);
+ if (proposals != null && proposals.length > 0) {
+ proposalsList.addAll(Arrays.asList(proposals));
+ }
+ }
+
+ public boolean canFix(Annotation annotation) {
+ if (annotation instanceof IQuickFixableAnnotation) {
+ if (((IQuickFixableAnnotation) annotation).isQuickFixableStateSet()) {
+ return ((IQuickFixableAnnotation) annotation).isQuickFixable();
+ }
+ }
+ return false;
+ }
+
+ public static class AnnotationInfo {
+ public Annotation annotation;
+ public Position position;
+
+ public AnnotationInfo(Annotation annotation, Position position){
+ this.annotation = annotation;
+ this.position = position;
+ }
+
+ public boolean isTop(){
+ return annotation instanceof SimpleMarkerAnnotation;
+ }
+ }
}
Modified:
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/xpl/MarkerProblemAnnotationHoverProcessor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/xpl/MarkerProblemAnnotationHoverProcessor.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/xpl/MarkerProblemAnnotationHoverProcessor.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -32,6 +32,7 @@
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITextViewerExtension;
import org.eclipse.jface.text.Position;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.SourceViewer;
@@ -59,9 +60,10 @@
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess;
import org.eclipse.ui.texteditor.SimpleMarkerAnnotation;
+import org.eclipse.wst.sse.ui.internal.reconcile.TemporaryAnnotation;
import org.eclipse.wst.sse.ui.internal.taginfo.ProblemAnnotationHoverProcessor;
import org.jboss.tools.common.text.xml.MarkerAnnotationInfo;
-import org.jboss.tools.common.text.xml.QuickFixProposal;
+import org.jboss.tools.common.text.xml.MarkerAnnotationInfo.AnnotationInfo;
import org.jboss.tools.common.text.xml.TextXMLMessages;
public class MarkerProblemAnnotationHoverProcessor extends
ProblemAnnotationHoverProcessor implements ITextHoverExtension, ITextHoverExtension2{
@@ -74,6 +76,10 @@
}
public Object getHoverInfo2(ITextViewer viewer, IRegion hoverRegion) {
+ List<AnnotationInfo> all = new ArrayList<AnnotationInfo>();
+ List<AnnotationInfo> high = new ArrayList<AnnotationInfo>();
+ List<AnnotationInfo> low = new ArrayList<AnnotationInfo>();
+
IAnnotationModel model = ((SourceViewer) viewer).getAnnotationModel();
if (model != null) {
Iterator<Annotation> iterator = model.getAnnotationIterator();
@@ -85,10 +91,19 @@
Position position = model.getPosition(annotation);
if (position.overlapsWith(hoverRegion.getOffset(), hoverRegion.getLength())) {
- return new MarkerAnnotationInfo((SimpleMarkerAnnotation)annotation, position,
viewer);
+ AnnotationInfo info = new AnnotationInfo(annotation, position);
+ if(info.isTop())
+ high.add(info);
+ else
+ low.add(info);
}
}
+ all.addAll(high);
+ all.addAll(low);
+
}
+ if(all.size() > 0)
+ return new MarkerAnnotationInfo(all, (SourceViewer) viewer);
return null;
}
@@ -99,7 +114,7 @@
}
protected boolean isAnnotationValid(Annotation annotation) {
- if(annotation instanceof SimpleMarkerAnnotation)
+ if(annotation instanceof SimpleMarkerAnnotation || annotation instanceof
TemporaryAnnotation)
return true;
return false;
}
@@ -175,64 +190,32 @@
}
protected void createContent() {
- createInfo(parent, getAnnotationInfo().annotation);
- setDecoration(parent, parent.getForeground(), parent.getBackground(),
JFaceResources.getDialogFont());
+ boolean first = true;
- QuickFixProposal[] proposals = getAnnotationInfo().getCompletionProposals();
- if (proposals.length > 0)
- createControl(parent, proposals);
-
- parent.layout(true);
- }
-
- private void createControl(Composite parent, QuickFixProposal[] proposals) {
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- GridLayout layout2 = new GridLayout(1, false);
- layout2.marginHeight = 0;
- layout2.marginWidth = 0;
- layout2.verticalSpacing = 2;
- composite.setLayout(layout2);
-
- Label separator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
- GridData gridData= new GridData(SWT.FILL, SWT.CENTER, true, false);
- separator.setLayoutData(gridData);
-
- Label quickFixLabel= new Label(composite, SWT.NONE);
- GridData layoutData= new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
- layoutData.horizontalIndent = 4;
- quickFixLabel.setLayoutData(layoutData);
- String text;
- if (proposals.length == 1) {
- text= TextXMLMessages.SINGLE_QUICK_FIX;
- } else {
- text= NLS.bind(TextXMLMessages.MULTIPLE_QUICK_FIX, proposals.length);
- }
- quickFixLabel.setText(text);
-
- setDecoration(composite, parent.getForeground(), parent.getBackground(),
JFaceResources.getDialogFont());
- createList(composite, proposals);
- }
-
- private void createList(Composite parent, QuickFixProposal[] proposals) {
final ScrolledComposite scrolledComposite= new ScrolledComposite(parent, SWT.V_SCROLL
| SWT.H_SCROLL);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
scrolledComposite.setLayoutData(gridData);
scrolledComposite.setExpandVertical(false);
scrolledComposite.setExpandHorizontal(false);
-
+
Composite composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- GridLayout layout = new GridLayout(2, false);
+ GridLayout layout = new GridLayout(1, false);
layout.marginLeft = 5;
layout.verticalSpacing = 2;
composite.setLayout(layout);
+
- List<Link> list = new ArrayList<Link>();
- for (QuickFixProposal proposal : proposals) {
- list.add(createLink(composite, proposal));
+ for(AnnotationInfo info : getAnnotationInfo().infos){
+ createInfo(composite, info.annotation, first);
+ if(first)
+ first = false;
+
+ List<ICompletionProposal> proposals =
getAnnotationInfo().getCompletionProposals(info);
+ if (proposals.size() > 0)
+ createControl(composite, proposals);
}
-
+
scrolledComposite.setContent(composite);
setDecoration(scrolledComposite, parent.getForeground(), parent.getBackground(),
JFaceResources.getDialogFont());
@@ -252,9 +235,45 @@
}
gridData.heightHint = contentSize.y - scrollBarHeight;
}
+
+ parent.layout(true);
}
+
+ private void createControl(Composite parent, List<ICompletionProposal> proposals)
{
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ GridLayout layout2 = new GridLayout(1, false);
+ layout2.verticalSpacing = 2;
+ layout2.marginLeft = 5;
+ composite.setLayout(layout2);
- private Link createLink(Composite parent, final QuickFixProposal proposal) {
+ Label separator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
+ GridData gridData= new GridData(SWT.FILL, SWT.CENTER, true, false);
+ separator.setLayoutData(gridData);
+
+ Label quickFixLabel= new Label(composite, SWT.NONE);
+ GridData layoutData= new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
+ layoutData.horizontalIndent = 4;
+ quickFixLabel.setLayoutData(layoutData);
+ String text;
+ if (proposals.size() == 1) {
+ text= TextXMLMessages.SINGLE_QUICK_FIX;
+ } else {
+ text= NLS.bind(TextXMLMessages.MULTIPLE_QUICK_FIX, proposals.size());
+ }
+ quickFixLabel.setText(text);
+
+ createList(composite, proposals);
+ }
+
+ private void createList(Composite parent, List<ICompletionProposal> proposals) {
+ List<Link> list = new ArrayList<Link>();
+ for (ICompletionProposal proposal : proposals) {
+ list.add(createLink(parent, proposal));
+ }
+ }
+
+ private Link createLink(Composite parent, final ICompletionProposal proposal) {
Link proposalLink = new Link(parent, SWT.WRAP);
GridData layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
String linkText = proposal.getDisplayString();
@@ -265,7 +284,7 @@
}
public void mouseDown(MouseEvent e) {
- fix(proposal, info.viewer, info.position.offset);
+ fix(proposal, info.viewer, info.infos.get(0).position.getOffset());
}
public void mouseUp(MouseEvent e) {
@@ -274,7 +293,7 @@
return proposalLink;
}
- private void fix(QuickFixProposal p, ITextViewer viewer, int offset) {
+ private void fix(ICompletionProposal p, ITextViewer viewer, int offset) {
dispose();
IRewriteTarget target = null;
@@ -302,7 +321,13 @@
}
}
- private void createInfo(Composite parent, final Annotation annotation) {
+ private void createInfo(Composite parent, final Annotation annotation, boolean
firstElement) {
+ if(!firstElement){
+ Label separator= new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+ GridData gridData= new GridData(SWT.FILL, SWT.CENTER, true, false);
+ separator.setLayoutData(gridData);
+ }
+
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
GridLayout layout = new GridLayout(2, false);
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml 2011-06-20 15:53:34 UTC (rev 32217)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml 2011-06-20 16:00:55 UTC (rev 32218)
@@ -731,13 +731,13 @@
</validator>
</extension>
-->
- <extension
+ <!--extension
point="org.eclipse.wst.sse.ui.quickFixProcessor">
<quickFixProcessor
class="org.jboss.tools.jsf.web.validation.jsf2.action.JSF2QuickFixProcessor"
problemType="org.jboss.tools.jsf.jsf2problemmarker">
</quickFixProcessor>
- </extension>
+ </extension-->
<extension
point="org.eclipse.ui.editors.annotationTypes">
<type
@@ -903,5 +903,10 @@
name="%CreateJSF2Composite"
defaultHandler="org.jboss.tools.jsf.web.commands.CreateJSF2CompositeCommandHandler"/>
</extension>
+ <extension point="org.eclipse.ui.ide.markerResolution">
+ <markerResolutionGenerator
+ markerType="org.jboss.tools.jsf.compositeproblem"
+ class="org.jboss.tools.jsf.web.validation.jsf2.action.JSF2ComponentResolutionGenerator"/>
+ </extension>
</plugin>
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -11,16 +11,20 @@
package org.jboss.tools.jsf.jsf2.model;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
+
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.internal.core.JarEntryFile;
import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.texteditor.DocumentProviderRegistry;
+import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.wst.html.core.internal.encoding.HTMLModelLoader;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
@@ -35,6 +39,7 @@
import org.eclipse.wst.xml.core.internal.provisional.format.DocumentNodeFormatter;
import org.jboss.tools.jsf.JSFModelPlugin;
import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
+import org.jboss.tools.jst.jsp.jspeditor.dnd.PaletteTaglibInserter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -71,13 +76,26 @@
@Override
protected void edit(IDOMModel model) throws CoreException,
IOException {
- IDOMDocument document = model.getDocument();
- updateJSF2CompositeComponent(document, attrNames);
- IStructuredDocument structuredDocument = document
- .getStructuredDocument();
- String text = structuredDocument.getText();
- model.reload(new ByteArrayInputStream(text.getBytes()));
- model.save();
+ FileEditorInput input = new FileEditorInput(getFile());
+ IDocumentProvider provider =
DocumentProviderRegistry.getDefault().getDocumentProvider(input);
+
+ provider.connect(input);
+
+ IDocument document = provider.getDocument(input);
+
+ updateJSF2CompositeComponent(model.getDocument(), attrNames);
+
+ provider.aboutToChange(input);
+ provider.saveDocument(new NullProgressMonitor(), input, document, true);
+ provider.disconnect(input);
+ //IDOMDocument document = model.getDocument();
+ //updateJSF2CompositeComponent(document, attrNames);
+ //IStructuredDocument structuredDocument = document
+ // .getStructuredDocument();
+ //String text = structuredDocument.getText();
+ // //getFile().setContents(new
ByteArrayInputStream(text.getBytes()),true,false,null);
+ //model.reload(new ByteArrayInputStream(text.getBytes()));
+ //model.save();
}
});
return file;
@@ -167,13 +185,13 @@
if (element == null) {
return null;
}
- if (!"html".equals(element.getNodeName())) { //$NON-NLS-1$
- return null;
- }
- ElementImpl elementImpl = (ElementImpl) element;
- if (!"http://www.w3.org/1999/xhtml".equals(elementImpl.getNamespaceURI())) {
//$NON-NLS-1$
- return null;
- }
+ //if (!"html".equals(element.getNodeName())) { //$NON-NLS-1$
+ //return null;
+ //}
+ //ElementImpl elementImpl = (ElementImpl) element;
+ //if (!"http://www.w3.org/1999/xhtml".equals(elementImpl.getNamespaceURI()))
{ //$NON-NLS-1$
+ // return null;
+ //}
IDOMElement[] interfaceElement = new IDOMElement[1];
findInterfaceComponent(element, interfaceElement);
return interfaceElement[0];
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/composite/CompositeComponentValidator.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/composite/CompositeComponentValidator.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/composite/CompositeComponentValidator.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -16,6 +16,7 @@
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
@@ -73,6 +74,11 @@
public static final String SHORT_ID = "jboss.jsf.core"; //$NON-NLS-1$
private static final String COMPOSITE_COMPONENT_URI_PREFIX =
"http://java.sun.com/jsf/composite/"; //$NON-NLS-1$
+
+ public static final String MESSAGE_ID_ATTRIBUTE_NAME = "JSF2_message_id";
//$NON-NLS-1$
+
+ public static final int UNKNOWN_COMPOSITE_COMPONENT_NAME_ID = 1;
+ public static final int UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE_ID = 2;
private IProject currentProject;
private IContainer webRootFolder;
@@ -225,13 +231,14 @@
if(tagName==null) {
return;
}
- ITagLibrary[] libs = KbProjectFactory.getKbProject(file.getProject(),
true).getTagLibraries(xmlComponent.getNamespaceURI());
+ String tagLibUri = xmlComponent.getNamespaceURI();
+ // Save the link between the composition component URI and the validating page
+ getValidationContext().addLinkedCoreResource(SHORT_ID, tagLibUri + ":" +
tagName, file.getFullPath(), false);
+
+ ITagLibrary[] libs = KbProjectFactory.getKbProject(file.getProject(),
true).getTagLibraries(tagLibUri);
if(libs.length>0) {
IComponent kbComponent = libs[0].getComponent(tagName);
if(kbComponent!=null) {
- // Save the link between the composition component URI and the validating page
- getValidationContext().addLinkedCoreResource(SHORT_ID, libs[0].getURI() +
":" + kbComponent.getName(), file.getFullPath(), false);
-
NamedNodeMap map = xmlComponent.getAttributes();
for (int i = 0; i < map.getLength(); i++) {
Node xmlAttribute = map.item(i);
@@ -241,7 +248,7 @@
IndexedRegion region = (IndexedRegion)xmlAttribute;
int offset = region.getStartOffset();
int length = attributeName.length();
- addError(JSFValidationMessage.UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE,
JSFSeverityPreferences.UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE, new String[]{attributeName,
tagName}, length, offset, file);
+ addError(JSFValidationMessage.UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE,
JSFSeverityPreferences.UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE, new String[]{attributeName,
tagName}, length, offset, file, UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE_ID);
}
}
} else {
@@ -263,7 +270,7 @@
IndexedRegion region = (IndexedRegion)xmlComponent;
int offset = region.getStartOffset();
int length = xmlComponent.getNodeName().length() + 1;
- addError(JSFValidationMessage.UNKNOWN_COMPOSITE_COMPONENT_NAME,
JSFSeverityPreferences.UNKNOWN_COMPOSITE_COMPONENT_NAME, new String[]{tagName}, length,
offset, file);
+ addError(JSFValidationMessage.UNKNOWN_COMPOSITE_COMPONENT_NAME,
JSFSeverityPreferences.UNKNOWN_COMPOSITE_COMPONENT_NAME, new String[]{tagName}, length,
offset, file, UNKNOWN_COMPOSITE_COMPONENT_NAME_ID);
}
}
@@ -386,4 +393,17 @@
public String getMarkerType() {
return PROBLEM_TYPE;
}
+
+ public IMarker addError(String message, String preferenceKey,
+ String[] messageArguments, int length, int offset, IResource target, int messageId) {
+ IMarker marker = addError(message, preferenceKey, messageArguments, length, offset,
target);
+ try {
+ if(marker!=null) {
+ marker.setAttribute(MESSAGE_ID_ATTRIBUTE_NAME, new Integer(messageId));
+ }
+ } catch(CoreException e) {
+ JSFModelPlugin.getDefault().logError(e);
+ }
+ return marker;
+ }
}
\ No newline at end of file
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ComponentResolutionGenerator.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ComponentResolutionGenerator.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ComponentResolutionGenerator.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -11,13 +11,23 @@
package org.jboss.tools.jsf.web.validation.jsf2.action;
+import java.io.IOException;
+
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IMarkerResolutionGenerator;
+import org.eclipse.ui.IMarkerResolutionGenerator2;
+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.xml.core.internal.provisional.document.IDOMAttr;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.jboss.tools.common.text.ext.util.Utils;
import org.jboss.tools.jsf.JSFModelPlugin;
-import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ValidatorConstants;
+import org.jboss.tools.jsf.web.validation.composite.CompositeComponentValidator;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
/**
*
@@ -26,30 +36,103 @@
*/
public class JSF2ComponentResolutionGenerator implements
- IMarkerResolutionGenerator {
+ IMarkerResolutionGenerator2 {
+
+ public static final String JSF2_URI_PREFIX =
"http://java.sun.com/jsf/composite"; //$NON-NLS-1$
public IMarkerResolution[] getResolutions(IMarker marker) {
try {
- String markerType = marker.getType();
- if (markerType == null
- || !JSF2XMLValidator.JSF2_PROBLEM_ID.equals(markerType)) {
- return new IMarkerResolution[0];
- }
- String fixType = (String) marker
- .getAttribute(JSF2ValidatorConstants.JSF2_TYPE_KEY);
- if (JSF2ValidatorConstants.JSF2_COMPOSITE_COMPONENT_TYPE.equals(fixType)) {
- return new IMarkerResolution[] { new JSF2CompositeComponentProposal(marker) };
+ int messageId = getMessageID(marker);
+ if (messageId == -1)
+ return new IMarkerResolution[] {};
+
+ final IFile file = (IFile) marker.getResource();
+
+ Integer attribute = ((Integer) marker.getAttribute(IMarker.CHAR_START));
+ if (attribute == null)
+ return new IMarkerResolution[] {};
+ final int start = attribute.intValue();
+
+ IModelManager manager = StructuredModelManager.getModelManager();
+ if(manager != null){
+ IStructuredModel model = null;
+ try {
+ model = manager.getModelForRead(file);
+ if (model instanceof IDOMModel) {
+ Node node = Utils.findNodeForOffset(((IDOMModel) model).getDocument(), start);
+
+ String tagName = node.getLocalName();
+ String attrName = "";
+ if(node instanceof IDOMAttr){
+ attrName = node.getLocalName();
+ node = ((IDOMAttr)node).getOwnerElement();
+ tagName = node.getLocalName();
+ }
+
+ if (messageId == CompositeComponentValidator.UNKNOWN_COMPOSITE_COMPONENT_NAME_ID)
{
+ return new IMarkerResolution[] { new
JSF2CompositeComponentProposal(marker.getResource(), getComponentPath(node), tagName,
getAttributes(node)) };
+ }else if(messageId ==
CompositeComponentValidator.UNKNOWN_COMPOSITE_COMPONENT_ATTRIBUTE_ID){
+
+ return new IMarkerResolution[] { new
JSF2CompositeAttrsProposal(marker.getResource(), getComponentPath(node), tagName,
getAttributes(node), attrName) };
+ }
+ }
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } catch (IOException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } finally {
+ if (model != null) {
+ model.releaseFromRead();
+ }
}
- if (JSF2ValidatorConstants.JSF2_FIXABLE_ATTR_TYPE.equals(fixType)) {
- return new IMarkerResolution[] { new JSF2CompositeAttrsProposal(marker) };
- }
- if (JSF2ValidatorConstants.JSF2_URI_TYPE.equals(fixType)) {
- return new IMarkerResolution[] { new JSF2ResourcesFolderProposal(marker) };
- }
+ }
} catch (CoreException e) {
JSFModelPlugin.getPluginLog().logError(e);
}
return new IMarkerResolution[0];
}
+
+ private String getComponentPath(Node node){
+ String path;
+ String uriString = node.getNamespaceURI();
+ String relativeLocation = uriString.replaceFirst(
+ JSF2_URI_PREFIX, ""); //$NON-NLS-1$
+ String nodeName = node.getLocalName();
+ path = relativeLocation + "/" + nodeName + ".xhtml"; //$NON-NLS-1$
//$NON-NLS-2$
+ return path;
+ }
+
+ private String[] getAttributes(Node node){
+ NamedNodeMap nm = node.getAttributes();
+ String[] attributes = new String[nm.getLength()];
+ for(int i = 0; i < nm.getLength(); i++){
+ attributes[i] = nm.item(i).getLocalName();
+ }
+ return attributes;
+ }
+
+ /**
+ * return message id or -1 if impossible to find
+ * @param marker
+ * @return
+ */
+ private int getMessageID(IMarker marker)throws CoreException{
+ Integer attribute = ((Integer)
marker.getAttribute(CompositeComponentValidator.MESSAGE_ID_ATTRIBUTE_NAME));
+ if (attribute != null)
+ return attribute.intValue();
+ return -1;
+ }
+
+
+ public boolean hasResolutions(IMarker marker) {
+ try {
+ return getMessageID(marker) >= 0;
+ } catch (CoreException ex) {
+ JSFModelPlugin.getDefault().logError(ex);
+ }
+ return false;
+ }
+
+
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -17,8 +17,11 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
+import org.eclipse.ui.IMarkerResolution;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.jboss.tools.jsf.JSFModelPlugin;
@@ -33,57 +36,40 @@
*
*/
-public class JSF2CompositeAttrsProposal extends JSF2AbstractProposal {
-
+public class JSF2CompositeAttrsProposal implements IMarkerResolution {
+ private IResource resource;
private String componentPath = null;
private String[] attrs = null;
private String elementName = null;
private String attrName="";
- public JSF2CompositeAttrsProposal(IMarker marker) {
- super(marker.getResource());
- try {
- this.elementName=(String) marker.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME);
- this.componentPath=(String)
marker.getAttribute(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
- this.attrName=(String)marker.getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY);
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- }
- }
- public JSF2CompositeAttrsProposal(IResource validateResource,
- String compPath, String[] attrs,String attrName,String elementName) {
- super(validateResource);
+ public JSF2CompositeAttrsProposal(IResource resource, String compPath, String
elementName, String[] attrs, String attrName) {
+ this.resource = resource;
this.componentPath = compPath;
this.attrs = attrs;
this.attrName = attrName;
this.elementName=elementName;
}
- public String getDisplayString() {
- return
MessageFormat.format(JSFUIMessages.Create_JSF_2_Interface_Attr,attrName,elementName,JSF2ResourceUtil.calculateProjectRelativeJSF2ResourceProposal(validateResource.getProject())+componentPath);
+ @Override
+ public String getLabel() {
+ return MessageFormat.format(JSFUIMessages.Create_JSF_2_Interface_Attr, attrName,
elementName, componentPath);
}
@Override
- protected void runWithMarker(IMarker marker) throws CoreException {
- if (marker != null) {
- validateResource = marker.getResource();
- Map<?, ?> attrsMap = marker.getAttributes();
- Object object = attrsMap
- .get(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
- componentPath = (String) object;
- attrs = new String[] { (String) marker
- .getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY) };
+ public void run(IMarker marker) {
+ try{
+ final IFile createdFile = JSF2ResourceUtil
+ .createCompositeComponentFile(resource.getProject(),
+ new Path(componentPath), attrs);
+ if (createdFile != null) {
+ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getActivePage(), createdFile);
+ }
+ }catch(Exception ex){
+ JSFModelPlugin.getPluginLog().logError(ex);
}
- final IFile createdFile = JSF2ResourceUtil
- .createCompositeComponentFile(validateResource.getProject(),
- new Path(componentPath), attrs);
- validateResource.getProject().deleteMarkers(
- JSF2XMLValidator.JSF2_PROBLEM_ID, false, 1);
- if (createdFile != null) {
- IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage(), createdFile);
- }
}
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -12,23 +12,20 @@
package org.jboss.tools.jsf.web.validation.jsf2.action;
import java.text.MessageFormat;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
+import org.eclipse.ui.IMarkerResolution;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.jboss.tools.jsf.JSFModelPlugin;
import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
-import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ValidatorConstants;
/**
*
@@ -36,75 +33,38 @@
*
*/
-public class JSF2CompositeComponentProposal extends JSF2AbstractProposal {
-
+public class JSF2CompositeComponentProposal implements IMarkerResolution {
+ private IResource resource;
private String componentPath = null;
private String[] attrs = null;
private String elementName;
- public JSF2CompositeComponentProposal(IMarker marker) {
- super(marker.getResource());
- try {
- this.elementName=(String) marker.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME);
- this.componentPath=(String)
marker.getAttribute(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- }
- }
-
- public JSF2CompositeComponentProposal(IResource validateResource,
- String compPath, String[] attrs, String elementName) {
- super(validateResource);
+ public JSF2CompositeComponentProposal(IResource resource, String compPath, String
elementName, String[] attrs) {
+ this.resource = resource;
this.componentPath = compPath;
this.attrs = attrs;
this.elementName=elementName;
}
- @SuppressWarnings("unchecked")
- private String[] getAttributes(IMarker marker) throws CoreException {
- Map attrsMap = marker.getAttributes();
- if (attrsMap != null) {
- Set<String> set = new HashSet<String>(0);
- Set<Entry> entries = attrsMap.entrySet();
- for (Entry entry : entries) {
- String key = (String) entry.getKey();
- if (key.startsWith(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY)) {
- set.add((String) entry.getValue());
- }
- }
- return set.toArray(new String[0]);
- }
- return null;
- }
-
- public String getDisplayString() {
- String projectResourceRelativePath =
JSF2ResourceUtil.calculateProjectRelativeJSF2ResourceProposal(validateResource.getProject())
- +componentPath;
+ @Override
+ public String getLabel() {
return
MessageFormat.format(JSFUIMessages.Create_JSF_2_Composite_Component,elementName,
- projectResourceRelativePath);
+ componentPath);
}
- @SuppressWarnings("unchecked")
@Override
- protected void runWithMarker(IMarker marker) throws CoreException {
- if (marker != null) {
- validateResource = marker.getResource();
- Map attrsMap = marker.getAttributes();
- Object object = attrsMap
- .get(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
- componentPath = (String) object;
- attrs = getAttributes(marker);
+ public void run(IMarker marker) {
+ try{
+ final IFile createdFile = JSF2ResourceUtil
+ .createCompositeComponentFile(resource.getProject(),
+ new Path(componentPath), attrs);
+ if (createdFile != null) {
+ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getActivePage(), createdFile);
+ }
+ }catch(CoreException ex){
+ JSFModelPlugin.getPluginLog().logError(ex);
}
- final IFile createdFile = JSF2ResourceUtil
- .createCompositeComponentFile(validateResource.getProject(),
- new Path(componentPath), attrs);
- validateResource.getProject().deleteMarkers(
- JSF2XMLValidator.JSF2_PROBLEM_ID, false, 1);
- if (createdFile != null) {
- IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage(), createdFile);
- }
-
}
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -42,37 +42,37 @@
public ICompletionProposal[] computeQuickAssistProposals(
IQuickAssistInvocationContext invocationContext) {
- if (invocationContext instanceof StructuredTextInvocationContext) {
- StructuredTextInvocationContext context = (StructuredTextInvocationContext)
invocationContext;
- String type = (String) context
- .getAttribute(JSF2ValidatorConstants.JSF2_TYPE_KEY);
- IResource resource = ResourcesPlugin.getWorkspace().getRoot()
- .findMember(
- (String) context
- .getAttribute("validateResourcePath")); //$NON-NLS-1$
- String compPath = (String) context
- .getAttribute(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
-
- if (type.equals(JSF2ValidatorConstants.JSF2_FIXABLE_ATTR_TYPE)) {
- String[] attrs = new String[] { (String) context
- .getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY) };
- ICompletionProposal proposal = new JSF2CompositeAttrsProposal(
- resource, compPath,
attrs,(String)context.getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY),
- (String)context.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME));
- return new ICompletionProposal[] { proposal };
- } else if (type
- .equals(JSF2ValidatorConstants.JSF2_COMPOSITE_COMPONENT_TYPE)) {
- ICompletionProposal proposal = new JSF2CompositeComponentProposal(
- resource, compPath,
retriveAttrsFromContext(context),(String)context.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME));
- return new ICompletionProposal[] { proposal };
- } else if (type.equals(JSF2ValidatorConstants.JSF2_URI_TYPE)) {
- String uriPath = (String) context
- .getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY);
- ICompletionProposal proposal = new JSF2ResourcesFolderProposal(
- resource,
uriPath,(String)context.getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY));
- return new ICompletionProposal[] { proposal };
- }
- }
+// if (invocationContext instanceof StructuredTextInvocationContext) {
+// StructuredTextInvocationContext context = (StructuredTextInvocationContext)
invocationContext;
+// String type = (String) context
+// .getAttribute(JSF2ValidatorConstants.JSF2_TYPE_KEY);
+// IResource resource = ResourcesPlugin.getWorkspace().getRoot()
+// .findMember(
+// (String) context
+// .getAttribute("validateResourcePath")); //$NON-NLS-1$
+// String compPath = (String) context
+// .getAttribute(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
+//
+// if (type.equals(JSF2ValidatorConstants.JSF2_FIXABLE_ATTR_TYPE)) {
+// String[] attrs = new String[] { (String) context
+// .getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY) };
+// ICompletionProposal proposal = new JSF2CompositeAttrsProposal(
+// resource, compPath,
attrs,(String)context.getAttribute(JSF2ValidatorConstants.JSF2_ATTR_NAME_KEY),
+// (String)context.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME));
+// return new ICompletionProposal[] { proposal };
+// } else if (type
+// .equals(JSF2ValidatorConstants.JSF2_COMPOSITE_COMPONENT_TYPE)) {
+// ICompletionProposal proposal = new JSF2CompositeComponentProposal(
+// resource, compPath,
retriveAttrsFromContext(context),(String)context.getAttribute(JSF2ResourceUtil.JSF2_COMPONENT_NAME));
+// return new ICompletionProposal[] { proposal };
+// } else if (type.equals(JSF2ValidatorConstants.JSF2_URI_TYPE)) {
+// String uriPath = (String) context
+// .getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY);
+// ICompletionProposal proposal = new JSF2ResourcesFolderProposal(
+// resource,
uriPath,(String)context.getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY));
+// return new ICompletionProposal[] { proposal };
+// }
+// }
return null;
}
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -15,12 +15,13 @@
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.ui.IMarkerResolution;
import org.jboss.tools.jsf.JSFModelPlugin;
import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
-import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ValidatorConstants;
/**
*
@@ -28,47 +29,34 @@
*
*/
-public class JSF2ResourcesFolderProposal extends JSF2AbstractProposal {
-
+public class JSF2ResourcesFolderProposal implements IMarkerResolution {
+ private IResource resource;
private String componentPath = null;
private String URL=null;
- public JSF2ResourcesFolderProposal(IMarker marker) {
- super(marker.getResource());
- try {
- this.componentPath=(String)
marker.getAttribute(JSF2ResourceUtil.COMPONENT_RESOURCE_PATH_KEY);
- this.URL = (String) marker.getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY);
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- }
- }
-
- public JSF2ResourcesFolderProposal(IResource validateResource, String compPath,String
URL) {
- super(validateResource);
+ public JSF2ResourcesFolderProposal(IResource validateResource, String compPath, String
URL) {
+ this.resource = validateResource;
this.componentPath = compPath;
this.URL = URL;
}
- public String getDisplayString() {
+ @Override
+ public String getLabel() {
String folderName="";
if(componentPath!=null){
folderName=componentPath.replaceFirst(JSF2ResourceUtil.JSF2_URI_PREFIX,
"").trim();
}
return MessageFormat.format(JSFUIMessages.Create_JSF_2_Resources_Folder,
- JSF2ResourceUtil.calculateProjectRelativeJSF2ResourceProposal(validateResource.getProject())+folderName,URL);
+ JSF2ResourceUtil.calculateProjectRelativeJSF2ResourceProposal(resource.getProject())+folderName,URL);
}
@Override
- protected void runWithMarker(IMarker marker) throws CoreException {
- if (marker != null) {
- componentPath = (String) marker
- .getAttribute(JSF2ValidatorConstants.JSF2_URI_NAME_KEY);
- validateResource = marker.getResource();
+ public void run(IMarker marker) {
+ try{
+ JSF2ResourceUtil.createResourcesFolderByNameSpace(resource.getProject(),
componentPath);
+ }catch(CoreException ex){
+ JSFModelPlugin.getPluginLog().logError(ex);
}
- JSF2ResourceUtil.createResourcesFolderByNameSpace(validateResource
- .getProject(), componentPath);
- validateResource.getProject().deleteMarkers(
- JSF2XMLValidator.JSF2_PROBLEM_ID, false, 1);
}
}
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JSF2ValidatorTest.java
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JSF2ValidatorTest.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JSF2ValidatorTest.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -6,6 +6,8 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.FileEditorInput;
@@ -21,38 +23,52 @@
*
*/
public class JSF2ValidatorTest extends VpeTest{
-
+
private static final String
MARKER_TYPE="org.jboss.tools.jsf.jsf2problemmarker"; //$NON-NLS-1$
public JSF2ValidatorTest(String name) {
super(name);
}
public void testCAforIncludeTaglibInInenerNodes() throws Throwable {
- // TODO Fix this test. See JBIDE-9088
-// IFile file = (IFile)
TestUtil.getComponentPath("JBIDE/6922/jbide6922.xhtml", //$NON-NLS-1$
-// JsfAllTests.IMPORT_JSF_20_PROJECT_NAME);
-// IEditorInput input = new FileEditorInput(file);
-// JSPMultiPageEditor multiPageEditor = openEditor(input);
-// IMarker[] problemMarkers = file.findMarkers(MARKER_TYPE, true,
IResource.DEPTH_INFINITE);
-// assertEquals("There shouldn't be any problems on page",
0,problemMarkers.length); //$NON-NLS-1$
-// StyledText styledText = multiPageEditor.getSourceEditor().getTextViewer()
-// .getTextWidget();
-// int caretOffcet =
TestUtil.getLinePositionOffcet(multiPageEditor.getSourceEditor().getTextViewer(), 4, 5);
-// styledText.setCaretOffset(caretOffcet);
-//
styledText.insert("xmlns:test=\"http://java.sun.com/jsf/composi...;
//$NON-NLS-1$
-// TestUtil.delay(1200);
-// TestUtil.waitForJobs();
-// problemMarkers = file.findMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
-// assertEquals("res folder marker is expected", 1, problemMarkers.length);
//$NON-NLS-1$
-// String message = (String) problemMarkers[0].getAttribute(IMarker.MESSAGE);
-// assertEquals("Error messages should be","JSF 2 Resources folder
\"/resources/test\" is missing in a project web directory",message);
//$NON-NLS-1$ //$NON-NLS-2$
-// caretOffcet =
TestUtil.getLinePositionOffcet(multiPageEditor.getSourceEditor().getTextViewer(), 6, 1);
-// styledText.setCaretOffset(caretOffcet);
-// styledText.insert("<test:testElement />"); //$NON-NLS-1$
-// TestUtil.delay(1200);
-// TestUtil.waitForJobs();
-// problemMarkers = file.findMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
-// assertEquals("Number of markers should be",2, problemMarkers.length);
//$NON-NLS-1$
+ IFile file = (IFile)
TestUtil.getComponentPath("JBIDE/6922/jbide6922.xhtml", //$NON-NLS-1$
+ JsfAllTests.IMPORT_JSF_20_PROJECT_NAME);
+
+ file.getProject().build(IncrementalProjectBuilder.FULL_BUILD, new
NullProgressMonitor());
+ TestUtil.delay(3000);
+ TestUtil.waitForJobs();
+
+ IEditorInput input = new FileEditorInput(file);
+ JSPMultiPageEditor multiPageEditor = openEditor(input);
+ IMarker[] problemMarkers = file.findMarkers(MARKER_TYPE, true,
IResource.DEPTH_INFINITE);
+ assertEquals("There shouldn't be any problems on page", 0,
problemMarkers.length); //$NON-NLS-1$
+
+ StyledText styledText =
multiPageEditor.getSourceEditor().getTextViewer().getTextWidget();
+ int caretOffset =
TestUtil.getLinePositionOffcet(multiPageEditor.getSourceEditor().getTextViewer(), 4, 5);
+ styledText.setCaretOffset(caretOffset);
+
styledText.insert("xmlns:test=\"http://java.sun.com/jsf/composi...;
//$NON-NLS-1$
+
+ multiPageEditor.doSave(new NullProgressMonitor());
+ file.getProject().build(IncrementalProjectBuilder.FULL_BUILD, new
NullProgressMonitor());
+ TestUtil.delay(3000);
+ TestUtil.waitForJobs();
+
+ problemMarkers = file.findMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
+
+ assertEquals("res folder marker is expected", 1, problemMarkers.length);
//$NON-NLS-1$
+ String message = (String) problemMarkers[0].getAttribute(IMarker.MESSAGE);
+ assertEquals("Error message","JSF 2 Resources folder
\"/resources/test\" is missing in a project web directory",message);
//$NON-NLS-1$ //$NON-NLS-2$
+
+ caretOffset =
TestUtil.getLinePositionOffcet(multiPageEditor.getSourceEditor().getTextViewer(), 6, 1);
+ styledText.setCaretOffset(caretOffset);
+ styledText.insert("<test:testElement />"); //$NON-NLS-1$
+
+ multiPageEditor.doSave(new NullProgressMonitor());
+ file.getProject().build(IncrementalProjectBuilder.FULL_BUILD, new
NullProgressMonitor());
+ TestUtil.delay(3000);
+ TestUtil.waitForJobs();
+
+ problemMarkers = file.findMarkers(MARKER_TYPE, true, IResource.DEPTH_INFINITE);
+ assertEquals("Number of markers",2, problemMarkers.length); //$NON-NLS-1$
}
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/JSF2ResourcesScanner.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -9,8 +9,11 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.jboss.tools.common.model.XModel;
+import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.XModelObjectConstants;
+import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
+import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.common.model.project.ext.IValueInfo;
import org.jboss.tools.common.model.project.ext.impl.ValueInfo;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
@@ -100,6 +103,13 @@
IResource r = (IResource)c.getAdapter(IResource.class);
if(r instanceof IFile) {
component.setSourcePath(r.getFullPath());
+ //
+ try {
+ ((FolderImpl)c.getParent()).updateChildFile(c, r.getLocation().toFile());
+ } catch (XModelException e) {
+ ModelPlugin.getPluginLog().logError(e);
+ }
+ //
}
component.setName(createValueInfo(c.getAttributeValue(XModelObjectConstants.ATTR_NAME)));
library.addComponent(component);
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 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.ui/src/org/jboss/tools/jst/web/ui/action/JSPProblemMarkerResolutionGenerator.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -42,6 +42,8 @@
private static final String
HTML_VALIDATOR_MARKER="org.eclipse.wst.html.core.validationMarker";
//$NON-NLS-1$
private static final String
JSP_VALIDATOR_MARKER="org.eclipse.jst.jsp.core.validationMarker"; //$NON-NLS-1$
+ private static final String UNKNOWN_TAG = "Unknown tag"; //$NON-NLS-1$
+
public static HashMap<String, String> libs = new HashMap<String, String>();
static{
libs.put("s", "http://jboss.com/products/seam/taglib");
//$NON-NLS-1$//$NON-NLS-2$
@@ -84,7 +86,7 @@
return false;
final int end = attribute.intValue();
- if(!message.startsWith("Unknown tag")) //$NON-NLS-1$
+ if(!message.startsWith(UNKNOWN_TAG)) //$NON-NLS-1$
return false;
String prefix = getPrifix(message);
@@ -163,8 +165,8 @@
public boolean hasResolutions(IMarker marker) {
try{
- if(isOurCase(marker))
- return true;
+ String message = (String)marker.getAttribute(IMarker.MESSAGE);
+ return message.startsWith(UNKNOWN_TAG);
}catch(CoreException ex){
WebUiPlugin.getPluginLog().logError(ex);
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/marker/SeamProblemMarkerResolutionGenerator.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/marker/SeamProblemMarkerResolutionGenerator.java 2011-06-20
15:53:34 UTC (rev 32217)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/marker/SeamProblemMarkerResolutionGenerator.java 2011-06-20
16:00:55 UTC (rev 32218)
@@ -48,19 +48,30 @@
}
return new IMarkerResolution[] {};
}
+
+ /**
+ * return message id or -1 if impossible to find
+ * @param marker
+ * @return
+ */
+ private int getMessageID(IMarker marker)throws CoreException{
+ Integer attribute = ((Integer)
marker.getAttribute(SeamCoreValidator.MESSAGE_ID_ATTRIBUTE_NAME));
+ if (attribute != null)
+ return attribute.intValue();
+ return -1;
+ }
+
private IMarkerResolution[] findResolutions(IMarker marker)
throws CoreException {
- Integer attribute = ((Integer) marker
- .getAttribute(SeamCoreValidator.MESSAGE_ID_ATTRIBUTE_NAME));
- if (attribute == null)
+
+ int messageId = getMessageID(marker);
+ if (messageId == -1)
return new IMarkerResolution[] {};
- int messageId = attribute.intValue();
-
IFile file = (IFile) marker.getResource();
- attribute = ((Integer) marker.getAttribute(IMarker.CHAR_START));
+ Integer attribute = ((Integer) marker.getAttribute(IMarker.CHAR_START));
if (attribute == null)
return new IMarkerResolution[] {};
int start = attribute.intValue();
@@ -240,8 +251,7 @@
public boolean hasResolutions(IMarker marker) {
try {
- if (findResolutions(marker).length != 0)
- return true;
+ return getMessageID(marker) >= 0;
} catch (CoreException ex) {
SeamGuiPlugin.getPluginLog().logError(ex);
}