mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged 5.2.N (5.2.1) to HEAD (5.2)
131286 amukha: Merged DEV to 5.2.N (5.2.1) 131050 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate 131057 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate / fix test CMISTest.testModelAvailability 131064 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate - added patch to remove JBPM database tables 131169 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate - replaced generic DB script with database specific scripts 131171 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate - Fix DB2 patch 131213 skopf: REPO-483 - The repository does not contain any code or data related to JBPM / ACE-1659 - Remove JBPM and Hibernate - Fix JBPM table removal patch git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@132233 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -42,7 +42,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* This servlet filter is used to restrict direct URL access to administration
|
||||
* resource in the web client, for example the admin and jBPM consoles.
|
||||
* resource in the web client, for example the admin console.
|
||||
*
|
||||
* @author gavinc
|
||||
* @deprecated 5.0 not exposed in web-client web.xml
|
||||
|
@@ -1,171 +0,0 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository WAR Community
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.web.app.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.UnavailableException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.workflow.jbpm.JBPMEngine;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowException;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowService;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.apache.commons.fileupload.DiskFileUpload;
|
||||
import org.apache.commons.fileupload.FileItem;
|
||||
import org.apache.commons.fileupload.FileUpload;
|
||||
import org.apache.commons.fileupload.FileUploadException;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.context.support.WebApplicationContextUtils;
|
||||
|
||||
|
||||
/**
|
||||
* Servlet for handling process deployments from jBPM process designer.
|
||||
*
|
||||
* @author davidc
|
||||
* @deprecated 5.0 not exposed in web-client web.xml
|
||||
*/
|
||||
public class JBPMDeployProcessServlet extends HttpServlet
|
||||
{
|
||||
private static final long serialVersionUID = 8002539291245090187L;
|
||||
private static final String BEAN_GLOBAL_PROPERTIES = "global-properties";
|
||||
private static final String PROP_ENABLED = "system.workflow.deployservlet.enabled";
|
||||
|
||||
@Override
|
||||
public void init() throws ServletException
|
||||
{
|
||||
// Render this servlet permanently unavailable if its enablement property is not set
|
||||
WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
|
||||
Properties globalProperties = (Properties) wc.getBean(BEAN_GLOBAL_PROPERTIES);
|
||||
String enabled = globalProperties.getProperty(PROP_ENABLED);
|
||||
if (!PropertyCheck.isValidPropertyString(enabled) || !Boolean.parseBoolean(enabled))
|
||||
{
|
||||
throw new UnavailableException("system.workflow.deployservlet.enabled=false");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
response.setContentType("text/html");
|
||||
InputStream deploymentArchive = getDeploymentArchive(request);
|
||||
WorkflowDefinition workflowDef = deployArchive(deploymentArchive);
|
||||
response.getWriter().println("Deployed archive " + workflowDef.title + " successfully");
|
||||
}
|
||||
catch(IOException e)
|
||||
{
|
||||
// NOTE: according to original jBPM deployment servlet
|
||||
response.getWriter().println("IOException");
|
||||
}
|
||||
catch(FileUploadException e)
|
||||
{
|
||||
// NOTE: according to original jBPM deployment servlet
|
||||
response.getWriter().println("FileUploadException");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the JBPM Process Designer deployment archive from the request
|
||||
*
|
||||
* @param request the request
|
||||
* @return the input stream onto the deployment archive
|
||||
* @throws WorkflowException
|
||||
* @throws FileUploadException
|
||||
* @throws IOException
|
||||
*/
|
||||
private InputStream getDeploymentArchive(HttpServletRequest request)
|
||||
throws FileUploadException, IOException
|
||||
{
|
||||
if (!FileUpload.isMultipartContent(request))
|
||||
{
|
||||
throw new FileUploadException("Not a multipart request");
|
||||
}
|
||||
|
||||
GPDUpload fileUpload = new GPDUpload();
|
||||
List list = fileUpload.parseRequest(request);
|
||||
Iterator iterator = list.iterator();
|
||||
if (!iterator.hasNext())
|
||||
{
|
||||
throw new FileUploadException("No process file in the request");
|
||||
}
|
||||
|
||||
FileItem fileItem = (FileItem) iterator.next();
|
||||
if (fileItem.getContentType().indexOf("application/x-zip-compressed") == -1)
|
||||
{
|
||||
throw new FileUploadException("Not a process archive");
|
||||
}
|
||||
|
||||
return fileItem.getInputStream();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deploy the jBPM process archive to the Alfresco Repository
|
||||
*
|
||||
* @param deploymentArchive the archive to deploy
|
||||
* @return the deployed workflow definition
|
||||
*/
|
||||
private WorkflowDefinition deployArchive(InputStream deploymentArchive)
|
||||
{
|
||||
WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
|
||||
WorkflowService workflowService = (WorkflowService)wc.getBean(ServiceRegistry.WORKFLOW_SERVICE.getLocalName());
|
||||
WorkflowDeployment deployment = workflowService.deployDefinition(JBPMEngine.ENGINE_ID, deploymentArchive, MimetypeMap.MIMETYPE_ZIP);
|
||||
return deployment.definition;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* NOTE: Workaround...
|
||||
*
|
||||
* The JBPM process designer (as of 3.1.2) issues a request with a multi-part line
|
||||
* delimited by ",". It should be ":" according to the HTTP specification which
|
||||
* the commons file-upload is adhering to.
|
||||
*
|
||||
* @author davidc
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
private class GPDUpload extends DiskFileUpload
|
||||
{
|
||||
@Override
|
||||
protected byte[] getBoundary(String contentType)
|
||||
{
|
||||
return super.getBoundary(contentType.replace(",", ";"));
|
||||
}
|
||||
}
|
||||
}
|
@@ -47,7 +47,6 @@ import org.alfresco.repo.policy.BehaviourFilter;
|
||||
import org.alfresco.repo.publishing.PublishingEventHelper;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
|
||||
import org.alfresco.repo.workflow.jbpm.JBPMEngine;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
|
||||
@@ -820,7 +819,6 @@ public class StartWorkflowWizard extends BaseWizardBean
|
||||
{
|
||||
publishingWorkflows = new ArrayList<String>(2);
|
||||
|
||||
publishingWorkflows.add(JBPMEngine.ENGINE_ID + "$" + PublishingEventHelper.WORKFLOW_DEFINITION_NAME);
|
||||
publishingWorkflows.add(ActivitiConstants.ENGINE_ID + "$" + PublishingEventHelper.WORKFLOW_DEFINITION_NAME);
|
||||
}
|
||||
|
||||
|
@@ -1,279 +0,0 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository WAR Community
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* JBoss, Home of Professional Open Source
|
||||
* Copyright 2005, JBoss Inc., and individual contributors as indicated
|
||||
* by the @authors tag. See the copyright.txt in the distribution for a
|
||||
* full listing of individual contributors.
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this software; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||
*/
|
||||
package org.alfresco.web.ui.repo.tag;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.jsp.JspException;
|
||||
import javax.servlet.jsp.JspWriter;
|
||||
import javax.servlet.jsp.tagext.TagSupport;
|
||||
|
||||
import org.dom4j.DocumentException;
|
||||
import org.dom4j.DocumentHelper;
|
||||
import org.dom4j.Element;
|
||||
import org.dom4j.XPath;
|
||||
import org.dom4j.xpath.DefaultXPath;
|
||||
import org.jbpm.JbpmContext;
|
||||
import org.jbpm.file.def.FileDefinition;
|
||||
import org.jbpm.graph.def.ProcessDefinition;
|
||||
import org.jbpm.graph.exe.Token;
|
||||
import org.jbpm.taskmgmt.exe.TaskInstance;
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
// TODO: DC - Tidy up
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
public class JBPMProcessImageTag extends TagSupport {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private long taskInstanceId = -1;
|
||||
private long tokenInstanceId = -1;
|
||||
|
||||
private byte[] gpdBytes = null;
|
||||
private byte[] imageBytes = null;
|
||||
private Token currentToken = null;
|
||||
private ProcessDefinition processDefinition = null;
|
||||
|
||||
static String currentTokenColor = "red";
|
||||
static String childTokenColor = "blue";
|
||||
static String tokenNameColor = "blue";
|
||||
|
||||
|
||||
public void release() {
|
||||
taskInstanceId = -1;
|
||||
gpdBytes = null;
|
||||
imageBytes = null;
|
||||
currentToken = null;
|
||||
}
|
||||
|
||||
public int doEndTag() throws JspException {
|
||||
try {
|
||||
initialize();
|
||||
retrieveByteArrays();
|
||||
if (gpdBytes != null && imageBytes != null) {
|
||||
writeTable();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new JspException("table couldn't be displayed", e);
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
throw new JspException("table couldn't be displayed", e);
|
||||
}
|
||||
release();
|
||||
return EVAL_PAGE;
|
||||
}
|
||||
|
||||
private void retrieveByteArrays() {
|
||||
try {
|
||||
FileDefinition fileDefinition = processDefinition.getFileDefinition();
|
||||
gpdBytes = fileDefinition.getBytes("gpd.xml");
|
||||
imageBytes = fileDefinition.getBytes("processimage.jpg");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void writeTable() throws IOException, DocumentException {
|
||||
|
||||
int borderWidth = 4;
|
||||
Element rootDiagramElement = DocumentHelper.parseText(new String(gpdBytes)).getRootElement();
|
||||
int[] boxConstraint;
|
||||
int[] imageDimension = extractImageDimension(rootDiagramElement);
|
||||
String imageLink = "/alfresco/processimage?definitionId=" + processDefinition.getId();
|
||||
JspWriter jspOut = pageContext.getOut();
|
||||
|
||||
if (tokenInstanceId > 0) {
|
||||
|
||||
List allTokens = new ArrayList();
|
||||
walkTokens(currentToken, allTokens);
|
||||
|
||||
jspOut.println("<div style='position:relative; background-image:url(" + imageLink + "); width: " + imageDimension[0] + "px; height: " + imageDimension[1] + "px;'>");
|
||||
|
||||
for (int i = 0; i < allTokens.size(); i++)
|
||||
{
|
||||
Token token = (Token) allTokens.get(i);
|
||||
|
||||
//check how many tokens are on teh same level (= having the same parent)
|
||||
int offset = i;
|
||||
if(i > 0) {
|
||||
while(offset > 0 && ((Token) allTokens.get(offset - 1)).getParent().equals(token.getParent())) {
|
||||
offset--;
|
||||
}
|
||||
}
|
||||
boxConstraint = extractBoxConstraint(rootDiagramElement, token);
|
||||
|
||||
//Adjust for borders
|
||||
//boxConstraint[2]-=borderWidth*2;
|
||||
//boxConstraint[3]-=borderWidth*2;
|
||||
|
||||
jspOut.println("<div style='position:absolute; left: "+ boxConstraint[0] +"px; top: "+ boxConstraint[1] +"px; ");
|
||||
|
||||
if (i == (allTokens.size() - 1)) {
|
||||
jspOut.println("border: " + currentTokenColor);
|
||||
}
|
||||
else {
|
||||
jspOut.println("border: " + childTokenColor);
|
||||
}
|
||||
|
||||
jspOut.println(" " + borderWidth + "px groove; "+
|
||||
"width: "+ boxConstraint[2] +"px; height: "+ boxConstraint[3] +"px;'>");
|
||||
|
||||
if(token.getName()!=null)
|
||||
{
|
||||
jspOut.println("<span style='color:" + tokenNameColor + ";font-style:italic;position:absolute;left:"+ (boxConstraint[2] + 10) +"px;top:" +((i - offset) * 20) +";'> " + token.getName() +"</span>");
|
||||
}
|
||||
|
||||
jspOut.println("</div>");
|
||||
}
|
||||
jspOut.println("</div>");
|
||||
}
|
||||
else
|
||||
{
|
||||
boxConstraint = extractBoxConstraint(rootDiagramElement);
|
||||
|
||||
jspOut.println("<table border=0 cellspacing=0 cellpadding=0 width=" + imageDimension[0] + " height=" + imageDimension[1] + ">");
|
||||
jspOut.println(" <tr>");
|
||||
jspOut.println(" <td width=" + imageDimension[0] + " height=" + imageDimension[1] + " style=\"background-image:url(" + imageLink + ")\" valign=top>");
|
||||
jspOut.println(" <table border=0 cellspacing=0 cellpadding=0>");
|
||||
jspOut.println(" <tr>");
|
||||
jspOut.println(" <td width=" + (boxConstraint[0] - borderWidth) + " height=" + (boxConstraint[1] - borderWidth)
|
||||
+ " style=\"background-color:transparent;\"></td>");
|
||||
jspOut.println(" </tr>");
|
||||
jspOut.println(" <tr>");
|
||||
jspOut.println(" <td style=\"background-color:transparent;\"></td>");
|
||||
jspOut.println(" <td style=\"border-color:" + currentTokenColor + "; border-width:" + borderWidth + "px; border-style:groove; background-color:transparent;\" width="
|
||||
+ boxConstraint[2] + " height=" + (boxConstraint[3] + (2 * borderWidth)) + "> </td>");
|
||||
jspOut.println(" </tr>");
|
||||
jspOut.println(" </table>");
|
||||
jspOut.println(" </td>");
|
||||
jspOut.println(" </tr>");
|
||||
jspOut.println("</table>");
|
||||
}
|
||||
}
|
||||
|
||||
private int[] extractBoxConstraint(Element root) {
|
||||
int[] result = new int[4];
|
||||
String nodeName = currentToken.getNode().getName();
|
||||
XPath xPath = new DefaultXPath("//node[@name='" + nodeName + "']");
|
||||
Element node = (Element) xPath.selectSingleNode(root);
|
||||
result[0] = Integer.valueOf(node.attribute("x").getValue()).intValue();
|
||||
result[1] = Integer.valueOf(node.attribute("y").getValue()).intValue();
|
||||
result[2] = Integer.valueOf(node.attribute("width").getValue()).intValue();
|
||||
result[3] = Integer.valueOf(node.attribute("height").getValue()).intValue();
|
||||
return result;
|
||||
}
|
||||
|
||||
private int[] extractBoxConstraint(Element root, Token token) {
|
||||
int[] result = new int[4];
|
||||
String nodeName = token.getNode().getName();
|
||||
XPath xPath = new DefaultXPath("//node[@name='" + nodeName + "']");
|
||||
Element node = (Element) xPath.selectSingleNode(root);
|
||||
result[0] = Integer.valueOf(node.attribute("x").getValue()).intValue();
|
||||
result[1] = Integer.valueOf(node.attribute("y").getValue()).intValue();
|
||||
result[2] = Integer.valueOf(node.attribute("width").getValue()).intValue();
|
||||
result[3] = Integer.valueOf(node.attribute("height").getValue()).intValue();
|
||||
return result;
|
||||
}
|
||||
|
||||
private int[] extractImageDimension(Element root) {
|
||||
int[] result = new int[2];
|
||||
result[0] = Integer.valueOf(root.attribute("width").getValue()).intValue();
|
||||
result[1] = Integer.valueOf(root.attribute("height").getValue()).intValue();
|
||||
return result;
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
|
||||
if (this.taskInstanceId > 0) {
|
||||
TaskInstance taskInstance = jbpmContext.getTaskMgmtSession().loadTaskInstance(taskInstanceId);
|
||||
currentToken = taskInstance.getToken();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.tokenInstanceId > 0)
|
||||
currentToken = jbpmContext.getGraphSession().loadToken(this.tokenInstanceId);
|
||||
}
|
||||
processDefinition = currentToken.getProcessInstance().getProcessDefinition();
|
||||
}
|
||||
|
||||
private void walkTokens(Token parent, List allTokens)
|
||||
{
|
||||
Map children = parent.getChildren();
|
||||
if(children != null && children.size() > 0)
|
||||
{
|
||||
Collection childTokens = children.values();
|
||||
for (Iterator iterator = childTokens.iterator(); iterator.hasNext();)
|
||||
{
|
||||
Token child = (Token) iterator.next();
|
||||
walkTokens(child, allTokens);
|
||||
}
|
||||
}
|
||||
|
||||
allTokens.add(parent);
|
||||
}
|
||||
|
||||
public void setTask(long id) {
|
||||
this.taskInstanceId = id;
|
||||
}
|
||||
|
||||
public void setToken(long id) {
|
||||
this.tokenInstanceId = id;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user