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.
129 lines
4.3 KiB
129 lines
4.3 KiB
package com.fr.plugin.form.widget.core; |
|
|
|
import com.fr.base.ParameterMapNameSpace; |
|
import com.fr.general.xml.GeneralXMLTools; |
|
import com.fr.json.JSONArray; |
|
import com.fr.json.JSONException; |
|
import com.fr.json.JSONObject; |
|
import com.fr.script.Calculator; |
|
import com.fr.stable.ArrayUtils; |
|
import com.fr.stable.DependenceProvider; |
|
import com.fr.stable.ParameterProvider; |
|
import com.fr.stable.UtilEvalError; |
|
import com.fr.stable.script.CalculatorProvider; |
|
import com.fr.stable.script.NameSpace; |
|
import com.fr.stable.xml.StableXMLUtils; |
|
import com.fr.stable.xml.XMLPrintWriter; |
|
import com.fr.stable.xml.XMLReadable; |
|
import com.fr.stable.xml.XMLable; |
|
import com.fr.stable.xml.XMLableReader; |
|
import com.fr.web.core.TemplateSessionIDInfo; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
import java.util.ArrayList; |
|
import java.util.Arrays; |
|
import java.util.List; |
|
|
|
/** |
|
* Created by richie on 15/12/2. |
|
*/ |
|
public class RHIframeAttr implements XMLable, DependenceProvider { |
|
public static final String XML_TAG = "RHIframeAttr"; |
|
|
|
private RHIframeSource source; |
|
|
|
private ParameterProvider[] parameters; |
|
|
|
public RHIframeSource getSource() { |
|
return source; |
|
} |
|
|
|
public void setSource(RHIframeSource source) { |
|
this.source = source; |
|
} |
|
|
|
public ParameterProvider[] getParameters() { |
|
return parameters; |
|
} |
|
|
|
public void setParameters(ParameterProvider[] parameters) { |
|
this.parameters = parameters; |
|
} |
|
|
|
@Override |
|
public String[] dependence(CalculatorProvider ca) { |
|
if (source == null) { |
|
return ArrayUtils.EMPTY_STRING_ARRAY; |
|
} |
|
List<String> data = new ArrayList<String>(); |
|
data.addAll(Arrays.asList(source.dependence(ca))); |
|
if (parameters != null) { |
|
for (ParameterProvider parameter : parameters) { |
|
data.addAll(Arrays.asList(parameter.dependence(ca))); |
|
} |
|
} |
|
return data.toArray(new String[data.size()]); |
|
} |
|
|
|
public void mixConfig(JSONObject jo, Calculator c, HttpServletRequest req) throws JSONException { |
|
if (source != null) { |
|
jo.put("src", source.getCalculatedUrl(c, req)); |
|
String[] dependence = dependence(c); |
|
if (!ArrayUtils.isEmpty(dependence)) { |
|
jo.put("dependence", dependence); |
|
jo.put("valueDependence", dependence); |
|
} |
|
jo.put("sourceType", source.getSourceType()); |
|
} |
|
} |
|
|
|
public void mixJSONData(JSONArray ja, TemplateSessionIDInfo sessionIDInfor, Calculator c) throws JSONException, UtilEvalError { |
|
NameSpace ns = ParameterMapNameSpace.create(sessionIDInfor.getParameterMap4Execute()); |
|
c.pushNameSpace(ns); |
|
|
|
if (source != null) { |
|
source.mixCalculatedParameters(c, ja, parameters); |
|
} |
|
} |
|
|
|
@Override |
|
public void readXML(XMLableReader reader) { |
|
if (reader.isChildNode()) { |
|
String tmpName = reader.getTagName(); |
|
if (ParameterProvider.ARRAY_XML_TAG.equals(tmpName)) {//读取Parameters. |
|
final List<ParameterProvider> tmpParameterList = new ArrayList<ParameterProvider>(); |
|
|
|
reader.readXMLObject(new XMLReadable() { |
|
public void readXML(XMLableReader reader) { |
|
if (ParameterProvider.XML_TAG.equals(reader.getTagName())) { |
|
tmpParameterList.add(StableXMLUtils.readParameter(reader)); |
|
} |
|
} |
|
}); |
|
|
|
//转换数组. |
|
if (!tmpParameterList.isEmpty()) { |
|
this.parameters = tmpParameterList.toArray(new ParameterProvider[tmpParameterList.size()]); |
|
} |
|
} else if (tmpName.equals(RHIframeSource.XML_TAG)) { |
|
this.source = (RHIframeSource) GeneralXMLTools.readXMLable(reader); |
|
} |
|
} |
|
} |
|
|
|
@Override |
|
public void writeXML(XMLPrintWriter writer) { |
|
if (source != null) { |
|
GeneralXMLTools.writeXMLable(writer, source, RHIframeSource.XML_TAG); |
|
} |
|
StableXMLUtils.writeParameters(writer, parameters); |
|
} |
|
|
|
@Override |
|
public Object clone() throws CloneNotSupportedException { |
|
RHIframeAttr cloned = (RHIframeAttr)super.clone(); |
|
cloned.source = source; |
|
cloned.parameters = parameters; |
|
return cloned; |
|
} |
|
} |