Author: dmaliarevich
Date: 2011-08-18 13:31:09 -0400 (Thu, 18 Aug 2011)
New Revision: 34066
Added:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/util/RichFacesAdapterFactory.java
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/plugin.xml
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesCollapsibleSubTableTogglerTemplate.java
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesToggleControlTemplate.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSafeWrapper.java
Log:
https://issues.jboss.org/browse/JBIDE-9555 , IAdaptable was added to
VpeTemplateSafeWrapper in order to enable toggling.
Modified: trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/plugin.xml
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/plugin.xml 2011-08-18 17:20:56 UTC
(rev 34065)
+++ trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/plugin.xml 2011-08-18 17:31:09 UTC
(rev 34066)
@@ -5,7 +5,7 @@
point="org.jboss.tools.vpe.templates">
<templates
decsription="VPE Templates for RichFaces components"
- name="ajax4jsf"
+ name="richfaces"
path="templates/vpe-templates-richfaces.xml"/>
</extension>
@@ -15,4 +15,14 @@
resource="org/jboss/tools/jsf/vpe/richfaces/richfaces-palette.xml"
priority="9">
</contribution>
</extension>
+
+ <extension point="org.eclipse.core.runtime.adapters">
+ <factory
+
class="org.jboss.tools.jsf.vpe.richfaces.template.util.RichFacesAdapterFactory"
+
adaptableType="org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper">
+ <adapter
type="org.jboss.tools.jsf.vpe.richfaces.template.RichFacesTogglePanelTemplate"/>
+ <adapter
type="org.jboss.tools.jsf.vpe.richfaces.template.RichFacesCollapsibleSubTableTemplate"/>
+ </factory>
+ </extension>
+
</plugin>
\ No newline at end of file
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesCollapsibleSubTableTogglerTemplate.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesCollapsibleSubTableTogglerTemplate.java 2011-08-18
17:20:56 UTC (rev 34065)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesCollapsibleSubTableTogglerTemplate.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -19,7 +19,7 @@
import org.jboss.tools.vpe.editor.mapping.VpeElementMapping;
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.template.VpeCreationData;
-import org.jboss.tools.vpe.editor.template.VpeTemplate;
+import org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper;
import org.jboss.tools.vpe.editor.template.VpeToggableTemplate;
import org.jboss.tools.vpe.editor.util.HTML;
import org.mozilla.interfaces.nsIDOMDocument;
@@ -30,12 +30,17 @@
public class RichFacesCollapsibleSubTableTogglerTemplate extends
VpeAbstractTemplate implements VpeToggableTemplate {
+ final private static String CSS_TOP_SPAN="rf-csttg"; //$NON-NLS-1$
+ final private static String CSS_SPAN_COLLAPSED="rf-csttg-colps";
//$NON-NLS-1$
+ final private static String CSS_SPAN_EXPANDED="rf-csttg-exp"; //$NON-NLS-1$
+
@Override
public VpeCreationData create(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument) {
nsIDOMElement topSpan = visualDocument.createElement(HTML.TAG_SPAN);
topSpan.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_ID, "1");
//$NON-NLS-1$
+ topSpan.setAttribute(HTML.ATTR_CLASS, CSS_TOP_SPAN);
nsIDOMElement imgSpan = visualDocument.createElement(HTML.TAG_SPAN);
imgSpan.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_LOOKUP_PARENT,
"true"); //$NON-NLS-1$
@@ -46,8 +51,10 @@
img.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_ID, "3"); //$NON-NLS-1$
if (RichFaces.readCollapsedStateFromSourceNode(sourceNode)) {
+ imgSpan.setAttribute(HTML.ATTR_CLASS, CSS_SPAN_COLLAPSED);
ComponentUtil.setImg(img, "/collapsibleSubTableToggler/upIcon.gif");
//$NON-NLS-1$
} else {
+ imgSpan.setAttribute(HTML.ATTR_CLASS, CSS_SPAN_EXPANDED);
ComponentUtil.setImg(img, "/collapsibleSubTableToggler/downIcon.gif");
//$NON-NLS-1$
}
imgSpan.appendChild(img);
@@ -56,14 +63,14 @@
VpeCreationData creationData = new VpeCreationData(topSpan);
return creationData;
}
-
+
@Override
public void toggle(VpeVisualDomBuilder builder, Node sourceNode,
String toggleId) {
Element csttgElement = (Element) sourceNode;
String forTable = ""; //$NON-NLS-1$
- if (csttgElement.hasAttribute("for")) { //$NON-NLS-1$
- forTable = csttgElement.getAttribute("for"); //$NON-NLS-1$
+ if (csttgElement.hasAttribute(HTML.ATTR_FOR)) {
+ forTable = csttgElement.getAttribute(HTML.ATTR_FOR);
}
if (!"".equalsIgnoreCase(forTable)) { //$NON-NLS-1$
List<Element> sourceElements = RichFaces.findElementsById(
@@ -73,9 +80,10 @@
if (builder != null) {
VpeElementMapping elementMapping =
(VpeElementMapping)builder.getDomMapping().getNodeMapping(el);
if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
- if (template instanceof RichFacesCollapsibleSubTableTemplate) {
- ((RichFacesCollapsibleSubTableTemplate)template).toggle(el, toggleId);
+ RichFacesCollapsibleSubTableTemplate cstTemplate =
(RichFacesCollapsibleSubTableTemplate) ((VpeTemplateSafeWrapper)
+ elementMapping.getTemplate()).getAdapter(RichFacesCollapsibleSubTableTemplate.class);
+ if (cstTemplate != null) {
+ cstTemplate.toggle(el, toggleId);
if (RichFaces.readCollapsedStateFromSourceNode(sourceNode)) {
sourceNode.setUserData(RichFaces.COLLAPSED_STATE, "false", null);
//$NON-NLS-1$
} else {
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesToggleControlTemplate.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesToggleControlTemplate.java 2011-08-18
17:20:56 UTC (rev 34065)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/RichFacesToggleControlTemplate.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -27,9 +27,10 @@
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.template.VpeChildrenInfo;
import org.jboss.tools.vpe.editor.template.VpeCreationData;
-import org.jboss.tools.vpe.editor.template.VpeTemplate;
+import org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper;
import org.jboss.tools.vpe.editor.template.VpeToggableTemplate;
import org.jboss.tools.vpe.editor.util.Constants;
+import org.jboss.tools.vpe.editor.util.HTML;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.mozilla.interfaces.nsIDOMNode;
@@ -37,7 +38,7 @@
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-public class RichFacesToggleControlTemplate extends VpeAbstractTemplate implements
VpeToggableTemplate {
+public class RichFacesToggleControlTemplate extends VpeAbstractTemplate implements
VpeToggableTemplate {
private static Map toggleMap = new HashMap();
private static nsIDOMElement storedSwitchSpan = null;
@@ -113,32 +114,34 @@
}
public void toggle(VpeVisualDomBuilder builder, Node sourceNode, String toggleId) {
+ /*
+ * Actually, toggling mechanism should be updated for this template.
+ * Because it's very old and not functioning now.
+ */
toggleMap.put(sourceNode, toggleId);
-
Element sourceElement = (Element)(sourceNode instanceof Element ? sourceNode :
sourceNode.getParentNode());
-
- String forAttrName = "for"; //$NON-NLS-1$
- if (!sourceElement.hasAttribute(forAttrName)) return;
-
- String forIds = sourceElement.getAttribute(forAttrName);
+ if (!sourceElement.hasAttribute(HTML.ATTR_FOR)) {
+ return;
+ }
+ String forIds = sourceElement.getAttribute(HTML.ATTR_FOR);
StringTokenizer st = new StringTokenizer(forIds.trim(), ",", false);
//$NON-NLS-1$
while (st.hasMoreElements()) {
String id = st.nextToken().trim();
- if (null == id) continue;
-
+ if (null == id) {
+ continue;
+ }
id = id.trim();
-
List<Element> sourceElements = RichFaces.findElementsById(
(Element) sourceElement.getOwnerDocument()
.getDocumentElement(), id, ":togglePanel"); //$NON-NLS-1$
-
for (Element el : sourceElements) {
if (builder != null) {
VpeElementMapping elementMapping =
(VpeElementMapping)builder.getDomMapping().getNodeMapping(el);
if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
- if (template instanceof RichFacesTogglePanelTemplate) {
- ((RichFacesTogglePanelTemplate)template).toggle(el, toggleId);
+ RichFacesTogglePanelTemplate tpTemplate = (RichFacesTogglePanelTemplate)
((VpeTemplateSafeWrapper)
+ elementMapping.getTemplate()).getAdapter(RichFacesTogglePanelTemplate.class);
+ if (tpTemplate != null) {
+ tpTemplate.toggle(el, toggleId);
builder.updateNode(el);
}
}
Added:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/util/RichFacesAdapterFactory.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/util/RichFacesAdapterFactory.java
(rev 0)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.richfaces/src/org/jboss/tools/jsf/vpe/richfaces/template/util/RichFacesAdapterFactory.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2011 Exadel, Inc. and Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.jsf.vpe.richfaces.template.util;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.jboss.tools.jsf.vpe.richfaces.template.RichFacesCollapsibleSubTableTemplate;
+import org.jboss.tools.jsf.vpe.richfaces.template.RichFacesTogglePanelTemplate;
+import org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper;
+
+public class RichFacesAdapterFactory implements IAdapterFactory {
+
+ private static final Class[] types = {
+ RichFacesCollapsibleSubTableTemplate.class, RichFacesTogglePanelTemplate.class
+ };
+
+ @Override
+ public Class[] getAdapterList() {
+ return types;
+ }
+
+ @Override
+ public Object getAdapter(Object adaptableObject, Class adapterType) {
+ Object result = null;
+ if (adaptableObject instanceof VpeTemplateSafeWrapper) {
+ VpeTemplateSafeWrapper wrapper = (VpeTemplateSafeWrapper) adaptableObject;
+ if (adapterType == RichFacesCollapsibleSubTableTemplate.class) {
+ result = wrapper.castDelegateTo(RichFacesCollapsibleSubTableTemplate.class);
+ } else if (adapterType == RichFacesTogglePanelTemplate.class) {
+ result = wrapper.castDelegateTo(RichFacesTogglePanelTemplate.class);
+ }
+ }
+ return result;
+ }
+
+}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2011-08-18
17:20:56 UTC (rev 34065)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -53,6 +53,7 @@
import org.jboss.tools.vpe.editor.template.VpeTagDescription;
import org.jboss.tools.vpe.editor.template.VpeTemplate;
import org.jboss.tools.vpe.editor.template.VpeTemplateManager;
+import org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper;
import org.jboss.tools.vpe.editor.template.VpeToggableTemplate;
import org.jboss.tools.vpe.editor.template.expression.VpeExpressionException;
import org.jboss.tools.vpe.editor.util.Docbook;
@@ -934,10 +935,10 @@
VpeElementMapping elementMapping = (VpeElementMapping) domMapping
.getNodeMapping(sourceElement);
if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
-
- if (template instanceof VpeToggableTemplate) {
- ((VpeToggableTemplate) template).stopToggling(sourceElement);
+ VpeToggableTemplate toggableTemplate = (VpeToggableTemplate) ((VpeTemplateSafeWrapper)
+ elementMapping.getTemplate()).getAdapter(VpeToggableTemplate.class);
+ if (toggableTemplate != null) {
+ toggableTemplate.stopToggling(sourceElement);
}
}
}
@@ -1012,14 +1013,14 @@
.getAttributeNode(VPE_USER_TOGGLE_LOOKUP_PARENT);
if (toggleLookupAttr != null) {
toggleLookup = "true".equals(toggleLookupAttr.getNodeValue());
//$NON-NLS-1$
+ } else {
+ toggleLookup = false;
}
// end of fix
-
if (elementMapping != null) {
- VpeTemplate template = elementMapping.getTemplate();
-
- while (toggleLookup && sourceElement != null
- && !(template instanceof VpeToggableTemplate)) {
+ VpeToggableTemplate toggableTemplate = (VpeToggableTemplate)
((VpeTemplateSafeWrapper)
+ elementMapping.getTemplate()).getAdapter(VpeToggableTemplate.class);
+ while (toggleLookup && (sourceElement != null) && (toggableTemplate ==
null)) {
sourceElement = (Element) sourceElement.getParentNode();
if (sourceElement == null) {
break;
@@ -1033,12 +1034,11 @@
if (elementMapping == null) {
continue;
}
- template = elementMapping.getTemplate();
+ toggableTemplate = (VpeToggableTemplate) ((VpeTemplateSafeWrapper)
+ elementMapping.getTemplate()).getAdapter(VpeToggableTemplate.class);
}
-
- if (template instanceof VpeToggableTemplate) {
- ((VpeToggableTemplate) template).toggle(this, sourceElement,
- toggleId);
+ if (toggableTemplate != null) {
+ toggableTemplate.toggle(this, sourceElement, toggleId);
updateElement(sourceElement);
return sourceElement;
}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java 2011-08-18
17:20:56 UTC (rev 34065)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateManager.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -1064,11 +1064,13 @@
}
if (template != null) {
template.init(templateElement, caseSensitive);
+ template.setPriority(Double.parseDouble(priority));
template = new VpeTemplateSafeWrapper(template);
}
- if (template != null) {
- template.setPriority(Double.parseDouble(priority));
- }
+ /*
+ * In any case VpeTemplateSafeWrapper will be return,
+ * or null.
+ */
return template;
}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSafeWrapper.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSafeWrapper.java 2011-08-18
17:20:56 UTC (rev 34065)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/template/VpeTemplateSafeWrapper.java 2011-08-18
17:31:09 UTC (rev 34066)
@@ -1,5 +1,7 @@
package org.jboss.tools.vpe.editor.template;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.graphics.Point;
@@ -8,6 +10,7 @@
import org.jboss.tools.vpe.VpePlugin;
import org.jboss.tools.vpe.editor.VpeSourceDropInfo;
import org.jboss.tools.vpe.editor.VpeSourceInnerDragInfo;
+import org.jboss.tools.vpe.editor.VpeVisualDomBuilder;
import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.mapping.NodeData;
import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
@@ -22,7 +25,7 @@
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-public class VpeTemplateSafeWrapper implements VpeTemplate {
+public class VpeTemplateSafeWrapper implements VpeTemplate, IAdaptable {
VpeTemplate delegate;
@@ -591,10 +594,47 @@
return null;
};
+ /* (non-Javadoc)
+ * @see org.jboss.tools.vpe.editor.template.VpeTemplate#getPriority()
+ */
public double getPriority() {
- return delegate.getPriority();
+ try {
+ return delegate.getPriority();
+ } catch (Exception ex) {
+ VpePlugin.getPluginLog().logError(ex);
+ }
+ return 0.0;
}
+
+ /* (non-Javadoc)
+ * @see org.jboss.tools.vpe.editor.template.VpeTemplate#setPriority(double)
+ */
public void setPriority(double priority) {
- delegate.setPriority(priority);
+ try {
+ delegate.setPriority(priority);
+ } catch (Exception ex) {
+ VpePlugin.getPluginLog().logError(ex);
+ }
}
+
+ @Override
+ public Object getAdapter(Class adapter) {
+ if (adapter == VpeToggableTemplate.class) {
+ return castDelegateTo(VpeToggableTemplate.class);
+ }
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ public Object castDelegateTo(Class adapter) {
+ Object result = null;
+ try {
+ if (adapter.isInstance(delegate)) {
+ result = adapter.cast(delegate);
+ }
+ } catch (Exception ex) {
+ VpePlugin.getPluginLog().logError(ex);
+ }
+ return result;
+ }
+
}