You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.6 KiB
148 lines
4.6 KiB
9 years ago
|
package com.fr.plugin.form.widget.core;
|
||
|
|
||
8 years ago
|
import com.fr.base.Formula;
|
||
9 years ago
|
import com.fr.base.Parameter;
|
||
|
import com.fr.base.ParameterHelper;
|
||
9 years ago
|
import com.fr.base.TemplateUtils;
|
||
|
import com.fr.data.NetworkHelper;
|
||
8 years ago
|
import com.fr.general.FArray;
|
||
|
import com.fr.general.GeneralUtils;
|
||
9 years ago
|
import com.fr.general.Inter;
|
||
8 years ago
|
import com.fr.json.JSONArray;
|
||
|
import com.fr.json.JSONException;
|
||
|
import com.fr.json.JSONObject;
|
||
|
import com.fr.json.JSONUtils;
|
||
9 years ago
|
import com.fr.script.Calculator;
|
||
8 years ago
|
import com.fr.stable.CodeUtils;
|
||
|
import com.fr.stable.ParameterProvider;
|
||
7 years ago
|
import com.fr.stable.ProductConstants;
|
||
|
import com.fr.stable.ProductConstantsBase;
|
||
|
import com.fr.stable.StableUtils;
|
||
8 years ago
|
import com.fr.stable.UtilEvalError;
|
||
|
import com.fr.stable.js.WidgetName;
|
||
9 years ago
|
import com.fr.stable.script.CalculatorProvider;
|
||
9 years ago
|
import com.fr.stable.xml.XMLPrintWriter;
|
||
|
import com.fr.stable.xml.XMLableReader;
|
||
|
|
||
|
import javax.servlet.http.HttpServletRequest;
|
||
9 years ago
|
import java.util.ArrayList;
|
||
|
import java.util.Arrays;
|
||
|
import java.util.List;
|
||
9 years ago
|
|
||
|
/**
|
||
|
* Created by richie on 15/12/2.
|
||
|
*/
|
||
|
public class TemplateSource extends RHIframeSource {
|
||
|
|
||
|
|
||
|
private String path;
|
||
|
|
||
|
public TemplateSource() {
|
||
|
|
||
|
}
|
||
|
|
||
|
public TemplateSource(String path) {
|
||
|
this.path = path;
|
||
|
}
|
||
|
|
||
|
public String getPath() {
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
public void setPath(String path) {
|
||
|
this.path = path;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) {
|
||
|
try {
|
||
|
String realPath = TemplateUtils.render(path, calculator);
|
||
|
if (realPath.contains(".cpt")) {
|
||
7 years ago
|
if (isNewerThan9()) {
|
||
|
return NetworkHelper.createServletURL(req) + "/view/report?viewlet=" + CodeUtils.encodeURIComponent(realPath);
|
||
|
} else {
|
||
|
return NetworkHelper.createServletURL(req) + "?reportlet=" + CodeUtils.encodeURIComponent(realPath);
|
||
|
}
|
||
9 years ago
|
} else if (realPath.contains(".frm")) {
|
||
7 years ago
|
if (isNewerThan9()) {
|
||
|
return NetworkHelper.createServletURL(req) + "/view/form?viewlet=" + CodeUtils.encodeURIComponent(realPath);
|
||
|
}
|
||
|
return NetworkHelper.createServletURL(req) + "?formlet=" + CodeUtils.encodeURIComponent(realPath);
|
||
9 years ago
|
}
|
||
|
} catch (Exception e) {
|
||
|
return null;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
7 years ago
|
private boolean isNewerThan9() {
|
||
|
return Integer.parseInt(ProductConstants.MAIN_VERSION) > 9;
|
||
|
}
|
||
|
|
||
9 years ago
|
@Override
|
||
|
public String[] dependence(CalculatorProvider ca) {
|
||
|
Parameter[] parameters = ParameterHelper.analyze4Parameters(path, false);
|
||
|
List<String> collections = new ArrayList<String>();
|
||
|
for (Parameter parameter : parameters) {
|
||
|
collections.addAll(Arrays.asList(parameter.dependence(ca)));
|
||
|
}
|
||
|
return collections.toArray(new String[collections.size()]);
|
||
|
}
|
||
|
|
||
8 years ago
|
@Override
|
||
|
public void mixCalculatedParameters(Calculator c, JSONArray ja, ParameterProvider[] parameters) throws JSONException, UtilEvalError {
|
||
|
if (parameters == null) {
|
||
|
return;
|
||
|
}
|
||
|
// richie:这里的key/value不需要做CJKEncode,在前端会处理的
|
||
|
for (ParameterProvider parameter : parameters) {
|
||
|
JSONObject jo = JSONObject.create();
|
||
|
String key = parameter.getName();
|
||
|
Object obj = parameter.getValue();
|
||
|
if (obj instanceof Formula) {
|
||
|
String content = ((Formula) obj).getContent();
|
||
|
obj = c.evalValue(content);
|
||
|
}
|
||
|
if (obj instanceof String) {
|
||
|
jo.put(parameter.getName(), obj);
|
||
|
} else if (obj instanceof FArray) {
|
||
|
jo.put(key, obj);
|
||
|
} else if (obj instanceof WidgetName) {
|
||
|
jo.put("widgetName", ((WidgetName) obj).getName());
|
||
|
} else {
|
||
|
// 还可以是数字啊什么的
|
||
|
jo.put(key, obj);
|
||
|
}
|
||
|
ja.put(jo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getSourceType() {
|
||
|
return "tpl";
|
||
|
}
|
||
|
|
||
9 years ago
|
@Override
|
||
|
public String toString() {
|
||
7 years ago
|
return path;
|
||
9 years ago
|
}
|
||
|
|
||
|
@Override
|
||
|
public void readXML(XMLableReader reader) {
|
||
|
super.readXML(reader);
|
||
|
if (reader.isChildNode()) {
|
||
|
String nodeName = reader.getTagName();
|
||
|
if ("Attr".equals(nodeName)) {
|
||
|
this.path = reader.getAttrAsString("path", null);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void writeXML(XMLPrintWriter writer) {
|
||
|
super.writeXML(writer);
|
||
|
writer.startTAG("Attr");
|
||
|
writer.attr("path", path);
|
||
|
writer.end();
|
||
|
}
|
||
|
}
|