[jbosstools-commits] JBoss Tools SVN: r22510 - in trunk/jsf/plugins/org.jboss.tools.jsf: META-INF and 6 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Jun 3 08:21:58 EDT 2010


Author: yzhishko
Date: 2010-06-03 08:21:57 -0400 (Thu, 03 Jun 2010)
New Revision: 22510

Added:
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionFactory.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionManager.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameDescriptor.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameProcessor.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameRefactoringWizard.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/IRenameDescriptor.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameAction.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameRefactoring.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceManager.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceStarter.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredChanges.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredTextFileChange.java
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/view/
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/view/StructuredChangesPreviewViewer.java
Modified:
   trunk/jsf/plugins/org.jboss.tools.jsf/META-INF/MANIFEST.MF
   trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
   trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java
Log:
https://jira.jboss.org/browse/JBIDE-5943 - possibility to refactor jsf component attributes names was added.

https://jira.jboss.org/browse/JBIDE-6276 - primary preview was created

Modified: trunk/jsf/plugins/org.jboss.tools.jsf/META-INF/MANIFEST.MF
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/META-INF/MANIFEST.MF	2010-06-03 12:20:23 UTC (rev 22509)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/META-INF/MANIFEST.MF	2010-06-03 12:21:57 UTC (rev 22510)
@@ -47,7 +47,10 @@
  org.eclipse.jst.j2ee,
  org.eclipse.ui.ide,
  org.eclipse.wst.html.core;bundle-version="1.1.300",
- org.eclipse.wst.sse.ui;bundle-version="1.1.102"
+ org.eclipse.wst.sse.ui;bundle-version="1.1.102",
+ org.eclipse.ltk.ui.refactoring,
+ org.eclipse.core.expressions;bundle-version="3.4.100",
+ org.jboss.tools.common.text.ext;bundle-version="3.1.0"
 Bundle-Version: 3.1.0.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5

Modified: trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml	2010-06-03 12:20:23 UTC (rev 22509)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/plugin.xml	2010-06-03 12:21:57 UTC (rev 22510)
@@ -645,4 +645,79 @@
        </enablement>
     </moveParticipant>
  </extension>
+ <extension
+       point="org.eclipse.ui.menus">
+    <menuContribution
+          locationURI="popup:refactorPopupMenuId">
+       <command
+             commandId="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             label="Re&amp;name"
+             style="push">
+          <visibleWhen
+                checkEnabled="false">
+             <reference
+                   definitionId="org.jboss.tools.ui.structuredEditor">
+             </reference>
+          </visibleWhen>
+       </command>
+    </menuContribution>
+    <menuContribution
+          locationURI="menu:refactorMenuId">
+       <command
+             commandId="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             label="Re&amp;name"
+             style="push">
+          <visibleWhen
+                checkEnabled="false">
+             <reference
+                   definitionId="org.jboss.tools.ui.structuredEditor">
+             </reference>
+          </visibleWhen>
+       </command>
+    </menuContribution>
+ </extension>
+ <extension
+       point="org.eclipse.ui.handlers">
+    <handler
+          class="org.jboss.tools.jsf.jsf2.refactoring.action.rename.RenameAction"
+          commandId="org.eclipse.jdt.ui.edit.text.java.rename.element">
+    </handler>
+ </extension>
+ <extension
+       point="org.eclipse.ui.editorActions">
+    <editorContribution
+          id="org.jboss.tools.jsf.jsf2.refactor.rename"
+          targetID="org.jboss.tools.jst.jsp.jspeditor.JSPTextEditor">
+       <action
+             class="org.jboss.tools.jsf.jsf2.refactoring.action.rename.RenameAction"
+             definitionId="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             id="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             label="Re&amp;name"
+             style="push">
+       </action>
+    </editorContribution>
+    <editorContribution
+          id="org.jboss.tools.jsf.jsf2.refactor.rename"
+          targetID="org.jboss.tools.jst.jsp.jspeditor.HTMLTextEditor">
+       <action
+             class="org.jboss.tools.jsf.jsf2.refactoring.action.rename.RenameAction"
+             definitionId="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             id="org.eclipse.jdt.ui.edit.text.java.rename.element"
+             label="Re&amp;name"
+             style="push">
+       </action>
+    </editorContribution>
+ </extension>
+ <extension
+       point="org.eclipse.ltk.ui.refactoring.changePreviewViewers">
+    <changePreviewViewer
+          class="org.jboss.tools.jsf.jsf2.refactoring.view.StructuredChangesPreviewViewer"
+          id="org.jboss.tools.jsf.jsf2.refactor.structuredpreview">
+       <enablement>
+          <instanceof
+                value="org.jboss.tools.jsf.jsf2.refactoring.core.StructuredChanges">
+          </instanceof>
+       </enablement>
+    </changePreviewViewer>
+ </extension>
 </plugin>

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionFactory.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionFactory.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionFactory.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,74 @@
+package org.jboss.tools.jsf.jsf2.refactoring;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.jboss.tools.jsf.jsf2.refactoring.action.rename.CompositeAttributeRenameDescriptor;
+import org.jboss.tools.jsf.jsf2.refactoring.action.rename.IRenameDescriptor;
+import org.jboss.tools.jsf.jsf2.util.JSF2ResourceUtil;
+
+ at SuppressWarnings("restriction")
+public class RefactoringActionFactory {
+
+	public static IRenameDescriptor createRenameDescriptor(
+			StructuredTextEditor editorPart) {
+		ISelection selection = editorPart.getEditorSite()
+				.getSelectionProvider().getSelection();
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() > 1) {
+				return null;
+			}
+			Object object = structuredSelection.getFirstElement();
+			if (object instanceof IDOMAttr) {
+				return createRenameDescriptor((IDOMAttr) object, editorPart
+						.getTextViewer(), ((IFileEditorInput) editorPart
+						.getEditorInput()).getFile());
+			}
+		}
+		return null;
+	}
+
+	public static IRenameDescriptor createRenameDescriptor(IDOMAttr attr,
+			ISourceViewer sourceViewer, IFile file) {
+		IRenameDescriptor renameDescriptor = null;
+		String uri = createJSF2URIFromPath(file.getParent().getFullPath());
+		if (JSF2ResourceUtil.JSF2_URI_PREFIX.equals(uri)) {
+			return renameDescriptor;
+		}
+		if (!attr.getOwnerElement().getNamespaceURI().trim().equalsIgnoreCase(
+				JSF2ResourceUtil.JSF2_URI_PREFIX)) {
+			return renameDescriptor;
+		}
+		if (!"attribute".equals(attr.getOwnerElement().getLocalName())) { //$NON-NLS-1$
+			return renameDescriptor;
+		}
+		int offset = sourceViewer.getSelectedRange().x;
+		if (offset > attr.getValueRegionStartOffset()
+				&& offset < attr.getValueRegionStartOffset()
+						+ attr.getValueRegionText().length()) {
+			renameDescriptor = new CompositeAttributeRenameDescriptor(attr, file, uri);
+		}
+		return renameDescriptor;
+	}
+	
+	private static 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();
+	}
+
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionManager.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionManager.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/RefactoringActionManager.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,73 @@
+package org.jboss.tools.jsf.jsf2.refactoring;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
+import org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter;
+import org.eclipse.jdt.ui.refactoring.RefactoringSaveHelper;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.jboss.tools.jsf.jsf2.refactoring.action.rename.IRenameDescriptor;
+import org.jboss.tools.jsf.jsf2.refactoring.action.rename.RenameUserInterfaceManager;
+
+ at SuppressWarnings("restriction")
+public class RefactoringActionManager {
+
+	public static final String REFACTOR_RENAME_ACTION_ID = "_refactor_rename_action_id"; //$NON-NLS-1$
+
+	private static final RefactoringActionManager instance = new RefactoringActionManager();
+
+	private RefactoringActionManager() {
+
+	}
+
+	public static RefactoringActionManager getManager() {
+		return instance;
+	}
+
+	public boolean checkActionAvailable(String actionID, IDOMNode node) {
+		return getAvailableActionIDs(node).contains(actionID);
+	}
+
+	public boolean checkActionAvailable(String actionID,
+			EvaluationContext context) {
+		return getAvailableActionIDs(context).contains(actionID);
+	}
+
+	public Set<String> getAvailableActionIDs(IDOMNode node) {
+		Set<String> ids = new HashSet<String>();
+		return ids;
+	}
+
+	public Set<String> getAvailableActionIDs(EvaluationContext context) {
+		System.out.println(context.getDefaultVariable());
+		Set<String> ids = new HashSet<String>();
+		return ids;
+	}
+
+	public void renameWithAction(IAction action, IRenameDescriptor descriptor) {
+		Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+				.getShell();
+		if (descriptor == null) {
+			MessageDialog.openInformation(parent,
+					RefactoringMessages.RenameAction_rename,
+					"Refactoring is not available in the current place"); //$NON-NLS-1$
+			return;
+		}
+		descriptor.getRenameRefactoring().setProcessor(
+				descriptor.getRefactoringProcessor());
+		UserInterfaceStarter starter = RenameUserInterfaceManager.getDefault()
+				.getStarter(descriptor.getRenameRefactoring());
+		try {
+			starter.activate(descriptor.getRenameRefactoring(), parent,
+					RefactoringSaveHelper.SAVE_NOTHING);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameDescriptor.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameDescriptor.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameDescriptor.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,45 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+
+
+ at SuppressWarnings("restriction")
+public class CompositeAttributeRenameDescriptor implements IRenameDescriptor{
+
+	private String currentAttrName;
+	private RenameRefactoring refactoring;
+	private CompositeAttributeRenameProcessor processor;
+	
+	public CompositeAttributeRenameDescriptor(IDOMAttr attr, IFile file, String URI) {
+		this.setCurrentAttrName(attr.getValue());
+		refactoring = new RenameRefactoring();
+		processor = new CompositeAttributeRenameProcessor(file.getProject());
+		processor.setCurrentAttrName(getCurrentName());
+		processor.setAttrToRename(attr);
+		processor.setBaseFile(file);
+		processor.setURI(URI);
+	}
+	
+	public RenameUserInterfaceManager getInterfaceManager() {
+		return RenameUserInterfaceManager.getDefault();
+	}
+
+	public RenameRefactoring getRenameRefactoring() {
+		return refactoring;
+	}
+
+	public void setCurrentAttrName(String currentAttrName) {
+		this.currentAttrName = currentAttrName;
+	}
+
+	public String getCurrentName() {
+		return currentAttrName;
+	}
+
+	public RefactoringProcessor getRefactoringProcessor() {
+		return processor;
+	}
+	
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameProcessor.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameProcessor.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameProcessor.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,209 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jdt.internal.corext.refactoring.changes.TextChangeCompatibility;
+import org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.GroupCategorySet;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RenameProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.jboss.tools.jsf.jsf2.refactoring.core.StructuredChanges;
+import org.jboss.tools.jsf.jsf2.refactoring.core.StructuredTextFileChange;
+import org.jboss.tools.jsf.jsf2.util.JSF2ComponentUtil;
+import org.w3c.dom.Attr;
+import org.eclipse.ltk.core.refactoring.GroupCategory;
+import org.eclipse.text.edits.ReplaceEdit;
+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;
+
+ at SuppressWarnings("restriction")
+public class CompositeAttributeRenameProcessor extends RenameProcessor
+		implements INameUpdating {
+
+	private static final Pattern PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.]*+"); //$NON-NLS-1$
+	private static final GroupCategorySet CATEGORY_COMPOSITE_ATTR_RENAME = new GroupCategorySet(
+			new GroupCategory(
+					"org.jboss.tools.jsf.jsf2.refactoring.rename.composite.attr.type", "Rename composite attribute changes", "Changes to rename composite attribute")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	public static String IDENTIFIER = "org.jboss.tools.jsf.jsf2.refactor.compositeattrrenameprocessor"; //$NON-NLS-1$
+	private String newAttrName;
+	private String currentAttrName;
+	private IProject project;
+	private String URI;
+	private IFile baseFile;
+	private IDOMAttr attrToRename;
+
+	public void setCurrentAttrName(String currentAttrName) {
+		this.currentAttrName = currentAttrName;
+	}
+
+	public CompositeAttributeRenameProcessor(IProject project) {
+		this.setProject(project);
+	}
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		return null;
+	}
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		return null;
+	}
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		StructuredChanges changes = new StructuredChanges(
+				"Composite attribute name changes"); //$NON-NLS-1$
+		StructuredTextFileChange baseFileChange = new StructuredTextFileChange(baseFile.getFullPath().toOSString(), baseFile);
+		ReplaceEdit edit = new ReplaceEdit(attrToRename.getValueRegionStartOffset()+1, attrToRename.getValue().length(), getNewElementName());
+		TextChangeCompatibility.addTextEdit(baseFileChange, "Rename composite attribute name", edit, CATEGORY_COMPOSITE_ATTR_RENAME); //$NON-NLS-1$
+		changes.add(baseFileChange);
+		Map<IFile, List<IDOMNode>> nodesMap = JSF2ComponentUtil
+				.findCompositeComponentsWithURI(getProject(), getURI());
+		Set<Entry<IFile, List<IDOMNode>>> entries = nodesMap.entrySet();
+		for (Entry<IFile, List<IDOMNode>> entry : entries) {
+			StructuredTextFileChange fileChange = createFileChange(entry
+					.getKey(), entry.getValue());
+			if (fileChange != null) {
+				changes.add(fileChange);
+			}
+		}
+		return changes;
+	}
+
+	private StructuredTextFileChange createFileChange(IFile file,
+			List<IDOMNode> nodeList) {
+		StructuredTextFileChange fileChange = null;
+		for (IDOMNode domNode : nodeList) {
+			if (domNode instanceof IDOMElement) {
+				IDOMElement element = (IDOMElement) domNode;
+				Attr attr = element.getAttributeNode(getCurrentElementName());
+				if (attr instanceof IDOMAttr) {
+					IDOMAttr domAttr = (IDOMAttr) attr;
+					if (fileChange == null) {
+						fileChange = new StructuredTextFileChange(file
+								.getFullPath().toOSString(), file);
+					}
+					ReplaceEdit edit = new ReplaceEdit(
+							domAttr.getStartOffset(), domAttr.getName()
+									.length(), getNewElementName());
+					TextChangeCompatibility
+							.addTextEdit(
+									fileChange,
+									"Rename Compoiste Attribute", edit, CATEGORY_COMPOSITE_ATTR_RENAME); //$NON-NLS-1$
+				}
+			}
+		}
+		return fileChange;
+	}
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	@Override
+	public String getIdentifier() {
+		return IDENTIFIER;
+	}
+
+	@Override
+	public String getProcessorName() {
+		return "Rename Composite Attribute"; //$NON-NLS-1$
+	}
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return true;
+	}
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+	public RefactoringStatus checkNewElementName(String newName)
+			throws CoreException {
+		RefactoringStatus status = null;
+		Matcher matcher = PATTERN.matcher(getNewElementName());
+		int includings = 0;
+		String matchString = null;
+		while (matcher.find()) {
+			includings++;
+			matchString = matcher.group();
+		}
+		if (includings != 1 || !matchString.equals(getNewElementName())) {
+			status = RefactoringStatus.createFatalErrorStatus("Attribute name is not valid"); //$NON-NLS-1$
+		}
+		return status;
+	}
+
+	public String getCurrentElementName() {
+		return currentAttrName;
+	}
+
+	public Object getNewElement() throws CoreException {
+		return null;
+	}
+
+	public String getNewElementName() {
+		return newAttrName;
+	}
+
+	public void setNewElementName(String newName) {
+		this.newAttrName = newName;
+	}
+
+	public void setProject(IProject project) {
+		this.project = project;
+	}
+
+	public IProject getProject() {
+		return project;
+	}
+
+	public void setURI(String uRI) {
+		URI = uRI;
+	}
+
+	public String getURI() {
+		return URI;
+	}
+
+	public void setBaseFile(IFile baseFile) {
+		this.baseFile = baseFile;
+	}
+
+	public IFile getBaseFile() {
+		return baseFile;
+	}
+
+	public void setAttrToRename(IDOMAttr attrToRename) {
+		this.attrToRename = attrToRename;
+	}
+
+	public IDOMAttr getAttrToRename() {
+		return attrToRename;
+	}
+
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameRefactoringWizard.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameRefactoringWizard.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/CompositeAttributeRenameRefactoringWizard.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,19 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.ltk.core.refactoring.Refactoring;
+
+ at SuppressWarnings("restriction")
+public class CompositeAttributeRenameRefactoringWizard extends
+		org.eclipse.jdt.internal.ui.refactoring.reorg.RenameRefactoringWizard {
+
+	public CompositeAttributeRenameRefactoringWizard(Refactoring refactoring) {
+		super(refactoring,
+				"Rename Composite Attribute", //$NON-NLS-1$
+				"Enter New Name for Composite Attribute", //$NON-NLS-1$
+				JavaPluginImages.DESC_WIZBAN_REFACTOR,
+				IJavaHelpContextIds.RENAME_LOCAL_VARIABLE_WIZARD_PAGE);
+	}
+
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/IRenameDescriptor.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/IRenameDescriptor.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/IRenameDescriptor.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,15 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+
+public interface IRenameDescriptor {
+	
+	RenameRefactoring getRenameRefactoring();
+	
+	RenameUserInterfaceManager getInterfaceManager();
+	
+	String getCurrentName();
+	
+	RefactoringProcessor getRefactoringProcessor();
+
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameAction.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameAction.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameAction.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,79 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IEditorActionDelegate;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.jboss.tools.common.text.ext.IMultiPageEditor;
+import org.jboss.tools.jsf.jsf2.refactoring.RefactoringActionFactory;
+import org.jboss.tools.jsf.jsf2.refactoring.RefactoringActionManager;
+
+ at SuppressWarnings("restriction")
+public class RenameAction extends AbstractHandler implements
+		IEditorActionDelegate {
+
+	private StructuredTextEditor textEditor;
+
+	private IRenameDescriptor descriptor;
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		return null;
+	}
+
+	@Override
+	public void setEnabled(Object evaluationContext) {
+	}
+
+	@Override
+	public boolean isHandled() {
+		return descriptor != null;
+	}
+
+	public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+		if (targetEditor instanceof IMultiPageEditor) {
+			textEditor = ((IMultiPageEditor) targetEditor).getSourceEditor();
+		}
+	}
+
+	public void run(IAction action) {
+		if (textEditor == null) {
+			reportRefactoringInfo();
+		} else {
+			IEditorInput input = textEditor.getEditorInput();
+			if (!(input instanceof IFileEditorInput)) {
+				reportRefactoringInfo();
+				return;
+			}
+			if (((IFileEditorInput) textEditor.getEditorInput()).getFile()
+					.getProject() == null) {
+				reportRefactoringInfo();
+				return;
+			}
+			descriptor = RefactoringActionFactory
+					.createRenameDescriptor(textEditor);
+			RefactoringActionManager.getManager().renameWithAction(action,
+					descriptor);
+		}
+		descriptor = null;
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+	private void reportRefactoringInfo() {
+		MessageDialog.openInformation(PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow().getShell(),
+				RefactoringMessages.RenameAction_rename,
+				"Refactoring is not available in the current place"); //$NON-NLS-1$
+	}
+
+}
\ No newline at end of file

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameRefactoring.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameRefactoring.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameRefactoring.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,8 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
+
+ at SuppressWarnings("deprecation")
+public class RenameRefactoring  extends ProcessorBasedRefactoring{
+	
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceManager.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceManager.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceManager.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,18 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.jdt.internal.ui.refactoring.UserInterfaceManager;
+
+ at SuppressWarnings("restriction")
+public class RenameUserInterfaceManager extends UserInterfaceManager {
+	
+	private static final RenameUserInterfaceManager fgInstance= new RenameUserInterfaceManager();
+
+	public static RenameUserInterfaceManager getDefault() {
+		return fgInstance;
+	}
+
+	private RenameUserInterfaceManager() {
+		put(CompositeAttributeRenameProcessor.class, RenameUserInterfaceStarter.class, CompositeAttributeRenameRefactoringWizard.class);
+	}
+	
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceStarter.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceStarter.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/action/rename/RenameUserInterfaceStarter.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,8 @@
+package org.jboss.tools.jsf.jsf2.refactoring.action.rename;
+
+import org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter;
+
+ at SuppressWarnings("restriction")
+public class RenameUserInterfaceStarter extends UserInterfaceStarter {
+
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredChanges.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredChanges.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredChanges.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,16 @@
+package org.jboss.tools.jsf.jsf2.refactoring.core;
+
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+
+public class StructuredChanges extends CompositeChange {
+
+	public StructuredChanges(String name, Change[] children) {
+		super(name, children);
+	}
+
+	public StructuredChanges(String name){
+		super(name);
+	}
+	
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredTextFileChange.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredTextFileChange.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/core/StructuredTextFileChange.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,43 @@
+package org.jboss.tools.jsf.jsf2.refactoring.core;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.jboss.tools.common.text.ext.IMultiPageEditor;
+
+public class StructuredTextFileChange extends TextFileChange{
+
+	public StructuredTextFileChange(String name, IFile file) {
+		super(name, file);
+	}
+	
+	
+	@Override
+	protected void releaseDocument(final IDocument document, IProgressMonitor pm)
+			throws CoreException {
+		super.releaseDocument(document, pm);
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				IEditorPart[] editors = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getDirtyEditors();
+				for (IEditorPart editorPart : editors) {
+					if (editorPart instanceof IMultiPageEditor) {
+						StructuredTextEditor editor = ((IMultiPageEditor) editorPart).getSourceEditor();
+						IDocument editorDocument = editor.getTextViewer().getDocument();
+						if (document == editorDocument) {
+							PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().saveEditor(editorPart, false);
+							return;
+						}
+					}
+				}
+			}
+			
+		});
+	}
+	
+}

Added: trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/view/StructuredChangesPreviewViewer.java
===================================================================
--- trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/view/StructuredChangesPreviewViewer.java	                        (rev 0)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/refactoring/view/StructuredChangesPreviewViewer.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -0,0 +1,8 @@
+package org.jboss.tools.jsf.jsf2.refactoring.view;
+
+import org.eclipse.ltk.internal.ui.refactoring.TextEditChangePreviewViewer;
+
+ at SuppressWarnings("restriction")
+public class StructuredChangesPreviewViewer extends TextEditChangePreviewViewer {
+	
+}

Modified: 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/JSF2ComponentUtil.java	2010-06-03 12:20:23 UTC (rev 22509)
+++ trunk/jsf/plugins/org.jboss.tools.jsf/src/org/jboss/tools/jsf/jsf2/util/JSF2ComponentUtil.java	2010-06-03 12:21:57 UTC (rev 22510)
@@ -13,12 +13,22 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+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.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.jboss.tools.jsf.jsf2.model.JSF2ComponentModelManager;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -126,4 +136,53 @@
 		return false;
 	}
 
+	public static Map<IFile, List<IDOMNode>> findCompositeComponentsWithURI(
+			IResource resource, String URI) throws CoreException {
+		Map<IFile, List<IDOMNode>> nodeMap = new HashMap<IFile, List<IDOMNode>>();
+		findCompositeComponentsWithURI(resource, nodeMap, URI);
+		return nodeMap;
+	}
+
+	private static void findCompositeComponentsWithURI(IResource resource,
+			Map<IFile, List<IDOMNode>> nodeMap, String URI)
+			throws CoreException {
+		if (resource instanceof IFile) {
+			IFile file = (IFile) resource;
+			IDOMDocument document = JSF2ComponentModelManager
+					.getReadableDOMDocument(file);
+			Map<String, List<Element>> map = findCompositeComponents(document);
+			Set<Entry<String, List<Element>>> entries = map.entrySet();
+			List<IDOMNode> nodes = new ArrayList<IDOMNode>();
+			for (Iterator<Entry<String, List<Element>>> iterator = entries
+					.iterator(); iterator.hasNext();) {
+				Entry<String, List<Element>> entry = (Entry<String, List<Element>>) iterator
+						.next();
+				if (URI.equals(entry.getKey())) {
+					for (Element element : entry.getValue()) {
+						if (element instanceof IDOMNode) {
+							nodes.add((IDOMNode) element);
+						}
+					}
+				}
+			}
+			if (!nodes.isEmpty()) {
+				nodeMap.put(file, nodes);
+			}
+		} else if (resource instanceof IProject) {
+			IResource[] children = ((IProject) resource).members();
+			if (children != null) {
+				for (int i = 0; i < children.length; i++) {
+					findCompositeComponentsWithURI(children[i], nodeMap, URI);
+				}
+			}
+		} else if (resource instanceof IFolder) {
+			IResource[] children = ((IFolder) resource).members();
+			if (children != null) {
+				for (int i = 0; i < children.length; i++) {
+					findCompositeComponentsWithURI(children[i], nodeMap, URI);
+				}
+			}
+		}
+	}
+
 }



More information about the jbosstools-commits mailing list