[jbosstools-dev] Re: Fwd: [jbosstools-commits] JBoss Tools SVN: r6173 - in trunk/hibernatetools/plugins/org.hibernate.eclipse.console: src/org/hibernate/eclipse/launch and 2 other directories.

Max Rydahl Andersen max.andersen at redhat.com
Fri Feb 8 04:03:03 EST 2008


On Fri, 08 Feb 2008 09:58:44 +0100, Dmitry Geraskov <dgeraskov at exadel.com> wrote:

> Max Rydahl Andersen wrote:
>
>>hi Dmitry,
>>
>>Looking at the rename configuration patch you did.
>>
>>Two questions:
>>
>>1) Where are the unittests for this ?
>>
>>
> When I started to resolve the task I didn't imagine how can I test this.
> (To create unit test before creation of the Participant, Change, etc I
> need to know API). And only now I can write unit test for this now.

Then don't commit it before you got those tests please.
Refactorings are operations that are really crucial we get tested so we don't foobar users configuration/code.

>>2) Why is it relevant to compute the runtimeclasspath for deciding it the configuration is changed ?
>
> RuntimeClasspathEntries with ClasspathProperty == IRuntimeClasspathEntry.USER_CLASSES is the entries that represented at the tab >"Classpath" on Edit Configuration dialog. If we have there path /myPrj/bin and user renames project "myPrj" to "hisPrj" of course we ?>should change this reference too(to /hisPrj/bin).

Ok understood. As long as that refactoring does not result in classpath settings to be changed when there is no classpath set besides the default project usage (e.g. no specific classpath is set on the configuration)

/max

