Metadata-driven tag converter updates.
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml
index ccf1ba3..11e43e4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml
@@ -6,6 +6,78 @@
id="http://java.sun.com/jsf/html"
type="tagFile">
+ <entity id="column" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info classname="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.ColumnOperation"/>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
+ <entity id="commandButton" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info classname="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.CommandButtonOperation"/>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ widget="true"
+ setNonVisualChildElements="true"
+ />
+ <tag-decorate-info id="vpd-decorate-preview">
+ <resolve-attribute-value attributeName="value"/>
+ </tag-decorate-info>
+ </value>
+ </trait>
+ </entity>
+
+ <entity id="commandLink" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="CreateElementOperation">
+ <parameter value="a"/>
+ </operation>
+ <operation id="CopyAllAttributesOperation"/>
+ <operation id="RenameAttributeOperation">
+ <parameter value="styleClass"/>
+ <parameter value="class"/>
+ </operation>
+ <operation id="CreateAttributeOperation">
+ <parameter value="href"/>
+ <parameter value="#"/>
+ </operation>
+ <operation id="ConvertAttributeToTextOperation">
+ <parameter value="value"/>
+ </operation>
+ <operation id="CopyChildrenOperation"/>
+ </tag-convert-info>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ needBorderDecorator="true"
+ />
+ <tag-decorate-info id="vpd-decorate-preview"
+ resolveChildText="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
+ <entity id="dataTable" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info classname="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.DataTableOperation"/>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ needBorderDecorator="true"
+ needTableDecorator="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
<entity id="form" type="tag">
<trait id="dt-info">
<value xsi:type="dti:DTInfo">
@@ -199,6 +271,35 @@
</trait>
</entity>
+ <entity id="outputFormat" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="CreateElementOperation">
+ <parameter value="span"/>
+ </operation>
+ <operation id="CopyAllAttributesOperation"/>
+ <operation id="RenameAttributeOperation">
+ <parameter value="styleClass"/>
+ <parameter value="class"/>
+ </operation>
+ <operation id="ConvertAttributeToTextOperation">
+ <parameter value="value"/>
+ </operation>
+ </tag-convert-info>
+ <tag-decorate-info id="vpd-decorate-design"
+ needBorderDecorator="true"
+ multiLevel="true"
+ widget="true"
+ setNonVisualChildElements="true"
+ />
+ <tag-decorate-info id="vpd-decorate-preview"
+ resolveChildText="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
<entity id="outputLabel" type="tag">
<trait id="dt-info">
<value xsi:type="dti:DTInfo">
@@ -228,6 +329,36 @@
</trait>
</entity>
+ <entity id="outputLink" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="CreateElementOperation">
+ <parameter value="a"/>
+ </operation>
+ <operation id="CopyAllAttributesOperation"/>
+ <operation id="RenameAttributeOperation">
+ <parameter value="styleClass"/>
+ <parameter value="class"/>
+ </operation>
+ <operation id="CreateAttributeOperation">
+ <parameter value="href"/>
+ <parameter value="#"/>
+ </operation>
+ <operation id="RenameAttributeOperation">
+ <parameter value="value"/>
+ <parameter value="href"/>
+ </operation>
+ <operation id="CopyChildrenOperation"/>
+ </tag-convert-info>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ needBorderDecorator="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
<entity id="outputText" type="tag">
<trait id="dt-info">
<value xsi:type="dti:DTInfo">
@@ -270,4 +401,38 @@
</trait>
</entity>
+ <entity id="panelGroup" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="CreateElementOperation">
+ <parameter value="div"/>
+ </operation>
+ <operation id="CopyAllAttributesOperation"/>
+ <operation id="RenameAttributeOperation">
+ <parameter value="styleClass"/>
+ <parameter value="class"/>
+ </operation>
+ <operation id="CopyChildrenOperation"/>
+ </tag-convert-info>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ needBorderDecorator="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
+ <entity id="selectBooleanCheckbox" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info classname="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.SelectBooleanCheckboxOperation"/>
+ <tag-decorate-info id="vpd-decorate-design"
+ multiLevel="true"
+ widget="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
</md:metadatamodel>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/ColumnOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/ColumnOperation.java
new file mode 100644
index 0000000..daa0fb2
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/ColumnOperation.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.jst.pagedesigner.converter.ConvertPosition;
+import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateAttributeOperation;
+import org.eclipse.jst.pagedesigner.jsf.core.dom.JSFDOMUtil;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * ITransformOperation implementation specifically for the "column" JSF (HTML)
+ * Element.
+ *
+ * <br><b>Note:</b> requires ITransformOperation.setTagConverterContext(...) to
+ * have been called to provide a valid ITagConverterContext instance prior to
+ * a call to the transform(...) method.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class ColumnOperation extends AbstractTransformOperation {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ public Element transform(Element srcElement, Element curElement) {
+
+ //create "td" Element
+ Element tdElement = createElement("td");
+
+ //get parent Node
+ Node parentNode = srcElement.getParentNode();
+
+ //process if parentNode is a "dataTable" Element
+ if (parentNode != null && parentNode.getNodeType() == Node.ELEMENT_NODE && parentNode.getLocalName().equals("dataTable")) {
+ //tokenize "columnClasses" attribute into a List
+ List columnClassesList = new ArrayList();
+ String columnClassesAttribute = ((Element)parentNode).getAttribute("columnClasses");
+ if (columnClassesAttribute != null && columnClassesAttribute.length() > 0) {
+ StringTokenizer tokenizer = new StringTokenizer(columnClassesAttribute, ", ");
+ while (tokenizer.hasMoreTokens()) {
+ columnClassesList.add(tokenizer.nextToken());
+ }
+ }
+ //set "class" attribute
+ int offset = EditModelQuery.getInstance().getSameTypeNodeIndex(srcElement);
+ if (offset < columnClassesList.size()) {
+ new CreateAttributeOperation("class", (String)columnClassesList.get(offset)).transform(srcElement, tdElement);
+ }
+ }
+
+ //add non-transparent (?), non-facet children (for further processing)
+ if (EditModelQuery.getInstance().hasNonTransparentChild(srcElement, new String[] {"facet"})) {
+ Node childNode = srcElement.getFirstChild();
+ int index = 0;
+ while (childNode != null) {
+ if (!(childNode instanceof Element) || !JSFDOMUtil.isFacet((Element)childNode)) {
+ tagConverterContext.addChild(childNode, new ConvertPosition(tdElement, index++));
+ }
+ childNode = childNode.getNextSibling();
+ }
+ } else {
+ //append single space for esthetics of the "td" Element
+ appendChildText(" ", tdElement);
+ }
+
+ return tdElement;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/CommandButtonOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/CommandButtonOperation.java
new file mode 100644
index 0000000..e646b97
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/CommandButtonOperation.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf;
+
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAllAttributesOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateAttributeOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.RenameAttributeOperation;
+import org.w3c.dom.Element;
+
+/**
+ * ITransformOperation implementation specifically for the "commandButton" JSF
+ * (HTML) Element.
+ *
+ * <br><b>Note:</b> requires ITransformOperation.setTagConverterContext(...) to
+ * have been called to provide a valid ITagConverterContext instance prior to
+ * a call to the transform(...) method.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class CommandButtonOperation extends AbstractTransformOperation {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ public Element transform(Element srcElement, Element curElement) {
+ Element inputElement = null;
+ //create input element, copy all attributes, rename "styleClass" attribute to "class"
+ inputElement = createElement("input");
+ new CopyAllAttributesOperation().transform(srcElement, inputElement);
+ new RenameAttributeOperation("styleClass", "class").transform(srcElement, inputElement);
+ //get "image" attribute from srcElement
+ String imageAttr = srcElement.getAttribute("image");
+ String type = "submit"; //("submit" is default)
+ if (imageAttr != null && imageAttr.length() > 0) {
+ //"image" attribute exists
+ type = "image";
+ new RenameAttributeOperation("image", "src").transform(srcElement, inputElement);
+ } else {
+ //"image" attribute not present
+ String typeAttr = srcElement.getAttribute("type");
+ if (typeAttr != null && typeAttr.length() > 0) {
+ type = typeAttr;
+ }
+ }
+ //overwrite copied "type" attribute
+ new CreateAttributeOperation("type", type).transform(srcElement, inputElement);
+ return inputElement;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/DataTableOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/DataTableOperation.java
new file mode 100644
index 0000000..9201022
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/DataTableOperation.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.jst.pagedesigner.converter.ConvertPosition;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAllAttributesOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateAttributeOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.RenameAttributeOperation;
+import org.w3c.dom.Element;
+
+/**
+ * ITransformOperation implementation specifically for the "dataTable" JSF
+ * (HTML) Element.
+ *
+ * <br><b>Note:</b> requires ITransformOperation.setTagConverterContext(...) to
+ * have been called to provide a valid ITagConverterContext instance prior to
+ * a call to the transform(...) method.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class DataTableOperation extends AbstractTransformOperation {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ public Element transform(Element srcElement, Element curElement) {
+ Element tableElement = null;
+ //create table element, copy all attributes, rename "styleClass" attribute to "class"
+ tableElement = createElement("table");
+ new CopyAllAttributesOperation().transform(srcElement, tableElement);
+ new RenameAttributeOperation("styleClass", "class").transform(srcElement, tableElement);
+ //build thead
+ buildHeaderOrFooter(srcElement, tableElement, true);
+ //build tbody
+ buildBody(srcElement, tableElement);
+ //build tfoot
+ buildHeaderOrFooter(srcElement, tableElement, false);
+ return tableElement;
+ }
+
+ private void buildHeaderOrFooter(Element srcElement, Element tableElement, boolean isHeader) {
+ //setup vars depending on whether we are building thead or tfoot
+ String facetName = isHeader ? "header" : "footer";
+ String headerOrFooterTagName = isHeader ? "thead" : "tfoot";
+ String thOrTdTagName = isHeader ? "th" : "td";
+ String headerClassOrFooterClassAttrName = isHeader ? "headerClass" : "footerClass";
+
+ //look for facet ("header" or "footer")
+ Element facetElement = getChildFacetByName(srcElement, facetName);
+
+ //get list of child "column" elements
+ List columnElementList = getChildElements(srcElement, "column");
+
+ //look for facet ("header" or "footer") on child "column" elements
+ boolean hasColumnFacet = false;
+ Iterator itColumnElementList = columnElementList.iterator();
+ while (itColumnElementList.hasNext()) {
+ Element columnElement = (Element)itColumnElementList.next();
+ Element columnFacet = getChildFacetByName(columnElement, facetName);
+ if (columnFacet != null) {
+ hasColumnFacet = true;
+ break;
+ }
+ }
+
+ //test if we even need to build header or footer
+ if (facetElement == null && !hasColumnFacet) {
+ return;
+ }
+
+ //append "thead" or "tfoot" Element
+ Element headerOrFooterElement = appendChildElement(headerOrFooterTagName, tableElement);
+
+ //if facetElement exists, build appropriate thead or tfoot children
+ if (facetElement != null) {
+ //append "tr" Element
+ Element trElement = appendChildElement("tr", headerOrFooterElement);
+ //append "th" or "td" Element
+ Element thOrTdElement = appendChildElement(thOrTdTagName, trElement);
+ //set "class" attribute
+ String headerClassOrFooterClassAttribute = srcElement.getAttribute(headerClassOrFooterClassAttrName);
+ if (headerClassOrFooterClassAttribute != null && headerClassOrFooterClassAttribute.length() > 0) {
+ new CreateAttributeOperation("class", headerClassOrFooterClassAttribute).transform(srcElement, thOrTdElement);
+ }
+ //set "colspan" attribute
+ if (columnElementList.size() > 0) {
+ new CreateAttributeOperation("colspan", String.valueOf(columnElementList.size())).transform(srcElement, thOrTdElement);
+ }
+ //add facet Element as child (to be processed further)
+ tagConverterContext.addChild(facetElement, new ConvertPosition(thOrTdElement, 0));
+ }
+
+ //if any child column has "header" or "footer" facet, build "tr" element
+ if (hasColumnFacet) {
+ //append "tr" Element
+ Element trElement = appendChildElement("tr", headerOrFooterElement);
+ //iterate through columnElementList
+ itColumnElementList = columnElementList.iterator();
+ while (itColumnElementList.hasNext()) {
+ Element columnElement = (Element)itColumnElementList.next();
+ //get "header" or "footer" facet of column
+ Element columnFacet = getChildFacetByName(columnElement, facetName);
+ //append "th" or "td" Element
+ Element thOrTdElement = appendChildElement(thOrTdTagName, trElement);
+ //set "class" attribute
+ String headerClassOrFooterClassAttribute = srcElement.getAttribute(headerClassOrFooterClassAttrName);
+ if (headerClassOrFooterClassAttribute != null && headerClassOrFooterClassAttribute.length() > 0) {
+ new CreateAttributeOperation("class", headerClassOrFooterClassAttribute).transform(srcElement, thOrTdElement);
+ }
+ //if facet exists, add facet Element as child (to be processed further)
+ if (columnFacet != null) {
+ tagConverterContext.addChild(columnFacet, new ConvertPosition(thOrTdElement, 0));
+ }
+ }
+ }
+ }
+
+ private void buildBody(Element srcElement, Element tableElement) {
+ //append "tbody" element
+ Element tbodyElement = appendChildElement("tbody", tableElement);
+ //append "tr" element
+ Element trElement = appendChildElement("tr", tbodyElement);
+ //parse "rowClasses" attribute and set "class" attribute
+ String rowClassesAttribute = srcElement.getAttribute("rowClasses");
+ if (rowClassesAttribute != null && rowClassesAttribute.length() > 0) {
+ StringTokenizer tokenizer = new StringTokenizer(rowClassesAttribute, ", ");
+ if (tokenizer.hasMoreTokens()) {
+ new CreateAttributeOperation("class", tokenizer.nextToken()).transform(srcElement, trElement);
+ }
+ }
+ //add child columns (to be processed further)
+ List columnElementList = getChildElements(srcElement, "column");
+ Iterator itColumnElementList = columnElementList.iterator();
+ int index = 0;
+ while (itColumnElementList.hasNext()) {
+ Element columnElement = (Element)itColumnElementList.next();
+ tagConverterContext.addChild(columnElement, new ConvertPosition(trElement, index++));
+ }
+ }
+
+ /**
+ * Gets a child Element of the specified parent Element that has the node
+ * name "facet" and the specified value of the "name" attribute.
+ *
+ * @param srcElement Parent Element instance.
+ * @param facetName Name of the facet Element for which to search.
+ * @return Child Element that is a facet with the specified name.
+ */
+ private Element getChildFacetByName(Element srcElement, String facetName) {
+ Element element = null;
+ List facets = getChildElements(srcElement, "facet");
+ Iterator itFacets = facets.iterator();
+ while (itFacets.hasNext()) {
+ Element facet = (Element)itFacets.next();
+ if (facet.getAttribute("name").equals(facetName)) {
+ element = facet;
+ break;
+ }
+ }
+ return element;
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
index ded28b7..c9f37cc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
@@ -58,7 +58,7 @@
String basename = srcElement.getAttribute(IJSFConstants.ATTR_BASENAME);
if (var != null && basename != null && var.length() > 0 && basename.length() > 0) {
String basePath =
- basename.replace(".", IFileFolderConstants.PATH_SEPARATOR) +
+ basename.replace('.', IFileFolderConstants.PATH_SEPARATOR.charAt(0)) +
IFileFolderConstants.DOT +
IFileFolderConstants.EXT_PROPERTIES;
if (srcElement instanceof IDOMNode) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/PanelGridOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/PanelGridOperation.java
index 8dc6d1a..170871e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/PanelGridOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/PanelGridOperation.java
@@ -16,12 +16,9 @@
import java.util.StringTokenizer;
import org.eclipse.jst.pagedesigner.converter.ConvertPosition;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.provisional.ITransformOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AppendChildElementOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAllAttributesOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateAttributeOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateElementOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.RenameAttributeOperation;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -129,32 +126,6 @@
}
/**
- * Creates a new Element.
- *
- * @param tagName Name of Element to be created.
- * @return New Element instance.
- */
- protected Element createElement(String tagName) {
- ITransformOperation operation = new CreateElementOperation(tagName);
- operation.setTagConverterContext(tagConverterContext);
- return operation.transform(null, null);
- }
-
- /**
- * Creates and appends a new child Element.
- *
- * @param tagName Name of child Element to be created.
- * @param parentElement Element instance to which to append the new
- * Element.
- * @return New Element instance.
- */
- protected Element appendChildElement(String tagName, Element parentElement) {
- ITransformOperation operation = new AppendChildElementOperation(tagName);
- operation.setTagConverterContext(tagConverterContext);
- return operation.transform(null, parentElement);
- }
-
- /**
* Gets a child Element of the specified parent Element that has the node
* name "facet" and the specified value of the "name" attribute.
*
@@ -162,18 +133,15 @@
* @param facetName Name of the facet Element for which to search.
* @return Child Element that is a facet with the specified name.
*/
- protected Element getChildFacetByName(Element srcElement, String facetName) {
+ private Element getChildFacetByName(Element srcElement, String facetName) {
Element element = null;
- NodeList childNodes = srcElement.getChildNodes();
- for (int i = 0; i < childNodes.getLength(); i++) {
- Node childNode = childNodes.item(i);
- if (childNode.getNodeType() == Node.ELEMENT_NODE && childNode.getLocalName().equalsIgnoreCase("facet")) {
- Element facetElement = (Element)childNode;
- String facetElementName = facetElement.getAttribute("name");
- if (facetElementName != null && facetElementName.equals(facetName)) {
- element = facetElement;
- break;
- }
+ List facets = getChildElements(srcElement, "facet");
+ Iterator itFacets = facets.iterator();
+ while (itFacets.hasNext()) {
+ Element facet = (Element)itFacets.next();
+ if (facet.getAttribute("name").equals(facetName)) {
+ element = facet;
+ break;
}
}
return element;
@@ -187,7 +155,7 @@
* @return List of child Elements of the specified parent Element that does
* not include any child "facet" Elements.
*/
- protected List getChildElementsSkipFacets(Element srcElement) {
+ private List getChildElementsSkipFacets(Element srcElement) {
List childElementsList = new ArrayList();
NodeList childNodes = srcElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/SelectBooleanCheckboxOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/SelectBooleanCheckboxOperation.java
new file mode 100644
index 0000000..b2907ee
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/SelectBooleanCheckboxOperation.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf;
+
+import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.provisional.ITransformOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAllAttributesOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateAttributeOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CreateElementOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.RenameAttributeOperation;
+import org.w3c.dom.Element;
+
+/**
+ * ITransformOperation implementation specifically for the
+ * "selectBooleanCheckbox" JSF (HTML) Element.
+ *
+ * <br><b>Note:</b> requires ITransformOperation.setTagConverterContext(...) to
+ * have been called to provide a valid ITagConverterContext instance prior to
+ * a call to the transform(...) method.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class SelectBooleanCheckboxOperation extends AbstractTransformOperation {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ public Element transform(Element srcElement, Element curElement) {
+ Element inputElement = null;
+ //create input element, copy all attributes, rename "styleClass" attribute to "class"
+ inputElement = createElement("input");
+ new CopyAllAttributesOperation().transform(srcElement, inputElement);
+ new RenameAttributeOperation("styleClass", "class").transform(srcElement, inputElement);
+ //set "type" attribute to "checkbox"
+ new CreateAttributeOperation("type", "checkbox").transform(srcElement, inputElement);
+ //test "value" attribute value == true and set "checked" attribute appropriately
+ String valueAttr = srcElement.getAttribute("value");
+ if (valueAttr != null && valueAttr.equalsIgnoreCase(Boolean.TRUE.toString())) {
+ new CreateAttributeOperation("checked", "checked").transform(srcElement, inputElement);
+ }
+ return inputElement;
+ }
+
+ /**
+ * Creates a new Element.
+ *
+ * @param tagName Name of Element to be created.
+ * @return New Element instance.
+ */
+ protected Element createElement(String tagName) {
+ ITransformOperation operation = new CreateElementOperation(tagName);
+ operation.setTagConverterContext(tagConverterContext);
+ return operation.transform(null, null);
+ }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/provisional/DTHTMLOutputRenderer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/provisional/DTHTMLOutputRenderer.java
index 7d2ae5d..003902a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/provisional/DTHTMLOutputRenderer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/provisional/DTHTMLOutputRenderer.java
@@ -18,6 +18,7 @@
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AppendChildElementOperation;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AppendChildTextOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.ConvertAttributeToTextOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAllAttributesOperation;
import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.CopyAttributeOperation;
@@ -127,6 +128,14 @@
boolean makeChildCurrent = Boolean.valueOf(((Parameter)parameters.get(1)).getValue()).booleanValue();
transformer.appendTransformOperation(new AppendChildElementOperation(elementName, makeChildCurrent));
}
+ } else if (opID.equals("AppendChildTextOperation")) {
+ EList parameters = operation.getParameters();
+ if (parameters.size() < 1) {
+ log.error("Warning.DTHTMLOutputRenderer.TooFewParameters", opID);
+ return null;
+ }
+ String content = ((Parameter)parameters.get(0)).getValue();
+ transformer.appendTransformOperation(new AppendChildTextOperation(content));
} else if (opID.equals("ConvertAttributeToTextOperation")) {
EList parameters = operation.getParameters();
if (parameters.size() < 1) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AbstractTransformOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AbstractTransformOperation.java
index 85151b5..5bfa7cf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AbstractTransformOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AbstractTransformOperation.java
@@ -10,9 +10,14 @@
*******************************************************************************/
package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.provisional.ITagConverterContext;
import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.provisional.ITransformOperation;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* Abstract ITransformOperation implementation. Maintains ITagConverterContext
@@ -41,4 +46,66 @@
this.tagConverterContext = tagConverterContext;
}
+ /**
+ * Creates a new Element.
+ *
+ * @param tagName Name of Element to be created.
+ * @return New Element instance.
+ */
+ protected Element createElement(String tagName) {
+ ITransformOperation operation = new CreateElementOperation(tagName);
+ operation.setTagConverterContext(tagConverterContext);
+ return operation.transform(null, null);
+ }
+
+ /**
+ * Creates and appends a new child Element.
+ *
+ * @param tagName Name of child Element to be created.
+ * @param parentElement Element instance to which to append the new
+ * Element.
+ * @return New Element instance.
+ */
+ protected Element appendChildElement(String tagName, Element parentElement) {
+ ITransformOperation operation = new AppendChildElementOperation(tagName);
+ operation.setTagConverterContext(tagConverterContext);
+ return operation.transform(null, parentElement);
+ }
+
+ /**
+ * Creates and appends a new child Text.
+ *
+ * @param content Content of new child Text.
+ * @param parentElement Element instance to which to append the new Text.
+ */
+ protected void appendChildText(String content, Element parentElement) {
+ ITransformOperation operation = new AppendChildTextOperation(content);
+ operation.setTagConverterContext(tagConverterContext);
+ operation.transform(null, parentElement);
+ }
+
+ /**
+ * Gets collection of child Element instances who's local name matches
+ * specified tag name.
+ *
+ * @param srcNode Source Node instance.
+ * @param tagName Tag local name.
+ * @return Collection of child Element instances who's local name matches
+ * specified tag name.
+ */
+ protected List getChildElements(Node srcNode, String tagName) {
+ List childElements = new ArrayList();
+ NodeList childNodes = srcNode.getChildNodes();
+ for (int i = 0; i < childNodes.getLength(); i++) {
+ Node curNode = childNodes.item(i);
+ if (curNode.getNodeType() == Node.ELEMENT_NODE) {
+ String curNodeName = curNode.getLocalName();
+ if (curNode != null && curNodeName.equals(tagName)) {
+ childElements.add((Element)curNode);
+ }
+ }
+ }
+ return childElements;
+ }
+
}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AppendChildTextOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AppendChildTextOperation.java
new file mode 100644
index 0000000..36be326
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/provisional/AppendChildTextOperation.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2005 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Ian Trimble - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * ITransformOperation implementation that appends a child Text.
+ *
+ * <br><b>Note:</b> requires ITransformOperation.setTagConverterContext(...) to
+ * have been called to provide a valid ITagConverterContext instance prior to
+ * a call to the transform(...) method.
+ *
+ * @author Ian Trimble - Oracle
+ */
+public class AppendChildTextOperation extends AbstractTransformOperation {
+
+ private String content;
+
+ /**
+ * Constructs an instance with the specified content.
+ *
+ * @param content Content of child Text to be created.
+ */
+ public AppendChildTextOperation(String content) {
+ this.content = content;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+ */
+ public Element transform(Element srcElement, Element curElement) {
+ if (tagConverterContext != null && curElement != null && content != null && content.length() > 0) {
+ Text childText = tagConverterContext.createText(content);
+ curElement.appendChild(childText);
+ }
+ return curElement;
+ }
+
+}