/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.junit.refactoring;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.NullChange;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.jdt.internal.junit.BasicElementLabels;
import org.eclipse.jdt.internal.junit.Messages;
import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
public abstract class LaunchConfigChange extends Change {
protected LaunchConfigurationContainer fConfig;
private final boolean fShouldFlagWarning;
public LaunchConfigChange(LaunchConfigurationContainer config, boolean shouldFlagWarning) {
fConfig= config;
fShouldFlagWarning= shouldFlagWarning;
}
@Override
public Object getModifiedElement() {
return fConfig;
}
@Override
public void initializeValidationData(IProgressMonitor pm) {
// must be implemented to decide correct value of isValid
}
@Override
public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
RefactoringStatus refactoringStatus= new RefactoringStatus();
if (!fConfig.getConfiguration().exists() && fShouldFlagWarning)
refactoringStatus.addError(Messages.format(JUnitMessages.LaunchConfigChange_configDeleted, BasicElementLabels.getJavaElementName(fConfig.getName())));
return refactoringStatus;
}
@Override
public Change perform(IProgressMonitor pm) throws CoreException {
if (!fConfig.getConfiguration().exists())
return new NullChange();
pm.beginTask("", 1); //$NON-NLS-1$
String oldValue= getOldValue(fConfig.getConfiguration());
ILaunchConfigurationWorkingCopy copy= fConfig.getConfiguration().getWorkingCopy();
alterLaunchConfiguration(copy);
fConfig.setConfiguration(copy.doSave());
Change undo= getUndo(oldValue);
pm.worked(1);
return undo;
}
public boolean shouldFlagWarning() {
return fShouldFlagWarning;
}
protected abstract void alterLaunchConfiguration(ILaunchConfigurationWorkingCopy copy) throws CoreException;
protected abstract String getOldValue(ILaunchConfiguration config) throws CoreException;
protected abstract Change getUndo(String oldValue) throws CoreException;
}