/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2015
*/
package com.ibm.streamsx.topology.internal.functional.ops;
import java.util.logging.Logger;
import com.ibm.streams.operator.AbstractOperator;
import com.ibm.streams.operator.OperatorContext;
import com.ibm.streams.operator.OperatorContext.ContextCheck;
import com.ibm.streams.operator.compile.OperatorContextChecker;
import com.ibm.streams.operator.model.Parameter;
import com.ibm.streams.operator.model.SharedLoader;
import com.ibm.streamsx.topology.function.FunctionContext;
import com.ibm.streamsx.topology.generator.functional.FunctionalOpProperties;
import com.ibm.streamsx.topology.internal.functional.FunctionalHandler;
import com.ibm.streamsx.topology.internal.functional.FunctionalHelper;
/**
*
* Common code for operators with inputs and outputs.
*
*/
@SharedLoader
public abstract class FunctionFunctor extends AbstractOperator implements Functional {
public static final String FUNCTIONAL_LOGIC_PARAM = FunctionalOpProperties.FUNCTIONAL_LOGIC_PARAM;
static final Logger trace = Logger.getLogger("com.ibm.streamsx.topology.operators");
@ContextCheck(runtime=false)
public static void checkNotConsistentRegionSource(OperatorContextChecker checker) {
FunctionalOpUtils.checkNotConsistentRegionSource(checker);
}
// parameters
private String functionalLogic;
private String[] jar;
private String[] submissionParamNames;
private String[] submissionParamValues;
private FunctionContext functionContext;
/**
* Logic (function) used by this operator,
* will be closed upon shutdown.
*/
private FunctionalHandler<?> logicHandler;
public final String getFunctionalLogic() {
return functionalLogic;
}
@Parameter
public void setFunctionalLogic(String logic) {
this.functionalLogic = logic;
}
public final String[] getJar() {
return jar;
}
@Parameter(optional = true)
public final void setJar(String[] jar) {
this.jar = jar;
}
public final String[] getSubmissionParamNames() {
return submissionParamNames;
}
@Parameter(optional = true)
public final void setSubmissionParamNames(String[] SubmissionParamNames) {
this.submissionParamNames = SubmissionParamNames;
}
public final String[] getSubmissionParamValues() {
return submissionParamValues;
}
@Parameter(optional = true)
public final void setSubmissionParamValues(String[] SubmissionParamValues) {
this.submissionParamValues = SubmissionParamValues;
}
@Override
public synchronized void initialize(OperatorContext context)
throws Exception {
super.initialize(context);
FunctionalHelper.addLibraries(this, getJar());
SubmissionParameterManager.initialize(context);
functionContext = new FunctionOperatorContext(context);
}
FunctionContext getFunctionContext() {
return functionContext;
}
@Override
public synchronized void shutdown() throws Exception {
if (logicHandler != null)
logicHandler.close();
super.shutdown();
}
public <T> FunctionalHandler<T> createLogicHandler() throws Exception {
FunctionalHandler<T> handler = FunctionalOpUtils.createFunctionHandler(
getOperatorContext(), getFunctionContext(), getFunctionalLogic());
this.logicHandler = handler;
return handler;
}
}