package frame.file;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
import frame.persist.NamedSQL;
|
import frame.util.Util;
|
|
public class FileIOContext implements IFileContext {
|
|
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.setParam(name, value);
|
}
|
}
|
}
|
|
public String getParameter(String name) {
|
if (Util.isEmptyStr(name)) {
|
return name;
|
}
|
|
name = name.toLowerCase();
|
|
if ("@totable".equalsIgnoreCase(name)) {
|
return ioItem.getToName();
|
}
|
else if ("@fromtable".equalsIgnoreCase(name)) {
|
return ioItem.getFromName();
|
}
|
else if ("@distinct".equalsIgnoreCase(name)) {
|
return ioItem.isDistinctSelect() ? "distinct" : "";
|
}
|
else if ("@updatefieldpairs".equalsIgnoreCase(name)) {
|
return 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() {
|
return getMappingRuntimeList2String("update", true);
|
}
|
//TODO INSERT UPDATE ??
|
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 = ioMappingItemRuntime.getFromField();
|
}
|
else {
|
field = ioMappingItemRuntime.getToField();
|
}
|
builder.append(field);
|
}
|
|
return builder.toString();
|
}
|
|
|
private String getFilterFieldValues() {
|
String andPair = getAndPair("filter");
|
|
return andPair;
|
}
|
|
private String getKeyFieldPairs() {
|
String andPair = getAndPair("key");
|
|
return andPair;
|
}
|
|
private String getAndPair(String type) {
|
String[] fields = null;
|
if ("key".equalsIgnoreCase(type)) {
|
fields = ioItem.getKeyFieldPairs();
|
if (fields == null || fields.length == 0) {
|
return ioItem.getFromName() + ".id = " + ioItem.getToName() + ".id";
|
}
|
}
|
else if ("filter".equalsIgnoreCase(type)) {
|
String[] filterFieldValues = ioItem.getFilterFieldValues();
|
|
if (filterFieldValues == null || filterFieldValues.length == 0) {
|
return "1=1";
|
}
|
}
|
|
// if define
|
StringBuilder result = new StringBuilder(" and ");
|
|
for (String fieldPair : fields) {
|
String keyFieldPair = setParametersTo(fieldPair);
|
result.append(keyFieldPair);
|
}
|
|
return result.toString();
|
|
}
|
|
public String setParametersTo(String segment) {
|
if (segment == null) {
|
return segment;
|
}
|
|
segment = segment.toLowerCase();
|
|
for (String name : paramNames) {
|
if (segment.indexOf(name) >= 0) {
|
String value = getParameter(name);
|
|
if (value == null) {
|
continue;
|
}
|
|
segment = segment.replace(name, value);
|
}
|
}
|
|
return segment;
|
}
|
|
|
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");
|
|
}
|
}
|