package frame.file.office;
|
|
import java.io.Console;
|
import java.io.PrintWriter;
|
import java.net.URL;
|
import java.net.URLEncoder;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.apache.commons.codec.net.URLCodec;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import com.sun.corba.se.impl.protocol.JIDLLocalCRDImpl;
|
|
import frame.call.writer.JsonWriter;
|
import frame.data.DataContext;
|
import frame.file.FileIOContainer;
|
import frame.file.UploadResult;
|
import frame.file.office.excel.DownloadResult;
|
import frame.file.office.excel.ExcelWriter;
|
import frame.file.processor.Monitor;
|
import frame.util.Util;
|
|
public class Engine {
|
|
private static Engine instance;
|
private static Object locker = new Object();
|
private Logger logger;
|
private ExcelLoader excelLoader;
|
|
private Engine() {
|
logger = LoggerFactory.getLogger(this.getClass());
|
excelLoader = new ExcelLoader(logger);
|
|
}
|
|
public static Engine getInstance() {
|
synchronized (locker) {
|
if (instance == null) {
|
instance = new Engine();
|
}
|
|
return instance;
|
}
|
}
|
|
public static void download(HttpServletResponse response, String iocode, DataContext dataContext, Map<String, String> parameterProvider) {
|
getInstance();
|
|
StringBuilder log = new StringBuilder();
|
|
try {
|
FileIOContainer.load();
|
// ExcelWriter excelWriter = new ExcelWriter(Monitor.getDownloadProgressor(), parameterProvider);
|
ExcelWriter excelWriter = new ExcelWriter(Monitor.getDownloadProgressor());
|
DownloadResult result = excelWriter.writeOneFile(iocode, dataContext);
|
|
String filename = result.getFilename();
|
response.addHeader("Content-Type", "application/octet-stream");
|
filename = URLEncoder.encode(filename, "utf-8");
|
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
|
PrintWriter writer = response.getWriter();
|
writer.
|
response.TransmitFile(result.getPath());
|
}
|
catch (Exception e) {
|
JsonWriter json = new JsonWriter();
|
json.beginObject();
|
json.addValue("log", log.toString());
|
json.addValue("error", e.getMessage());
|
|
json.beginArray("detail");
|
List<String> details = Monitor.getDownloadProgressor().getMessageList();
|
|
for (int i = 0; i < details.size(); i++) {
|
json.addValue(details.get(i));
|
}
|
|
json.endArray();
|
json.endObject();
|
PrintWriter writer = response.getWriter();
|
writer.write(json.toString());
|
}
|
}
|
|
public static UploadResult upload(String iocode, FileInfo file, HttpServletRequest request) {
|
UploadResult result = new UploadResult(request);
|
|
result.writeBegin();
|
try {
|
getInstance();
|
FileIOContainer.load();
|
instance.excelLoader.loadOneFile(result, iocode, file);
|
}
|
catch (Exception e){
|
result.fail("error", e.getMessage());
|
}
|
finally {
|
result.writeEnd();
|
}
|
|
return result;
|
}
|
|
public static UploadResult testDataProcess(String iocode, HttpServletRequest request) {
|
UploadResult result = new UploadResult(request);
|
|
result.writeBegin();
|
try {
|
getInstance();
|
instance.excelLoader.testDataProcess(result, iocode);
|
}
|
catch (Exception e){
|
result.fail("error", e.getMessage());
|
}
|
finally {
|
result.writeEnd();
|
}
|
|
return result;
|
}
|
|
private void showHelloMessage() {
|
logger.info("Excel导入服务器 V1.0已启动");
|
}
|
|
|
}
|