/*******************************************************************************
 * 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.OperationCanceledException;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
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.ParticipantManager;
import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
import org.eclipse.ltk.core.refactoring.participants.RenameArguments;
import org.eclipse.ltk.core.refactoring.participants.RenameProcessor;
import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;

public class RenameContextRootRefactoringProcessor extends RenameProcessor {

	private IProject fProject;
	private String fNewName;
	private boolean fUpdateReferences;

	@Override
	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
			CheckConditionsContext context) throws CoreException, OperationCanceledException {
		if (!isApplicable())
			return RefactoringStatus.createErrorStatus(J2EEUIMessages
					.getResourceString("RefactoringNoInit")); //$NON-NLS-1$
		return validateNewElementName(fNewName);
	}

	@Override
	public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException,
			OperationCanceledException {
		return new RefactoringStatus();
	}

	@Override
	public Change createChange(IProgressMonitor pm) throws CoreException,
			OperationCanceledException {
		if (isApplicable() && fNewName != null)
			return new RenameContextRootChange(getProject(), fNewName, getOldContextRoot());
		return null;
	}

	@Override
	public Object[] getElements() {
		if (getProject() == null)
			return new Object[0];
		return new Object[] {
			getProject()
		};
	}

	@Override
	public String getIdentifier() {
		return "org.eclipse.jst.j2ee.ChangeContextRootRefactoringProcessor"; //$NON-NLS-1$
	}

	@Override
	public String getProcessorName() {
		return J2EEUIMessages.getResourceString("RenameContextRoot"); //$NON-NLS-1$
	}

	public IProject getProject() {
		return fProject;
	}

	@Override
	public boolean isApplicable() throws CoreException {
		return getProject() != null;
	}

	private RenameArguments getRenameArguments() {
		return new RenameArguments(fNewName, fUpdateReferences);
	}

	@Override
	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
			SharableParticipants sharedParticipants) throws CoreException {
		String[] natures = new String[0];
		IProject project = getProject();
		if (project != null && fNewName != null) {
			natures = project.getDescription().getNatureIds();
			return ParticipantManager.loadRenameParticipants(status, this, project,
					getRenameArguments(), natures, sharedParticipants);
		}
		return new RefactoringParticipant[0];
	}

	public void setProject(IProject project) {
		this.fProject = project;
	}

	public void setNewName(String newName) {
		this.fNewName = newName;
	}

	public void setUpdateReferences(boolean updateReferences) {
		this.fUpdateReferences = updateReferences;
	}

	public RefactoringStatus validateNewElementName(String newName) {
		return RefactoringStatus.create(RenameContextRootChange.validateContextRoot(newName));
	}

	public String getOldContextRoot() {
		return J2EEProjectUtilities.getServerContextRoot(getProject());
	}
}
