package com.mossle.form.support; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Map; import javax.annotation.PostConstruct; import com.mossle.api.tenant.TenantConnector; import com.mossle.api.tenant.TenantDTO; import com.mossle.core.mapper.JsonMapper; import com.mossle.form.persistence.domain.FormTemplate; import com.mossle.form.persistence.manager.FormTemplateManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.io.Resource; public class XFormDeployer implements ApplicationContextAware { private Logger logger = LoggerFactory.getLogger(XFormDeployer.class); private boolean autoDeploy; private String deployPath = "classpath:xform/*.json"; private ApplicationContext applicationContext; private JsonMapper jsonMapper = new JsonMapper(); private FormTemplateManager formTemplateManager; private TenantConnector tenantConnector; private String defaultTenantCode = "default"; @PostConstruct public void init() { if (!autoDeploy) { return; } TenantDTO tenantDto = tenantConnector.findByCode(defaultTenantCode); String tenantId = tenantDto.getId(); try { for (Resource resource : applicationContext .getResources(deployPath)) { String text = readText(resource); Map<String, Object> map = jsonMapper.fromJson(text, Map.class); logger.debug("deploy : {}", map); String code = (String) map.get("code"); String name = (String) map.get("name"); String hql = "from FormTemplate where code=? and tenantId=?"; FormTemplate formTemplate = formTemplateManager.findUnique(hql, code, tenantId); if (formTemplate != null) { continue; } formTemplate = new FormTemplate(); formTemplate.setCode(code); formTemplate.setName(name); formTemplate.setContent(text); formTemplate.setType(0); formTemplate.setTenantId(tenantId); formTemplateManager.save(formTemplate); } } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } public String readText(Resource resource) throws Exception { InputStream is = resource.getInputStream(); int size = -1; byte[] b = new byte[1024]; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((size = is.read(b, 0, 1024)) != -1) { baos.write(b, 0, size); } is.close(); return new String(baos.toByteArray(), "utf-8"); } public void setDeployPath(String deployPath) { this.deployPath = deployPath; } public void setAutoDeploy(boolean autoDeploy) { this.autoDeploy = autoDeploy; } public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @javax.annotation.Resource public void setFormTemplateManager(FormTemplateManager formTemplateManager) { this.formTemplateManager = formTemplateManager; } public void setDefaultTenantCode(String defaultTenantCode) { this.defaultTenantCode = defaultTenantCode; } @javax.annotation.Resource public void setTenantConnector(TenantConnector tenantConnector) { this.tenantConnector = tenantConnector; } }