package dbfit.util.oracle; import java.util.List; import static dbfit.util.oracle.OraclePlSqlGenerateUtils.findNonConflictingPrefix; public class OracleBooleanSpCommandBase { protected SpGeneratorOutput out = null; protected String procName; protected String prefix; protected List<OracleSpParameter> arguments; protected OracleSpParameter returnValue; protected OracleBooleanSpCommandBase(String spName, List<OracleSpParameter> args, OracleSpParameter returnValue) { this.procName = spName; this.arguments = args; this.returnValue = returnValue; setPrefix(findNonConflictingPrefix(procName)); initParameterIds(); } private void initPrefixes() { initArgsPrefixes(); initReturnValuePrefix(); } private void initParameterIds() { if (returnValue != null) { returnValue.setId("ret"); } int i = 1; for (OracleSpParameter arg: arguments) { arg.setId("p" + i); ++i; } } private void initReturnValuePrefix() { if (isFunction()) { returnValue.setPrefix(prefix); } } private void initArgsPrefixes() { for (OracleSpParameter arg: arguments) { arg.setPrefix(prefix); } } protected void setPrefix(String prefix) { if (procName.toLowerCase().startsWith(prefix.toLowerCase())) { throw new IllegalArgumentException("Invalid prefix " + prefix + " for procedure " + procName); } this.prefix = prefix; initPrefixes(); } private void initArgsOutputs() { for (OracleSpParameter arg: arguments) { arg.setOutput(out); } } private void initReturnValueOutput() { if (isFunction()) { returnValue.setOutput(out); } } public void setOutput(SpGeneratorOutput out) { this.out = out; initArgsOutputs(); initReturnValueOutput(); } public SpGeneratorOutput getOutput() { return out; } public SpGeneratorOutput append(String s) { if (null != out) { out.append(s); } return out; } public String toString() { if (null == out) { return ""; } return out.toString(); } public String getPrefix() { return prefix; } public boolean isFunction() { return returnValue != null; } protected boolean isBooleanOutputOrReturn(OracleSpParameter param) { return (param != null) && param.isBoolean() && param.direction.isOutputOrReturnValue(); } protected boolean hasBooleanReturn() { return isBooleanOutputOrReturn(returnValue); } protected boolean hasBooleanOutOrInoutOrReturn() { return hasBooleanReturn() || hasBooleanOutOrInout(); } protected boolean hasBooleanOutOrInout() { for (OracleSpParameter arg: arguments) { if(arg.isBooleanOutOrInout()) { return true; } } return false; } protected boolean hasBooleanInOrInout() { for (OracleSpParameter arg: arguments) { if (arg.isBooleanInOrInout()) { return true; } } return false; } public OracleSpParameter getReturnValue() { return returnValue; } public List<OracleSpParameter> getArguments() { return arguments; } public String getProcName() { return procName; } }