
org.jbpm.designer.web.preprocessing.impl.JbpmPreprocessingUnit Maven / Gradle / Ivy
/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.designer.web.preprocessing.impl;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.guvnor.common.services.project.service.POMService;
import org.guvnor.common.services.shared.metadata.MetadataService;
import org.jbpm.designer.notification.DesignerWorkitemInstalledEvent;
import org.jbpm.designer.repository.Asset;
import org.jbpm.designer.repository.AssetBuilderFactory;
import org.jbpm.designer.repository.Repository;
import org.jbpm.designer.repository.UriUtils;
import org.jbpm.designer.repository.filters.FilterByExtension;
import org.jbpm.designer.repository.impl.AssetBuilder;
import org.jbpm.designer.repository.vfs.RepositoryDescriptor;
import org.jbpm.designer.server.EditorHandler;
import org.jbpm.designer.server.service.DefaultDesignerAssetService;
import org.jbpm.designer.util.ConfigurationProvider;
import org.jbpm.designer.util.Utils;
import org.jbpm.designer.web.preprocessing.IDiagramPreprocessingUnit;
import org.jbpm.designer.web.profile.IDiagramProfile;
import org.jbpm.designer.web.server.ServiceRepoUtils;
import org.jbpm.process.core.ParameterDefinition;
import org.jbpm.process.core.datatype.DataType;
import org.jbpm.process.core.datatype.impl.type.EnumDataType;
import org.jbpm.process.core.impl.ParameterDefinitionImpl;
import org.jbpm.process.workitem.WorkDefinitionImpl;
import org.jbpm.process.workitem.WorkItemRepository;
import org.jbpm.util.WidMVELEvaluator;
import org.json.JSONArray;
import org.json.JSONObject;
import org.kie.workbench.common.services.backend.builder.core.Builder;
import org.kie.workbench.common.services.backend.builder.core.LRUBuilderCache;
import org.kie.workbench.common.services.shared.project.KieModule;
import org.kie.workbench.common.services.shared.project.KieModuleService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stringtemplate.v4.ST;
import org.uberfire.backend.vfs.Path;
import org.uberfire.backend.vfs.VFSService;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.file.NoSuchFileException;
import org.uberfire.workbench.events.NotificationEvent;
/**
* JbpmPreprocessingUnit - preprocessing unit for the jbpm profile
* @author Tihomir Surdilovic
*/
@Named("jbpmPreprocessingUnit")
public class JbpmPreprocessingUnit implements IDiagramPreprocessingUnit {
public static final String STENCILSET_PATH = "stencilsets";
public static final String WORKITEM_DEFINITION_EXT = "wid";
public static final String THEME_NAME = "themes";
public static final String THEME_EXT = ".json";
public static final String PATTERNS_NAME = "patterns";
public static final String PATTERNS_EXT = ".json";
public static final String DEFAULT_THEME_NAME = "jBPM";
public static final String CUSTOMEDITORS_NAME = "customeditors";
public static final String PROCESSDICTIONARY_NAME = "processdictionary";
public static final String CUSTOMEDITORS_EXT = ".json";
public static final String THEME_COOKIE_NAME = "designercolortheme";
public static final String DEFAULT_CATEGORY_NAME = "Service Tasks";
public static final String INCLUDE_DATA_OBJECT = "designerdataobjects";
public static final Pattern UNICODE_WORDS_AND_UNDERSCORES_PATTERN = Pattern.compile("(\\p{L}|_)+",
Pattern.UNICODE_CHARACTER_CLASS);
private static final Logger _logger =
LoggerFactory.getLogger(JbpmPreprocessingUnit.class);
@Inject
protected Event workitemInstalledEventEvent;
@Inject
protected Event notification;
@Inject
KieModuleService moduleService;
private String designer_path;
private String stencilPath;
private String origStencilFilePath;
private String stencilFilePath;
private String outData = "";
private String workitemSVGFilePath;
private String origWorkitemSVGFile;
private String defaultEmailIcon;
private String defaultMilestoneIcon;
private String defaultSubCaseIcon;
private String defaultLogIcon;
private String defaultServiceNodeIcon;
private String defaultBusinessRulesIcon;
private String defaultDecisionIcon;
private String defaultWidConfigTemplate;
private String defaultClasspathWid = "META-INF/WorkDefinitions.wid";
private String themeInfo;
private String formWidgetsDir;
private String customEditorsInfo;
private String patternsData;
private String sampleBpmn2;
private String globalDir;
private VFSService vfsService;
private boolean includeDataObjects;
@Inject
private POMService pomService;
@Inject
private MetadataService metadataService;
@Inject
private DefaultDesignerAssetService defaultDesignerAssetService;
@Inject
private LRUBuilderCache builderCache;
public JbpmPreprocessingUnit() {
}
protected static String readFile(String pathname) throws IOException {
if (pathname == null) {
return null;
}
StringBuilder fileContents = new StringBuilder();
String lineSeparator = System.getProperty("line.separator");
Scanner scanner = null;
try {
scanner = new Scanner(new File(pathname),
"UTF-8");
while (scanner.hasNextLine()) {
fileContents.append(scanner.nextLine() + lineSeparator);
}
return fileContents.toString();
} finally {
IOUtils.closeQuietly(scanner);
}
}
protected static byte[] getBytesFromFile(File file) throws IOException {
if (file == null || file.length() > Integer.MAX_VALUE) {
return null; // File is null or too large
}
long length = file.length();
byte[] bytes;
InputStream is = null;
try {
is = new FileInputStream(file);
bytes = new byte[(int) length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes,
offset,
bytes.length - offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file " + file.getName());
}
} finally {
IOUtils.closeQuietly(is);
}
return bytes;
}
public static String createAbsoluteIconPath(String assetPath,
String iconPath) {
if (assetPath == null || assetPath.length() < 1) {
return iconPath;
}
if (iconPath == null || iconPath.length() < 1) {
return assetPath;
}
// Handle cases where iconPath doesn't start with ".."
if (iconPath.startsWith("/")) {
return iconPath;
} else if (!iconPath.startsWith("..")) {
return assetPath + "/" + iconPath;
}
// Handle ".." once or more at start of iconPath
String separator = "/";
String[] assetFolders = assetPath.split(separator);
String[] iconFolders = iconPath.split(separator);
int toRemoveFromIconFolders = 0;
int toIncludeInAssetFolders = assetFolders.length;
for (int i = 0; i < iconFolders.length; i++) {
if ("..".equals(iconFolders[i])) {
toRemoveFromIconFolders++;
toIncludeInAssetFolders--;
} else {
break;
}
}
StringBuilder sb = new StringBuilder(assetPath.length() + iconPath.length() + 1);
sb.append(separator);
for (int i = 1; i < toIncludeInAssetFolders; i++) {
sb.append(assetFolders[i]).append(separator);
}
for (int i = toRemoveFromIconFolders; i < iconFolders.length; i++) {
sb.append(iconFolders[i]).append(separator);
}
sb.setLength(sb.length() - 1);
return sb.toString();
}
public void init(ServletContext servletContext,
VFSService vfsService) {
init(servletContext,
ConfigurationProvider.getInstance().getDesignerContext(),
vfsService);
}
public void init(ServletContext servletContext,
String designerPath,
VFSService vfsService) {
this.designer_path = designerPath.substring(0,
designerPath.length() - 1);
this.vfsService = vfsService;
stencilPath = servletContext.getRealPath(designer_path + "/" + STENCILSET_PATH);
origStencilFilePath = stencilPath + "/bpmn2.0jbpm/stencildata/" + "bpmn2.0jbpm.orig";
stencilFilePath = stencilPath + "/bpmn2.0jbpm/" + "bpmn2.0jbpm.json";
workitemSVGFilePath = stencilPath + "/bpmn2.0jbpm/view/activity/workitems/";
origWorkitemSVGFile = workitemSVGFilePath + "workitem.orig";
defaultEmailIcon = servletContext.getRealPath(designer_path + "/defaults/defaultemailicon.gif");
defaultMilestoneIcon = servletContext.getRealPath(designer_path + "/defaults/defaultmilestoneicon.png");
defaultSubCaseIcon = servletContext.getRealPath(designer_path + "/defaults/defaultsubcaseicon.png");
defaultLogIcon = servletContext.getRealPath(designer_path + "/defaults/defaultlogicon.gif");
defaultServiceNodeIcon = servletContext.getRealPath(designer_path + "/defaults/defaultservicenodeicon.png");
defaultBusinessRulesIcon = servletContext.getRealPath(designer_path + "/defaults/defaultbusinessrulesicon.png");
defaultDecisionIcon = servletContext.getRealPath(designer_path + "/defaults/defaultdecisionicon.png");
defaultWidConfigTemplate = servletContext.getRealPath(designer_path + "/defaults/WorkDefinitions.wid.st");
themeInfo = servletContext.getRealPath(designer_path + "/defaults/themes.json");
formWidgetsDir = servletContext.getRealPath(designer_path + "/defaults/formwidgets");
customEditorsInfo = servletContext.getRealPath(designer_path + "/defaults/customeditors.json");
patternsData = servletContext.getRealPath(designer_path + "/defaults/patterns.json");
sampleBpmn2 = servletContext.getRealPath(designer_path + "/defaults/SampleProcess.bpmn2");
includeDataObjects = Boolean.parseBoolean(System.getProperty(INCLUDE_DATA_OBJECT) == null ? "true" : System.getProperty(INCLUDE_DATA_OBJECT));
}
public String getOutData() {
if (outData != null && outData.length() > 0) {
if (outData.endsWith(",")) {
outData = outData.substring(0,
outData.length() - 1);
}
}
return outData;
}
public void preprocess(HttpServletRequest req,
HttpServletResponse res,
IDiagramProfile profile,
ServletContext serlvetContext,
boolean readOnly,
boolean viewLocked,
IOService ioService,
RepositoryDescriptor descriptor) {
try {
if (readOnly) {
_logger.info("Performing preprocessing steps in readonly mode.");
ST workItemTemplate = new ST(readFile(origStencilFilePath),
'$',
'$');
workItemTemplate.add("bopen",
"{");
workItemTemplate.add("bclose",
"}");
workItemTemplate.add("patternData",
new HashMap());
workItemTemplate.add("packageName",
"org.jbpm");
workItemTemplate.add("processn",
"");
workItemTemplate.add("processid",
"");
workItemTemplate.add("pversion",
"1.0");
String readOnlyIconEncoded = "data:image/png;base64,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";
Map workDefinitions = new HashMap();
Map>> customParams = new HashMap<>();
WorkDefinitionImpl readOnlyImpl = new WorkDefinitionImpl();
readOnlyImpl.setName("ReadOnlyService");
readOnlyImpl.setDisplayName("ReadOnlyService");
readOnlyImpl.setCategory("Service Tasks");
readOnlyImpl.setIcon("/global/defaultservicenodeicon.png");
readOnlyImpl.setIconEncoded(URLEncoder.encode(readOnlyIconEncoded,
"UTF-8"));
readOnlyImpl.setCustomEditor("");
workDefinitions.put("ReadOnlyService",
readOnlyImpl);
workItemTemplate.add("workitemDefs",
workDefinitions);
workItemTemplate.add("customParams",
customParams);
Map themeData = setupThemesForReadOnly(req);
workItemTemplate.add("colortheme",
themeData);
workItemTemplate.add("caseproject",
false);
deletefile(stencilFilePath);
createAndWriteToFile(stencilFilePath,
workItemTemplate.render());
createAndParseViewSVGForReadOnly(workDefinitions,
readOnlyIconEncoded);
return;
}
if (ioService != null) {
ioService.startBatch(descriptor.getFileSystem());
}
Repository repository = profile.getRepository();
String uuid = Utils.getUUID(req);
//createAssetIfNotExisting(repository, "/defaultPackage", "BPMN2-SampleProcess", "bpmn2", getBytesFromFile(new File(sampleBpmn2)));
installDefaultRepositoryWorkitems(uuid,
repository,
vfsService);
Asset asset = repository.loadAsset(uuid);
this.globalDir = profile.getRepositoryGlobalDir(uuid);
outData = "";
Map themeData = setupThemes(req,
repository,
profile);
setupCustomEditors(repository,
profile);
setupDefaultIcons(globalDir,
repository);
setupDefaultWorkflowPatterns(globalDir,
repository);
// figure out which package our uuid belongs in and get back the list of configs
Collection workitemConfigInfo = findWorkitemInfoForUUID(asset.getAssetLocation(),
repository);
// also get all from globals package
Collection globalWorkitemConfigInfo = findWorkitemInfoForUUID(globalDir,
repository);
if (workitemConfigInfo != null) {
if (globalWorkitemConfigInfo != null) {
workitemConfigInfo.addAll(globalWorkitemConfigInfo);
}
} else {
workitemConfigInfo = globalWorkitemConfigInfo;
}
if (workitemConfigInfo == null || workitemConfigInfo.size() < 1) {
setupDefaultWorkitemConfigs(asset.getAssetLocation(),
repository);
workitemConfigInfo = findWorkitemInfoForUUID(asset.getAssetLocation(),
repository);
}
// get the contents of each of the configs
Collection workItemsContent = getWorkitemConfigContent(workitemConfigInfo,
repository);
// evaluate all configs
KieModule kieModule = moduleService.resolveModule(vfsService.get(uuid.replaceAll("\\s",
"%20")));
Map workDefinitions = new HashMap();
for (Asset entry : workItemsContent) {
try {
evaluateWorkDefinitions(workDefinitions,
entry,
asset.getAssetLocation(),
repository,
kieModule);
} catch (Exception e) {
_logger.error("Unable to parse a workitem definition: " + e.getMessage());
}
}
Map>> customParams = new HashMap<>();
for (Map.Entry widEntry : workDefinitions.entrySet()) {
WorkDefinitionImpl widImpl = widEntry.getValue();
if (widImpl.getParameterValues() != null) {
Map widImplParamValues = widImpl.getParameterValues();
Map> customParamsValueMap = new HashMap<>();
for (Map.Entry widParamValueEntry : widImplParamValues.entrySet()) {
if (widParamValueEntry.getValue() != null && widParamValueEntry.getValue() instanceof String) {
customParamsValueMap.put(widParamValueEntry.getKey(),
Arrays.asList(((String) widParamValueEntry.getValue()).split(",\\s*")));
}
}
customParams.put(widEntry.getKey(),
customParamsValueMap);
}
}
// sort against display name
WorkItemDisplayNameComparator wiComparator = new WorkItemDisplayNameComparator(workDefinitions);
Map workDefinitionsTree = new TreeMap(wiComparator);
workDefinitionsTree.putAll(workDefinitions);
// set the out parameter
for (Map.Entry definition : workDefinitionsTree.entrySet()) {
outData += definition.getValue().getName() + ",";
}
// parse the profile json to include config data
// parse patterns data
JSONArray patternsArray = new JSONArray(findWorkflowPatterns(repository).getAssetContent());
Map patternInfoMap = new HashMap();
for (int i = 0; i < patternsArray.length(); i++) {
JSONObject patternObj = patternsArray.getJSONObject(i);
PatternInfo pi = new PatternInfo(patternObj.getString("id"),
patternObj.getString("name"),
patternObj.getString("description"));
patternInfoMap.put(patternObj.getString("id"),
pi);
}
// parse the orig stencil data with workitem definitions
ST workItemTemplate = new ST(readFile(origStencilFilePath),
'$',
'$');
workItemTemplate.add("bopen",
"{");
workItemTemplate.add("bclose",
"}");
workItemTemplate.add("workitemDefs",
workDefinitionsTree);
workItemTemplate.add("customParams",
customParams);
workItemTemplate.add("patternData",
patternInfoMap);
workItemTemplate.add("includedo",
includeDataObjects);
if (kieModule != null && kieModule.getRootPath() != null && defaultDesignerAssetService.isCaseProject(kieModule.getRootPath())) {
workItemTemplate.add("caseproject",
true);
} else {
workItemTemplate.add("caseproject",
false);
}
// set package to org.jbpm
workItemTemplate.add("packageName",
"org.jbpm");
workItemTemplate.add("processn",
asset.getName());
workItemTemplate.add("processid",
getProcessIdFromAsset(asset));
// default version to 1.0
workItemTemplate.add("pversion",
"1.0");
// color theme attribute
workItemTemplate.add("colortheme",
themeData);
// delete stencil data json if exists
deletefile(stencilFilePath);
// copy our results as the stencil json data
createAndWriteToFile(stencilFilePath,
workItemTemplate.render());
// create and parse the view svg to include config data
createAndParseViewSVG(workDefinitionsTree,
repository);
} catch (Exception e) {
_logger.error(e.getMessage());
} catch (Throwable e) {
_logger.error(e.getMessage());
} finally {
try {
if (!readOnly && ioService != null) {
ioService.endBatch();
}
} catch (Exception ee) {
_logger.debug("Error ending batch: " + ee.getMessage());
}
}
}
protected String getProcessIdFromAsset(Asset asset) {
String processPackage = asset.getAssetLocation();
if (processPackage.startsWith("/")) {
processPackage = processPackage.substring(1,
processPackage.length());
}
processPackage = processPackage.replaceAll("/",
".");
// final check in odd cases
if (processPackage.startsWith(".")) {
processPackage = processPackage.substring(1,
processPackage.length());
}
String packageNameStr = (processPackage.length() > 0) ? processPackage + "." : "";
if (packageNameStr.length() > 0) {
String[] packageNameParts = packageNameStr.split("\\.");
packageNameStr = packageNameParts[0] + ".";
}
// default the process id to packagename.processName
String processIdString = packageNameStr + asset.getName();
if (processIdString.startsWith(".")) {
processIdString = processIdString.substring(1,
processIdString.length());
}
return processIdString;
}
@SuppressWarnings("unchecked")
private void createAndParseViewSVGForReadOnly(Map workDefinitions,
String iconBase64) {
try {
for (Map.Entry definition : workDefinitions.entrySet()) {
ST workItemTemplate = new ST(readFile(origWorkitemSVGFile),
'$',
'$');
workItemTemplate.add("workitemDef",
definition.getValue());
String widIcon = definition.getValue().getIcon();
String iconEncoded = iconBase64;
workItemTemplate.add("nodeicon",
iconEncoded);
String fileToWrite = workitemSVGFilePath + definition.getValue().getName() + ".svg";
createAndWriteToFile(fileToWrite,
workItemTemplate.render());
}
} catch (Exception e) {
_logger.error("Failed to setup workitem svg images: " + e.getMessage());
}
}
@SuppressWarnings("unchecked")
private void createAndParseViewSVG(Map workDefinitions,
Repository repository) {
// first delete all existing workitem svgs
Collection workitemsvgs = FileUtils.listFiles(new File(workitemSVGFilePath),
new String[]{"svg"},
true);
if (workitemsvgs != null) {
for (File wisvg : workitemsvgs) {
deletefile(wisvg);
}
}
try {
for (Map.Entry definition : workDefinitions.entrySet()) {
ST workItemTemplate = new ST(readFile(origWorkitemSVGFile),
'$',
'$');
workItemTemplate.add("workitemDef",
definition.getValue());
String widIcon = definition.getValue().getIcon();
Asset iconAsset = repository.loadAssetFromPath(widIcon);
String iconEncoded = "data:image/png;base64," + javax.xml.bind.DatatypeConverter.printBase64Binary(iconAsset.getAssetContent());
workItemTemplate.add("nodeicon",
iconEncoded);
String fileToWrite = workitemSVGFilePath + definition.getValue().getName() + ".svg";
createAndWriteToFile(fileToWrite,
workItemTemplate.render());
}
} catch (Exception e) {
_logger.error("Failed to setup workitem svg images: " + e.getMessage());
}
}
@SuppressWarnings({"unchecked", "rawtypes"})
public void evaluateWorkDefinitions(Map workDefinitions,
Asset widAsset,
String assetLocation,
Repository repository,
KieModule kieModule) throws Exception {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy