Author: scabanovich
Date: 2009-08-06 09:47:49 -0400 (Thu, 06 Aug 2009)
New Revision: 16983
Added:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/IDProposalType.java
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/META-INF/MANIFEST.MF
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbQuery.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/CustomProposalTypeFactory.java
trunk/jst/plugins/org.jboss.tools.jst.web.kb/taglibs/Ajax4jsf.xml
Log:
https://jira.jboss.org/jira/browse/JBIDE-3571
Modified: trunk/jst/plugins/org.jboss.tools.jst.web.kb/META-INF/MANIFEST.MF
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.kb/META-INF/MANIFEST.MF 2009-08-06 13:46:38
UTC (rev 16982)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.kb/META-INF/MANIFEST.MF 2009-08-06 13:47:49
UTC (rev 16983)
@@ -10,7 +10,8 @@
org.eclipse.core.runtime,
org.jboss.tools.jst.web,
org.jboss.tools.common.el.core,
- org.eclipse.jface.text
+ org.eclipse.jface.text,
+ org.eclipse.wst.sse.core
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Vendor: %providerName
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbQuery.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbQuery.java 2009-08-06
13:46:38 UTC (rev 16982)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbQuery.java 2009-08-06
13:47:49 UTC (rev 16983)
@@ -28,6 +28,9 @@
private Type type;
private String parent;
+ //includes text after offset
+ private String text;
+
/**
* Type of object for which we want to get info
* @author Alexey Kazakov
@@ -173,4 +176,12 @@
public void setPrefix(String prefix) {
this.prefix = prefix;
}
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public String getText() {
+ return text;
+ }
}
\ No newline at end of file
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/CustomProposalTypeFactory.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/CustomProposalTypeFactory.java 2009-08-06
13:46:38 UTC (rev 16982)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/CustomProposalTypeFactory.java 2009-08-06
13:47:49 UTC (rev 16983)
@@ -25,6 +25,7 @@
public static final String ENUMERATION_TYPE = "enumeration"; //$NON-NLS-1$
public static final String FACELETS_JSFC_TYPE = "faceletsJsfCTags";
//$NON-NLS-1$
public static final String NAME_SPACE_TYPE = "taglib"; //$NON-NLS-1$
+ public static final String ID_TYPE = "id"; //$NON-NLS-1$
private CustomProposalTypeFactory() {
}
@@ -60,6 +61,9 @@
if(NAME_SPACE_TYPE.equals(type)) {
return new NameSpaceProposalType();
}
+ if(ID_TYPE.equals(type)) {
+ return new IDProposalType();
+ }
//WebKbPlugin.getDefault().logError("Unknown proposal type: " + type);
//$NON-NLS-1$
//ExtendedProposalType will report if necessary
Added:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/IDProposalType.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/IDProposalType.java
(rev 0)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/IDProposalType.java 2009-08-06
13:47:49 UTC (rev 16983)
@@ -0,0 +1,95 @@
+package org.jboss.tools.jst.web.kb.internal.taglib;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.jboss.tools.common.text.TextProposal;
+import org.jboss.tools.jst.web.kb.IPageContext;
+import org.jboss.tools.jst.web.kb.KbQuery;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class IDProposalType extends CustomProposalType {
+ Set<String> idList = new TreeSet<String>();
+
+ @Override
+ protected void init(IPageContext context) {
+ idList.clear();
+ IDocument document = context.getDocument();
+ IStructuredModel sModel =
StructuredModelManager.getModelManager().getExistingModelForRead(document);
+ try {
+ if (sModel != null) {
+ Document sd = (sModel instanceof IDOMModel) ? ((IDOMModel) sModel).getDocument() :
null;
+ if(sd != null) {
+ Element root = sd.getDocumentElement();
+ collectIDs(root);
+ }
+ }
+ }
+ finally {
+ if (sModel != null) {
+ sModel.releaseFromRead();
+ }
+ }
+
+
+ }
+
+ private void collectIDs(Element element) {
+ String id = element.getAttribute("id");
+ if(id != null && id.length() > 0) idList.add(id);
+ NodeList cs = element.getChildNodes();
+ for (int i = 0; i < cs.getLength(); i++) {
+ Node n = cs.item(i);
+ if(n.getNodeType() == Node.ELEMENT_NODE) {
+ collectIDs((Element)n);
+ }
+ }
+ }
+
+ @Override
+ public TextProposal[] getProposals(KbQuery query) {
+ String v = query.getValue();
+ String txt = query.getText();
+ if(txt.startsWith("\"")) txt = txt.substring(1);
+ if(txt.endsWith("\"")) txt = txt.substring(0, txt.length() - 1);
+ int offset = v.length();
+ int b = v.lastIndexOf(',');
+ if(b < 0) b = 0; else b += 1;
+ String tail = txt.substring(offset);
+ int e = tail.indexOf(',');
+ if(e < 0) e = txt.length(); else e += offset;
+ String prefix = v.substring(b);
+
+ List<TextProposal> proposals = new ArrayList<TextProposal>();
+ for (String text: idList) {
+ if(text.startsWith(prefix)) {
+ TextProposal proposal = new TextProposal();
+ proposal.setLabel(text);
+ proposal.setReplacementString(text);
+ proposal.setPosition(b + text.length());
+
+ proposal.setStart(b);
+ proposal.setEnd(e);
+
+ proposals.add(proposal);
+ }
+ }
+
+ return proposals.toArray(new TextProposal[0]);
+ }
+
+}
Property changes on:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/taglib/IDProposalType.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/jst/plugins/org.jboss.tools.jst.web.kb/taglibs/Ajax4jsf.xml
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.kb/taglibs/Ajax4jsf.xml 2009-08-06 13:46:38
UTC (rev 16982)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.kb/taglibs/Ajax4jsf.xml 2009-08-06 13:47:49
UTC (rev 16983)
@@ -88,7 +88,7 @@
<proposal type="jsfVariables"/>
</attribute>
</component>
- <component closeTag="true" name="commandButton">
+ <component closeTag="true" name="commandButton"
extended="false">
<description>Renders an HTML "input" element.
&lt;br /&gt;
During Decoding: Obtains the Map from the
@@ -216,6 +216,7 @@
<proposal type="beanProperty"/>
<proposal type="bundleProperty"/>
<proposal type="jsfVariables"/>
+ <proposal type="id"/>
</attribute>
<attribute name="id" required="false">
<description>Every component may have a unique id that is automatically created
if omitted</description>