提交 807e902b 编写于 作者: Z zhourui

增加流程docTo

上级 99b2989b
......@@ -14,6 +14,7 @@
/o2server/jvm/
/o2server/local/
/o2server/*/src/main/webapp/describe/
/o2server/*/src/main/webapp/WEB-INF/
**/.settings/
**/.classpath
**/.project
......
......@@ -7,6 +7,7 @@
"docToWordDefaultFileName": "正文.docx",
"docToWordDefaultSite": "$doc",
"executorCount": 32.0,
"extensionEvents": {},
"urge": {
"enable": false,
"cron": "30 0/10 8-18 * * ?",
......@@ -63,6 +64,7 @@
"###docToWordDefaultFileName": "HTML版式公文转换成Word文件缺省文件名.###",
"###docToWordDefaultSite": "HTML版式公文转换成Word文件缺省site.###",
"###executorCount": "执行器数量###",
"###extensionEvents": "扩充事件###",
"###urge": "催办任务设置,发现即将过期时发送提醒消息.###",
"###expire": "将已经过了截至时间的待办标记过期.###",
"###touchDelay": "延时任务设置,定时触发延时任务,当超过延时时间后继续流转.###",
......
{
"crawlWorkCompleted": {
"enable": false,
"cron": "50 50 22 * * ?",
"count": 2000.0,
"enable": true,
"cron": "50 50 21 * * ?",
"count": 500.0,
"excludeAttachment": [],
"excludeSite": [],
"maxAttachmentSize": 5242880.0,
"###enable": "是否启用###",
"###cron": "定时cron表达式.###",
"###count": "每次处理的数量,默认每小时处理所以默认为2000,同时每次将重爬最旧的25%,按时间轮询25%.###",
"###count": "每次处理的数量,默认每小时处理所以默认为500,同时每次将重爬最旧的25%,按时间轮询25%.###",
"###excludeAttachment": "忽略附件名称.###",
"###excludeSite": "忽略附件位置.###",
"###maxAttachmentSize": "最大附件大小.###"
},
"crawlWork": {
"enable": false,
"cron": "40 40 7-21 * * ?",
"count": 100.0,
"enable": true,
"cron": "40 40 10,12,14,16 * * ?",
"count": 50.0,
"excludeAttachment": [],
"excludeSite": [],
"maxAttachmentSize": 5242880.0,
"###enable": "是否启用###",
"###cron": "定时cron表达式.###",
"###count": "每次处理的数量,默认每小时处理所以默认为100,同时每次将重爬最旧的50%,按时间轮询50%.###",
"###count": "每次处理的数量,默认每小时处理所以默认为50,同时每次将重爬最旧的50%,按时间轮询50%.###",
"###excludeAttachment": "忽略附件名称.###",
"###excludeSite": "忽略附件位置.###",
"###maxAttachmentSize": "最大附件大小.###"
},
"crawlCms": {
"enable": false,
"cron": "30 30 7-21 * * ?",
"count": 100.0,
"enable": true,
"cron": "30 30 9,12,15,18 * * ?",
"count": 30.0,
"excludeAttachment": [],
"maxAttachmentSize": 5242880.0,
"###enable": "是否启用###",
"###cron": "定时cron表达式.###",
"###count": "每次处理的数量,默认每小时处理所以默认为100,同时每次将重爬最旧的50%,按时间轮询50%.###",
"###count": "每次处理的数量,默认每小时处理所以默认为30,同时每次将重爬最旧的50%,按时间轮询50%.###",
"###excludeAttachment": "忽略附件名称.###",
"###maxAttachmentSize": "最大附件大小.###"
},
......
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_attendance_assemble_control" metadata-complete="false" version="3.0"><display-name>x_attendance_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_attendance_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.x.base.core.project;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Random;
......@@ -16,6 +17,8 @@ import java.util.zip.CRC32;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.connection.ActionResponse;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.connection.FilePart;
import com.x.base.core.project.connection.FormField;
import com.x.base.core.project.connection.HttpConnection;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
......@@ -108,7 +111,7 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new Exception("getQuery can not find application with name:" + applicationName + ".");
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
......@@ -123,6 +126,59 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
return CipherConnectionAction.get(xdebugger, application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public byte[] getQueryBinary(Class<?> applicationClass, String uri) throws Exception {
return this.getQueryBinary(false, applicationClass.getName(), uri, null);
}
public byte[] getQueryBinary(Class<?> applicationClass, String uri, String seed) throws Exception {
return this.getQueryBinary(false, applicationClass.getName(), uri, seed);
}
public byte[] getQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri) throws Exception {
return this.getQueryBinary(xdebugger, applicationClass.getName(), uri, null);
}
public byte[] getQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri, String seed)
throws Exception {
return this.getQueryBinary(xdebugger, applicationClass.getName(), uri, seed);
}
public byte[] getQueryBinary(Application application, String uri) throws Exception {
return this.getQueryBinary(false, application, uri);
}
public byte[] getQueryBinary(Boolean xdebugger, Application application, String uri) throws Exception {
return CipherConnectionAction.getBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public byte[] getQueryBinary(String applicationName, String uri) throws Exception {
return getQueryBinary(false, applicationName, uri, null);
}
public byte[] getQueryBinary(String applicationName, String uri, String seed) throws Exception {
return getQueryBinary(false, applicationName, uri, seed);
}
public byte[] getQueryBinary(Boolean xdebugger, String applicationName, String uri, String seed) throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
// 如果随机种子是空,那么优先使用本机
application = this.findApplicationWithNode(name, Config.node());
if (null == application) {
application = this.randomWithWeight(name);
}
} else {
application = this.randomWithSeed(name, seed);
}
return CipherConnectionAction.getBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public ActionResponse deleteQuery(Class<?> applicationClass, String uri) throws Exception {
return this.deleteQuery(false, applicationClass.getName(), uri, null);
}
......@@ -161,7 +217,7 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new Exception("deleteQuery can not find application with name:" + applicationName + ".");
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
......@@ -177,6 +233,60 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public byte[] deleteQueryBinary(Class<?> applicationClass, String uri) throws Exception {
return this.deleteQueryBinary(false, applicationClass.getName(), uri, null);
}
public byte[] deleteQueryBinary(Class<?> applicationClass, String uri, String seed) throws Exception {
return this.deleteQueryBinary(false, applicationClass.getName(), uri, seed);
}
public byte[] deleteQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri) throws Exception {
return this.deleteQueryBinary(xdebugger, applicationClass.getName(), uri, null);
}
public byte[] deleteQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri, String seed)
throws Exception {
return this.deleteQueryBinary(xdebugger, applicationClass.getName(), uri, seed);
}
public byte[] deleteQueryBinary(Application application, String uri) throws Exception {
return this.deleteQueryBinary(false, application, uri);
}
public byte[] deleteQueryBinary(Boolean xdebugger, Application application, String uri) throws Exception {
return CipherConnectionAction.deleteBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public byte[] deleteQueryBinary(String applicationName, String uri) throws Exception {
return deleteQueryBinary(false, applicationName, uri, null);
}
public byte[] deleteQueryBinary(String applicationName, String uri, String seed) throws Exception {
return deleteQueryBinary(false, applicationName, uri, seed);
}
public byte[] deleteQueryBinary(Boolean xdebugger, String applicationName, String uri, String seed)
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
// 如果随机种子是空,那么优先使用本机
application = this.findApplicationWithNode(name, Config.node());
if (null == application) {
application = this.randomWithWeight(name);
}
} else {
application = this.randomWithSeed(name, seed);
}
return CipherConnectionAction.deleteBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
}
public ActionResponse postQuery(Class<?> applicationClass, String uri, Object body) throws Exception {
return this.postQuery(false, applicationClass.getName(), uri, body, null);
}
......@@ -217,7 +327,7 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new Exception("postQuery can not find application with name:" + applicationName + ".");
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
......@@ -233,6 +343,123 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
body);
}
public byte[] postQueryBinary(Class<?> applicationClass, String uri, Object body) throws Exception {
return this.postQueryBinary(false, applicationClass.getName(), uri, body, null);
}
public byte[] postQueryBinary(Class<?> applicationClass, String uri, Object body, String seed) throws Exception {
return this.postQueryBinary(false, applicationClass.getName(), uri, body, seed);
}
public byte[] postQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri, Object body)
throws Exception {
return this.postQueryBinary(xdebugger, applicationClass.getName(), uri, body, null);
}
public byte[] postQueryBinary(Boolean xdebugger, Class<?> applicationClass, String uri, Object body, String seed)
throws Exception {
return this.postQueryBinary(xdebugger, applicationClass.getName(), uri, body, seed);
}
public byte[] postQueryBinary(Application application, String uri, Object body) throws Exception {
return this.postQueryBinary(false, application, uri, body);
}
public byte[] postQueryBinary(Boolean xdebugger, Application application, String uri, Object body)
throws Exception {
return CipherConnectionAction.postBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri), body);
}
public byte[] postQueryBinary(String applicationName, String uri, Object body) throws Exception {
return this.postQueryBinary(false, applicationName, uri, body, null);
}
public byte[] postQueryBinary(String applicationName, String uri, Object body, String seed) throws Exception {
return this.postQueryBinary(false, applicationName, uri, body, seed);
}
public byte[] postQueryBinary(Boolean xdebugger, String applicationName, String uri, Object body, String seed)
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
// 如果随机种子是空,那么优先使用本机
application = this.findApplicationWithNode(name, Config.node());
if (null == application) {
application = this.randomWithWeight(name);
}
} else {
application = this.randomWithSeed(name, seed);
}
return CipherConnectionAction.postBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri), body);
}
public byte[] postQueryMultiPartinary(Class<?> applicationClass, String uri, Collection<FormField> formFields,
Collection<FilePart> fileParts) throws Exception {
return this.postQueryMultiPartBinary(false, applicationClass.getName(), uri, formFields, fileParts, null);
}
public byte[] postQueryMultiPartBinary(Class<?> applicationClass, String uri, Collection<FormField> formFields,
Collection<FilePart> fileParts, String seed) throws Exception {
return this.postQueryMultiPartBinary(false, applicationClass.getName(), uri, formFields, fileParts, seed);
}
public byte[] postQueryMultiPartBinary(Boolean xdebugger, Class<?> applicationClass, String uri,
Collection<FormField> formFields, Collection<FilePart> fileParts) throws Exception {
return this.postQueryMultiPartBinary(xdebugger, applicationClass.getName(), uri, formFields, fileParts, null);
}
public byte[] postQueryMultiPartBinary(Boolean xdebugger, Class<?> applicationClass, String uri,
Collection<FormField> formFields, Collection<FilePart> fileParts, String seed) throws Exception {
return this.postQueryMultiPartBinary(xdebugger, applicationClass.getName(), uri, formFields, fileParts, seed);
}
public byte[] postQueryMultiPartBinary(Application application, String uri, Collection<FormField> formFields,
Collection<FilePart> fileParts) throws Exception {
return this.postQueryMultiPartBinary(false, application, uri, formFields, fileParts);
}
public byte[] postQueryMultiPartBinary(Boolean xdebugger, Application application, String uri,
Collection<FormField> formFields, Collection<FilePart> fileParts) throws Exception {
return CipherConnectionAction.postMultiPartBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri), formFields, fileParts);
}
public byte[] postQueryMultiPartBinary(String applicationName, String uri, Collection<FormField> formFields,
Collection<FilePart> fileParts) throws Exception {
return this.postQueryMultiPartBinary(false, applicationName, uri, formFields, fileParts, null);
}
public byte[] postQueryMultiPartBinary(String applicationName, String uri, Collection<FormField> formFields,
Collection<FilePart> fileParts, String seed) throws Exception {
return this.postQueryMultiPartBinary(false, applicationName, uri, formFields, fileParts, seed);
}
public byte[] postQueryMultiPartBinary(Boolean xdebugger, String applicationName, String uri,
Collection<FormField> formFields, Collection<FilePart> fileParts, String seed) throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
// 如果随机种子是空,那么优先使用本机
application = this.findApplicationWithNode(name, Config.node());
if (null == application) {
application = this.randomWithWeight(name);
}
} else {
application = this.randomWithSeed(name, seed);
}
return CipherConnectionAction.postMultiPartBinary(xdebugger,
application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri), formFields, fileParts);
}
public ActionResponse putQuery(Class<?> applicationClass, String uri, Object body) throws Exception {
return this.putQuery(false, applicationClass.getName(), uri, body, null);
}
......@@ -273,7 +500,7 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
throws Exception {
String name = this.findApplicationName(applicationName);
if (StringUtils.isEmpty(name)) {
throw new Exception("putQuery can not find application with name:" + applicationName + ".");
throw new ExceptionFindApplicationName(applicationName);
}
Application application = null;
if (StringUtils.isEmpty(seed)) {
......
package com.x.base.core.project;
import com.x.base.core.project.exception.PromptException;
public class ExceptionFindApplicationName extends PromptException {
private static final long serialVersionUID = -7354813827434276962L;
public ExceptionFindApplicationName(String name) {
super("can not find application with name:{}.", name);
}
}
......@@ -173,14 +173,14 @@ public class Collect extends ConfigObject {
try {
URL url = new URL(this.url("/o2_collect_assemble/jaxrs/collect/validate"));
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty(ConnectionAction.Access_Control_Allow_Credentials,
ConnectionAction.Access_Control_Allow_Credentials_Value);
connection.setRequestProperty(ConnectionAction.Access_Control_Allow_Headers,
ConnectionAction.Access_Control_Allow_Headers_Value);
connection.setRequestProperty(ConnectionAction.Access_Control_Allow_Methods,
ConnectionAction.Access_Control_Allow_Methods_Value);
connection.setRequestProperty(ConnectionAction.Cache_Control, ConnectionAction.Cache_Control_Value);
connection.setRequestProperty(ConnectionAction.Content_Type, ConnectionAction.Content_Type_Value);
connection.setRequestProperty(ConnectionAction.ACCESS_CONTROL_ALLOW_CREDENTIALS,
ConnectionAction.ACCESS_CONTROL_ALLOW_CREDENTIALS_VALUE);
connection.setRequestProperty(ConnectionAction.ACCESS_CONTROL_ALLOW_HEADERS,
ConnectionAction.ACCESS_CONTROL_ALLOW_HEADERS_VALUE);
connection.setRequestProperty(ConnectionAction.ACCESS_CONTROL_ALLOW_METHODS,
ConnectionAction.ACCESS_CONTROL_ALLOW_METHODS_VALUE);
connection.setRequestProperty(ConnectionAction.CACHE_CONTROL, ConnectionAction.CACHE_CONTROL_VALUE);
connection.setRequestProperty(ConnectionAction.CONTENT_TYPE, ConnectionAction.CONTENT_TYPE_VALUE);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setDoOutput(true);
......@@ -208,7 +208,7 @@ public class Collect extends ConfigObject {
return true;
}
public boolean connect() throws Exception{
public boolean connect() throws Exception {
if (!Config.collect().getEnable()) {
throw new ExceptionCollectDisable();
}
......
package com.x.base.core.project.config;
import java.io.File;
import java.util.List;
import java.util.Optional;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.tools.DefaultCharset;
import com.x.base.core.project.tools.ListTools;
import org.apache.commons.collections4.list.TreeList;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.quartz.CronExpression;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.tools.DefaultCharset;
/**
* @author Zhou Rui
*/
public class ProcessPlatform extends ConfigObject {
public final static Integer DEFAULT_FORMVERSIONPERIOD = 45;
public static final Integer DEFAULT_FORMVERSIONPERIOD = 45;
public final static Integer DEFAULT_PROCESSVERSIONPERIOD = 45;
public static final Integer DEFAULT_PROCESSVERSIONPERIOD = 45;
public final static Integer DEFAULT_SCRIPTVERSIONPERIOD = 45;
public static final Integer DEFAULT_SCRIPTVERSIONPERIOD = 45;
public final static Integer DEFAULT_FORMVERSIONCOUNT = 30;
public static final Integer DEFAULT_FORMVERSIONCOUNT = 30;
public final static Integer DEFAULT_PROCESSVERSIONCOUNT = 30;
public static final Integer DEFAULT_PROCESSVERSIONCOUNT = 30;
public final static Integer DEFAULT_SCRIPTVERSIONCOUNT = 30;
public static final Integer DEFAULT_SCRIPTVERSIONCOUNT = 30;
public final static String DEFAULT_DOCTOWORDTYPE = "local";
public static final String DEFAULT_DOCTOWORDTYPE = "local";
public final static String DOCTOWORDTYPE_LOCAL = "local";
public static final String DOCTOWORDTYPE_LOCAL = "local";
public final static String DOCTOWORDTYPE_CLOUD = "cloud";
public static final String DOCTOWORDTYPE_CLOUD = "cloud";
public final static String DEFAULT_DOCTOWORDDEFAULTFILENAME = "正文.docx";
public static final String DEFAULT_DOCTOWORDDEFAULTFILENAME = "正文.docx";
public final static String DEFAULT_DOCTOWORDDEFAULTSITE = "$doc";
public static final String DEFAULT_DOCTOWORDDEFAULTSITE = "$doc";
public final static Integer DEFAULT_EXECUTORCOUNT = 32;
public static final Integer DEFAULT_EXECUTORCOUNT = 32;
public final static Boolean DEFAULT_DELETEPROCESSINUSE = false;
public static final Boolean DEFAULT_DELETEPROCESSINUSE = false;
public final static Boolean DEFAULT_DELETEAPPLICATIONINUSE = false;
public static final Boolean DEFAULT_DELETEAPPLICATIONINUSE = false;
public static ProcessPlatform defaultInstance() {
return new ProcessPlatform();
......@@ -92,6 +96,16 @@ public class ProcessPlatform extends ConfigObject {
@FieldDescribe("执行器数量")
private Integer executorCount;
@FieldDescribe("扩充事件")
private ExtensionEvents extensionEvents = new ExtensionEvents();
public ExtensionEvents getExtensionEvents() {
if (null == this.extensionEvents) {
this.extensionEvents = new ExtensionEvents();
}
return extensionEvents;
}
public Integer getExecutorCount() {
return ((null == executorCount) || (executorCount < 1)) ? DEFAULT_EXECUTORCOUNT : this.executorCount;
}
......@@ -539,4 +553,229 @@ public class ProcessPlatform extends ConfigObject {
}
public static class ExtensionEvents extends ConfigObject {
private WorkExtensionEvents workAttachmentUploadEvents = new WorkExtensionEvents();
private WorkExtensionEvents workAttachmentDownloadEvents = new WorkExtensionEvents();
private WorkExtensionEvents workDocToWordEvents = new WorkExtensionEvents();
private WorkCompletedExtensionEvents workCompletedAttachmentUploadEvents = new WorkCompletedExtensionEvents();
private WorkCompletedExtensionEvents workCompletedAttachmentDownloadEvents = new WorkCompletedExtensionEvents();
private WorkCompletedExtensionEvents workCompletedDocToWordEvents = new WorkCompletedExtensionEvents();
public WorkExtensionEvents getWorkAttachmentUploadEvents() {
if (null == this.workAttachmentUploadEvents) {
this.workAttachmentUploadEvents = new WorkExtensionEvents();
}
return workAttachmentUploadEvents;
}
public WorkExtensionEvents getWorkAttachmentDownloadEvents() {
if (null == this.workAttachmentDownloadEvents) {
this.workAttachmentDownloadEvents = new WorkExtensionEvents();
}
return workAttachmentDownloadEvents;
}
public WorkExtensionEvents getWorkDocToWordEvents() {
if (null == this.workDocToWordEvents) {
this.workDocToWordEvents = new WorkExtensionEvents();
}
return workDocToWordEvents;
}
public WorkCompletedExtensionEvents getWorkCompletedAttachmentUploadEvents() {
if (null == this.workCompletedAttachmentUploadEvents) {
this.workCompletedAttachmentUploadEvents = new WorkCompletedExtensionEvents();
}
return workCompletedAttachmentUploadEvents;
}
public WorkCompletedExtensionEvents getWorkCompletedAttachmentDownloadEvents() {
if (null == this.workCompletedAttachmentDownloadEvents) {
this.workCompletedAttachmentDownloadEvents = new WorkCompletedExtensionEvents();
}
return workCompletedAttachmentDownloadEvents;
}
public WorkCompletedExtensionEvents getWorkCompletedDocToWordEvents() {
if (null == this.workCompletedDocToWordEvents) {
this.workCompletedDocToWordEvents = new WorkCompletedExtensionEvents();
}
return workCompletedDocToWordEvents;
}
}
public static class WorkExtensionEvents extends TreeList<WorkExtensionEvent> {
public Optional<WorkExtensionEvent> bind(String application, String process, String activity) {
return this.stream().filter(o -> BooleanUtils.isTrue(o.getEnable()))
.filter(o -> (ListTools.contains(o.getApplications(), application)
&& ListTools.contains(o.getProcesses(), process)
&& ListTools.contains(o.getActivities(), activity))
|| (ListTools.contains(o.getApplications(), application)
&& ListTools.contains(o.getProcesses(), process)
&& ListTools.isEmpty(o.getActivities()))
|| (ListTools.contains(o.getApplications(), application)
&& ListTools.isEmpty(o.getProcesses()) && ListTools.isEmpty(o.getActivities()))
|| (ListTools.isEmpty(o.getApplications()) && ListTools.isEmpty(o.getProcesses())
&& ListTools.isEmpty(o.getActivities())))
.sorted((x, y) -> {
if (x.getActivities().contains(activity)) {
return 1;
} else if (y.getActivities().contains(activity)) {
return -1;
} else if (x.getProcesses().contains(process)) {
return 1;
} else if (y.getProcesses().contains(process)) {
return -1;
} else if (x.getApplications().contains(application)) {
return 1;
} else if (y.getApplications().contains(application)) {
return -1;
} else {
return 0;
}
}).findFirst();
}
}
public static class WorkExtensionEvent {
private Boolean enable;
private List<String> applications;
private List<String> processes;
private List<String> activities;
private String url;
private String custom;
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
public List<String> getApplications() {
return applications;
}
public void setApplications(List<String> applications) {
this.applications = applications;
}
public List<String> getProcesses() {
return processes;
}
public void setProcesses(List<String> processes) {
this.processes = processes;
}
public List<String> getActivities() {
return activities;
}
public void setActivities(List<String> activities) {
this.activities = activities;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCustom() {
return custom;
}
public void setCustom(String custom) {
this.custom = custom;
}
}
public static class WorkCompletedExtensionEvents extends TreeList<WorkCompletedExtensionEvent> {
public Optional<WorkCompletedExtensionEvent> bind(String application, String process) {
return this.stream().filter(o -> BooleanUtils.isTrue(o.getEnable()))
.filter(o -> (ListTools.contains(o.getApplications(), application)
&& ListTools.contains(o.getProcesses(), process))
|| (ListTools.contains(o.getApplications(), application)
&& ListTools.isEmpty(o.getApplications()))
|| (ListTools.isEmpty(o.getApplications()) && ListTools.isEmpty(o.getProcesses())))
.sorted((x, y) -> {
if (x.getProcesses().contains(process)) {
return 1;
} else if (y.getProcesses().contains(process)) {
return -1;
} else if (x.getApplications().contains(application)) {
return 1;
} else if (y.getApplications().contains(application)) {
return -1;
} else {
return 0;
}
}).findFirst();
}
}
public static class WorkCompletedExtensionEvent {
private Boolean enable;
private List<String> applications;
private List<String> processes;
private String url;
private String custom;
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
public List<String> getApplications() {
return applications;
}
public void setApplications(List<String> applications) {
this.applications = applications;
}
public List<String> getProcesses() {
return processes;
}
public void setProcesses(List<String> processes) {
this.processes = processes;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCustom() {
return custom;
}
public void setCustom(String custom) {
this.custom = custom;
}
}
}
\ No newline at end of file
package com.x.base.core.project.connection;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.Application;
import com.x.base.core.project.Applications;
......@@ -14,8 +11,14 @@ import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.http.HttpToken;
import com.x.base.core.project.tools.ListTools;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
public class CipherConnectionAction {
private CipherConnectionAction() {
}
public static ActionResponse get(Boolean xdebugger, String address) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
......@@ -29,6 +32,19 @@ public class CipherConnectionAction {
return get(xdebugger, addr);
}
public static byte[] getBinary(Boolean xdebugger, String address) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.getBinary(address, headers);
}
public static byte[] getBinary(Boolean xdebugger, Application application, String... strs) throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return getBinary(xdebugger, addr);
}
public static ActionResponse delete(Boolean xdebugger, String address) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
......@@ -42,6 +58,19 @@ public class CipherConnectionAction {
return delete(xdebugger, addr);
}
public static byte[] deleteBinary(Boolean xdebugger, String address) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.deleteBinary(address, headers);
}
public static byte[] deleteBinary(Boolean xdebugger, Application application, String... strs) throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return deleteBinary(xdebugger, addr);
}
public static ActionResponse post(Boolean xdebugger, String address, Object body) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
......@@ -56,6 +85,35 @@ public class CipherConnectionAction {
return post(xdebugger, addr, body);
}
public static byte[] postBinary(Boolean xdebugger, String address, Object body) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.postBinary(address, headers, body);
}
public static byte[] postBinary(Boolean xdebugger, Object body, Application application, String... strs)
throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return postBinary(xdebugger, addr, body);
}
public static byte[] postMultiPartBinary(Boolean xdebugger, String address, Collection<FormField> formFields,
Collection<FilePart> fileParts) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.postMultiPartBinary(address, headers, formFields, fileParts);
}
public static byte[] postMultiPartBinary(Boolean xdebugger, Collection<FormField> formFields,
Collection<FilePart> fileParts, Application application, String... strs) throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return postMultiPartBinary(xdebugger, addr, formFields, fileParts);
}
public static ActionResponse put(Boolean xdebugger, String address, Object body) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
......@@ -70,12 +128,33 @@ public class CipherConnectionAction {
return put(xdebugger, addr, body);
}
public static ActionResponse multiFormPost(Boolean xdebugger, String address, String fileName, byte[] bytes, Map<String, String> map) throws Exception{
public static byte[] putBinary(Boolean xdebugger, String address, Object body) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.putBinary(address, headers, body);
}
public static byte[] putBinary(Boolean xdebugger, Object body, Application application, String... strs)
throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return putBinary(xdebugger, addr, body);
}
public static byte[] putMultiPartBinary(Boolean xdebugger, String address, Collection<FormField> formFields,
Collection<FilePart> fileParts) throws Exception {
List<NameValuePair> headers = cipher();
if (BooleanUtils.isTrue(xdebugger)) {
headers.add(new NameValuePair(HttpToken.X_Debugger, true));
}
return ConnectionAction.multiFormPost(address, headers, fileName, bytes, map);
return ConnectionAction.putMultiPartBinary(address, headers, formFields, fileParts);
}
public static byte[] putMultiPartBinary(Boolean xdebugger, Collection<FormField> formFields,
Collection<FilePart> fileParts, Application application, String... strs) throws Exception {
String addr = application.getUrlJaxrsRoot() + trim(Applications.joinQueryUri(strs));
return putMultiPartBinary(xdebugger, addr, formFields, fileParts);
}
public static List<NameValuePair> cipher() throws Exception {
......
package com.x.base.core.project.connection;
import java.net.HttpURLConnection;
import com.x.base.core.project.exception.PromptException;
public class ExceptionBinary extends PromptException {
private static final long serialVersionUID = 7551134321893884285L;
public ExceptionBinary(Throwable e, HttpURLConnection connection) {
super(e, "binary error, address: {}, method: {}, because: {}.", null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod(), e.getMessage());
}
public ExceptionBinary(HttpURLConnection connection) {
super("binary error, address: {}, method: {}.", null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod());
}
}
package com.x.base.core.project.connection;
import java.net.HttpURLConnection;
import com.x.base.core.project.exception.PromptException;
public class ExceptionDeleteBinary extends PromptException {
private static final long serialVersionUID = 7551134321893884285L;
public ExceptionDeleteBinary(Throwable e, HttpURLConnection connection) {
super(e, "delete binary error, address: {}, method: {}, because: {}.",
null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod(), e.getMessage());
}
public ExceptionDeleteBinary(HttpURLConnection connection) {
super("delete binary error, address: {}, method: {}.", null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod());
}
}
package com.x.base.core.project.connection;
import java.net.HttpURLConnection;
import com.x.base.core.project.exception.PromptException;
public class ExceptionGetBinary extends PromptException {
private static final long serialVersionUID = 7551134321893884285L;
public ExceptionGetBinary(Throwable e, HttpURLConnection connection) {
super(e, "get binary error, address: {}, method: {}, because: {}.",
null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod(), e.getMessage());
}
public ExceptionGetBinary(HttpURLConnection connection) {
super("get binary error, address: {}, method: {}.", null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod());
}
}
package com.x.base.core.project.connection;
import java.net.HttpURLConnection;
import com.x.base.core.project.exception.PromptException;
public class ExceptionMultiPartBinary extends PromptException {
private static final long serialVersionUID = 7551134321893884285L;
public ExceptionMultiPartBinary(Throwable e, HttpURLConnection connection) {
super(e, "multiPart binary error, address: {}, method: {}, because: {}.",
null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod(), e.getMessage());
}
public ExceptionMultiPartBinary(HttpURLConnection connection) {
super("multiPart binary error, address: {}, method: {}.", null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod());
}
}
package com.x.base.core.project.connection;
import java.net.HttpURLConnection;
import java.net.URL;
import com.x.base.core.project.exception.PromptException;
public class ExceptionReadBinary extends PromptException {
private static final long serialVersionUID = 7551134321893884285L;
public ExceptionReadBinary(Throwable e, HttpURLConnection connection, int code) {
super(e, "read binary input error, address: {}, method: {}, code: {}, because: {}.",
null == connection ? null : connection.getURL(),
null == connection ? null : connection.getRequestMethod(), code, e.getMessage());
}
public ExceptionReadBinary(URL url, String method, int code) {
super("read binary input error, address: {}, method: {}, code: {}.", url, method, code);
}
public ExceptionReadBinary(URL url, String method, int code, byte[] bytes) {
super("read binary input error, address: {}, method: {}, code:{}, because: {}.", url, method, code,
new String(bytes));
}
}
package com.x.base.core.project.connection;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.tools.StringTools;
import org.apache.commons.lang3.StringUtils;
public class FilePart extends GsonPropertyObject {
public FilePart(String fileName, byte[] bytes, String contentType, String name) {
this.fileName = fileName;
this.bytes = bytes;
this.contentType = contentType;
this.name = name;
}
private String name;
private String fileName;
private byte[] bytes;
private String contentType;
public String getName() {
return StringUtils.isEmpty(name) ? "file_" + StringTools.uniqueToken() : name;
}
public void setName(String name) {
this.name = name;
}
public byte[] getBytes() {
return bytes;
}
public void setBytes(byte[] bytes) {
this.bytes = bytes;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
\ No newline at end of file
package com.x.base.core.project.connection;
import java.util.Objects;
import com.x.base.core.project.gson.GsonPropertyObject;
public class FormField extends GsonPropertyObject {
public FormField(String name, Object value) {
this.name = name;
this.value = Objects.toString(value, "");
}
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
\ No newline at end of file
......@@ -9,7 +9,6 @@ import com.x.base.core.project.x_message_assemble_communicate;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.logger.LoggerFactory;
public class MessageConnector {
......@@ -95,17 +94,17 @@ public class MessageConnector {
public static final String TYPE_CALENDAR_ALARM = "calendar_alarm";
public static final String TYPE_CUSTOM_CREATE = "custom_create";
public static final String TYPE_TEAMWORK_TASKCREATE = "teamwork_taskCreate";
public static final String TYPE_TEAMWORK_TASKUPDATE = "teamwork_taskUpdate";
public static final String TYPE_TEAMWORK_TASKDELETE = "teamwork_taskDelelte";
public static final String TYPE_TEAMWORK_TASKOVERTIME = "teamwork_taskOvertime";
public static final String TYPE_TEAMWORK_CHAT = "teamwork_taskChat";
public static final String TYPE_CMS_PUBLISH = "cms_publish";
public static final String TYPE_BBS_SUBJECTCREATE = "bbs_subjectCreate";
......@@ -116,7 +115,7 @@ public class MessageConnector {
public static final String TYPE_MIND_FILESHARE = "mind_fileShare";
//IM 聊天消息发送
// IM 聊天消息发送
public static final String TYPE_IM_CREATE = "im_create";
public static final String CONSUME_WS = "ws";
......
......@@ -54,6 +54,12 @@ public class StringTools {
public static final char SQL_ESCAPE_CHAR = '^';
public static final String CRLF = "\r\n";
public static final String CR = "\r";
public static final String LF = "\n";
public static final String TWO_HYPHENS = "--";
private static final Random random = new Random();
public static int utf8Length(String str) {
......
package com.x.base.core.project.utils.time;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.x.base.core.project.bean.NameValuePair;
import com.x.base.core.project.connection.ConnectionAction;
import com.x.base.core.project.connection.FilePart;
import com.x.base.core.project.connection.FormField;
import org.apache.commons.io.FileUtils;
public class TestClient {
public static void main(String... args) throws Exception {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
// c-token=jlMh2guoFias7Q1qQBSV6SdJ1SIVwfXgyzmmtJsPH9k
// jsonData=4f7089f7-865a-4fa5-9107-069527a0650c
List<FormField> fl = new ArrayList<>();
FormField f = new FormField("jsonData", "4f7089f7-865a-4fa5-9107-069527a0650c");
fl.add(f);
List<FilePart> pl = new ArrayList<>();
FilePart p = new FilePart("1.txt", FileUtils.readFileToByteArray(new File("d:/1.txt")), "text/plain", "file");
pl.add(p);
List<NameValuePair> nl = new ArrayList<>();
nl.add(new NameValuePair("c-token", "jlMh2guoFias7Q1qQBSV6SdJ1SIVwfXgyzmmtJsPH9k"));
byte[] bytes = ConnectionAction.postBinary(
"http://114.116.108.117:20080/o2_collect_assemble/jaxrs/attachment/download/4f7089f7-865a-4fa5-9107-069527a0650c/post",
nl, "{'ddd':'ddd'}");
FileUtils.writeByteArrayToFile(new File("d:/2.jpg"), bytes);
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_bbs_assemble_control" metadata-complete="false" version="3.0"><display-name>x_bbs_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_bbs_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_calendar_assemble_control" metadata-complete="false" version="3.0"><display-name>x_calendar_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_calendar_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_cms_assemble_control" metadata-complete="false" version="3.0"><display-name>x_cms_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_cms_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_component_assemble_control" metadata-complete="false" version="3.0"><display-name>x_component_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_component_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_file_assemble_control" metadata-complete="false" version="3.0"><display-name>x_file_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_file_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_general_assemble_control" metadata-complete="false" version="3.0"><display-name>x_general_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_general_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_hotpic_assemble_control" metadata-complete="false" version="3.0"><display-name>x_hotpic_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_hotpic_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_jpush_assemble_control" metadata-complete="false" version="3.0"><display-name>x_jpush_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_jpush_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_meeting_assemble_control" metadata-complete="false" version="3.0"><display-name>x_meeting_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_meeting_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_message_assemble_communicate" metadata-complete="false" version="3.0"><display-name>x_message_assemble_communicate</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_message_assemble_communicate</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_mind_assemble_control" metadata-complete="false" version="3.0"><display-name>x_mind_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_mind_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_okr_assemble_control" metadata-complete="false" version="3.0"><display-name>x_okr_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_okr_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_organization_assemble_authentication" metadata-complete="false" version="3.0"><display-name>x_organization_assemble_authentication</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_organization_assemble_authentication</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_organization_assemble_control" metadata-complete="false" version="3.0"><display-name>x_organization_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_organization_assemble_control</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="x_organization_assemble_control"
metadata-complete="true" version="3.0">
<display-name>x_organization_assemble_control</display-name>
<context-param>
<param-name>project</param-name>
<param-value>com.x.base.core.project.x_organization_assemble_control
</param-value>
</context-param>
<listener>
<listener-class>com.x.organization.assemble.control.ApplicationServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>ActionApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<async-supported>true</async-supported>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.x.organization.assemble.control.jaxrs.ActionApplication
</param-value>
</init-param>
</servlet>
<filter>
<filter-name>CacheJaxrsFilter</filter-name>
<filter-class>com.x.base.core.project.jaxrs.CacheJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>CacheJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@1554909b</url-pattern>
</filter-mapping>
<filter>
<filter-name>EchoJaxrsFilter</filter-name>
<filter-class>com.x.base.core.project.jaxrs.EchoJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>EchoJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@6aaa5eb0</url-pattern>
</filter-mapping>
<filter>
<filter-name>FireScheduleJaxrsFilter</filter-name>
<filter-class>com.x.base.core.project.jaxrs.FireScheduleJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>FireScheduleJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@3d8c7aca</url-pattern>
</filter-mapping>
<filter>
<filter-name>LoggerJaxrsFilter</filter-name>
<filter-class>com.x.base.core.project.jaxrs.LoggerJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>LoggerJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@380fb434</url-pattern>
</filter-mapping>
<filter>
<filter-name>ExportJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.ExportJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>ExportJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@668bc3d5</url-pattern>
</filter-mapping>
<filter>
<filter-name>FunctionJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.FunctionJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>FunctionJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@3cda1055</url-pattern>
</filter-mapping>
<filter>
<filter-name>GroupJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.GroupJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>GroupJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@79b4d0f</url-pattern>
</filter-mapping>
<filter>
<filter-name>IdentityJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.IdentityJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>IdentityJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@6b2fad11</url-pattern>
</filter-mapping>
<filter>
<filter-name>InputPersonFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.InputPersonFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>InputPersonFilter</filter-name>
<url-pattern>[Ljava.lang.String;@79698539</url-pattern>
</filter-mapping>
<filter>
<filter-name>LoginRecordFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.LoginRecordFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>LoginRecordFilter</filter-name>
<url-pattern>[Ljava.lang.String;@73f792cf</url-pattern>
</filter-mapping>
<filter>
<filter-name>PersonAttributeJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.PersonAttributeJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>PersonAttributeJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@2ed94a8b</url-pattern>
</filter-mapping>
<filter>
<filter-name>PersonJaxrsFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.PersonJaxrsFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>PersonJaxrsFilter</filter-name>
<url-pattern>[Ljava.lang.String;@38082d64</url-pattern>
</filter-mapping>
<filter>
<filter-name>RoleFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.RoleFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>RoleFilter</filter-name>
<url-pattern>[Ljava.lang.String;@dfd3711</url-pattern>
</filter-mapping>
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.TestFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>[Ljava.lang.String;@42d3bd8b</url-pattern>
</filter-mapping>
<filter>
<filter-name>UnitAttributeFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.UnitAttributeFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>UnitAttributeFilter</filter-name>
<url-pattern>[Ljava.lang.String;@3b81a1bc</url-pattern>
</filter-mapping>
<filter>
<filter-name>UnitDutyFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.UnitDutyFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>UnitDutyFilter</filter-name>
<url-pattern>[Ljava.lang.String;@13fee20c</url-pattern>
</filter-mapping>
<filter>
<filter-name>UnitFilter</filter-name>
<filter-class>com.x.organization.assemble.control.jaxrs.UnitFilter
</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>UnitFilter</filter-name>
<url-pattern>[Ljava.lang.String;@4e04a765</url-pattern>
</filter-mapping>
</web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="x_organization_assemble_control"
metadata-complete="true" version="3.0">
<display-name>x_organization_assemble_control</display-name>
<context-param>
<param-name>project</param-name>
<param-value>com.x.base.core.project.x_organization_assemble_control
</param-value>
</context-param>
<listener>
<listener-class>com.x.organization.assemble.control.ApplicationServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>ActionApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.x.organization.assemble.control.jaxrs.ActionApplication
</param-value>
</init-param>
</servlet>
</web-app>
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_organization_assemble_express" metadata-complete="false" version="3.0"><display-name>x_organization_assemble_express</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_organization_assemble_express</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_organization_assemble_personal" metadata-complete="false" version="3.0"><display-name>x_organization_assemble_personal</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_organization_assemble_personal</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_portal_assemble_designer" metadata-complete="false" version="3.0"><display-name>x_portal_assemble_designer</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_portal_assemble_designer</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_portal_assemble_surface" metadata-complete="false" version="3.0"><display-name>x_portal_assemble_surface</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_portal_assemble_surface</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_assemble_bam" metadata-complete="false" version="3.0"><display-name>x_processplatform_assemble_bam</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_assemble_bam</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_assemble_designer" metadata-complete="false" version="3.0"><display-name>x_processplatform_assemble_designer</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_assemble_designer</param-value></context-param></web-app>
\ No newline at end of file
......@@ -5,6 +5,7 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
......@@ -13,7 +14,10 @@ import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.ProcessPlatform;
import com.x.base.core.project.config.ProcessPlatform.WorkCompletedExtensionEvent;
import com.x.base.core.project.config.ProcessPlatform.WorkExtensionEvent;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.gson.GsonPropertyObject;
......@@ -67,15 +71,72 @@ class ActionDocToWordWorkOrWorkCompleted extends BaseAction {
}
private Wo work(EffectivePerson effectivePerson, Wi wi, Work work) throws Exception {
String person = effectivePerson.isCipher() ? work.getCreatorPerson() : effectivePerson.getDistinguishedName();
private byte[] workConvert(EffectivePerson effectivePerson, Wi wi, String application, String process,
String activity) throws Exception {
byte[] bytes = null;
Optional<WorkExtensionEvent> event = Config.processPlatform().getExtensionEvents().getWorkDocToWordEvents()
.bind(application, process, activity);
if (event.isPresent()) {
bytes = this.workExtensionService(effectivePerson, wi.getContent(), event.get());
} else {
if (StringUtils.equals(ProcessPlatform.DOCTOWORDTYPE_CLOUD, Config.processPlatform().getDocToWordType())) {
bytes = DocumentTools.docToWord(wi.getFileName(), wi.getContent());
} else {
bytes = this.local(wi);
}
}
return bytes;
}
private byte[] workExtensionService(EffectivePerson effectivePerson, String content, WorkExtensionEvent event)
throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setContent(content);
req.setPerson(effectivePerson.getDistinguishedName());
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
private byte[] workCompletedConvert(EffectivePerson effectivePerson, Wi wi, String application, String process)
throws Exception {
byte[] bytes = null;
Optional<WorkCompletedExtensionEvent> event = Config.processPlatform().getExtensionEvents()
.getWorkCompletedDocToWordEvents().bind(application, process);
if (event.isPresent()) {
bytes = this.workCompletedExtensionService(effectivePerson, wi.getContent(), event.get());
} else {
if (StringUtils.equals(ProcessPlatform.DOCTOWORDTYPE_CLOUD, Config.processPlatform().getDocToWordType())) {
bytes = DocumentTools.docToWord(wi.getFileName(), wi.getContent());
} else {
bytes = this.local(wi);
}
}
return bytes;
}
if (StringUtils.equals(ProcessPlatform.DOCTOWORDTYPE_CLOUD, Config.processPlatform().getDocToWordType())) {
bytes = DocumentTools.docToWord(wi.getFileName(), wi.getContent());
private byte[] workCompletedExtensionService(EffectivePerson effectivePerson, String content,
WorkCompletedExtensionEvent event) throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setContent(content);
req.setPerson(effectivePerson.getDistinguishedName());
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = this.local(wi);
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
private Wo work(EffectivePerson effectivePerson, Wi wi, Work work) throws Exception {
String person = effectivePerson.isCipher() ? work.getCreatorPerson() : effectivePerson.getDistinguishedName();
byte[] bytes = this.workConvert(effectivePerson, wi, work.getApplication(), work.getProcess(),
work.getActivity());
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Attachment> attachments = emc.listEqual(Attachment.class, Attachment.job_FIELDNAME, work.getJob());
Attachment attachment = null;
......@@ -127,13 +188,8 @@ class ActionDocToWordWorkOrWorkCompleted extends BaseAction {
private Wo workCompleted(EffectivePerson effectivePerson, Wi wi, WorkCompleted workCompleted) throws Exception {
String person = effectivePerson.isCipher() ? workCompleted.getCreatorPerson()
: effectivePerson.getDistinguishedName();
byte[] bytes = null;
if (StringUtils.equals(ProcessPlatform.DOCTOWORDTYPE_CLOUD, Config.processPlatform().getDocToWordType())) {
bytes = DocumentTools.docToWord(wi.getFileName(), wi.getContent());
} else {
bytes = this.local(wi);
}
byte[] bytes = this.workCompletedConvert(effectivePerson, wi, workCompleted.getApplication(),
workCompleted.getProcess());
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
List<Attachment> attachments = emc.listEqual(Attachment.class, Attachment.job_FIELDNAME,
workCompleted.getJob());
......@@ -170,8 +226,6 @@ class ActionDocToWordWorkOrWorkCompleted extends BaseAction {
attachment.setJob(workCompleted.getJob());
attachment.setActivity(workCompleted.getActivity());
attachment.setActivityName(workCompleted.getActivityName());
// attachment.setActivityToken(workCompleted.getActivityToken());
// attachment.setActivityType(workCompleted.getActivityType());
attachment.saveContent(mapping, bytes, wi.getFileName());
attachment.setType((new Tika()).detect(bytes, wi.getFileName()));
emc.persist(attachment, CheckPersistType.all);
......@@ -230,4 +284,28 @@ class ActionDocToWordWorkOrWorkCompleted extends BaseAction {
}
}
public static class Req {
private String person;
private String content;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
}
\ No newline at end of file
package com.x.processplatform.assemble.surface.jaxrs.attachment;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import java.util.Optional;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.ProcessPlatform.WorkExtensionEvent;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
......@@ -16,10 +18,14 @@ import com.x.processplatform.assemble.surface.ThisApplication;
import com.x.processplatform.assemble.surface.WorkControl;
import com.x.processplatform.core.entity.content.Attachment;
import com.x.processplatform.core.entity.content.Work;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
class ActionDownloadWithWork extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workId, String fileName) throws Exception {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workId, String fileName)
throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Work work = null;
......@@ -28,11 +34,9 @@ class ActionDownloadWithWork extends BaseAction {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
work = emc.find(workId, Work.class);
/** 判断work是否存在 */
if (null == work) {
throw new ExceptionEntityNotExist(workId, Work.class);
}
/** 判断attachment是否存在 */
attachment = emc.find(id, Attachment.class);
if (null == attachment) {
throw new ExceptionEntityNotExist(id, Attachment.class);
......@@ -45,20 +49,64 @@ class ActionDownloadWithWork extends BaseAction {
}
StorageMapping mapping = ThisApplication.context().storageMappings().get(Attachment.class,
attachment.getStorage());
if(StringUtils.isBlank(fileName)){
if (StringUtils.isBlank(fileName)) {
fileName = attachment.getName();
}else{
} else {
String extension = FilenameUtils.getExtension(fileName);
if(StringUtils.isEmpty(extension)){
fileName = fileName+ "." + attachment.getExtension();
if (StringUtils.isEmpty(extension)) {
fileName = fileName + "." + attachment.getExtension();
}
}
Wo wo = new Wo(attachment.readContent(mapping), this.contentType(false, fileName),
this.contentDisposition(false, fileName));
byte[] bytes = null;
Optional<WorkExtensionEvent> event = Config.processPlatform().getExtensionEvents()
.getWorkAttachmentDownloadEvents().bind(work.getApplication(), work.getProcess(), work.getActivity());
if (event.isPresent()) {
bytes = this.extensionService(effectivePerson, attachment.getId(), event.get());
} else {
bytes = attachment.readContent(mapping);
}
Wo wo = new Wo(bytes, this.contentType(false, fileName), this.contentDisposition(false, fileName));
result.setData(wo);
return result;
}
private byte[] extensionService(EffectivePerson effectivePerson, String id, WorkExtensionEvent event)
throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setPerson(effectivePerson.getDistinguishedName());
req.setAttachment(id);
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
public static class Req {
private String person;
private String attachment;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getAttachment() {
return attachment;
}
public void setAttachment(String attachment) {
this.attachment = attachment;
}
}
public static class Wo extends WoFile {
public Wo(byte[] bytes, String contentType, String contentDisposition) {
......
package com.x.processplatform.assemble.surface.jaxrs.attachment;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import java.util.Optional;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.ProcessPlatform.WorkCompletedExtensionEvent;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
......@@ -17,15 +18,19 @@ import com.x.processplatform.assemble.surface.ThisApplication;
import com.x.processplatform.assemble.surface.WorkCompletedControl;
import com.x.processplatform.core.entity.content.Attachment;
import com.x.processplatform.core.entity.content.WorkCompleted;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
class ActionDownloadWithWorkCompleted extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workCompletedId, String fileName) throws Exception {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workCompletedId, String fileName)
throws Exception {
ActionResult<Wo> result = new ActionResult<>();
WorkCompleted workCompleted = null;
Attachment attachment = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
workCompleted = emc.find(workCompletedId, WorkCompleted.class);
......@@ -49,20 +54,65 @@ class ActionDownloadWithWorkCompleted extends BaseAction {
}
StorageMapping mapping = ThisApplication.context().storageMappings().get(Attachment.class,
attachment.getStorage());
if(StringUtils.isBlank(fileName)){
if (StringUtils.isBlank(fileName)) {
fileName = attachment.getName();
}else{
} else {
String extension = FilenameUtils.getExtension(fileName);
if(StringUtils.isEmpty(extension)){
fileName = fileName+ "." + attachment.getExtension();
if (StringUtils.isEmpty(extension)) {
fileName = fileName + "." + attachment.getExtension();
}
}
Wo wo = new Wo(attachment.readContent(mapping), this.contentType(false, fileName),
this.contentDisposition(false, fileName));
byte[] bytes = null;
Optional<WorkCompletedExtensionEvent> event = Config.processPlatform().getExtensionEvents()
.getWorkCompletedAttachmentDownloadEvents()
.bind(workCompleted.getApplication(), workCompleted.getProcess());
if (event.isPresent()) {
bytes = this.extensionService(effectivePerson, attachment.getId(), event.get());
} else {
bytes = attachment.readContent(mapping);
}
Wo wo = new Wo(bytes, this.contentType(false, fileName), this.contentDisposition(false, fileName));
result.setData(wo);
return result;
}
private byte[] extensionService(EffectivePerson effectivePerson, String id, WorkCompletedExtensionEvent event)
throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setPerson(effectivePerson.getDistinguishedName());
req.setAttachment(id);
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
public static class Req {
private String person;
private String attachment;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getAttachment() {
return attachment;
}
public void setAttachment(String attachment) {
this.attachment = attachment;
}
}
public static class Wo extends WoFile {
public Wo(byte[] bytes, String contentType, String contentDisposition) {
......
package com.x.processplatform.assemble.surface.jaxrs.attachment;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import java.util.Optional;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.ProcessPlatform.WorkCompletedExtensionEvent;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
......@@ -17,15 +18,19 @@ import com.x.processplatform.assemble.surface.ThisApplication;
import com.x.processplatform.assemble.surface.WorkCompletedControl;
import com.x.processplatform.core.entity.content.Attachment;
import com.x.processplatform.core.entity.content.WorkCompleted;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
class ActionDownloadWithWorkCompletedStream extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workCompletedId, String fileName) throws Exception {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workCompletedId, String fileName)
throws Exception {
ActionResult<Wo> result = new ActionResult<>();
WorkCompleted workCompleted = null;
Attachment attachment = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
workCompleted = emc.find(workCompletedId, WorkCompleted.class);
......@@ -49,20 +54,65 @@ class ActionDownloadWithWorkCompletedStream extends BaseAction {
}
StorageMapping mapping = ThisApplication.context().storageMappings().get(Attachment.class,
attachment.getStorage());
if(StringUtils.isBlank(fileName)){
if (StringUtils.isBlank(fileName)) {
fileName = attachment.getName();
}else{
} else {
String extension = FilenameUtils.getExtension(fileName);
if(StringUtils.isEmpty(extension)){
fileName = fileName+ "." + attachment.getExtension();
if (StringUtils.isEmpty(extension)) {
fileName = fileName + "." + attachment.getExtension();
}
}
Wo wo = new Wo(attachment.readContent(mapping), this.contentType(true, fileName),
this.contentDisposition(true, fileName));
byte[] bytes = null;
Optional<WorkCompletedExtensionEvent> event = Config.processPlatform().getExtensionEvents()
.getWorkCompletedAttachmentDownloadEvents()
.bind(workCompleted.getApplication(), workCompleted.getProcess());
if (event.isPresent()) {
bytes = this.extensionService(effectivePerson, attachment.getId(), event.get());
} else {
bytes = attachment.readContent(mapping);
}
Wo wo = new Wo(bytes, this.contentType(true, fileName), this.contentDisposition(true, fileName));
result.setData(wo);
return result;
}
private byte[] extensionService(EffectivePerson effectivePerson, String id, WorkCompletedExtensionEvent event)
throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setPerson(effectivePerson.getDistinguishedName());
req.setAttachment(id);
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
public static class Req {
private String person;
private String attachment;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getAttachment() {
return attachment;
}
public void setAttachment(String attachment) {
this.attachment = attachment;
}
}
public static class Wo extends WoFile {
public Wo(byte[] bytes, String contentType, String contentDisposition) {
......
package com.x.processplatform.assemble.surface.jaxrs.attachment;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import java.util.Optional;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.ProcessPlatform.WorkExtensionEvent;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.connection.CipherConnectionAction;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
......@@ -16,10 +18,14 @@ import com.x.processplatform.assemble.surface.ThisApplication;
import com.x.processplatform.assemble.surface.WorkControl;
import com.x.processplatform.core.entity.content.Attachment;
import com.x.processplatform.core.entity.content.Work;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
class ActionDownloadWithWorkStream extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workId, String fileName) throws Exception {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String workId, String fileName)
throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Work work = null;
Attachment attachment = null;
......@@ -44,20 +50,66 @@ class ActionDownloadWithWorkStream extends BaseAction {
}
StorageMapping mapping = ThisApplication.context().storageMappings().get(Attachment.class,
attachment.getStorage());
if(StringUtils.isBlank(fileName)){
if (StringUtils.isBlank(fileName)) {
fileName = attachment.getName();
}else{
} else {
String extension = FilenameUtils.getExtension(fileName);
if(StringUtils.isEmpty(extension)){
fileName = fileName+ "." + attachment.getExtension();
if (StringUtils.isEmpty(extension)) {
fileName = fileName + "." + attachment.getExtension();
}
}
Wo wo = new Wo(attachment.readContent(mapping), this.contentType(true, fileName),
this.contentDisposition(true, fileName));
byte[] bytes = null;
Optional<WorkExtensionEvent> event = Config.processPlatform().getExtensionEvents()
.getWorkAttachmentDownloadEvents().bind(work.getApplication(), work.getProcess(), work.getActivity());
if (event.isPresent()) {
bytes = this.extensionService(effectivePerson, attachment.getId(), event.get());
} else {
bytes = attachment.readContent(mapping);
}
Wo wo = new Wo(bytes, this.contentType(true, fileName), this.contentDisposition(true, fileName));
result.setData(wo);
return result;
}
private byte[] extensionService(EffectivePerson effectivePerson, String id, WorkExtensionEvent event)
throws Exception {
byte[] bytes = null;
Req req = new Req();
req.setPerson(effectivePerson.getDistinguishedName());
req.setAttachment(id);
if (StringUtils.isNotEmpty(event.getCustom())) {
bytes = ThisApplication.context().applications().postQueryBinary(event.getCustom(), event.getUrl(), req);
} else {
bytes = CipherConnectionAction.postBinary(effectivePerson.getDebugger(), event.getUrl(), req);
}
return bytes;
}
public static class Req {
private String person;
private String attachment;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this.person = person;
}
public String getAttachment() {
return attachment;
}
public void setAttachment(String attachment) {
this.attachment = attachment;
}
}
public static class Wo extends WoFile {
public Wo(byte[] bytes, String contentType, String contentDisposition) {
......
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_assemble_surface" metadata-complete="false" version="3.0"><display-name>x_processplatform_assemble_surface</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_assemble_surface</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_assemble_surface" metadata-complete="false" version="3.0"><display-name>x_processplatform_assemble_surface</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_assemble_surface</param-value></context-param><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
\ No newline at end of file
......@@ -7,7 +7,7 @@ class ExceptionFromMappingNotExist extends PromptException {
private static final long serialVersionUID = -7038279889683420366L;
ExceptionFromMappingNotExist(String storage) {
super("form mapping not exist:{}.", storage);
super("from mapping not exist:{}.", storage);
}
}
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_service_processing" metadata-complete="false" version="3.0"><display-name>x_processplatform_service_processing</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_service_processing</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_processplatform_service_processing" metadata-complete="false" version="3.0"><display-name>x_processplatform_service_processing</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_processplatform_service_processing</param-value></context-param><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_assemble_designer" metadata-complete="false" version="3.0"><display-name>x_query_assemble_designer</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_assemble_designer</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_assemble_designer" metadata-complete="false" version="3.0"><display-name>x_query_assemble_designer</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_assemble_designer</param-value></context-param><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_assemble_surface" metadata-complete="false" version="3.0"><display-name>x_query_assemble_surface</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_assemble_surface</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_assemble_surface" metadata-complete="false" version="3.0"><display-name>x_query_assemble_surface</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_assemble_surface</param-value></context-param><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_service_processing" metadata-complete="false" version="3.0"><display-name>x_query_service_processing</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_service_processing</param-value></context-param></web-app>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><web-app id="x_query_service_processing" metadata-complete="false" version="3.0"><display-name>x_query_service_processing</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_query_service_processing</param-value></context-param><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册