Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
demo数据自动初始化
  • Loading branch information
henryyan committed Nov 16, 2015
1 parent 39bbcb1 commit 5f08c26
Show file tree
Hide file tree
Showing 8 changed files with 1,251 additions and 32 deletions.
6 changes: 2 additions & 4 deletions pom.xml
Expand Up @@ -42,17 +42,15 @@
<activiti.version>5.19.0</activiti.version>
<activiti.engine.version>5.19.0</activiti.engine.version>

<!-- jdbc h2 -->
<!-- jdbc h2
<jdbc.driver.groupId>com.h2database</jdbc.driver.groupId>
<jdbc.driver.artifactId>h2</jdbc.driver.artifactId>
<jdbc.driver.version>1.4.190</jdbc.driver.version>

-->
<!-- jdbc mysql -->
<!--
<jdbc.driver.groupId>mysql</jdbc.driver.groupId>
<jdbc.driver.artifactId>mysql-connector-java</jdbc.driver.artifactId>
<jdbc.driver.version>5.1.11</jdbc.driver.version>
-->

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Expand Down
207 changes: 207 additions & 0 deletions src/main/java/me/kafeitu/demo/activiti/conf/DemoDataInitConfig.java
@@ -0,0 +1,207 @@
package me.kafeitu.demo.activiti.conf;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import javax.annotation.PostConstruct;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import me.kafeitu.demo.activiti.util.PropertyFileUtil;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.Picture;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.util.IoUtil;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
* 自动初始化演示数据
*
* @author Henry Yan
*/
@Component
public class DemoDataInitConfig {

protected static final Logger LOGGER = LoggerFactory.getLogger(DemoDataInitConfig.class);

@Autowired
protected IdentityService identityService;

@Autowired
protected RepositoryService repositoryService;

@Autowired
protected RuntimeService runtimeService;

@Autowired
protected TaskService taskService;

@Autowired
protected ManagementService managementService;

@Autowired
protected ProcessEngineConfigurationImpl processEngineConfiguration;

@PostConstruct
public void init() {

try {
PropertyFileUtil.init();
} catch (IOException e) {
e.printStackTrace();
}

if (Boolean.valueOf(PropertyFileUtil.get("create.demo.users", "true"))) {
LOGGER.info("Initializing demo groups");
initDemoGroups();
LOGGER.info("Initializing demo users");
initDemoUsers();
}

if (Boolean.valueOf(PropertyFileUtil.get("create.demo.definitions", "true"))) {
LOGGER.info("Initializing demo process definitions");
initProcessDefinitions();
}

if (Boolean.valueOf(PropertyFileUtil.get("create.demo.models", "true"))) {
LOGGER.info("Initializing demo models");
initModelData();
}
}

protected void initDemoGroups() {
String[] assignmentGroups = new String[]{"deptLeader", "hr"};
for (String groupId : assignmentGroups) {
createGroup(groupId, "assignment");
}

String[] securityGroups = new String[]{"user", "admin"};
for (String groupId : securityGroups) {
createGroup(groupId, "security-role");
}
}

protected void createGroup(String groupId, String type) {
if (identityService.createGroupQuery().groupId(groupId).count() == 0) {
Group newGroup = identityService.newGroup(groupId);
newGroup.setName(groupId.substring(0, 1).toUpperCase() + groupId.substring(1));
newGroup.setType(type);
identityService.saveGroup(newGroup);
}
}

protected void initDemoUsers() {
createUser("admin", "Henry", "Yan", "000000", "henry.yan@kafeitu.me",
"", Arrays.asList("user", "admin"), null);

createUser("hruser", "Lili", "Zhang", "000000", "lili.zhang@kafeitu.me",
"", Arrays.asList("hr", "user"), null);

createUser("leaderuser", "Jhon", "Li", "000000", "jhon.li@kafeitu.me",
"", Arrays.asList("deptLeader", "user"), null);

createUser("kafeitu", "Coffee", "Rabbit", "000000", "coffee.rabbit@kafeitu.me",
"", Arrays.asList("user", "admin"), null);
}

protected void createUser(String userId, String firstName, String lastName, String password,
String email, String imageResource, List<String> groups, List<String> userInfo) {

if (identityService.createUserQuery().userId(userId).count() == 0) {

// Following data can already be set by demo setup script

User user = identityService.newUser(userId);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setPassword(password);
user.setEmail(email);
identityService.saveUser(user);

if (groups != null) {
for (String group : groups) {
identityService.createMembership(userId, group);
}
}
}

// Following data is not set by demo setup script

// image
if (imageResource != null) {
byte[] pictureBytes = IoUtil.readInputStream(this.getClass().getClassLoader().getResourceAsStream(imageResource), null);
Picture picture = new Picture(pictureBytes, "image/jpeg");
identityService.setUserPicture(userId, picture);
}

// user info
if (userInfo != null) {
for (int i = 0; i < userInfo.size(); i += 2) {
identityService.setUserInfo(userId, userInfo.get(i), userInfo.get(i + 1));
}
}

}

protected void initProcessDefinitions() {

String deploymentName = "Demo processes";
List<Deployment> deploymentList = repositoryService.createDeploymentQuery().deploymentName(deploymentName).list();

if (deploymentList == null || deploymentList.isEmpty()) {
repositoryService.createDeployment()
.name(deploymentName)
.addClasspathResource("diagrams/leave/leave.bpmn")
.addClasspathResource("diagrams/leave/leave.png")
.deploy();
}
}

protected void initModelData() {
createModelData("Demo model", "This is a demo model", "models/leave.model.json");
}

protected void createModelData(String name, String description, String jsonFile) {
List<Model> modelList = repositoryService.createModelQuery().modelName("Demo model").list();

if (modelList == null || modelList.isEmpty()) {

Model model = repositoryService.newModel();
model.setName(name);

ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
modelObjectNode.put("name", name);
modelObjectNode.put("description", description);
model.setMetaInfo(modelObjectNode.toString());

repositoryService.saveModel(model);

try {
InputStream svgStream = this.getClass().getClassLoader().getResourceAsStream("org/activiti/explorer/demo/model/test.svg");
repositoryService.addModelEditorSourceExtra(model.getId(), IOUtils.toByteArray(svgStream));
} catch (Exception e) {
LOGGER.warn("Failed to read SVG", e);
}

try {
InputStream editorJsonStream = this.getClass().getClassLoader().getResourceAsStream(jsonFile);
repositoryService.addModelEditorSource(model.getId(), IOUtils.toByteArray(editorJsonStream));
} catch (Exception e) {
LOGGER.warn("Failed to read editor JSON", e);
}
}
}
}
57 changes: 47 additions & 10 deletions src/main/java/me/kafeitu/demo/activiti/util/PropertyFileUtil.java
@@ -1,5 +1,15 @@
package me.kafeitu.demo.activiti.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
Expand All @@ -10,10 +20,6 @@
import org.springframework.util.DefaultPropertiesPersister;
import org.springframework.util.PropertiesPersister;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

