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
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; |
|
} |
|
}
|
|
|