// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.core.model.context;
import java.util.ArrayList;
import java.util.List;
import org.talend.core.model.process.IContext;
import org.talend.core.model.process.IContextParameter;
/**
* Context of a process.
*
* $Id: JobContext.java 38013 2010-03-05 14:21:59Z mhirt $
*
*/
public class JobContext implements IContext, Cloneable {
String name;
boolean confirmationNeeded;
public JobContext(String name) {
this.name = name;
}
List<IContextParameter> contextParameterList = new ArrayList<IContextParameter>();
public List<IContextParameter> getContextParameterList() {
return this.contextParameterList;
}
public void setContextParameterList(final List<IContextParameter> contextParameterList) {
this.contextParameterList = contextParameterList;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public boolean isConfirmationNeeded() {
return this.confirmationNeeded;
}
public void setConfirmationNeeded(boolean confirmationNeeded) {
this.confirmationNeeded = confirmationNeeded;
}
public IContext clone() {
IContext clonedContext = null;
try {
clonedContext = (IContext) super.clone();
List<IContextParameter> clonedContextParametersList = new ArrayList<IContextParameter>();
clonedContext.setContextParameterList(clonedContextParametersList);
for (int i = 0; i < contextParameterList.size(); i++) {
clonedContextParametersList.add(contextParameterList.get(i).clone());
}
} catch (CloneNotSupportedException e) {
// nothing
}
return clonedContext;
}
public boolean sameAs(IContext context) {
if (!context.getName().equals(name)) {
return false;
}
if (contextParameterList.size() != context.getContextParameterList().size()) {
return false;
}
for (int i = 0; i < contextParameterList.size(); i++) {
IContextParameter curContextParam = contextParameterList.get(i);
IContextParameter testContextParam = context.getContextParameterList().get(i);
if (!curContextParam.sameAs(testContextParam)) {
return false;
}
}
return true;
}
/**
* Commented by Marvin Wang on Mar.2, 2012, the user who invokes the method should notice that if the
* <code>JobContext</code> has more than one <code>ContextParameter</code>s which names are same, this case will
* cause the wrong return value. Suggest use {@link #getContextParameter(String, String)}
*/
public IContextParameter getContextParameter(String parameterName) {
for (IContextParameter contextParam : contextParameterList) {
if (contextParam.getName() != null && contextParam.getName().equals(parameterName)) {
return contextParam;
}
}
return null;
}
/**
* Added by Marvin Wang on Mar.2, 2012. To get an existing <code>ContextParameter</code>, do not suggest to use the
* method {@link #getContextParameter(String)} to get an existing <code>ContextParameter</code>. Note that the given
* parameters are not <code>null</code>.
*
* @param sourceId Not <code>Null</code>
* @param paraName Not <code>Null</code>
* @return
*/
public IContextParameter getContextParameter(String sourceId, String paraName) {
if (sourceId == null || paraName == null)
return null;
if (contextParameterList != null && contextParameterList.size() > 0) {
for (IContextParameter contextParam : contextParameterList) {
String tempSouceId = contextParam.getSource();
String tempParaName = contextParam.getName();
if (sourceId.equals(tempSouceId) && paraName.equals(tempParaName))
return contextParam;
}
}
return null;
}
/**
* Thru the given name to get the <code>JobContextParameter</code>s which all have the same parameter name. Added by
* Marvin Wang on Mar.6, 2012.
*
* @param paraName
* @return
*/
public List<IContextParameter> getSameNameContextParameters(String paraName) {
List<IContextParameter> list = new ArrayList<IContextParameter>();
if (contextParameterList != null && contextParameterList.size() > 0) {
for (IContextParameter contextParam : contextParameterList) {
String tempParaName = contextParam.getName();
if (tempParaName.equals(paraName))
list.add(contextParam);
}
}
return list;
}
/**
* Returns the size of <code>JobContextParameter</code>s which all have the same parameter name. See
* {@link #getSameNameContextParameters(String)}. Added by Marvin Wang on Mar.6, 2012.
*
* @param paraName
* @return
*/
public int getSameNameContextParameterSize(String paraName) {
return getSameNameContextParameters(paraName).size();
}
@Override
public String toString() {
StringBuffer buff = new StringBuffer(name + ":"); //$NON-NLS-1$
buff.append("("); //$NON-NLS-1$
for (int i = 0; i < contextParameterList.size(); i++) {
IContextParameter param = contextParameterList.get(i);
buff.append(param.getName() + "="); //$NON-NLS-1$
buff.append(param.getValue());
if (i < (contextParameterList.size() - 1)) {
buff.append(","); //$NON-NLS-1$
}
}
buff.append(")"); //$NON-NLS-1$
return buff.toString();
}
}