Author: mareshkau
Date: 2009-08-03 10:04:33 -0400 (Mon, 03 Aug 2009)
New Revision: 16950
Added:
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/resources/customFaceletsTestProject/WebContent/pages/testOutputText.xhtml
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractEditableJsfTemplate.java
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE4373Test.java
trunk/vpe/plugins/org.jboss.tools.vpe.html/src/org/jboss/tools/vpe/html/template/HtmlTextTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeSourceDomBuilder.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/TextUtil.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-3197
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractEditableJsfTemplate.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractEditableJsfTemplate.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/AbstractEditableJsfTemplate.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -13,13 +13,23 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.wst.xml.core.internal.document.AttrImpl;
import org.jboss.tools.jsf.vpe.jsf.template.util.JSF;
+import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.util.HTML;
+import org.jboss.tools.vpe.editor.util.TextUtil;
import org.mozilla.interfaces.nsIDOMElement;
+import org.mozilla.interfaces.nsIDOMNode;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
/**
* general class for jsf templates.
@@ -27,7 +37,7 @@
* @author Sergey Dzmitrovich
*/
public abstract class AbstractEditableJsfTemplate extends VpeAbstractTemplate {
-
+
/**
* Gets the output attribute node.
*
@@ -88,4 +98,16 @@
.getAttribute(sourceAttributeName));
}
+ @Override
+ public IRegion getSourceRegionForOpenOn(VpePageContext pageContext, Node sourceNode
,nsIDOMNode domNode) {
+
+ final Attr attr= getOutputAttributeNode((Element) sourceNode);
+ int offset = TextUtil.getStartELDocumentPosition(attr);
+ if(offset!=-1){
+ return new Region(offset, 0);
+ } else {
+ return super.getSourceRegionForOpenOn(pageContext, sourceNode, domNode);
+ }
+
+ }
}
Added:
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/resources/customFaceletsTestProject/WebContent/pages/testOutputText.xhtml
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/resources/customFaceletsTestProject/WebContent/pages/testOutputText.xhtml
(rev 0)
+++
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/resources/customFaceletsTestProject/WebContent/pages/testOutputText.xhtml 2009-08-03
14:04:33 UTC (rev 16950)
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
+
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ma="http://mareshkau/tags">
+
+<head>
+<f:loadBundle basename="resources" var="msg" />
+</head>
+<body>#{msg.prompt}
+<h:outputText value="#{msg.greeting}" />
+</body>
+</html>
\ No newline at end of file
Modified:
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE4373Test.java
===================================================================
---
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE4373Test.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/jsf/tests/org.jboss.tools.jsf.vpe.jsf.test/src/org/jboss/tools/jsf/vpe/jsf/test/jbide/JBIDE4373Test.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -78,6 +78,33 @@
}
/**
+ * test open on for following case <h:outputText value="#{msg.greeting}"
/>
+ * @throws CoreException
+ */
+ public void testOpenOnForMessageBundlesInJSFElements() throws CoreException{
+ VpeController vpeController = openInVpe(JsfAllTests.IMPORT_CUSTOM_FACELETS_PROJECT,
"testOutputText.xhtml"); //$NON-NLS-1$
+ int position =
TestUtil.getLinePositionOffcet(vpeController.getSourceEditor().getTextViewer(), 13,
30);
+ Node sourceNode =
SelectionUtil.getNodeBySourcePosition(vpeController.getSourceEditor(), position);
+ nsIDOMNode domNode = vpeController.getDomMapping().getNearVisualNode(sourceNode);
+ vpeController.getSourceBuilder().openOn(domNode);
+ IEditorPart activeEditor =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+ assertEquals("file should be opened","resources.properties",
activeEditor.getEditorInput().getName()); //$NON-NLS-1$//$NON-NLS-2$
+ }
+ /**
+ * test open on for following case #{msg.prompt}
+ * @throws CoreException
+ */
+ public void testOpenOnForTextNodesMessageBundles() throws CoreException{
+ VpeController vpeController = openInVpe(JsfAllTests.IMPORT_CUSTOM_FACELETS_PROJECT,
"testOutputText.xhtml"); //$NON-NLS-1$
+ int position =
TestUtil.getLinePositionOffcet(vpeController.getSourceEditor().getTextViewer(), 12,
15);
+ Node sourceNode =
SelectionUtil.getNodeBySourcePosition(vpeController.getSourceEditor(), position);
+ nsIDOMNode domNode = vpeController.getDomMapping().getNearVisualNode(sourceNode);
+ vpeController.getSourceBuilder().openOn(domNode);
+ IEditorPart activeEditor =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+ assertEquals("file should be opened","resources.properties",
activeEditor.getEditorInput().getName()); //$NON-NLS-1$//$NON-NLS-2$
+
+ }
+ /**
* Test openOn mechanism for VpeDefineContainerTemplate
* in facelets' ui:composition template (VpeCompositionTemplate).
*
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -1162,13 +1162,8 @@
}
try {
nsIDOMNode visualNode = VisualDomUtil.getTargetNode(mouseEvent);
-
if (visualNode != null) {
-
- if (!sourceBuilder.openBundleEditors(visualNode)) {
sourceBuilder.openOn(visualNode);
-// sourceBuilder.openIncludeEditor(visualNode);
- }
if (VpeDebug.PRINT_VISUAL_MOUSE_EVENT) {
System.out.println("<<< mouseDblClick visualNode: " +
visualNode.getNodeName() + //$NON-NLS-1$
" (" + visualNode + ")"); //$NON-NLS-1$ //$NON-NLS-2$
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeSourceDomBuilder.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeSourceDomBuilder.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeSourceDomBuilder.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -284,40 +284,7 @@
}
}
- boolean openBundleEditors(nsIDOMNode visualNode) {
-
- VpeNodeMapping nodeMapping = NodesManagingUtil.getNodeMapping(
- domMapping, visualNode);
- if (nodeMapping != null
- && nodeMapping instanceof VpeElementMapping) {
-
- VpeElementMapping elementMapping = (VpeElementMapping) nodeMapping;
-
- VpeTemplate template = elementMapping.getTemplate();
-
- // as all templates implement new method
- template.openBundle(pageContext, visualNode, elementMapping);
- // if (!template.openBundle(pageContext, visualNode,
- // elementMapping))
- // template.openBundleEditors(pageContext,
- // (Element) elementMapping.getSourceNode(),
- // elementMapping.getData());
- }
- return false;
- }
-// boolean openIncludeEditor(nsIDOMNode visualNode) {
-// Node sourceNode = domMapping.getNearSourceNode(visualNode);
-// if (sourceNode != null && sourceNode.getNodeType() == Node.ELEMENT_NODE) {
-// VpeElementMapping elementMapping =
(VpeElementMapping)domMapping.getNodeMapping(sourceNode);
-// if (elementMapping != null) {
-// VpeTemplate template = elementMapping.getTemplate();
-// template.openIncludeEditor(pageContext, (Element)sourceNode,
elementMapping.getData());
-// }
-// }
-// return false;
-// }
-
boolean isEmptyDocument() {
if (sourceDocument == null) return true;
boolean empty = false;
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeAbstractTemplate.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -16,6 +16,7 @@
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
@@ -1214,18 +1215,8 @@
Element sourceElement, Object data) {
}
- /**
- * Opens proprties editor for bundle value Is invoked at double mouse click
- * on visual element.
- *
- * @param sourceElement The current element of the source tree.
- * @param data The arbitrary data, built by a method <code>create</code>
- * @param pageContext Contains the information on edited page.
- */
- public void openBundleEditors(VpePageContext pageContext,
- Element sourceElement, Object data) {
- }
+
// /**
// * Opens editor of source file for include-element.
// *
@@ -1466,6 +1457,7 @@
* @author mareshkau
*/
public IRegion getSourceRegionForOpenOn(VpePageContext pageContext, Node sourceNode
,nsIDOMNode domNode) {
+
int offset = NodesManagingUtil.getStartOffsetNode(sourceNode);
//calculate openOnPosition,prefixLengght+>+":"
offset+=sourceNode.getPrefix().length()+1+1;
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeHtmlTemplate.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -302,33 +302,6 @@
return dependencyFromBundle;
}
- /**
- *
- * Deprecated
- */
- @Override
- public void openBundleEditors(VpePageContext pageContext, Element sourceElement, Object
data) {
- openBundleEditors(pageContext, sourceElement, (Map<VpeTemplate,nsIDOMElement>)
data);
- }
-
- private void openBundleEditors(VpePageContext pageContext, Element sourceElement,
Map<VpeTemplate,nsIDOMElement> visualNodeMap) {
- if (dependencyFromBundle) {
- VpeCreator[] creators =
dependencyMap.getCreators(VpeExpressionBuilder.SIGNATURE_JSF_VALUE);
- for (int i = 0; i < creators.length; i++) {
- if (creators[i] instanceof VpeOutputAttributes) {
- String[] outputAttrs = ((VpeOutputAttributes)creators[i]).getOutputAttributes();
- if (outputAttrs != null) {
- for (int j = 0; j < outputAttrs.length; j++) {
- String value = sourceElement.getAttribute(outputAttrs[j]);
- if (value != null) {
- pageContext.getBundle().openBundle(value, getPageLocale(pageContext,
(IDOMElement)sourceElement));
- }
- }
- }
- }
- }
- }
- }
private static final String VIEW_TAGNAME = "view"; //$NON-NLS-1$
private static final String LOCALE_ATTRNAME = "locale"; //$NON-NLS-1$
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplate.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -346,21 +346,6 @@
void refreshBundleValues(VpePageContext pageContext, Element sourceElement,
Object data);
- /**
- * @deprecated
- * Opens proprties editor for bundle value Is invoked at double mouse click
- * on visual element
- *
- * @param pageContext
- * Contains the information on edited page.
- * @param sourceElement
- * The current element of the source tree.
- * @param data
- * The arbitrary data, built by a method <code>create</code>
- */
- void openBundleEditors(VpePageContext pageContext, Element sourceElement,
- Object data);
-
// /**
// * Opens editor of source file for include-element
// *
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/TextUtil.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/TextUtil.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/TextUtil.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -16,9 +16,12 @@
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.jboss.tools.vpe.VpePlugin;
import org.mozilla.interfaces.nsIDOMKeyEvent;
+import org.w3c.dom.Node;
public class TextUtil {
@@ -37,6 +40,8 @@
private final static char CHR_ESC_STOP = ';';
private final static char CHR_HEX_FLAG = 'x';
private final static String SPCHARS = "\f\n\r\t\u0020\u2028\u2029";
//$NON-NLS-1$
+ private static final Pattern elPattern =
Pattern.compile("(#|\\$)\\{\\s*([^\\s])"); //$NON-NLS-1$
+
private final static Map<Character, String> textSet = new HashMap<Character,
String>();
static {
try {
@@ -428,7 +433,30 @@
return str;
}
+ /**
+ * @author mareshkau
+ * @param node or attribute for which we want calculate position start el position
+ *
+ * @return position if we can find position
+ * -1 if we can't find pisition, <document_offcet>'#{el}', return
start position of el
+ */
+ public static int getStartELDocumentPosition(Node node) {
+ if (node != null && node.getNodeValue() != null
+ && node.getNodeValue().length() > 0) {
+ int elPosition = 0;
+ Matcher beginELExpresion = elPattern.matcher(node.getNodeValue());
+ if (beginELExpresion.find()) {
+ // +1 becouse we should have position of first symbol
+ elPosition = beginELExpresion.start(2) + 1;
+ }
+ int offset = NodesManagingUtil.getStartOffsetNode(node)
+ + elPosition;
+ return offset;
+ }
+ return -1;
+ }
+
/**
* @param value
* @return
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.html/src/org/jboss/tools/vpe/html/template/HtmlTextTemplate.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.html/src/org/jboss/tools/vpe/html/template/HtmlTextTemplate.java 2009-08-03
13:26:50 UTC (rev 16949)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.html/src/org/jboss/tools/vpe/html/template/HtmlTextTemplate.java 2009-08-03
14:04:33 UTC (rev 16950)
@@ -68,7 +68,11 @@
public IRegion getSourceRegionForOpenOn(VpePageContext pageContext, Node sourceNode,
nsIDOMNode domNode) {
Point selection = pageContext.getSourceBuilder().getSelectionRange();
-
+ //processing for el expressions
+ int offset = TextUtil.getStartELDocumentPosition(sourceNode);
+ if(offset!=-1) {
+ return new Region(offset,0);
+ }
return new Region(selection.x,0);
}