文件可上传至阿里云OSS中,也可以从OSS中下载文件。
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.
 
 
 

179 lines
6.3 KiB

package com.fr.plugin.file.submit.oss.script;
import com.fr.base.BaseFormula;
import com.fr.base.Parameter;
import com.fr.base.ParameterMapNameSpace;
import com.fr.general.GeneralUtils;
import com.fr.general.xml.GeneralXMLTools;
import com.fr.js.Hyperlink;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.file.submit.oss.fun.OssVariableValue;
import com.fr.script.Calculator;
import com.fr.stable.ArrayUtils;
import com.fr.stable.AssistUtils;
import com.fr.stable.ColumnRow;
import com.fr.stable.FormulaProvider;
import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.script.ExTool;
import com.fr.stable.script.NameSpace;
import com.fr.stable.web.Repository;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
import com.fr.web.session.SessionIDInfo;
public class OssDownloadHyperlink extends Hyperlink {
private String bucket;
private OssVariableValue directory;
private OssVariableValue fileName;
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public OssVariableValue getDirectory() {
return directory;
}
public void setDirectory(OssVariableValue directory) {
this.directory = directory;
modifyParameters(directory, "directory");
}
public OssVariableValue getFileName() {
return fileName;
}
public void setFileName(OssVariableValue fileName) {
this.fileName = fileName;
modifyParameters(fileName, "fileName");
}
private void modifyParameters(OssVariableValue variableValue, String parameterName) {
if (variableValue == null) {
return;
}
ParameterProvider[] providers = getParameters();
if (ArrayUtils.isEmpty(providers)) {
providers = ArrayUtils.add(providers, new Parameter(parameterName, variableValue.getValue()));
} else {
for (ParameterProvider provider : providers) {
if (AssistUtils.equals(provider.getValue(), parameterName)) {
provider.setValue(variableValue.getValue());
} else {
providers = ArrayUtils.add(providers, new Parameter(parameterName, variableValue.getValue()));
}
}
}
setParameters(providers);
}
@Override
protected String actionJS(Repository repository) {
JSONObject data = JSONObject.create();
try {
data.put("bucket", bucket);
if (directory != null) {
data.put("directory", getResultValue(repository, "directory", directory));
}
if (fileName != null) {
data.put("fileName", getResultValue(repository, "fileName", fileName));
}
} catch (JSONException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return "FR.doHyperlinkByOssDownload(" + data.toString() + ");";
}
private String getResultValue(Repository repository, String parameterName, OssVariableValue variableValue) {
Object result = null;
ParameterProvider[] providers = getParameters();
for (ParameterProvider provider : providers) {
if (AssistUtils.equals(parameterName, provider.getName())) {
Object value = provider.getValue();
if (value instanceof BaseFormula) {
result = ((BaseFormula) value).getResult();
break;
} else {
result = value;
}
}
}
if (result == null) {
Calculator calculator = newCalculator(repository);
result = variableValue.getResult(calculator);
}
return GeneralUtils.objectToString(result);
}
private Calculator newCalculator(Repository repository) {
Calculator calculator = Calculator.createCalculator();
if (repository != null) {
calculator.pushNameSpace(ParameterMapNameSpace.create(repository.getReportParameterMap()));
calculator.pushNameSpace(SessionIDInfo.asNameSpace(repository.getSessionID()));
}
if (!paraMap.isEmpty()) {
calculator.pushNameSpace(ParameterMapNameSpace.create(this.paraMap));
}
return calculator;
}
public void readXML(final XMLableReader reader) {
super.readXML(reader);
if (reader.isChildNode()) {
String tagName = reader.getTagName();
if ("Bucket".equals(tagName)) {
this.bucket = reader.getElementValue();
} else if ("Directory".equals(tagName)) {
this.setDirectory((OssVariableValue)GeneralXMLTools.readXMLable(reader));
} else if ("FileName".equals(tagName)) {
this.setFileName((OssVariableValue) GeneralXMLTools.readXMLable(reader));
}
}
}
public void writeXML(final XMLPrintWriter writer) {
writer.startTAG("JavaScript").attr("class", this.getClass().getName());
super.writeXML(writer);
if (StringUtils.isNotEmpty(bucket)) {
writer.startTAG("Bucket").textNode(bucket).end();
}
if (directory != null) {
GeneralXMLTools.writeXMLable(writer, directory, "Directory");
}
if (fileName != null) {
GeneralXMLTools.writeXMLable(writer, fileName, "FileName");
}
writer.end();
}
@Override
public boolean equals(Object o) {
return o instanceof OssDownloadHyperlink
&& AssistUtils.equals(((OssDownloadHyperlink) o).bucket, bucket)
&& AssistUtils.equals(((OssDownloadHyperlink) o).directory, directory)
&& AssistUtils.equals(((OssDownloadHyperlink) o).fileName, fileName);
}
@Override
public Object clone() throws CloneNotSupportedException {
OssDownloadHyperlink cloned = (OssDownloadHyperlink) super.clone();
if (directory != null) {
cloned.directory = (OssVariableValue) directory.clone();
}
if (fileName != null) {
cloned.fileName = (OssVariableValue) fileName.clone();
}
return cloned;
}
}