blob: d42229eef1264734bd24e776a5916e0c29a896b7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 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.jst.j2ee.internal.ui.refactoring;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import com.ibm.icu.util.StringTokenizer;
public class RenameContextRootChange extends Change {
private final IProject project;
private final String newContextRoot;
private final String oldContextRoot;
private IDataModel model;
public RenameContextRootChange(IProject project, String newContextRoot, String oldContextRoot) {
this.project = project;
this.oldContextRoot = oldContextRoot;
this.newContextRoot = newContextRoot;
}
@Override
public Object getModifiedElement() {
return project;
}
@Override
public String getName() {
return J2EEUIMessages.getResourceString("RenameContextRootFromXtoY", new String[]{oldContextRoot, //$NON-NLS-1$
newContextRoot});
}
@Override
public void initializeValidationData(IProgressMonitor pm) {
}
public static IStatus validateContextRoot(String name) {
IStatus status = Status.OK_STATUS;
if (name == null || name.length() == 0) {
// this was added because the error message shouldnt be shown
// initially. It should be shown only if context
// root field is edited to
status = new Status(IStatus.ERROR, J2EEUIPlugin.PLUGIN_ID,
ProjectSupportResourceHandler.getString(
ProjectSupportResourceHandler.Context_Root_cannot_be_empty_2,
new Object[0]));
}
if (!(name.indexOf(' ') > -1)) {
StringTokenizer stok = new StringTokenizer(name, "."); //$NON-NLS-1$
while (stok.hasMoreTokens()) {
String token = stok.nextToken();
for (int i = 0; i < token.length(); i++) {
if (!(token.charAt(i) == '_') && !(token.charAt(i) == '-')
&& !(token.charAt(i) == '/')
&& Character.isLetterOrDigit(token.charAt(i)) == false) {
if (Character.isWhitespace(token.charAt(i)) == false) {
status = new Status(
IStatus.ERROR,
J2EEUIPlugin.PLUGIN_ID,
ProjectSupportResourceHandler
.getString(
ProjectSupportResourceHandler.The_character_is_invalid_in_a_context_root,
new Object[] {
(new Character(token.charAt(i))).toString()
}));
}
}
}
}
} // en/ end of if(name.trim
else {
status = new Status(IStatus.ERROR, J2EEUIPlugin.PLUGIN_ID,
ProjectSupportResourceHandler.getString(
ProjectSupportResourceHandler.Names_cannot_contain_whitespace_,
new Object[0]));
}
return status;
}
@Override
public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
IStatus phase1 = validateContextRoot(newContextRoot);
if (phase1.isOK())
return new RefactoringStatus();
else
return RefactoringStatus.create(phase1);
}
@Override
public Change perform(IProgressMonitor pm) throws CoreException {
ComponentUtilities.setServerContextRoot(project, newContextRoot);
return new RenameContextRootChange(project, oldContextRoot, newContextRoot);
}
}