package frame.file;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
import frame.expression.VariantContext;
|
import frame.expression.VariantRequestParams;
|
import frame.persist.NamedSQL;
|
import frame.util.Util;
|
|
public class FileIOContext extends VariantContext {
|
|
private List<String> paramNames;
|
private Map<String, String> paramMap;
|
private FileIoItem ioItem;
|
|
public FileIOContext(FileIoItem fileIoItem) {
|
paramMap = new HashMap<String, String>();
|
ioItem = fileIoItem;
|
initParamNames();
|
}
|
|
public void setParametersTo(NamedSQL namedSQL) {
|
for (String name : paramNames) {
|
if (namedSQL.containsData(name)) {
|
String value = getParameter(name);
|
|
if (value == null) {
|
continue;
|
}
|
|
namedSQL.setParameter(name, value);
|
}
|
}
|
}
|
|
public String getParameter(String name) {
|
if (Util.isEmptyStr(name)) {
|
return name;
|
}
|
|
name = name.toLowerCase();
|
|
if ("@totable".equalsIgnoreCase(name)) {
|
return ioItem.g();
|
}
|
else if ("@fromtable".equalsIgnoreCase(name)) {
|
return ioItem.getFromName();
|
}
|
else if ("@distinct".equalsIgnoreCase(name)) {
|
return ioItem.isDistinctSelect() ? "distinct" : "";
|
}
|
else if ("@updatefieldpairs".equalsIgnoreCase(name)) {
|
return ioItem.getUpdateFieldPairs();
|
}
|
else if ("@updatefromfieldnames".equalsIgnoreCase(name)) {
|
return getUpdateFromFieldNames();
|
}
|
else if ("@inserttofieldnames".equalsIgnoreCase(name)) {
|
return getInsertToFieldNames();
|
}
|
else if ("@insertfromfieldnames".equalsIgnoreCase(name)) {
|
return getInsertFromFieldNames();
|
}
|
else if ("@filterfieldvalues".equalsIgnoreCase(name)) {
|
return getFilterFieldValues();
|
}
|
else if ("@keyfieldpairs".equalsIgnoreCase(name)) {
|
return getKeyFieldPairs();
|
}
|
|
if (paramMap.containsKey(name)) {
|
return paramMap.get(name);
|
}
|
|
return null;
|
}
|
|
private String getUpdateFieldPairs() {
|
StringBuilder result = new StringBuilder(", ");
|
|
List<IOMappingItemRuntime> runtimeList = ioItem.getUpdateMappingRuntime();
|
String toTable = ioItem.getToName();
|
String fromTable = ioItem.getFromName();
|
|
for (IOMappingItemRuntime itemRuntime : runtimeList) {
|
result.append(toTable + "." + itemRuntime.getToField() + " = " + fromTable + "." + itemRuntime.getFromField());
|
}
|
|
return result.toString();
|
}
|
|
|
public void addParameters(Map<String, String> paramsMap) {
|
if (paramsMap == null) {
|
return;
|
}
|
Set<String> keySet = paramsMap.keySet();
|
for (String key : keySet) {
|
key = key.toLowerCase();
|
if (!"@".equals(key.charAt(0))) {
|
key = "@" + key;
|
}
|
paramsMap.put(key, paramsMap.get(key));
|
paramNames.add(key);
|
}
|
}
|
|
private String getUpdateFromFieldNames() {
|
StringBuilder result = new StringBuilder(", ");
|
|
List<IOMappingItemRuntime> runtimeList = ioItem.getUpdateMappingRuntime();
|
|
for (IOMappingItemRuntime itemRuntime : runtimeList) {
|
result.append(itemRuntime.getFromField());
|
}
|
|
return result.toString();
|
}
|
|
private String getInsertFromFieldNames() {
|
return getMappingRuntimeList2String("insert", true);
|
}
|
|
private String getInsertToFieldNames() {
|
return getMappingRuntimeList2String("insert", false);
|
}
|
|
private String getMappingRuntimeList2String (String type, boolean isfromField) {
|
StringBuilder builder = new StringBuilder(", ");
|
List<IOMappingItemRuntime> dataList = null;
|
|
if ("insert".equalsIgnoreCase(type)) {
|
dataList = ioItem.getInsertMappingRuntime();
|
}
|
else if ("update".equalsIgnoreCase(type)) {
|
dataList = ioItem.getUpdateMappingRuntime();
|
}
|
|
for (IOMappingItemRuntime ioMappingItemRuntime : dataList) {
|
String field = null;
|
if (isfromField) {
|
field = itemRuntime.getFromField();
|
}
|
else {
|
field = itemRuntime.getToField();
|
}
|
builder.append(field);
|
}
|
|
return builder.toString();
|
}
|
private String getFilterFieldValues() {
|
String[] filterFieldValues = ioItem.getFilterFieldValues();
|
|
if (filterFieldValues == null || filterFieldValues.Length == 0) {
|
return "1=1";
|
}
|
|
StringCreator result = new StringCreator(" and ");
|
|
foreach (String fieldvalue in filterFieldValues) {
|
String fieldvaluePair = setParametersTo(fieldvalue);
|
result.append(fieldvalue);
|
}
|
|
return result.ToString();
|
}
|
|
private string getKeyFieldPairs() {
|
String[] keyFields = ioItem.getKeyFieldPairs();
|
|
//1. if not define
|
if (keyFields == null || keyFields.Length == 0) {
|
return ioItem.getFromName() + ".id = " + ioItem.getToName() + ".id";
|
}
|
|
// if define
|
StringCreator result = new StringCreator(" and ");
|
|
foreach (String fieldPair in keyFields) {
|
String keyFieldPair = setParametersTo(fieldPair);
|
result.append(keyFieldPair);
|
}
|
|
return result.ToString();
|
}
|
|
public String setParametersTo(String segment) {
|
if (segment == null) {
|
return segment;
|
}
|
|
segment = segment.ToLower();
|
|
foreach (String name in paramNames) {
|
if (segment.IndexOf(name) >= 0) {
|
String value = getParameter(name);
|
|
if (value == null) {
|
continue;
|
}
|
|
segment = segment.Replace(name, value);
|
}
|
}
|
|
return segment;
|
}
|
@Override
|
public String getStringValue(String name, VariantRequestParams params)
|
throws Exception {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
private void initParamNames() {
|
paramNames = new ArrayList<String>();
|
paramNames.add("@taskid");
|
paramNames.add("@typecode");
|
paramNames.add("@totable");
|
paramNames.add("@fromtable");
|
paramNames.add("@distinct");
|
paramNames.add("@keyfieldpairs");
|
paramNames.add("@updatefieldpairs");
|
paramNames.add("@filterFieldValues");
|
paramNames.add("@fieldnames");
|
paramNames.add("@inserttofieldnames");
|
paramNames.add("@insertfromfieldnames");
|
paramNames.add("@updatefromfieldnames");
|
|
}
|
}
|