package org.sef4j.jdbc.wrappers;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* info on a sql parameter
*/
public class SefStatementParamInfo {
final int paramIndex;
final String paramName;
boolean isOutput; // default to false
int sqlType;
int targetSqlType;
String typeName;
int scale;
/** input value */
Object value; // input value.. may differ from OutputParamInfo.runTimeResValue ...
/** ouput value */
Object outResValue;
boolean isRuntimeResAlreadyGet;
Exception outResException;
public static class PairValueWithLength {
public Object value;
public long length;
public PairValueWithLength(Object value, long length) {
this.value = value;
this.length = length;
}
}
public static class PairDateWithCalendar {
public Date date;
public Calendar calendar;
public PairDateWithCalendar(Date date, Calendar calendar) {
this.date = date;
this.calendar = calendar;
}
}
// ------------------------------------------------------------------------
/* Ctor */
public SefStatementParamInfo(String paramName, int paramIndex) {
this.paramName = paramName;
this.paramIndex = paramIndex;
}
// ------------------------------------------------------------------------
public String getParamNameOrIndex() {
return (paramIndex > 0)? "?" + Integer.toString(paramIndex) : paramName;
}
public int getParamIndex() {
return paramIndex;
}
public String getParamName() {
return paramName;
}
public String getTypeName() {
return typeName;
}
public SefStatementParamInfo typeName(String typeName) {
this.typeName = typeName;
return this;
}
public int getScale() {
return scale;
}
public SefStatementParamInfo scale(int scale) {
this.scale = scale;
return this;
}
public SefStatementParamInfo sqlType(int sqlType) {
this.sqlType = sqlType;
return this;
}
public int getTargetSqlType() {
return targetSqlType;
}
public SefStatementParamInfo targetSqlType(int targetSqlType) {
this.targetSqlType = targetSqlType;
return this;
}
public Object getValue() {
return value;
}
public SefStatementParamInfo value(Object value) {
this.value = value;
return this;
}
public boolean isOutput() {
return isOutput;
}
public SefStatementParamInfo output(boolean isOutput) {
this.isOutput = isOutput;
return this;
}
public Object getOutResValue() {
return outResValue;
}
public SefStatementParamInfo outResValue(Object value, Exception ex) {
this.outResValue = value;
this.outResException = ex;
return this;
}
// ------------------------------------------------------------------------
/** extends Object.toString */
public String toString() {
return toStringPrePost(1);
}
/**
* @param prePost: 0: in param value(pre), 1:out param value , -1 (declaration?),
*/
public String toStringPrePost(int prePost) {
String res;
if (!isOutput) {
res = getParamNameOrIndex() + "=" + ((value != null) ? value.toString() : "null");
} else {
if (!isRuntimeResAlreadyGet) {
res = "out @" + getParamNameOrIndex();
} else {
res = "out @" + getParamNameOrIndex() + "=> ";
if ((outResException != null)) {
res += (outResValue != null) ? outResValue.toString() : "null";
} else {
res += (outResException != null) ? outResException.toString() : "null";
}
}
} //else isOutput
return res;
} //toString
// ------------------------------------------------------------------------
private static final String DATEFORMAT_DATE_YMD_HMS = "yyyy-MM-dd HH:mm:ss";
private static final String DATEFORMAT_TIME_HMS = "HH:mm:ss";
private static final String DATEFORMAT_TIMESTAMP_YMD_HMS_SS = "yyyy-MM-dd HH:mm:ss.sss";
public static final String ORACLE_FMT_YMD_HMS = "yyyy-mm-dd hh24:mi:ss";
public static final String ORACLE_FMT_HMS = "hh24:mi:ss";
public static final String ORACLE_FMT_YMD_HMS_SSS = "yyyy-mm-dd hh24:mi:ss.sss";
private static final DateFormat _DATEFMT_YMD_HMS = new SimpleDateFormat(DATEFORMAT_DATE_YMD_HMS);
private static final DateFormat _DATEFMT_HMS = new SimpleDateFormat(DATEFORMAT_TIME_HMS);
private static final DateFormat _DATEFMT_YMD_HMS_SS = new SimpleDateFormat(DATEFORMAT_TIMESTAMP_YMD_HMS_SS);
public static String fmtDate_YMD_HMS(java.util.Date date) {
synchronized(_DATEFMT_YMD_HMS) {
return _DATEFMT_YMD_HMS.format(date);
}
}
public static String fmtTimestamp_YMD_HMS_SS(java.util.Date date) {
synchronized(_DATEFMT_YMD_HMS_SS) {
return _DATEFMT_YMD_HMS_SS.format(date);
}
}
public static String fmtTime_HMS(java.util.Date date) {
synchronized(_DATEFMT_HMS) {
return _DATEFMT_HMS.format(date);
}
}
public static String fmtDate_YMD_HMS(java.util.Date date, java.util.Calendar cal) {
SimpleDateFormat df = new SimpleDateFormat(DATEFORMAT_DATE_YMD_HMS);
df.setCalendar(cal);
String res = df.format(date);
return res;
}
public static String fmtTimestamp_YMD_HMS_SS(java.util.Date date, java.util.Calendar cal) {
SimpleDateFormat df = new SimpleDateFormat(DATEFORMAT_TIMESTAMP_YMD_HMS_SS);
df.setCalendar(cal);
String res = df.format(date);
return res;
}
public static String fmtTime_HMS(java.util.Date date, java.util.Calendar cal) {
SimpleDateFormat df = new SimpleDateFormat(DATEFORMAT_TIME_HMS);
df.setCalendar(cal);
String res = df.format(date);
return res;
}
public static String formatOracleToDate(java.util.Date p) {
return "to_date('" + fmtDate_YMD_HMS(p) + "', '" + ORACLE_FMT_YMD_HMS + "')";
}
public static String formatOracleToTime(java.sql.Time p) {
return "to_time('" + fmtTime_HMS(p) + "', '" + ORACLE_FMT_HMS + "')";
}
public static String formatOracleToTimestamp(java.util.Date p) {
return "to_timestamp('" + fmtTimestamp_YMD_HMS_SS(p) + "', '" + ORACLE_FMT_YMD_HMS_SSS + "')";
}
public static String formatOracleToDate(java.util.Date p, java.util.Calendar cal) {
return "to_date('" + fmtDate_YMD_HMS(p, cal) + "', '" + ORACLE_FMT_YMD_HMS + "')";
}
public static String formatOracleToTime(java.sql.Time p, java.util.Calendar cal) {
return "to_time('" + fmtTime_HMS(p, cal) + "', '" + ORACLE_FMT_HMS + "')";
}
public static String formatOracleToTimestamp(java.util.Date p, java.util.Calendar cal) {
return "to_timestamp('" + fmtTimestamp_YMD_HMS_SS(p, cal) + "', '" + ORACLE_FMT_YMD_HMS_SSS + "')";
}
public static String replaceStringRegion(String str, int idx, int nbChars, String by) {
final int size = str.length();
String before = str.substring(0, idx);
String after = (idx + nbChars < size) ? str.substring(idx + nbChars) : "";
return before + by + after;
}
public static String replaceStringChar(String str, int idx, String by) {
return replaceStringRegion(str, idx, 1, by);
}
}