>
>>/max
>>
>>
>>+	static boolean isConfigurationChanged(ILaunchConfiguration config, IPath oldPath) throws CoreException{
>>+		String attrib = null;
>>+		for (int i = 0; i < stringAttribs.length; i++) {
>>+			attrib = config.getAttribute(stringAttribs[i], (String)null);
>>+			if (isAttributeChanged(attrib, oldPath))
>>+				return true;			
>>+		}
>>+		
>>+		for (int i = 0; i < strListAttribs.length; i++) {
>>+			List list = config.getAttribute(strListAttribs[i], Collections.EMPTY_LIST);
>>+			List newMappings = new ArrayList();
>>+			Iterator iter = list.iterator();
>>+			while ( iter.hasNext() ) {
>>+				attrib = (String) iter.next();
>>+				if (isAttributeChanged(attrib, oldPath)){
>>+					return true;
>>+				}
>>+				newMappings.add(attrib);
>>+			}
>>+		}
>>+		
>>+		//classpath
>>+		IRuntimeClasspathEntry[] entries;
>>+		try {
>>+			entries = JavaRuntime.computeUnresolvedRuntimeClasspath(config);
>>+			for (int i = 0; i < entries.length; i++) {
>>+				IRuntimeClasspathEntry entry = entries[i];
>>+				if(entry.getClasspathProperty()==IRuntimeClasspathEntry.USER_CLASSES) {
>>+					attrib = entry.getPath() == null ? null
>>+							: entry.getPath().toString();
>>+					if(isAttributeChanged(attrib, oldPath)){
>>+						return true;
>>+					}
>>+				}
>>+			}
>>+		}
>>+		catch (CoreException e) {
>>+			HibernateConsolePlugin.getDefault().log( e );
>>+		}
>>+		
>>+		return false;
>>+	}
>>+	
>>+	public static boolean isAttributeChanged(String attrib, IPath path){
>>+		if (attrib == null || path == null) return false;
>>+		return path.isPrefixOf(new Path(attrib));
>>+	}
>>+	
>>+	public static ILaunchConfiguration updateLaunchConfig(ILaunchConfiguration config, IPath oldPath, IPath newPath) throws CoreException{
>>+		final ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy();
>>+		
>>+		String attrib = null;
>>+		for (int i = 0; i < stringAttribs.length; i++) {
>>+			attrib = wc.getAttribute(stringAttribs[i], (String)null);
>>+			if (isAttributeChanged(attrib, oldPath)){
>>+				attrib = getUpdatedPath(attrib, oldPath, newPath);
>>+				wc.setAttribute(stringAttribs[i], attrib);				
>>+			}
>>+		}
>>+		
>>+		boolean isChanged = false;
>>+		for (int i = 0; i < strListAttribs.length; i++) {
>>+			List list = wc.getAttribute(strListAttribs[i], Collections.EMPTY_LIST);
>>+			isChanged = false;
>>+			List newMappings = new ArrayList();
>>+			Iterator iter = list.iterator();
>>+			while ( iter.hasNext() ) {
>>+				attrib = (String) iter.next();
>>+				if (isAttributeChanged(attrib, oldPath)){
>>+					attrib = getUpdatedPath(attrib, oldPath, newPath);
>>+					isChanged = true;
>>+				}
>>+				newMappings.add(attrib);
>>+			}
>>+			if (isChanged) wc.setAttribute(strListAttribs[i], newMappings);
>>+		}
>>+		
>>+		//classpath
>>+		isChanged = false;
>>+		IRuntimeClasspathEntry[] entries;		
>>+		try {
>>+			entries = JavaRuntime.computeUnresolvedRuntimeClasspath(config);
>>+			List mementos = new ArrayList(entries.length);
>>+			for (int i = 0; i < entries.length; i++) {
>>+				IRuntimeClasspathEntry entry = entries[i];
>>+				if(entry.getClasspathProperty()==IRuntimeClasspathEntry.USER_CLASSES) {
>>+					attrib = entry.getPath() == null ? null
>>+							: entry.getPath().toString();
>>+					if(isAttributeChanged(attrib, oldPath)){
>>+						attrib = getUpdatedPath(attrib, oldPath, newPath);
>>+						IPath p = new Path(attrib).makeAbsolute();
>>+						
>>+						switch (entry.getClasspathEntry().getEntryKind()) {
>>+						case IClasspathEntry.CPE_PROJECT:
>>+							entry = new RuntimeClasspathEntry( JavaCore.newProjectEntry(p));
>>+							break;
>>+						default:
>>+							entry = JavaRuntime.newArchiveRuntimeClasspathEntry(p);
>>+							break;
>>+						} 		
>>+						
>>+						entries[i] = entry;
>>+						isChanged = true;
>>+					}
>>+				}
>>+				mementos.add(entries[i].getMemento());
>>+			}
>>+			if (isChanged) wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, mementos);
>>+		}
>>+		catch (CoreException e) {
>>+			HibernateConsolePlugin.getDefault().log( e );
>>+		}
>>+		
>>+		//JavaMigrationDelegate.updateResourceMapping(wc);
>>+		
>>+		if (wc.isDirty()) {
>>+			return wc.doSave();
>>+		} else {
>>+			return config;
>>+		}
>>+	}
>>+	
>>+	private static String getUpdatedPath(String attrib, IPath oldPath, IPath newPath){
>>+		IPath attribPath = new Path(attrib);
>>+		IPath newAttribPath = Path.EMPTY;
>>+		for (int j = 0; j < attribPath.segmentCount(); j++){
>>+			if (!oldPath.isPrefixOf(attribPath.removeFirstSegments(j))){
>>+				//add prefix
>>+				newAttribPath = newAttribPath.append(attribPath.segment(j));
>>+			} else {
>>+				newAttribPath = newAttribPath.append(newPath);	//add new path instead of old path
>>+				// add suffix
>>+				newAttribPath = newAttribPath.append(attribPath.removeFirstSegments(j + oldPath.segmentCount()));
>>+				break;
>>+			}
>>+		}
>>+		return newAttribPath.toString();
>>+	}
>>+	
>>+	public static ILaunchConfiguration[] getChangedLaunchConfigurations(IPath path){
>>+		ILaunchConfiguration[] configs = null;
>>+		try {
>>+			configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
>>+			ArrayList list = new ArrayList();
>>+			for(int i = 0; i < configs.length; i++) {
>>+				//ILaunchConfigurationWorkingCopy wc = configs[i].getWorkingCopy();
>>+				if (HibernateRefactoringUtil.isConfigurationChanged(configs[i], path)) list.add(configs[i]);
>>+			}
>>+			configs = (ILaunchConfiguration[])list.toArray(new ILaunchConfiguration[list.size()]);
>>+		}
>>+		catch(CoreException e) {
>>+			configs = new ILaunchConfiguration[0];
>>+			HibernateConsolePlugin.getDefault().logErrorMessage( ERROR_MESS, e );
>>+		}
>>+		
>>+		return configs;
>>+	}
>>+	
>>+	/**
>>+	 * @param changes - List of Change objects
>>+	 * @return
>>+	 */
>>+	public static Change createChangesFromList(List changes, String name) {
>>+		if (changes.size() == 0) {
>>+			return null;
>>+		} else if (changes.size() == 1) {
>>+			return (Change) changes.get(0);
>>+		} else {
>>+			return new CompositeChange(name, (Change[])changes.toArray(new Change[changes.size()]));
>>+		}
>>+	}
>>+}
>>
>>
>>Property changes on: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/HibernateRefactoringUtil.java
>>___________________________________________________________________
>>Name: svn:mime-type
>>  + text/plain
>>Name: svn:keywords
>>  + Author Id Revision Date
>>Name: svn:eol-style
>>  + native
>>
>>Added: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/LaunchConfigurationResourceNameChange.java
>>===================================================================
>>--- trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/LaunchConfigurationResourceNameChange.java	                        (rev 0)
>>+++ trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/LaunchConfigurationResourceNameChange.java	2008-02-07 16:19:37 UTC (rev 6173)
>>@@ -0,0 +1,77 @@
>>+/*******************************************************************************
>>+  * Copyright (c) 2007-2008 Red Hat, Inc.
>>+  * Distributed under license by Red Hat, Inc. All rights reserved.
>>+  * This program is made available under the terms of the
>>+  * Eclipse Public License v1.0 which accompanies this distribution,
>>+  * and is available at http://www.eclipse.org/legal/epl-v10.html
>>+  *
>>+  * Contributor:
>>+  *     Red Hat, Inc. - initial API and implementation
>>+  ******************************************************************************/
>>+package org.hibernate.eclipse.launch.core.refactoring;
>>+
>>+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.debug.core.ILaunchConfiguration;
>>+import org.eclipse.ltk.core.refactoring.Change;
>>+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
>>+
>>+/**
>>+ * @author Dmitry Geraskov
>>+ *
>>+ */
>>+public class LaunchConfigurationResourceNameChange extends Change {
>>+	
>>+	private ILaunchConfiguration fLaunchConfiguration;
>>+	private IPath fOldPath;
>>+	private IPath fNewPath;
>>+	
>>+	/**
>>+	 * LaunchConfigurationResourceMoveChange constructor.
>>+	 * @param launchConfiguration the launch configuration to modify
>>+	 * @param oldPath the old Path of the resource.
>>+	 * @param newPath the new Path of the resource.
>>+	 */
>>+	LaunchConfigurationResourceNameChange(ILaunchConfiguration launchConfiguration, IPath oldPath, IPath newPath){
>>+		fLaunchConfiguration = launchConfiguration;
>>+		fOldPath = oldPath;
>>+		fNewPath = newPath;
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
>>+	 */
>>+	public Object getModifiedElement() {
>>+		return fLaunchConfiguration;
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.Change#getName()
>>+	 */
>>+	public String getName() {
>>+		return "Update resource path in launch configuration " + fLaunchConfiguration.getName();
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
>>+	 */
>>+	public void initializeValidationData(IProgressMonitor pm) {	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
>>+	 */
>>+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException,
>>+			OperationCanceledException {
>>+		return new RefactoringStatus();
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
>>+	 */
>>+	public Change perform(IProgressMonitor pm) throws CoreException {
>>+		fLaunchConfiguration = HibernateRefactoringUtil.updateLaunchConfig(fLaunchConfiguration, fOldPath, fNewPath);			
>>+		return new LaunchConfigurationResourceNameChange(fLaunchConfiguration, fNewPath, fOldPath);
>>+	}
>>+}
>>
>>
>>Property changes on: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/LaunchConfigurationResourceNameChange.java
>>___________________________________________________________________
>>Name: svn:mime-type
>>  + text/plain
>>Name: svn:keywords
>>  + Author Id Revision Date
>>Name: svn:eol-style
>>  + native
>>
>>Added: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/MoveResourceParticipant.java
>>===================================================================
>>--- trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/MoveResourceParticipant.java	                        (rev 0)
>>+++ trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/MoveResourceParticipant.java	2008-02-07 16:19:37 UTC (rev 6173)
>>@@ -0,0 +1,48 @@
>>+package org.hibernate.eclipse.launch.core.refactoring;
>>+
>>+import java.util.ArrayList;
>>+import java.util.List;
>>+
>>+import org.eclipse.core.resources.IResource;
>>+import org.eclipse.core.runtime.CoreException;
>>+import org.eclipse.core.runtime.IProgressMonitor;
>>+import org.eclipse.core.runtime.OperationCanceledException;
>>+import org.eclipse.debug.core.ILaunchConfiguration;
>>+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;
>>+
>>+public class MoveResourceParticipant extends MoveParticipant {
>>+	
>>+	private IResource fResource;
>>+
>>+	public RefactoringStatus checkConditions(IProgressMonitor pm,
>>+			CheckConditionsContext context) throws OperationCanceledException {
>>+		return new RefactoringStatus();
>>+	}
>>+
>>+	public Change createChange(IProgressMonitor pm) throws CoreException,
>>+			OperationCanceledException {
>>+		ILaunchConfiguration[] configs = HibernateRefactoringUtil.getChangedLaunchConfigurations(fResource.getFullPath());
>>+		
>>+		List changes = new ArrayList();		
>>+		LaunchConfigurationResourceNameChange change = null;
>>+		for (int i= 0; i < configs.length; i++) {
>>+			change = new LaunchConfigurationResourceNameChange(configs[i], fResource.getFullPath(), ((IResource)getArguments().getDestination()).getFullPath().append(fResource.getName()));
>>+			changes.add(change);
>>+		}
>>+
>>+		return HibernateRefactoringUtil.createChangesFromList(changes, getName());
>>+	}
>>+
>>+	public String getName() {
>>+		return "Launch Configurations updates";
>>+	}
>>+
>>+	protected boolean initialize(Object element) {		
>>+		fResource = (IResource) element;
>>+		return true;
>>+	}
>>+
>>+}
>>
>>
>>Property changes on: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/MoveResourceParticipant.java
>>___________________________________________________________________
>>Name: svn:mime-type
>>  + text/plain
>>Name: svn:keywords
>>  + Author Id Revision Date
>>Name: svn:eol-style
>>  + native
>>
>>Added: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/RenameResourceParticipant.java
>>===================================================================
>>--- trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/RenameResourceParticipant.java	                        (rev 0)
>>+++ trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/RenameResourceParticipant.java	2008-02-07 16:19:37 UTC (rev 6173)
>>@@ -0,0 +1,77 @@
>>+/*******************************************************************************
>>+  * Copyright (c) 2007-2008 Red Hat, Inc.
>>+  * Distributed under license by Red Hat, Inc. All rights reserved.
>>+  * This program is made available under the terms of the
>>+  * Eclipse Public License v1.0 which accompanies this distribution,
>>+  * and is available at http://www.eclipse.org/legal/epl-v10.html
>>+  *
>>+  * Contributor:
>>+  *     Red Hat, Inc. - initial API and implementation
>>+  ******************************************************************************/
>>+package org.hibernate.eclipse.launch.core.refactoring;
>>+
>>+import java.util.ArrayList;
>>+import java.util.List;
>>+
>>+import org.eclipse.core.resources.IResource;
>>+import org.eclipse.core.runtime.CoreException;
>>+import org.eclipse.core.runtime.IProgressMonitor;
>>+import org.eclipse.core.runtime.OperationCanceledException;
>>+import org.eclipse.debug.core.ILaunchConfiguration;
>>+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;
>>+
>>+/**
>>+ * @author Dmitry Geraskov
>>+ *
>>+ */
>>+public class RenameResourceParticipant extends RenameParticipant {
>>+	
>>+	private IResource fResource;
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
>>+	 */
>>+	public RefactoringStatus checkConditions(IProgressMonitor pm,
>>+			CheckConditionsContext context) throws OperationCanceledException {
>>+		return new RefactoringStatus();
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor)
>>+	 */
>>+	public Change createChange(IProgressMonitor pm) throws CoreException,
>>+			OperationCanceledException {
>>+		ILaunchConfiguration[] configs = HibernateRefactoringUtil.getChangedLaunchConfigurations(fResource.getFullPath());
>>+		
>>+		List changes = new ArrayList();		
>>+		LaunchConfigurationResourceNameChange change = null;
>>+		for (int i= 0; i < configs.length; i++) {
>>+			change = new LaunchConfigurationResourceNameChange(configs[i], fResource.getFullPath(),
>>+					fResource.getParent().getFullPath().append(getArguments().getNewName()));
>>+			changes.add(change);
>>+		}
>>+
>>+		return HibernateRefactoringUtil.createChangesFromList(changes, getName());
>>+	}
>>+	
>>+	
>>+	
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName()
>>+	 */
>>+	public String getName() {
>>+		return "Launch Configurations updates";
>>+	}
>>+
>>+	/* (non-Javadoc)
>>+	 * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object)
>>+	 */
>>+	protected boolean initialize(Object element) {		
>>+		fResource = (IResource) element;
>>+		return true;
>>+	}
>>+
>>+}
>>
>>
>>Property changes on: trunk/hibernatetools/plugins/org.hibernate.eclipse.console/src/org/hibernate/eclipse/launch/core/refactoring/RenameResourceParticipant.java
>>___________________________________________________________________
>>Name: svn:mime-type
>>  + text/plain
>>Name: svn:keywords
>>  + Author Id Revision Date
>>Name: svn:eol-style
>>  + native
>>
>>_______________________________________________
>>jbosstools-commits mailing list
>>jbosstools-commits at lists.jboss.org
>>https://lists.jboss.org/mailman/listinfo/jbosstools-commits
>>
>>
>>
>>
>>
>
>



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/




More information about the jbosstools-dev mailing list