[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.
Dmitry Geraskov
dgeraskov at exadel.com
Fri Feb 8 03:58:44 EST 2008
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.
>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).
>/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
>
>
>
>
>
--
Best regards,
Dmitry Geraskov
dgeraskov at exadel.com
Senior Developer
Exadel Inc
More information about the jbosstools-dev
mailing list