/*******************************************************************************
* Copyright (c) 2007, 2014 Symbian Software Limited 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:
* Bala Torati (Symbian) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.templateengine.process;
import org.eclipse.cdt.core.templateengine.TemplateCore;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import com.ibm.icu.text.MessageFormat;
/**
* Abstract ProcessRunner class provides the methods to implement for processes.
*/
public abstract class ProcessRunner {
private ProcessParameter[] params = new ProcessParameter[0];
void setProcessParameters(ProcessParameter[] params) {
this.params = params == null ? new ProcessParameter[0] : params;
}
/**
* Returns the Process Parameters.
*/
public ProcessParameter[] getProcessParameters() {
return params;
}
/**
* @since 5.6
*/
protected ProcessFailureException missingArgException(String processId, String varname) {
String msg = MessageFormat.format(Messages.ProcessRunner_missingArg, varname);
return new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, msg));
}
/**
* Checks the whether the arguments are matching the required parameters.
*/
protected final boolean areArgumentsMatchingRequiredParameters(ProcessArgument[] args) {
if ((params == null && args != null) || (params != null && args == null)) {
return false;
}
if (params == null && args == null) {
return true;
}
if (params.length != args.length) {
return false;
}
for (int i = 0; i < params.length; i++) {
if (!args[i].isOfParameterType(params[i])) {
return false;
}
}
return true;
}
/**
* Return the String containing the mismatching message
* if the arguments are not matching the required parameters.
*/
public String getArgumentsMismatchMessage(ProcessArgument[] args) {
if (params == null && args != null) {
return Messages.getString("ProcessRunner.unexpectedArguments"); //$NON-NLS-1$
}
if (params != null && args == null) {
return Messages.getString("ProcessRunner.missingArguments"); //$NON-NLS-1$
}
if (params == null && args == null) {
return null;
}
if (params.length != args.length) {
return Messages.getString("ProcessRunner.missingArguments"); //$NON-NLS-1$
}
for (int i = 0; i < params.length; i++) {
ProcessParameter param = params[i];
ProcessArgument arg = args[i];
if (!arg.isOfParameterType(param)) {
return Messages.getString("ProcessRunner.argumentsMismatch") + arg.getName(); //$NON-NLS-1$
}
}
return null;
}
/**
* Returns the process message based on the parameters.
*/
protected final String getProcessMessage(String processId, int code, String msg) {
switch (code) {
case IStatus.ERROR:
return processId + Messages.getString("ProcessRunner.error") + msg; //$NON-NLS-1$
case IStatus.OK:
return processId + Messages.getString("ProcessRunner.success") + msg; //$NON-NLS-1$
default:
return processId + Messages.getString("ProcessRunner.info") + msg; //$NON-NLS-1$
}
}
/**
* @param template
* @param args
* @param processId
* @throws ProcessFailureException
*/
public abstract void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException;
}