Author: sdzmitrovich
Date: 2008-12-15 10:10:28 -0500 (Mon, 15 Dec 2008)
New Revision: 12592
Added:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/proxy/
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/proxy/JsfTemplateInvocationHandler.java
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java
Log:
clean of code
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java 2008-12-15
14:38:42 UTC (rev 12591)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/NodeProxyUtil.java 2008-12-15
15:10:28 UTC (rev 12592)
@@ -18,12 +18,14 @@
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;
import org.jboss.tools.jsf.vpe.jsf.template.util.model.ElementProxy;
import org.jboss.tools.jsf.vpe.jsf.template.util.model.NodeListImpl;
import org.jboss.tools.jsf.vpe.jsf.template.util.model.NodeProxy;
import org.jboss.tools.jsf.vpe.jsf.template.util.model.TextProxy;
import org.jboss.tools.jsf.vpe.jsf.template.util.model.VpeElementProxyData;
+import org.jboss.tools.jsf.vpe.jsf.template.util.proxy.JsfTemplateInvocationHandler;
import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
import org.jboss.tools.vpe.editor.mapping.VpeNodeMapping;
import org.jboss.tools.vpe.editor.util.NodesManagingUtil;
@@ -51,11 +53,12 @@
NodeList list = document.getChildNodes();
- NodeList adaptersList = getNodeAdapterList(list, offset);
+ NodeList adaptersList = (NodeList) JsfTemplateInvocationHandler
+ .createNodeListProxy(list, offset);
data.setNodelist(adaptersList);
- return adaptersList;
+ return (NodeList) adaptersList;
}
Added:
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/proxy/JsfTemplateInvocationHandler.java
===================================================================
---
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/proxy/JsfTemplateInvocationHandler.java
(rev 0)
+++
trunk/jsf/plugins/org.jboss.tools.jsf.vpe.jsf/src/org/jboss/tools/jsf/vpe/jsf/template/util/proxy/JsfTemplateInvocationHandler.java 2008-12-15
15:10:28 UTC (rev 12592)
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2008 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.jsf.vpe.jsf.template.util.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Sergey Dzmitrovich
+ *
+ */
+public class JsfTemplateInvocationHandler implements InvocationHandler {
+
+ private static String KEY_WORD = "Offset"; //$NON-NLS-1$
+
+ private int offset;
+
+ private Object nodeItem;
+
+ public static NodeList createNodeListProxy(Object nodeList, int offset) {
+
+ Class<?>[] classes = { NodeList.class };
+ return (NodeList) Proxy.newProxyInstance(nodeList.getClass()
+ .getClassLoader(), classes, new JsfTemplateInvocationHandler(
+ nodeList, offset));
+ }
+
+ public static Object createNodeItemProxy(Object nodeItem, int offset) {
+
+ Class<?>[] classes = new Class<?>[1];
+
+ if (nodeItem instanceof IDOMElement)
+ classes[0] = IDOMElement.class;
+ else if (nodeItem instanceof IDOMAttr)
+ classes[0] = IDOMAttr.class;
+ else if (nodeItem instanceof IDOMNode)
+ classes[0] = IDOMNode.class;
+ else if (nodeItem instanceof NamedNodeMap)
+ classes[0] = NamedNodeMap.class;
+ else
+ return null;
+
+ return Proxy.newProxyInstance(nodeItem.getClass().getClassLoader(),
+ classes, new JsfTemplateInvocationHandler(nodeItem, offset));
+
+ }
+
+ private JsfTemplateInvocationHandler(Object nodeItem, int offset) {
+ this.offset = offset;
+ this.nodeItem = nodeItem;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
+ * java.lang.reflect.Method, java.lang.Object[])
+ */
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+
+ Object result = method.invoke(nodeItem, args);
+
+ if (method.getReturnType() == NodeList.class)
+ return JsfTemplateInvocationHandler.createNodeListProxy(result,
+ offset);
+ if ((result instanceof IDOMNode) || (result instanceof NamedNodeMap))
+ return JsfTemplateInvocationHandler.createNodeItemProxy(result,
+ offset);
+ if ((result instanceof Integer)
+ && (method.getName().contains(KEY_WORD))) {
+ return Integer.valueOf(((Integer) result).intValue() + offset);
+ }
+
+ return result;
+ }
+}