[jbosstools-commits] JBoss Tools SVN: r22030 - in trunk/jsf/plugins/org.jboss.tools.jsf: src/org/jboss/tools/jsf/jsf2 and 8 other directories.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Wed May 12 04:53:39 EDT 2010
Author: yzhishko
Date: 2010-05-12 04:53:34 -0400 (Wed, 12 May 2010)
New Revision: 22030
Added:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSF2RenameParticipant.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSf2MoveParticipant.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ResourceUtil.java
Removed:
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentModelManager.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentUtil.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ResourceUtil.java
Modified:
trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/JSFUIMessages.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/messages.properties
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2ComponentsValidator.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2SourceValidator.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2XMLValidator.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2AttrTempComponent.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2ComponentFactory.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2CompositeTempComponent.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2URITempComponent.java
trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentRecognizer.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-5942 - refactor to JSF2 composite components (rename/move) was added
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml 2010-05-12 08:53:34 UTC (rev 22030)
@@ -529,6 +529,9 @@
caseSensitive="false"
ext="jsp">
</fileext>
+ <contentType
+ id="org.eclipse.jst.jsp.core.jspsource">
+ </contentType>
</rules>
</include>
</validator>
@@ -592,4 +595,54 @@
super="org.eclipse.wst.sse.ui.temp.warning">
</type>
</extension>
+ <extension
+ point="org.eclipse.ltk.core.refactoring.renameParticipants">
+ <renameParticipant
+ class="org.jboss.tools.jsf.jsf2.refactoring.JSF2RenameParticipant"
+ id="org.jboss.tools.jsf.jsf2renameParticipant"
+ name="JSF 2 Rename Participant">
+ <enablement>
+ <with
+ variable="affectedNatures">
+ <iterate
+ operator="or">
+ <equals
+ value="org.jboss.tools.jsf.jsfnature">
+ </equals>
+ </iterate>
+ </with>
+ <with
+ variable="element">
+ <instanceof
+ value="org.eclipse.core.resources.IFile">
+ </instanceof>
+ </with>
+ </enablement>
+ </renameParticipant>
+ </extension>
+ <extension
+ point="org.eclipse.ltk.core.refactoring.moveParticipants">
+ <moveParticipant
+ class="org.jboss.tools.jsf.jsf2.refactoring.JSf2MoveParticipant"
+ id="org.jboss.tools.jsf.jsf2moveParticipant"
+ name="JSF 2 Move Participant">
+ <enablement>
+ <with
+ variable="affectedNatures">
+ <iterate
+ operator="or">
+ <equals
+ value="org.jboss.tools.jsf.jsfnature">
+ </equals>
+ </iterate>
+ </with>
+ <with
+ variable="element">
+ <instanceof
+ value="org.eclipse.core.resources.IFolder">
+ </instanceof>
+ </with>
+ </enablement>
+ </moveParticipant>
+ </extension>
</plugin>
Copied: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java (from rev 21981, trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentModelManager.java)
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/model/JSF2ComponentModelManager.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -0,0 +1,507 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2010 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.jsf2.model;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+import java.util.Set;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jdt.internal.core.JarEntryFile;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.wst.html.core.internal.encoding.HTMLModelLoader;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.text.JobSafeStructuredDocument;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.parser.XMLSourceParser;
+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.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.eclipse.wst.xml.core.internal.provisional.format.DocumentNodeFormatter;
+import org.jboss.tools.jsf.JSFModelPlugin;
+import org.jboss.tools.jsf.jsf2.util.JSF2ComponentUtil;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author yzhishko
+ *
+ */
+
+ at SuppressWarnings("restriction")
+public class JSF2ComponentModelManager {
+
+ private static JSF2ComponentModelManager instance = new JSF2ComponentModelManager();
+
+ private JSF2ComponentModelManager() {
+
+ }
+
+ public static JSF2ComponentModelManager getManager() {
+ return instance;
+ }
+
+ public IFile updateJSF2CompositeComponentFile(
+ final IFile componentFileContatiner, final String[] attrNames) {
+ IFile file = updateFileContent(new EditableDOMFile() {
+
+ @Override
+ public IFile getFile() {
+ return componentFileContatiner;
+ }
+
+ @Override
+ protected void edit(IDOMModel model) throws CoreException,
+ IOException {
+ IDOMDocument document = model.getDocument();
+ updateJSF2CompositeComponent(document, attrNames);
+ IStructuredDocument structuredDocument = document
+ .getStructuredDocument();
+ String text = structuredDocument.getText();
+ model.reload(new ByteArrayInputStream(text.getBytes()));
+ model.save();
+ }
+ });
+ return file;
+ }
+
+ public void renameCompositeComponents(IResource resource, String URI,
+ String oldName, String newName) throws CoreException {
+ if (resource instanceof IFile) {
+ IFile file = (IFile) resource;
+ renameCompositeComponentsInFile(file, URI, oldName, newName);
+ } else if (resource instanceof IProject) {
+ IResource[] children = ((IProject) resource).members();
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ renameCompositeComponents(children[i], URI, oldName,
+ newName);
+ }
+ }
+ } else if (resource instanceof IFolder) {
+ IResource[] children = ((IFolder) resource).members();
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ renameCompositeComponents(children[i], URI, oldName,
+ newName);
+ }
+ }
+ }
+ }
+
+ private boolean isFileCorrect(IFile file) {
+ if (file == null) {
+ return false;
+ }
+ if (!"xhtml".equals(file.getFileExtension()) && !"jsp".equals(file.getFileExtension())) { //$NON-NLS-1$ //$NON-NLS-2$
+ IContentType contentType = IDE.getContentType(file);
+ if (contentType == null) {
+ return false;
+ }
+ String id = contentType.getId();
+ if (!"org.eclipse.jst.jsp.core.jspsource".equals(id) && !"org.eclipse.wst.html.core.htmlsource".equals(id)) { //$NON-NLS-1$ //$NON-NLS-2$
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void renameCompositeComponentsInFile(final IFile file,
+ final String URI, final String oldName, final String newName) {
+ if (!isFileCorrect(file)) {
+ return;
+ }
+ updateFileContent(new EditableDOMFile() {
+
+ @Override
+ public IFile getFile() {
+ return file;
+ }
+
+ @Override
+ protected void edit(IDOMModel model) throws CoreException,
+ IOException {
+ IDOMDocument document = model.getDocument();
+ Map<String, List<Element>> compositeComponentsMap = JSF2ComponentUtil
+ .findCompositeComponents(document);
+ List<Element> compositeComponents = compositeComponentsMap
+ .get(URI);
+ if (compositeComponents != null) {
+ for (Element element : compositeComponents) {
+ if (oldName.equals(element.getLocalName())) {
+ renameElement((IDOMElement) element, oldName,
+ newName);
+ }
+ }
+ model.save();
+ ValidationFramework.getDefault().validate(file,
+ new NullProgressMonitor());
+ }
+ }
+ });
+ }
+
+ public void renameURIs(IResource resource, Map<String, String> urisMap)
+ throws CoreException {
+ if (resource instanceof IFile) {
+ IFile file = (IFile) resource;
+ renameURIsInFile(file, urisMap);
+ } else if (resource instanceof IProject) {
+ IResource[] children = ((IProject) resource).members();
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ renameURIs(children[i], urisMap);
+ }
+ }
+ } else if (resource instanceof IFolder) {
+ IResource[] children = ((IFolder) resource).members();
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ renameURIs(children[i], urisMap);
+ }
+ }
+ }
+ }
+
+ private void renameURIsInFile(final IFile file,
+ final Map<String, String> urisMap) {
+ if (!isFileCorrect(file)) {
+ return;
+ }
+ updateFileContent(new EditableDOMFile() {
+
+ @Override
+ public IFile getFile() {
+ return file;
+ }
+
+ @Override
+ protected void edit(IDOMModel model) throws CoreException,
+ IOException {
+ IDOMDocument document = model.getDocument();
+ IDOMAttr[] uriAttrs = JSF2ComponentUtil
+ .findURIContainers(document);
+ for (int i = 0; i < uriAttrs.length; i++) {
+ if (urisMap.containsKey(uriAttrs[i].getValue())) {
+ renameURIAttr(uriAttrs[i], urisMap.get(uriAttrs[i]
+ .getValue()));
+ }
+ }
+ model.save();
+ ValidationFramework.getDefault().validate(file,
+ new NullProgressMonitor());
+ }
+
+ });
+ }
+
+ private void renameURIAttr(IDOMAttr idomAttr, final String replaceValue) {
+ int startOffset = idomAttr.getStartOffset();
+ String attrValue = idomAttr.getValue();
+ IStructuredDocument document = idomAttr.getStructuredDocument();
+ String value = document.getText().substring(idomAttr.getStartOffset());
+ value = value.substring(0, value.indexOf(attrValue)
+ + idomAttr.getValue().length());
+ try {
+ document.replace(startOffset + value.indexOf(attrValue), attrValue
+ .length(), replaceValue);
+ } catch (BadLocationException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ }
+ idomAttr.getName();
+ }
+
+ private void renameElement(final IDOMElement element, final String oldName,
+ final String newName) {
+ String sourceString = element.getSource();
+ IStructuredDocument structuredDocument = element
+ .getStructuredDocument();
+ int startOffset = element.getStartOffset();
+ int endStartOffset = element.getEndStartOffset();
+ int endOffset = element.getEndOffset();
+ try {
+ if (endOffset != endStartOffset) {
+ structuredDocument.replace(sourceString.lastIndexOf(oldName)
+ + startOffset, oldName.length(), newName);
+ }
+ structuredDocument.replace(element.getStartOffset()
+ + sourceString.indexOf(oldName), oldName.length(), newName);
+ } catch (BadLocationException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ private void updateJSF2CompositeComponent(IDOMDocument componentDoc,
+ String[] attrNames) {
+ IDOMElement[] interfaceElement = new IDOMElement[1];
+ findInterfaceComponent(componentDoc, interfaceElement);
+ createCompositeCompInterface(interfaceElement[0], attrNames);
+ }
+
+ private void findInterfaceComponent(Node node,
+ IDOMElement[] interfaceElement) {
+ if (node instanceof IDOMDocument) {
+ IDOMDocument document = (IDOMDocument) node;
+ findInterfaceComponent(document.getDocumentElement(),
+ interfaceElement);
+ }
+ if (node instanceof ElementImpl) {
+ ElementImpl impl = (ElementImpl) node;
+ String nameSpace = impl.getNamespaceURI();
+ if (JSF2ResourceUtil.JSF2_URI_PREFIX.equals(nameSpace)) {
+ String nodeName = impl.getLocalName();
+ if ("interface".equals(nodeName)) { //$NON-NLS-1$
+ interfaceElement[0] = impl;
+ return;
+ }
+ } else {
+ NodeList nodeList = node.getChildNodes();
+ if (nodeList != null) {
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ findInterfaceComponent(nodeList.item(i),
+ interfaceElement);
+ }
+ }
+ }
+ }
+ }
+
+ private void createCompositeCompInterface(IDOMElement element,
+ String[] attrNames) {
+ Document document = (Document) element.getOwnerDocument();
+ String prefix = element.getPrefix();
+ Set<String> existInerfaceAttrs = getInterfaceAttrs(element);
+ if (prefix != null && !"".equals(prefix)) { //$NON-NLS-1$
+ for (int i = 0; i < attrNames.length; i++) {
+ if (!existInerfaceAttrs.contains(attrNames[i])) {
+ Element attrEl = document.createElementNS(
+ JSF2ResourceUtil.JSF2_URI_PREFIX, prefix
+ + ":attribute"); //$NON-NLS-1$
+ attrEl.setAttribute("name", attrNames[i]); //$NON-NLS-1$
+ element.appendChild(attrEl);
+ }
+ }
+ } else {
+ for (int i = 0; i < attrNames.length; i++) {
+ if (!existInerfaceAttrs.contains(attrNames[i])) {
+ Element attrEl = document.createElementNS(
+ JSF2ResourceUtil.JSF2_URI_PREFIX, "attribute"); //$NON-NLS-1$
+ attrEl.setAttribute("name", attrNames[i]); //$NON-NLS-1$
+ element.appendChild(attrEl);
+ }
+ }
+ }
+ DocumentNodeFormatter formatter = new DocumentNodeFormatter();
+ formatter.format(document);
+ }
+
+ public IFile revalidateCompositeComponentFile(IFile file) {
+ IDOMDocument document = getReadableDOMDocument(file);
+ if (document == null) {
+ return null;
+ }
+ IDOMElement interfaceElement = checkCompositeInterface(document);
+ if (interfaceElement == null) {
+ return null;
+ }
+ return file;
+ }
+
+ public IDOMElement checkCompositeInterface(IDOMDocument document) {
+ if (document == null) {
+ return null;
+ }
+ Element element = document.getDocumentElement();
+ if (element == null) {
+ return null;
+ }
+ if (!"html".equals(element.getNodeName())) { //$NON-NLS-1$
+ return null;
+ }
+ ElementImpl elementImpl = (ElementImpl) element;
+ if (!"http://www.w3.org/1999/xhtml".equals(elementImpl.getNamespaceURI())) { //$NON-NLS-1$
+ return null;
+ }
+ IDOMElement[] interfaceElement = new IDOMElement[1];
+ findInterfaceComponent(element, interfaceElement);
+ return interfaceElement[0];
+ }
+
+ public static IDOMDocument getReadableDOMDocument(IFile file) {
+ IDOMDocument document = null;
+ IModelManager manager = StructuredModelManager.getModelManager();
+ if (manager == null) {
+ return document;
+ }
+ IStructuredModel model = null;
+ try {
+ model = manager.getModelForRead(file);
+ if (model instanceof IDOMModel) {
+ IDOMModel domModel = (IDOMModel) model;
+ document = domModel.getDocument();
+ }
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } catch (IOException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } finally {
+ if (model != null) {
+ model.releaseFromRead();
+ }
+ }
+ return document;
+ }
+
+ public static IDOMDocument getReadableDOMDocument(JarEntryFile file) {
+ IDOMDocument document = null;
+ IStructuredModel model = null;
+ InputStream inputStream;
+ try {
+ inputStream = file.getContents();
+ if (inputStream != null) {
+ StringBuffer buffer = new StringBuffer(""); //$NON-NLS-1$
+ Scanner in = new Scanner(inputStream);
+ while (in.hasNextLine()) {
+ buffer.append(in.nextLine());
+ }
+ model = new HTMLModelLoader().newModel();
+ model.setStructuredDocument(new JobSafeStructuredDocument(
+ new XMLSourceParser()));
+ model.getStructuredDocument().set(buffer.toString());
+ if (model instanceof IDOMModel) {
+ document = ((IDOMModel) model).getDocument();
+ }
+ }
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } finally {
+ model = null;
+ }
+ return document;
+ }
+
+ public static IDOMDocument getReadableDOMDocument(IDocument textDocument) {
+ IDOMDocument document = null;
+ if (!(textDocument instanceof IStructuredDocument)) {
+ return document;
+ }
+ IModelManager manager = StructuredModelManager.getModelManager();
+ if (manager == null) {
+ return document;
+ }
+ IStructuredModel model = null;
+ try {
+ model = manager.getModelForRead((IStructuredDocument) textDocument);
+ if (model instanceof IDOMModel) {
+ IDOMModel domModel = (IDOMModel) model;
+ document = domModel.getDocument();
+ }
+ } finally {
+ if (model != null) {
+ model.releaseFromRead();
+ }
+ }
+ return document;
+ }
+
+ public Set<String> getInterfaceAttrs(IDOMElement interfaceElement) {
+ Set<String> interfaceAttrs = new HashSet<String>(0);
+ if (interfaceElement != null) {
+ String prefix = interfaceElement.getPrefix();
+ String nodeName = "attribute"; //$NON-NLS-1$
+ if (prefix != null && !"".equals(prefix)) { //$NON-NLS-1$
+ nodeName = prefix + ":" + nodeName; //$NON-NLS-1$
+ }
+ NodeList attrsElements = interfaceElement
+ .getElementsByTagName(nodeName);
+ if (attrsElements != null) {
+ for (int i = 0; i < attrsElements.getLength(); i++) {
+ Node el = attrsElements.item(i);
+ if (el instanceof IDOMElement) {
+ IDOMElement element = (IDOMElement) el;
+ String attrvalue = element.getAttribute("name"); //$NON-NLS-1$
+ if (attrvalue != null && !"".equals(attrvalue)) { //$NON-NLS-1$
+ interfaceAttrs.add(attrvalue);
+ }
+ }
+ }
+ }
+ }
+ return interfaceAttrs;
+ }
+
+ private abstract class EditableDOMFile {
+
+ public EditableDOMFile() {
+ }
+
+ public IFile editFile() {
+ IFile file = getFile();
+ if (file == null) {
+ return file;
+ }
+ IModelManager manager = StructuredModelManager.getModelManager();
+ if (manager == null) {
+ return file;
+ }
+ IStructuredModel model = null;
+ try {
+ model = manager.getModelForEdit(file);
+ if (model instanceof IDOMModel) {
+ IDOMModel domModel = (IDOMModel) model;
+ edit(domModel);
+ }
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } catch (IOException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } finally {
+ if (model != null) {
+ model.releaseFromEdit();
+ }
+ }
+ return file;
+ };
+
+ protected abstract void edit(IDOMModel model) throws CoreException,
+ IOException;
+
+ public abstract IFile getFile();
+
+ }
+
+ private IFile updateFileContent(EditableDOMFile domFile) {
+ return domFile.editFile();
+ }
+
+}
Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSF2RenameParticipant.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSF2RenameParticipant.java (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSF2RenameParticipant.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2010 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.jsf2.refactoring;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
+import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
+import org.jboss.tools.jsf.messages.JSFUIMessages;
+
+/**
+ *
+ * @author yzhishko
+ *
+ */
+
+public class JSF2RenameParticipant extends RenameParticipant {
+
+ private IProject project;
+ private String URI;
+ private String oldFileName;
+
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor pm,
+ CheckConditionsContext context) throws OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ @Override
+ public Change createChange(IProgressMonitor pm) throws CoreException,
+ OperationCanceledException {
+ String newFileName = getArguments().getNewName();
+ if (project == null || newFileName == null || oldFileName == null) {
+ return null;
+ }
+ oldFileName = oldFileName.substring(0, oldFileName.lastIndexOf('.'));
+ newFileName = newFileName.substring(0, newFileName.lastIndexOf('.'));
+ JSF2ComponentModelManager.getManager().renameCompositeComponents(
+ project, URI, oldFileName, newFileName);
+ project = null;
+ URI = null;
+ oldFileName = null;
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return JSFUIMessages.Rename_JSF_2_Composite_Components;
+ }
+
+ @Override
+ protected boolean initialize(Object element) {
+ if (element instanceof IFile) {
+ IFile file = (IFile) element;
+ URI = calcURIFromPath(file.getFullPath());
+ if (checkContentType(file)) {
+ project = file.getProject();
+ oldFileName = file.getName();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean checkContentType(IFile file) {
+ if (URI == null || URI.equals("")) { //$NON-NLS-1$
+ return false;
+ }
+ if (!"xhtml".equals(file.getFileExtension())) { //$NON-NLS-1$
+ return false;
+ }
+ IContentType contentType = IDE.getContentType(file);
+ if (!"org.eclipse.wst.html.core.htmlsource".equals(contentType.getId())) { //$NON-NLS-1$
+ return false;
+ }
+ if ((JSF2ComponentModelManager.getManager()
+ .checkCompositeInterface(JSF2ComponentModelManager
+ .getReadableDOMDocument(file))) == null) {
+ return false;
+ }
+ return true;
+ }
+
+ private String calcURIFromPath(IPath path) {
+ StringBuilder uri = new StringBuilder(""); //$NON-NLS-1$
+ String[] segments = path.segments();
+ if (segments.length > 3) {
+ if (segments[2].equals("resources")) { //$NON-NLS-1$
+ for (int i = 3; i < segments.length - 1; i++) {
+ uri.append("/" + segments[i]); //$NON-NLS-1$
+ }
+ uri.insert(0, JSF2ResourceUtil.JSF2_URI_PREFIX);
+ }
+ }
+ return uri.toString();
+ }
+
+}
Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSf2MoveParticipant.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSf2MoveParticipant.java (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/JSf2MoveParticipant.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -0,0 +1,133 @@
+package org.jboss.tools.jsf.jsf2.refactoring;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.MoveParticipant;
+import org.jboss.tools.jsf.JSFModelPlugin;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
+import org.jboss.tools.jsf.messages.JSFUIMessages;
+
+public class JSf2MoveParticipant extends MoveParticipant {
+
+ private IProject project;
+ private Map<String, String> urisMap;
+
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor pm,
+ CheckConditionsContext context) throws OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ @Override
+ public Change createChange(IProgressMonitor pm) throws CoreException,
+ OperationCanceledException {
+ if (project != null) {
+ JSF2ComponentModelManager.getManager().renameURIs(project, urisMap);
+ }
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return JSFUIMessages.Refactoring_JSF_2_resources;
+ }
+
+ @Override
+ protected boolean initialize(Object element) {
+ if (element instanceof IFolder) {
+ IFolder folder = (IFolder) element;
+ if (checkResourceFolderPath(folder.getFullPath())) {
+ Object object = getArguments().getDestination();
+ if (object instanceof IFolder) {
+ if (folder.getProject() != ((IFolder) object).getProject()) {
+ return false;
+ }
+ if (checkDistFolderPath(((IFolder) object).getFullPath())) {
+ project = folder.getProject();
+ invokePossibleURIs(folder, (IFolder) object);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean checkDistFolderPath(IPath fullPath) {
+ String[] segments = fullPath.segments();
+ if (segments.length > 2) {
+ if (segments[2].equals("resources")) { //$NON-NLS-1$
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void invokePossibleURIs(IFolder srcFolder, IFolder distFolder) {
+ String newFirstURIPart = createJSF2URIFromPath(distFolder.getFullPath());
+ String oldFirstURIPart = createJSF2URIFromPath(srcFolder.getFullPath());
+ oldFirstURIPart = oldFirstURIPart.substring(0, oldFirstURIPart
+ .lastIndexOf('/'));
+ Set<String> oldURIs = new HashSet<String>();
+ invokeOldPossibleURIs(srcFolder, oldURIs);
+ urisMap = new HashMap<String, String>();
+ for (String oldURI : oldURIs) {
+ urisMap.put(oldURI, newFirstURIPart
+ + oldURI.replaceFirst(oldFirstURIPart, "")); //$NON-NLS-1$
+ }
+ }
+
+ private void invokeOldPossibleURIs(IFolder srcFolder, Set<String> uris) {
+ uris.add(createJSF2URIFromPath(srcFolder.getFullPath()));
+ try {
+ IResource[] children = srcFolder.members();
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ if (children[i] instanceof IFolder) {
+ invokeOldPossibleURIs((IFolder) children[i], uris);
+ }
+ }
+ }
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ private boolean checkResourceFolderPath(IPath path) {
+ String[] segments = path.segments();
+ if (segments.length > 3) {
+ if (segments[2].equals("resources")) { //$NON-NLS-1$
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String createJSF2URIFromPath(IPath path) {
+ StringBuilder uri = new StringBuilder(""); //$NON-NLS-1$
+ String[] segments = path.segments();
+ if (segments.length > 3) {
+ if (segments[2].equals("resources")) { //$NON-NLS-1$
+ for (int i = 3; i < segments.length; i++) {
+ uri.append("/" + segments[i]); //$NON-NLS-1$
+ }
+ }
+ }
+ uri.insert(0, JSF2ResourceUtil.JSF2_URI_PREFIX);
+ return uri.toString();
+ }
+
+}
Copied: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java (from rev 21981, trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentUtil.java)
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2010 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.jsf2.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+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.IDOMNode;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author yzhishko
+ *
+ */
+
+ at SuppressWarnings("restriction")
+public class JSF2ComponentUtil {
+
+ public static Map<String, List<Element>> findCompositeComponents(Node node) {
+ Map<String, List<Element>> elementsMap = new HashMap<String, List<Element>>(
+ 0);
+ findChildCompositeComponents(node, elementsMap);
+ return elementsMap;
+ }
+
+ private static void findChildCompositeComponents(Node node,
+ Map<String, List<Element>> elementsMap) {
+ if (node instanceof IDOMDocument) {
+ node = ((IDOMDocument) node).getDocumentElement();
+ findChildCompositeComponents(node, elementsMap);
+ } else if (node instanceof ElementImpl) {
+ ElementImpl elementImpl = (ElementImpl) node;
+ String namespaceURI = elementImpl.getNamespaceURI();
+ if (namespaceURI != null
+ && namespaceURI
+ .startsWith(JSF2ResourceUtil.JSF2_URI_PREFIX)
+ && !namespaceURI.equals(JSF2ResourceUtil.JSF2_URI_PREFIX)) {
+ List<Element> elements = elementsMap.get(namespaceURI);
+ if (elements == null) {
+ elements = new ArrayList<Element>(0);
+ }
+ elements.add(elementImpl);
+ elementsMap.put(namespaceURI, elements);
+ }
+ NodeList children = node.getChildNodes();
+ if (children != null) {
+ for (int i = 0; i < children.getLength(); i++) {
+ findChildCompositeComponents(children.item(i), elementsMap);
+ }
+ }
+ }
+ }
+
+ public static IDOMAttr[] findURIContainers(Node scanNode) {
+ List<IDOMAttr> attrs = new ArrayList<IDOMAttr>(0);
+ findChildURIContainers(scanNode, attrs);
+ return attrs.toArray(new IDOMAttr[0]);
+ }
+
+ private static void findChildURIContainers(Node node,
+ List<IDOMAttr> attrsList) {
+ if (node instanceof IDOMDocument) {
+ node = ((IDOMDocument) node).getDocumentElement();
+ findChildURIContainers(node, attrsList);
+ } else if (node instanceof ElementImpl) {
+ ElementImpl elementImpl = (ElementImpl) node;
+ NamedNodeMap attrsMap = elementImpl.getAttributes();
+ if (attrsMap != null && attrsMap.getLength() != 0) {
+ for (int i = 0; i < attrsMap.getLength(); i++) {
+ IDOMAttr attr = (IDOMAttr) attrsMap.item(i);
+ String attrValue = attr.getValue();
+ if (attrValue != null
+ && attrValue
+ .indexOf(JSF2ResourceUtil.JSF2_URI_PREFIX) > -1) {
+ String compPath = attrValue.replaceFirst(
+ JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
+ if (!"".equals(compPath.trim())) { //$NON-NLS-1$
+ if (isCorrectCompositeShemaAttrName(attr.getName())) {
+ attrsList.add(attr);
+ }
+ }
+ }
+ }
+ }
+ NodeList children = node.getChildNodes();
+ if (children != null) {
+ for (int i = 0; i < children.getLength(); i++) {
+ findChildURIContainers((IDOMNode) children.item(i),
+ attrsList);
+ }
+ }
+ }
+ }
+
+ private static boolean isCorrectCompositeShemaAttrName(String attrName) {
+ if (attrName == null) {
+ return false;
+ }
+ if ("xmlns".equals(attrName.trim()) || "uri".equals(attrName.trim())) { //$NON-NLS-1$ //$NON-NLS-2$
+ return true;
+ }
+ if (attrName.indexOf(':') < 0) {
+ return false;
+ }
+ attrName = attrName.substring(0, attrName.indexOf(':')).trim();
+ if ("xmlns".equals(attrName)) { //$NON-NLS-1$
+ return true;
+ }
+ return false;
+ }
+
+}
Copied: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ResourceUtil.java (from rev 21981, trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ResourceUtil.java)
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ResourceUtil.java (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ResourceUtil.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2010 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.jsf2.util;
+
+import java.util.zip.ZipEntry;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.core.JarEntryDirectory;
+import org.eclipse.jdt.internal.core.JarEntryFile;
+import org.eclipse.jdt.internal.core.JarEntryResource;
+import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.jboss.tools.jsf.JSFModelPlugin;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2TemplateManager;
+
+/**
+ *
+ * @author yzhishko
+ *
+ */
+
+ at SuppressWarnings("restriction")
+public class JSF2ResourceUtil {
+
+ public static final String JSF2_URI_PREFIX = "http://java.sun.com/jsf/composite"; //$NON-NLS-1$
+
+ public static final String COMPONENT_RESOURCE_PATH_KEY = "component_resource_path_key"; //$NON-NLS-1$
+
+ public static final int JAR_FILE_RESOURCE_TYPE = 1;
+
+ public static final int JAR_DIRECTORY_RESOURCE_TYPE = JAR_FILE_RESOURCE_TYPE << 1;
+
+ public static Object findCompositeComponentContainer(IProject project,
+ IDOMElement jsf2Element) {
+ ElementImpl elementImpl = (ElementImpl) jsf2Element;
+ String nameSpaceURI = elementImpl.getNamespaceURI();
+ if (nameSpaceURI == null || nameSpaceURI.indexOf(JSF2_URI_PREFIX) == -1) {
+ return null;
+ }
+ String nodeName = jsf2Element.getLocalName();
+ String relativeLocation = "/resources" + nameSpaceURI.replaceFirst( //$NON-NLS-1$
+ JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
+ IVirtualComponent component = ComponentCore.createComponent(project);
+ if (component != null) {
+ IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
+ new Path("/")); //$NON-NLS-1$
+ IContainer folder = webRootFolder.getUnderlyingFolder();
+ IPath path = folder.getFullPath().append(relativeLocation).append(
+ "/" + nodeName + ".xhtml"); //$NON-NLS-1$ //$NON-NLS-2$
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if (file.isAccessible()) {
+ return file;
+ }
+ }
+ return searchInClassPath(project, "META-INF" + relativeLocation //$NON-NLS-1$
+ + "/" + nodeName + ".xhtml", JAR_FILE_RESOURCE_TYPE); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ private static JarEntryResource searchInClassPath(IProject project,
+ String classPathResource, int jarResourceType) {
+ IJavaProject javaProject = JavaCore.create(project);
+ try {
+ for (IPackageFragmentRoot fragmentRoot : javaProject
+ .getAllPackageFragmentRoots()) {
+ if (fragmentRoot instanceof JarPackageFragmentRoot) {
+ JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) fragmentRoot;
+ ZipEntry zipEntry = jarPackageFragmentRoot.getJar()
+ .getEntry(classPathResource);
+ if (zipEntry != null) {
+ if (jarResourceType == JAR_FILE_RESOURCE_TYPE) {
+ JarEntryFile fileInJar = new JarEntryFile(
+ classPathResource);
+ fileInJar.setParent(jarPackageFragmentRoot);
+ return fileInJar;
+ }
+ if (jarResourceType == JAR_DIRECTORY_RESOURCE_TYPE) {
+ JarEntryDirectory directoryInJar = new JarEntryDirectory(
+ classPathResource);
+ directoryInJar.setParent(jarPackageFragmentRoot);
+ return directoryInJar;
+ }
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ }
+ return null;
+ }
+
+ public static Object findResourcesFolderContainerByNameSpace(
+ IProject project, String nameSpaceURI) {
+ if (nameSpaceURI == null || nameSpaceURI.indexOf(JSF2_URI_PREFIX) == -1) {
+ return null;
+ }
+ String relativeLocation = "/resources" + nameSpaceURI.replaceFirst( //$NON-NLS-1$
+ JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
+ IVirtualComponent component = ComponentCore.createComponent(project);
+ if (component != null) {
+ IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
+ new Path("/")); //$NON-NLS-1$
+ IContainer folder = webRootFolder.getUnderlyingFolder();
+ IPath path = folder.getFullPath().append(relativeLocation);
+ IFolder resFolder = ResourcesPlugin.getWorkspace().getRoot()
+ .getFolder(path);
+ if (resFolder.isAccessible()) {
+ return resFolder;
+ }
+ }
+ return searchInClassPath(project,
+ "META-INF" + relativeLocation, JAR_DIRECTORY_RESOURCE_TYPE); //$NON-NLS-1$
+ }
+
+ public static boolean isResourcesFolderExists(IProject project,
+ String nameSpaceURI) {
+ return findResourcesFolderContainerByNameSpace(project, nameSpaceURI) == null ? false
+ : true;
+ }
+
+ public static IFolder createResourcesFolderByNameSpace(IProject project,
+ String nameSpaceURI) throws CoreException {
+ IFolder compositeCompResFolder = null;
+ String relativeLocation = nameSpaceURI.replaceFirst(
+ JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
+ if (!project.exists()) {
+ return null;
+ }
+ if (!project.isAccessible()) {
+ try {
+ project.open(new NullProgressMonitor());
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ return compositeCompResFolder;
+ }
+ }
+ IVirtualComponent component = ComponentCore.createComponent(project);
+ if (component != null) {
+ IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
+ new Path("/")); //$NON-NLS-1$
+ IContainer folder = webRootFolder.getUnderlyingFolder();
+ IFolder webFolder = ResourcesPlugin.getWorkspace().getRoot()
+ .getFolder(folder.getFullPath());
+ IFolder resourcesFolder = webFolder.getFolder("resources"); //$NON-NLS-1$
+ NullProgressMonitor monitor = new NullProgressMonitor();
+ if (!resourcesFolder.exists()) {
+ resourcesFolder.create(true, true, monitor);
+ }
+ String[] segments = new Path(relativeLocation).segments();
+ compositeCompResFolder = resourcesFolder;
+ for (int i = 0; i < segments.length; i++) {
+ compositeCompResFolder = compositeCompResFolder
+ .getFolder(segments[i]);
+ if (!compositeCompResFolder.exists()) {
+ compositeCompResFolder.create(true, true, monitor);
+ }
+ }
+
+ }
+ return compositeCompResFolder;
+ }
+
+ public static IFile createCompositeComponentFile(IProject project,
+ IPath resourceRelativePath) throws CoreException {
+ IFile compositeCompResFile = null;
+ if (!project.exists()) {
+ return null;
+ }
+ if (!project.isAccessible()) {
+ try {
+ project.open(new NullProgressMonitor());
+ } catch (CoreException e) {
+ JSFModelPlugin.getPluginLog().logError(e);
+ return compositeCompResFile;
+ }
+ }
+ IVirtualComponent component = ComponentCore.createComponent(project);
+ if (component != null) {
+ IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
+ new Path("/")); //$NON-NLS-1$
+ IContainer folder = webRootFolder.getUnderlyingFolder();
+ IFolder webFolder = ResourcesPlugin.getWorkspace().getRoot()
+ .getFolder(folder.getFullPath());
+ IFolder resourcesFolder = webFolder.getFolder("resources"); //$NON-NLS-1$
+ NullProgressMonitor monitor = new NullProgressMonitor();
+ if (!resourcesFolder.exists()) {
+ resourcesFolder.create(true, true, monitor);
+ }
+ String[] segments = resourceRelativePath.segments();
+ IFolder componentPathFolder = resourcesFolder;
+ for (int i = 0; i < segments.length - 1; i++) {
+ componentPathFolder = componentPathFolder
+ .getFolder(segments[i]);
+ if (!componentPathFolder.exists()) {
+ componentPathFolder.create(true, true, monitor);
+ }
+ }
+ compositeCompResFile = componentPathFolder
+ .getFile(segments[segments.length - 1]);
+ if (!compositeCompResFile.exists()) {
+ compositeCompResFile.create(JSF2TemplateManager.getManager()
+ .createStreamFromTemplate("composite.xhtml"), true, //$NON-NLS-1$
+ monitor);
+ } else {
+ compositeCompResFile = JSF2ComponentModelManager.getManager()
+ .revalidateCompositeComponentFile(compositeCompResFile);
+ }
+ }
+ return compositeCompResFile;
+ }
+
+ public static IFile createCompositeComponentFile(IProject project,
+ IPath resourceRelativePath, String[] attrNames)
+ throws CoreException {
+ IFile jsf2ResFile = createCompositeComponentFile(project,
+ resourceRelativePath);
+ if (jsf2ResFile == null) {
+ return null;
+ }
+ if (attrNames == null || attrNames.length == 0) {
+ return jsf2ResFile;
+ }
+ return JSF2ComponentModelManager.getManager()
+ .updateJSF2CompositeComponentFile(jsf2ResFile, attrNames);
+ }
+
+}
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/JSFUIMessages.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/JSFUIMessages.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/JSFUIMessages.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -128,6 +128,8 @@
public static String Create_JSF_2_Interface_Attr;
public static String Missing_JSF_2_Resources_Folder;
public static String Create_JSF_2_Resources_Folder;
+ public static String Rename_JSF_2_Composite_Components;
+ public static String Refactoring_JSF_2_resources;
static {
// load message values from bundle file
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/messages.properties
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/messages.properties 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/messages/messages.properties 2010-05-12 08:53:34 UTC (rev 22030)
@@ -104,4 +104,6 @@
Missing_JSF_2_Component_Attr=Attribute "{0}" is not defined for "{1}" composite component
Create_JSF_2_Interface_Attr=Create attribute in an interface declaration of a composite component
Missing_JSF_2_Resources_Folder=Resources folder "{0}" is missing in a project root directory
-Create_JSF_2_Resources_Folder=Create a folder container for JSF 2 resources
\ No newline at end of file
+Create_JSF_2_Resources_Folder=Create a folder container for JSF 2 resources
+Rename_JSF_2_Composite_Components=Rename JSF 2 composite components
+Refactoring_JSF_2_resources=Refactoring JSF 2 resources
\ No newline at end of file
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2ComponentsValidator.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2ComponentsValidator.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2ComponentsValidator.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -26,11 +26,11 @@
import org.eclipse.wst.xml.core.internal.validation.core.ValidationReport;
import org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;
import org.jboss.tools.jsf.JSFModelPlugin;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2AttrTempComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2CompositeTempComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2URITempComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jst.web.kb.IKbProject;
import org.jboss.tools.jst.web.kb.KbProjectFactory;
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2SourceValidator.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2SourceValidator.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2SourceValidator.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -26,12 +26,12 @@
import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
import org.eclipse.wst.validation.internal.provisional.core.IValidator;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2AttrTempComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2CompositeTempComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2URITempComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ComponentModelManager;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2XMLValidator.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2XMLValidator.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/JSF2XMLValidator.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -24,10 +24,10 @@
import org.eclipse.wst.xml.core.internal.validation.core.ValidationReport;
import org.jboss.tools.common.el.core.resolver.ELContext;
import org.jboss.tools.jsf.JSFModelPlugin;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.jsf2.util.JSF2ComponentUtil;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ComponentModelManager;
import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ComponentRecognizer;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ComponentUtil;
import org.jboss.tools.jst.web.kb.IPageContext;
import org.jboss.tools.jst.web.kb.PageContextFactory;
import org.jboss.tools.jst.web.kb.internal.XmlContextImpl;
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeAttrsProposal.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -19,10 +19,10 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2CompositeComponentProposal.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -22,10 +22,10 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2QuickFixProcessor.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -21,8 +21,8 @@
import org.eclipse.jface.text.quickassist.IQuickAssistProcessor;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.wst.sse.ui.StructuredTextInvocationContext;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/action/JSF2ResourcesFolderProposal.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -14,10 +14,10 @@
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.web.validation.jsf2.JSF2XMLValidator;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2AttrTempComponent.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2AttrTempComponent.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2AttrTempComponent.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -14,8 +14,8 @@
import java.text.MessageFormat;
import org.eclipse.wst.xml.core.internal.document.ElementImpl;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2ComponentFactory.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2ComponentFactory.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2ComponentFactory.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -21,7 +21,7 @@
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.IDOMElement;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ComponentModelManager;
+import org.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2CompositeTempComponent.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2CompositeTempComponent.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2CompositeTempComponent.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -16,8 +16,8 @@
import java.util.List;
import org.eclipse.wst.xml.core.internal.document.ElementImpl;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
import org.w3c.dom.NamedNodeMap;
/**
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2URITempComponent.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2URITempComponent.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/components/JSF2URITempComponent.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -12,8 +12,9 @@
package org.jboss.tools.jsf.web.validation.jsf2.components;
import java.text.MessageFormat;
+
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.messages.JSFUIMessages;
-import org.jboss.tools.jsf.web.validation.jsf2.util.JSF2ResourceUtil;
/**
*
Deleted: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentModelManager.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentModelManager.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentModelManager.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -1,293 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007-2010 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.web.validation.jsf2.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.Scanner;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jdt.internal.core.JarEntryFile;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.wst.html.core.internal.encoding.HTMLModelLoader;
-import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
-import org.eclipse.wst.sse.core.internal.text.JobSafeStructuredDocument;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.eclipse.wst.xml.core.internal.parser.XMLSourceParser;
-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.format.DocumentNodeFormatter;
-import org.jboss.tools.jsf.JSFModelPlugin;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- *
- * @author yzhishko
- *
- */
-
- at SuppressWarnings("restriction")
-public class JSF2ComponentModelManager {
-
- private static JSF2ComponentModelManager instance = new JSF2ComponentModelManager();
-
- private JSF2ComponentModelManager() {
-
- }
-
- public static JSF2ComponentModelManager getManager() {
- return instance;
- }
-
- public IFile updateJSF2CompositeComponentFile(
- IFile componentFileContatiner, String[] attrNames) {
- IDOMDocument document = null;
- IModelManager manager = StructuredModelManager.getModelManager();
- if (manager == null) {
- return componentFileContatiner;
- }
- IStructuredModel model = null;
- try {
- model = manager.getModelForEdit(componentFileContatiner);
- if (model instanceof IDOMModel) {
- IDOMModel domModel = (IDOMModel) model;
- model.reload(componentFileContatiner.getContents());
- document = domModel.getDocument();
- updateJSF2CompositeComponent(document, attrNames);
- componentFileContatiner.setContents(new ByteArrayInputStream(
- document.getStructuredDocument().getText().getBytes()),
- true, false, new NullProgressMonitor());
- }
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } catch (IOException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } finally {
- if (model != null) {
- model.releaseFromEdit();
- }
- }
- return componentFileContatiner;
- }
-
- public void updateJSF2CompositeComponent(IDOMDocument componentDoc,
- String[] attrNames) {
- IDOMElement[] interfaceElement = new IDOMElement[1];
- findInterfaceComponent(componentDoc, interfaceElement);
- createCompositeCompInterface(interfaceElement[0], attrNames);
- }
-
- private void findInterfaceComponent(Node node,
- IDOMElement[] interfaceElement) {
- if (node instanceof IDOMDocument) {
- IDOMDocument document = (IDOMDocument) node;
- findInterfaceComponent(document.getDocumentElement(),
- interfaceElement);
- }
- if (node instanceof ElementImpl) {
- ElementImpl impl = (ElementImpl) node;
- String nameSpace = impl.getNamespaceURI();
- if (JSF2ResourceUtil.JSF2_URI_PREFIX.equals(nameSpace)) {
- String nodeName = impl.getLocalName();
- if ("interface".equals(nodeName)) { //$NON-NLS-1$
- interfaceElement[0] = impl;
- return;
- }
- } else {
- NodeList nodeList = node.getChildNodes();
- if (nodeList != null) {
- for (int i = 0; i < nodeList.getLength(); i++) {
- findInterfaceComponent(nodeList.item(i),
- interfaceElement);
- }
- }
- }
- }
- }
-
- private void createCompositeCompInterface(IDOMElement element,
- String[] attrNames) {
- Document document = (Document) element.getOwnerDocument();
- String prefix = element.getPrefix();
- Set<String> existInerfaceAttrs = getInterfaceAttrs(element);
- if (prefix != null && !"".equals(prefix)) { //$NON-NLS-1$
- for (int i = 0; i < attrNames.length; i++) {
- if (!existInerfaceAttrs.contains(attrNames[i])) {
- Element attrEl = document.createElementNS(
- JSF2ResourceUtil.JSF2_URI_PREFIX, prefix
- + ":attribute"); //$NON-NLS-1$
- attrEl.setAttribute("name", attrNames[i]); //$NON-NLS-1$
- element.appendChild(attrEl);
- }
- }
- } else {
- for (int i = 0; i < attrNames.length; i++) {
- if (!existInerfaceAttrs.contains(attrNames[i])) {
- Element attrEl = document.createElementNS(
- JSF2ResourceUtil.JSF2_URI_PREFIX, "attribute"); //$NON-NLS-1$
- attrEl.setAttribute("name", attrNames[i]); //$NON-NLS-1$
- element.appendChild(attrEl);
- }
- }
- }
- DocumentNodeFormatter formatter = new DocumentNodeFormatter();
- formatter.format(document);
- }
-
- public IFile revalidateCompositeComponentFile(IFile file) {
- IDOMDocument document = getReadableDOMDocument(file);
- if (document == null) {
- return null;
- }
- IDOMElement interfaceElement = checkCompositeInterface(document);
- if (interfaceElement == null) {
- return null;
- }
- return file;
- }
-
- public IDOMElement checkCompositeInterface(IDOMDocument document) {
- if (document == null) {
- return null;
- }
- Element element = document.getDocumentElement();
- if (element == null) {
- return null;
- }
- if (!"html".equals(element.getNodeName())) { //$NON-NLS-1$
- return null;
- }
- ElementImpl elementImpl = (ElementImpl) element;
- if (!"http://www.w3.org/1999/xhtml".equals(elementImpl.getNamespaceURI())) { //$NON-NLS-1$
- return null;
- }
- IDOMElement[] interfaceElement = new IDOMElement[1];
- findInterfaceComponent(document, interfaceElement);
- return interfaceElement[0];
- }
-
- public static IDOMDocument getReadableDOMDocument(IFile file) {
- IDOMDocument document = null;
- IModelManager manager = StructuredModelManager.getModelManager();
- if (manager == null) {
- return document;
- }
- IStructuredModel model = null;
- try {
- model = manager.getModelForRead(file);
- if (model instanceof IDOMModel) {
- IDOMModel domModel = (IDOMModel) model;
- document = domModel.getDocument();
- }
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } catch (IOException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } finally {
- if (model != null) {
- model.releaseFromRead();
- }
- }
- return document;
- }
-
- public static IDOMDocument getReadableDOMDocument(JarEntryFile file) {
- IDOMDocument document = null;
- IStructuredModel model = null;
- InputStream inputStream;
- try {
- inputStream = file.getContents();
- if (inputStream != null) {
- StringBuffer buffer = new StringBuffer(""); //$NON-NLS-1$
- Scanner in = new Scanner(inputStream);
- while (in.hasNextLine()) {
- buffer.append(in.nextLine());
- }
- model = new HTMLModelLoader().newModel();
- model.setStructuredDocument(new JobSafeStructuredDocument(
- new XMLSourceParser()));
- model.getStructuredDocument().set(buffer.toString());
- if (model instanceof IDOMModel) {
- document = ((IDOMModel) model).getDocument();
- }
- }
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } finally {
- model = null;
- }
- return document;
- }
-
- public static IDOMDocument getReadableDOMDocument(IDocument textDocument) {
- IDOMDocument document = null;
- if (!(textDocument instanceof IStructuredDocument)) {
- return document;
- }
- IModelManager manager = StructuredModelManager.getModelManager();
- if (manager == null) {
- return document;
- }
- IStructuredModel model = null;
- try {
- model = manager.getModelForRead((IStructuredDocument) textDocument);
- if (model instanceof IDOMModel) {
- IDOMModel domModel = (IDOMModel) model;
- document = domModel.getDocument();
- }
- } finally {
- if (model != null) {
- model.releaseFromRead();
- }
- }
- return document;
- }
-
- public Set<String> getInterfaceAttrs(IDOMElement interfaceElement) {
- Set<String> interfaceAttrs = new HashSet<String>(0);
- if (interfaceElement != null) {
- String prefix = interfaceElement.getPrefix();
- String nodeName = "attribute"; //$NON-NLS-1$
- if (prefix != null && !"".equals(prefix)) { //$NON-NLS-1$
- nodeName = prefix + ":" + nodeName; //$NON-NLS-1$
- }
- NodeList attrsElements = interfaceElement
- .getElementsByTagName(nodeName);
- if (attrsElements != null) {
- for (int i = 0; i < attrsElements.getLength(); i++) {
- Node el = attrsElements.item(i);
- if (el instanceof IDOMElement) {
- IDOMElement element = (IDOMElement) el;
- String attrvalue = element.getAttribute("name"); //$NON-NLS-1$
- if (attrvalue != null && !"".equals(attrvalue)) { //$NON-NLS-1$
- interfaceAttrs.add(attrvalue);
- }
- }
- }
- }
- }
- return interfaceAttrs;
- }
-
-}
Modified: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentRecognizer.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentRecognizer.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentRecognizer.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -17,6 +17,7 @@
import org.eclipse.jdt.internal.core.JarEntryFile;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
import org.jboss.tools.jsf.web.validation.jsf2.components.IJSF2ValidationComponent;
import org.jboss.tools.jsf.web.validation.jsf2.components.JSF2ComponentFactory;
Deleted: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentUtil.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentUtil.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ComponentUtil.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007-2010 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.web.validation.jsf2.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-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.IDOMNode;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- *
- * @author yzhishko
- *
- */
-
- at SuppressWarnings("restriction")
-public class JSF2ComponentUtil {
-
- public static Map<String, List<Element>> findCompositeComponents(Node node) {
- Map<String, List<Element>> elementsMap = new HashMap<String, List<Element>>(
- 0);
- findChildCompositeComponents(node, elementsMap);
- return elementsMap;
- }
-
- private static void findChildCompositeComponents(Node node,
- Map<String, List<Element>> elementsMap) {
- if (node instanceof IDOMDocument) {
- node = ((IDOMDocument) node).getDocumentElement();
- findChildCompositeComponents(node, elementsMap);
- } else if (node instanceof ElementImpl) {
- ElementImpl elementImpl = (ElementImpl) node;
- String namespaceURI = elementImpl.getNamespaceURI();
- if (namespaceURI != null
- && namespaceURI
- .startsWith(JSF2ResourceUtil.JSF2_URI_PREFIX)
- && !namespaceURI.equals(JSF2ResourceUtil.JSF2_URI_PREFIX)) {
- List<Element> elements = elementsMap.get(namespaceURI);
- if (elements == null) {
- elements = new ArrayList<Element>(0);
- }
- elements.add(elementImpl);
- elementsMap.put(namespaceURI, elements);
- }
- NodeList children = node.getChildNodes();
- if (children != null) {
- for (int i = 0; i < children.getLength(); i++) {
- findChildCompositeComponents(children.item(i), elementsMap);
- }
- }
- }
- }
-
- public static IDOMAttr[] findURIContainers(Node scanNode) {
- List<IDOMAttr> attrs = new ArrayList<IDOMAttr>(0);
- findChildURIContainers(scanNode, attrs);
- return attrs.toArray(new IDOMAttr[0]);
- }
-
- private static void findChildURIContainers(Node node,
- List<IDOMAttr> attrsList) {
- if (node instanceof IDOMDocument) {
- node = ((IDOMDocument) node).getDocumentElement();
- findChildURIContainers(node, attrsList);
- } else if (node instanceof ElementImpl) {
- ElementImpl elementImpl = (ElementImpl) node;
- NamedNodeMap attrsMap = elementImpl.getAttributes();
- if (attrsMap != null && attrsMap.getLength() != 0) {
- for (int i = 0; i < attrsMap.getLength(); i++) {
- IDOMAttr attr = (IDOMAttr) attrsMap.item(i);
- String attrValue = attr.getValue();
- if (attrValue != null
- && attrValue
- .indexOf(JSF2ResourceUtil.JSF2_URI_PREFIX) > -1) {
- String compPath = attrValue.replaceFirst(
- JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
- if (!"".equals(compPath.trim())) { //$NON-NLS-1$
- if (isCorrectCompositeShemaAttrName(attr.getName())) {
- attrsList.add(attr);
- }
- }
- }
- }
- }
- NodeList children = node.getChildNodes();
- if (children != null) {
- for (int i = 0; i < children.getLength(); i++) {
- findChildURIContainers((IDOMNode) children.item(i),
- attrsList);
- }
- }
- }
- }
-
- private static boolean isCorrectCompositeShemaAttrName(String attrName) {
- if (attrName == null) {
- return false;
- }
- if ("xmlns".equals(attrName.trim()) || "uri".equals(attrName.trim())) { //$NON-NLS-1$ //$NON-NLS-2$
- return true;
- }
- if (attrName.indexOf(':') < 0) {
- return false;
- }
- attrName = attrName.substring(0, attrName.indexOf(':')).trim();
- if ("xmlns".equals(attrName)) { //$NON-NLS-1$
- return true;
- }
- return false;
- }
-
-}
Deleted: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ResourceUtil.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ResourceUtil.java 2010-05-11 20:51:21 UTC (rev 22029)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/web/validation/jsf2/util/JSF2ResourceUtil.java 2010-05-12 08:53:34 UTC (rev 22030)
@@ -1,251 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007-2010 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.web.validation.jsf2.util;
-
-import java.util.zip.ZipEntry;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.core.JarEntryDirectory;
-import org.eclipse.jdt.internal.core.JarEntryFile;
-import org.eclipse.jdt.internal.core.JarEntryResource;
-import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.jboss.tools.jsf.JSFModelPlugin;
-
-/**
- *
- * @author yzhishko
- *
- */
-
- at SuppressWarnings("restriction")
-public class JSF2ResourceUtil {
-
- public static final String JSF2_URI_PREFIX = "http://java.sun.com/jsf/composite"; //$NON-NLS-1$
-
- public static final String COMPONENT_RESOURCE_PATH_KEY = "component_resource_path_key"; //$NON-NLS-1$
-
- public static final int JAR_FILE_RESOURCE_TYPE = 1;
-
- public static final int JAR_DIRECTORY_RESOURCE_TYPE = JAR_FILE_RESOURCE_TYPE << 1;
-
- public static Object findCompositeComponentContainer(IProject project,
- IDOMElement jsf2Element) {
- ElementImpl elementImpl = (ElementImpl) jsf2Element;
- String nameSpaceURI = elementImpl.getNamespaceURI();
- if (nameSpaceURI == null || nameSpaceURI.indexOf(JSF2_URI_PREFIX) == -1) {
- return null;
- }
- String nodeName = jsf2Element.getLocalName();
- String relativeLocation = "/resources" + nameSpaceURI.replaceFirst( //$NON-NLS-1$
- JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
- IVirtualComponent component = ComponentCore.createComponent(project);
- if (component != null) {
- IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
- new Path("/")); //$NON-NLS-1$
- IContainer folder = webRootFolder.getUnderlyingFolder();
- IPath path = folder.getFullPath().append(relativeLocation).append(
- "/" + nodeName + ".xhtml"); //$NON-NLS-1$ //$NON-NLS-2$
- IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
- if (file.isAccessible()) {
- return file;
- }
- }
- return searchInClassPath(project, "META-INF" + relativeLocation //$NON-NLS-1$
- + "/" + nodeName + ".xhtml", JAR_FILE_RESOURCE_TYPE); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- private static JarEntryResource searchInClassPath(IProject project,
- String classPathResource, int jarResourceType) {
- IJavaProject javaProject = JavaCore.create(project);
- try {
- for (IPackageFragmentRoot fragmentRoot : javaProject
- .getAllPackageFragmentRoots()) {
- if (fragmentRoot instanceof JarPackageFragmentRoot) {
- JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) fragmentRoot;
- ZipEntry zipEntry = jarPackageFragmentRoot.getJar()
- .getEntry(classPathResource);
- if (zipEntry != null) {
- if (jarResourceType == JAR_FILE_RESOURCE_TYPE) {
- JarEntryFile fileInJar = new JarEntryFile(
- classPathResource);
- fileInJar.setParent(jarPackageFragmentRoot);
- return fileInJar;
- }
- if (jarResourceType == JAR_DIRECTORY_RESOURCE_TYPE) {
- JarEntryDirectory directoryInJar = new JarEntryDirectory(
- classPathResource);
- directoryInJar.setParent(jarPackageFragmentRoot);
- return directoryInJar;
- }
- }
- }
- }
- } catch (JavaModelException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- }
- return null;
- }
-
- public static Object findResourcesFolderContainerByNameSpace(
- IProject project, String nameSpaceURI) {
- if (nameSpaceURI == null || nameSpaceURI.indexOf(JSF2_URI_PREFIX) == -1) {
- return null;
- }
- String relativeLocation = "/resources" + nameSpaceURI.replaceFirst( //$NON-NLS-1$
- JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
- IVirtualComponent component = ComponentCore.createComponent(project);
- if (component != null) {
- IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
- new Path("/")); //$NON-NLS-1$
- IContainer folder = webRootFolder.getUnderlyingFolder();
- IPath path = folder.getFullPath().append(relativeLocation);
- IFolder resFolder = ResourcesPlugin.getWorkspace().getRoot()
- .getFolder(path);
- if (resFolder.isAccessible()) {
- return resFolder;
- }
- }
- return searchInClassPath(project,
- "META-INF" + relativeLocation, JAR_DIRECTORY_RESOURCE_TYPE); //$NON-NLS-1$
- }
-
- public static boolean isResourcesFolderExists(IProject project,
- String nameSpaceURI) {
- return findResourcesFolderContainerByNameSpace(project, nameSpaceURI) == null ? false
- : true;
- }
-
- public static IFolder createResourcesFolderByNameSpace(IProject project,
- String nameSpaceURI) throws CoreException {
- IFolder compositeCompResFolder = null;
- String relativeLocation = nameSpaceURI.replaceFirst(
- JSF2ResourceUtil.JSF2_URI_PREFIX, ""); //$NON-NLS-1$
- if (!project.exists()) {
- return null;
- }
- if (!project.isAccessible()) {
- try {
- project.open(new NullProgressMonitor());
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- return compositeCompResFolder;
- }
- }
- IVirtualComponent component = ComponentCore.createComponent(project);
- if (component != null) {
- IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
- new Path("/")); //$NON-NLS-1$
- IContainer folder = webRootFolder.getUnderlyingFolder();
- IFolder webFolder = ResourcesPlugin.getWorkspace().getRoot()
- .getFolder(folder.getFullPath());
- IFolder resourcesFolder = webFolder.getFolder("resources"); //$NON-NLS-1$
- NullProgressMonitor monitor = new NullProgressMonitor();
- if (!resourcesFolder.exists()) {
- resourcesFolder.create(true, true, monitor);
- }
- String[] segments = new Path(relativeLocation).segments();
- compositeCompResFolder = resourcesFolder;
- for (int i = 0; i < segments.length; i++) {
- compositeCompResFolder = compositeCompResFolder
- .getFolder(segments[i]);
- if (!compositeCompResFolder.exists()) {
- compositeCompResFolder.create(true, true, monitor);
- }
- }
-
- }
- return compositeCompResFolder;
- }
-
- public static IFile createCompositeComponentFile(IProject project,
- IPath resourceRelativePath) throws CoreException {
- IFile compositeCompResFile = null;
- if (!project.exists()) {
- return null;
- }
- if (!project.isAccessible()) {
- try {
- project.open(new NullProgressMonitor());
- } catch (CoreException e) {
- JSFModelPlugin.getPluginLog().logError(e);
- return compositeCompResFile;
- }
- }
- IVirtualComponent component = ComponentCore.createComponent(project);
- if (component != null) {
- IVirtualFolder webRootFolder = component.getRootFolder().getFolder(
- new Path("/")); //$NON-NLS-1$
- IContainer folder = webRootFolder.getUnderlyingFolder();
- IFolder webFolder = ResourcesPlugin.getWorkspace().getRoot()
- .getFolder(folder.getFullPath());
- IFolder resourcesFolder = webFolder.getFolder("resources"); //$NON-NLS-1$
- NullProgressMonitor monitor = new NullProgressMonitor();
- if (!resourcesFolder.exists()) {
- resourcesFolder.create(true, true, monitor);
- }
- String[] segments = resourceRelativePath.segments();
- IFolder componentPathFolder = resourcesFolder;
- for (int i = 0; i < segments.length - 1; i++) {
- componentPathFolder = componentPathFolder
- .getFolder(segments[i]);
- if (!componentPathFolder.exists()) {
- componentPathFolder.create(true, true, monitor);
- }
- }
- compositeCompResFile = componentPathFolder
- .getFile(segments[segments.length - 1]);
- if (!compositeCompResFile.exists()) {
- compositeCompResFile.create(JSF2TemplateManager.getManager()
- .createStreamFromTemplate("composite.xhtml"), true, //$NON-NLS-1$
- monitor);
- } else {
- compositeCompResFile = JSF2ComponentModelManager.getManager()
- .revalidateCompositeComponentFile(compositeCompResFile);
- }
- }
- return compositeCompResFile;
- }
-
- public static IFile createCompositeComponentFile(IProject project,
- IPath resourceRelativePath, String[] attrNames)
- throws CoreException {
- IFile jsf2ResFile = createCompositeComponentFile(project,
- resourceRelativePath);
- if (jsf2ResFile == null) {
- return null;
- }
- if (attrNames == null || attrNames.length == 0) {
- return jsf2ResFile;
- }
- return JSF2ComponentModelManager.getManager()
- .updateJSF2CompositeComponentFile(jsf2ResFile, attrNames);
- }
-
-}
More information about the jbosstools-commits
mailing list