/*******************************************************************************
* Copyright (c) 2007 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.vpe.jsf.template;
import org.eclipse.jst.jsp.core.internal.parser.JSPSourceParser;
import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP;
import org.eclipse.swt.graphics.Point;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.document.StructuredDocumentFactory;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.jboss.tools.jsf.vpe.jsf.VpeElementProxyData;
import org.jboss.tools.jst.web.ui.internal.editor.util.NodesManagingUtil;
import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
import org.jboss.tools.vpe.editor.mapping.VpeNodeMapping;
import org.jboss.tools.vpe.editor.util.VpeNodesManagingUtil;
import org.w3c.dom.Attr;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class NodeProxyUtil {
static public NodeList reparseAttributeValue(VpeElementProxyData data,
String attrString, int offset) {
IStructuredDocument newStructuredDocument = StructuredDocumentFactory
.getNewStructuredDocumentInstance(new JSPSourceParser());
newStructuredDocument.set(attrString);
IDOMModel modelForJSP = (IDOMModel) StructuredModelManager
.getModelManager().createUnManagedStructuredModelFor(
ContentTypeIdForJSP.ContentTypeID_JSP);
modelForJSP.setStructuredDocument(newStructuredDocument);
// data.setModel(modelForJSP);
// data.setOffset(offset);
IDOMDocument document = modelForJSP.getDocument();
NodeList list = document.getChildNodes();
NodeList adaptersList = (NodeList) JsfTemplateInvocationHandler
.createNodeListProxy(list, offset);
data.setNodelist(adaptersList);
return (NodeList) adaptersList;
}
static public NodeList reparseAttributeValue(VpeElementProxyData data,
Attr attr) {
return reparseAttributeValue(data, attr.getValue(), ((IDOMAttr) attr)
.getValueRegionStartOffset() + 1);
}
/**
*
* @param nodeList
* @param focusPosition
* @param anchorPosition
* @return
*/
static public VpeNodeMapping findNodeByPosition(VpeDomMapping domMapping,
NodeList nodeList, Point selectionRange) {
int beginPosition = Math.min(selectionRange.x, selectionRange.x + selectionRange.y);
int endPosition = Math.max(selectionRange.x, selectionRange.x + selectionRange.y);
for (int i = 0; i < nodeList.getLength(); i++) {
Node child = nodeList.item(i);
VpeNodeMapping result = null;
if (child.hasChildNodes()) {
result = findNodeByPosition(domMapping, child.getChildNodes(),
selectionRange);
}
if (result != null)
return result;
if ((beginPosition >= (NodesManagingUtil.getStartOffsetNode(child)))
&& (endPosition <= (NodesManagingUtil
.getEndOffsetNode(child)))) {
return VpeNodesManagingUtil.getNodeMapping(domMapping, child);
}
}
return null;
}
}