/**
* 系统属性工具类
Expand All @@ -22,15 +28,14 @@
*/
public class PropertyFileUtil {


private static final String DEFAULT_ENCODING = "UTF-8";
private static Logger logger = LoggerFactory.getLogger(PropertyFileUtil.class);
private static Properties properties;
private static PropertiesPersister propertiesPersister = new DefaultPropertiesPersister();
private static ResourceLoader resourceLoader = new DefaultResourceLoader();
private static Properties activePropertyFiles = null;
private static String PROFILE_ID = StringUtils.EMPTY;
public static boolean INITIALIZED = false; // 是否已初始化
public static boolean initialized = false; // 是否已初始化

/**
* 初始化读取配置文件,读取的文件列表位于classpath下面的application-files.properties<br/>
Expand All @@ -44,7 +49,7 @@ public static void init() throws IOException {
PROFILE_ID = StringUtils.EMPTY;
innerInit(fileNames);
activePropertyFiles(fileNames);
INITIALIZED = true;
initialized = true;
}

/**
Expand All @@ -63,7 +68,7 @@ public static void init(String profile) throws IOException {
String fileNames = "application-" + profile + "-files.properties";
innerInit(fileNames);
}
INITIALIZED = true;
initialized = true;
}

/**
Expand Down Expand Up @@ -120,6 +125,9 @@ public static Properties loadProperties(String... resourcesPaths) throws IOExcep

for (String location : resourcesPaths) {

// 剔除classpath路径协议
location = location.replace("classpath*:/", "");

logger.debug("Loading properties file from:" + location);

InputStream is = null;
Expand Down Expand Up @@ -168,8 +176,17 @@ public static Map<String, String> getKeyValueMap() {
* @return 值
*/
public static String get(String key) {
if (!initialized) {
try {
init();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
String propertyValue = properties.getProperty(key);
logger.debug("获取属性:{},值:{}", key, propertyValue);
if (logger.isDebugEnabled()) {
logger.debug("获取属性:{},值:{}", key, propertyValue);
}
return propertyValue;
}

Expand All @@ -181,12 +198,32 @@ public static String get(String key) {
* @return 值
*/
public static String get(String key, String defaultValue) {
if (!initialized) {
try {
init();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
String propertyValue = properties.getProperty(key);
String value = StringUtils.defaultString(propertyValue, defaultValue);
logger.debug("获取属性:{},值:{}", key, value);
if (logger.isDebugEnabled()) {
logger.debug("获取属性:{},值:{}", key, value);
}
return value;
}

/**
* 判断key对应的value是否和期待的一致
* @param key
* @param expectValue
* @return
*/
public static boolean equalsWith(String key, String expectValue) {
String value = get(key);
return StringUtils.equals(value, expectValue);
}

/**
* 向内存添加属性
*
Expand Down
Expand Up @@ -117,7 +117,11 @@ public void export(@PathVariable("modelId") String modelId, HttpServletResponse
try {
Model modelData = repositoryService.getModel(modelId);
BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
byte[] modelEditorSource = repositoryService.getModelEditorSource(modelData.getId());

// System.out.println(new String(modelEditorSource));

JsonNode editorNode = new ObjectMapper().readTree(modelEditorSource);
BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);
Expand Down

0 comments on commit 5f08c26

Please sign in to comment.