Author: scabanovich
Date: 2009-03-20 09:58:12 -0400 (Fri, 20 Mar 2009)
New Revision: 14281
Added:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageConfigChange.java
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageParticipant.java
Modified:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/META-INF/MANIFEST.MF
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/plugin.xml
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/SeamPagesXMLMessages.java
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/messages.properties
Log:
JBIDE-3808
Modified: trunk/seam/plugins/org.jboss.tools.seam.pages.xml/META-INF/MANIFEST.MF
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.pages.xml/META-INF/MANIFEST.MF 2009-03-20
12:24:37 UTC (rev 14280)
+++ trunk/seam/plugins/org.jboss.tools.seam.pages.xml/META-INF/MANIFEST.MF 2009-03-20
13:58:12 UTC (rev 14281)
@@ -11,6 +11,7 @@
org.jboss.tools.seam.pages.xml.model,
org.jboss.tools.seam.pages.xml.model.helpers,
org.jboss.tools.seam.pages.xml.model.handlers,
+ org.jboss.tools.seam.pages.xml.model.refactoring,
org.jboss.tools.seam.pages.xml.model.impl
Require-Bundle: org.jboss.tools.jst.web;visibility:=reexport,
org.eclipse.ui.ide,
@@ -23,6 +24,7 @@
org.eclipse.ui,
org.eclipse.jface,
org.eclipse.wst.sse.core,
+ org.eclipse.wst.common.modulecore,
org.eclipse.ltk.core.refactoring,
org.eclipse.ltk.ui.refactoring,
org.eclipse.wst.xml.core,
@@ -35,5 +37,6 @@
org.jboss.tools.seam.pages.xml.model.handlers,
org.jboss.tools.seam.pages.xml.model.helpers,
org.jboss.tools.seam.pages.xml.model.helpers.autolayout,
+ org.jboss.tools.seam.pages.xml.model.refactoring,
org.jboss.tools.seam.pages.xml.model.impl
Modified: trunk/seam/plugins/org.jboss.tools.seam.pages.xml/plugin.xml
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.pages.xml/plugin.xml 2009-03-20 12:24:37 UTC
(rev 14280)
+++ trunk/seam/plugins/org.jboss.tools.seam.pages.xml/plugin.xml 2009-03-20 13:58:12 UTC
(rev 14281)
@@ -115,4 +115,29 @@
</catalogContribution>
</extension>
+
+ <extension
+ point="org.eclipse.ltk.core.refactoring.renameParticipants">
+
+ <renameParticipant
+
class="org.jboss.tools.seam.pages.xml.model.refactoring.SeamPagesRenamePageParticipant"
+
id="org.jboss.tools.seam.pages.xml.model.refactoring.SeamPagesRenamePageParticipant"
+ name="seampages-RenamePageParticipant">
+ <enablement>
+ <with variable="affectedNatures">
+ <iterate operator="or">
+ <equals value="org.jboss.tools.seam.core.seamnature"/>
+ </iterate>
+ </with>
+ <with variable="element">
+ <or>
+ <instanceof
value="org.eclipse.core.resources.IFile"/>
+ <instanceof
value="org.jboss.tools.common.model.filesystems.impl.FileAnyImpl"/>
+ </or>
+ </with>
+ </enablement>
+ </renameParticipant>
+
+ </extension>
+
</plugin>
\ No newline at end of file
Modified:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/SeamPagesXMLMessages.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/SeamPagesXMLMessages.java 2009-03-20
12:24:37 UTC (rev 14280)
+++
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/SeamPagesXMLMessages.java 2009-03-20
13:58:12 UTC (rev 14281)
@@ -18,6 +18,9 @@
public static String THE_VIEW_WITH_PATH_IS_ALREADY_CREATED;
public static String TEMPLATE_IS_NOT_FOUND;
+ public static String PAGES_CONFIG_CHANGES;
+ public static String UPDATE_REFERENCE_TO_PAGE;
+
private SeamPagesXMLMessages() {
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/messages.properties
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/messages.properties 2009-03-20
12:24:37 UTC (rev 14280)
+++
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/messages.properties 2009-03-20
13:58:12 UTC (rev 14281)
@@ -5,3 +5,5 @@
TEMPLATE_DOES_NOT_EXIST = Template does not exist.
THE_VIEW_WITH_PATH_IS_ALREADY_CREATED = The View with 'view id' '{0}' is
already created.\n
TEMPLATE_IS_NOT_FOUND = Template {0} is not found.
+PAGES_CONFIG_CHANGES = Pages Config Changes
+UPDATE_REFERENCE_TO_PAGE = Update reference to page
Added:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageConfigChange.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageConfigChange.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageConfigChange.java 2009-03-20
13:58:12 UTC (rev 14281)
@@ -0,0 +1,194 @@
+package org.jboss.tools.seam.pages.xml.model.refactoring;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+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.Path;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+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.jboss.tools.common.meta.action.XActionInvoker;
+import org.jboss.tools.common.model.XModelException;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.filesystems.FileSystemsHelper;
+import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
+import org.jboss.tools.common.model.refactoring.RefactoringHelper;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
+import org.jboss.tools.jst.web.model.ReferenceObject;
+import org.jboss.tools.seam.pages.xml.SeamPagesXMLMessages;
+import org.jboss.tools.seam.pages.xml.model.SeamPagesConstants;
+import org.jboss.tools.seam.pages.xml.model.handlers.RenameViewSupport;
+import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramHelper;
+import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramStructureHelper;
+
+public class SeamPagesRenamePageConfigChange extends CompositeChange {
+ XModelObject object;
+ String newName;
+
+ String oldText;
+ String newText;
+ XModelObject[] fs = new XModelObject[0];
+
+ Properties replacements = new Properties();
+
+ public SeamPagesRenamePageConfigChange(XModelObject object, String newName) {
+ super(SeamPagesXMLMessages.PAGES_CONFIG_CHANGES);
+ this.object = object;
+ this.newName = newName;
+ replacements.clear();
+ oldText = XModelObjectLoaderUtil.getResourcePath(object);
+ if(!EclipseResourceUtil.hasNature(object.getModel(),
"org.jboss.tools.jsf.jsfnature")) {
+ IFile file = (IFile)object.getAdapter(IFile.class);
+ if(file != null) {
+ IPath root = getRootPath(file.getProject());
+ if(root.isPrefixOf(file.getFullPath())) {
+ oldText = file.getFullPath().removeFirstSegments(root.segmentCount()).toString();
+ if(!oldText.startsWith("/")) oldText = "/" + oldText;
+ }
+
+ }
+ }
+ int i = oldText.lastIndexOf("/");
+ newText = oldText.substring(0, i + 1) + newName;
+ replacements.setProperty(oldText, newText);
+ addChanges();
+ }
+
+ IPath getRootPath(IProject project) {
+ IVirtualComponent component = ComponentCore.createComponent(project);
+ if(component == null) return null;
+ return component.getRootFolder().getWorkspaceRelativePath();
+ }
+
+ private void addChanges() {
+ if(object == null) return;
+ XModelObject fso = FileSystemsHelper.getFileSystems(object.getModel());
+ if(fso == null) return;
+ ArrayList<XModelObject> list = new ArrayList<XModelObject>();
+ collectFiles(list, fso);
+ fs = list.toArray(new XModelObject[0]);
+ addChanges(fs);
+ }
+
+ private void addChanges(XModelObject[] objects) {
+ for (int i = 0; i < objects.length; i++) {
+ int c = getChildren().length;
+ RefactoringHelper.addChanges(objects[i], replacements, this);
+ if(c == getChildren().length) {
+ final XModelObject gs = findGroup(objects[i]);
+ if(gs != null) {
+ add(new Change() {
+ public String getName() {
+ return SeamPagesXMLMessages.UPDATE_REFERENCE_TO_PAGE +
gs.getAttributeValue(SeamPagesConstants.ATTR_PATH);
+ }
+ public void initializeValidationData(IProgressMonitor pm) {
+ }
+ public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
+ return null;
+ }
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ return null;
+ }
+ public Object getModifiedElement() {
+ return null;
+ }
+ });
+ }
+ }
+ }
+ }
+
+ XModelObject findGroup(XModelObject f) {
+ XModelObject diagram = SeamPagesDiagramStructureHelper.instance.getDiagram(f);
+ if(diagram == null) return null;
+ XModelObject[] is = SeamPagesDiagramStructureHelper.instance.getItems(diagram);
+ for (int i = 0; i < is.length; i++) {
+ String path = is[i].getAttributeValue(SeamPagesConstants.ATTR_PATH);
+ if(path != null && path.equals(oldText)) return is[i];
+ }
+ return null;
+ }
+
+ private void collectFiles(ArrayList<XModelObject> list, XModelObject object) {
+ if(object.getFileType() == XModelObject.SYSTEM) {
+ if(object.getModelEntity().getName().equals("FileSystemJar")) {
+ return;
+ }
+ }
+ if(object.getFileType() == XModelObject.FILE) {
+ if(object.getModelEntity().getName().startsWith(SeamPagesConstants.ENT_FILE_SEAM_PAGE))
{
+ if(!isOverlapped(object)) list.add(object);
+ }
+ } else {
+ if("true".equals(object.get("overlapped"))) return;
+ XModelObject[] cs = object.getChildren();
+ for (XModelObject o: cs) {
+ collectFiles(list, o);
+ }
+ }
+ }
+ protected boolean isOverlapped(XModelObject object) {
+ XModelObject p = object.getParent();
+ while(p != null && !"true".equals(p.get("overlapped"))) p =
p.getParent();
+ return (p != null);
+ }
+
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ XModelObject parent = object.getParent();
+ if(parent instanceof FolderImpl) {
+ ((FolderImpl)parent).update();
+ }
+ for (int i = 0; i < fs.length; i++) {
+ performChangeInFile(fs[i]);
+ }
+ for (int i = 0; i < fs.length; i++) {
+ if(fs[i].isModified()) {
+ XActionInvoker.invoke("SaveActions.Save", fs[i], null);
+ }
+ }
+ return null;
+ }
+
+ private void performChangeInFile(XModelObject f) throws XModelException {
+ replaceViewIDs(f, oldText, newText);
+ XModelObject g = findGroup(f);
+ if(g != null) {
+ SeamPagesDiagramHelper h =
SeamPagesDiagramHelper.getHelper(SeamPagesDiagramStructureHelper.instance.getDiagram(f));
+ h.addUpdateLock(this);
+ try {
+ RenameViewSupport.replace((ReferenceObject)g, oldText, newText);
+ } finally {
+ h.removeUpdateLock(this);
+ h.updateDiagram();
+ }
+ }
+ }
+
+ static String[] ATTRIBUTES = {"no conversation view id", "login view
id"};
+
+ static void replaceViewIDs(XModelObject f, String oldText, String newText) throws
XModelException {
+ if(oldText == null || oldText.length() == 0) return;
+ for (int i = 0; i < ATTRIBUTES.length; i++) {
+ if(f.getModelEntity().getAttribute(ATTRIBUTES[i]) != null) {
+ String v = f.getAttributeValue(ATTRIBUTES[i]);
+ if(oldText.equals(v)) f.getModel().editObjectAttribute(f, ATTRIBUTES[i], newText);
+ }
+ }
+ if(f.getModelEntity().getName().startsWith(SeamPagesConstants.ENT_FILE_SEAM_PAGES)) {
+ XModelObject[] cs = f.getChildrenForSave();
+ for (int i = 0; i < cs.length; i++) replaceViewIDs(cs[i], oldText, newText);
+ }
+
+ }
+
+}
Added:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageParticipant.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageParticipant.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/refactoring/SeamPagesRenamePageParticipant.java 2009-03-20
13:58:12 UTC (rev 14281)
@@ -0,0 +1,49 @@
+package org.jboss.tools.seam.pages.xml.model.refactoring;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+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.RenameParticipant;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+
+public class SeamPagesRenamePageParticipant extends RenameParticipant {
+ public static final String
PARTICIPANT_NAME="seampages-RenamePageParticipant";
+ XModelObject object;
+
+ public SeamPagesRenamePageParticipant() {}
+
+ protected boolean initialize(Object element) {
+ if(!(element instanceof IFile)) return false;
+ IFile f = (IFile)element;
+ object = EclipseResourceUtil.getObjectByResource(f);
+ if(object == null) object = EclipseResourceUtil.createObjectForResource(f);
+ if(object == null) return false;
+ String entity = object.getModelEntity().getName();
+ if(".FileJSP.FileHTML.FileXHTML.FileGIF.FileCSS.FileAny.FileAnyLong.".indexOf("."
+ entity + ".") < 0) return false;
+ return true;
+ }
+
+ public String getName() {
+ return PARTICIPANT_NAME;
+ }
+
+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext
context) throws OperationCanceledException {
+ return null;
+ }
+
+ public Change createChange(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
+ if (!pm.isCanceled()) {
+ String newName = getArguments().getNewName();
+ SeamPagesRenamePageConfigChange change = new SeamPagesRenamePageConfigChange(object,
newName);
+ if(change.getChildren() == null || change.getChildren().length == 0) change = null;
+ return change;
+ }
+ return null;
+ }
+
+}