added svcapi ui and camunda code
[it/otf.git] / otf-camunda / src / main / java / org / oran / otf / camunda / configuration / OtfCamundaConfiguration.java
1 /*  Copyright (c) 2019 AT&T Intellectual Property.                             #\r
2 #                                                                              #\r
3 #   Licensed under the Apache License, Version 2.0 (the "License");            #\r
4 #   you may not use this file except in compliance with the License.           #\r
5 #   You may obtain a copy of the License at                                    #\r
6 #                                                                              #\r
7 #       http://www.apache.org/licenses/LICENSE-2.0                             #\r
8 #                                                                              #\r
9 #   Unless required by applicable law or agreed to in writing, software        #\r
10 #   distributed under the License is distributed on an "AS IS" BASIS,          #\r
11 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #\r
12 #   See the License for the specific language governing permissions and        #\r
13 #   limitations under the License.                                             #\r
14 ##############################################################################*/\r
15 \r
16 \r
17 package org.oran.otf.camunda.configuration;\r
18 \r
19 import com.google.common.base.Strings;\r
20 import java.util.Optional;\r
21 import java.util.UUID;\r
22 import javax.sql.DataSource;\r
23 import org.camunda.bpm.application.impl.event.ProcessApplicationEventListenerPlugin;\r
24 import org.camunda.bpm.engine.ProcessEngineConfiguration;\r
25 import org.camunda.bpm.engine.impl.cfg.IdGenerator;\r
26 import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;\r
27 import org.camunda.bpm.engine.impl.history.HistoryLevel;\r
28 import org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration;\r
29 import org.camunda.bpm.extension.reactor.bus.CamundaEventBus;\r
30 import org.camunda.bpm.extension.reactor.plugin.ReactorProcessEnginePlugin;\r
31 import org.camunda.bpm.extension.reactor.projectreactor.EventBus;\r
32 import org.camunda.bpm.spring.boot.starter.configuration.impl.DefaultProcessEngineConfiguration;\r
33 import org.camunda.connect.plugin.impl.ConnectProcessEnginePlugin;\r
34 import org.camunda.spin.plugin.impl.SpinProcessEnginePlugin;\r
35 import org.springframework.beans.factory.annotation.Autowired;\r
36 import org.springframework.beans.factory.annotation.Qualifier;\r
37 import org.springframework.context.annotation.Bean;\r
38 import org.springframework.context.annotation.Configuration;\r
39 import org.springframework.transaction.PlatformTransactionManager;\r
40 import org.springframework.util.StringUtils;\r
41 \r
42 @Configuration\r
43 public class OtfCamundaConfiguration extends DefaultProcessEngineConfiguration {\r
44 \r
45   @Autowired\r
46   private DataSource dataSource;\r
47   @Autowired\r
48   private PlatformTransactionManager transactionManager;\r
49   @Autowired private Optional<IdGenerator> idGenerator;\r
50 \r
51   public static String processEngineName;\r
52 \r
53   @Bean\r
54   public ProcessEngineConfiguration configureEngine(ProcessEngineConfigurationImpl configuration) {\r
55     configuration.setJavaSerializationFormatEnabled(true);\r
56     return configuration;\r
57   }\r
58 \r
59   @Override\r
60   public void preInit(SpringProcessEngineConfiguration configuration) {\r
61 \r
62     logger.info(configuration.getProcessEngineName());\r
63     processEngineName = System.getenv("HOSTNAME");\r
64     if (Strings.isNullOrEmpty(processEngineName)) {\r
65       processEngineName = "otf-camunda-" + UUID.randomUUID().toString();\r
66     }\r
67     processEngineName = processEngineName.replaceAll("-", "_");\r
68     camundaBpmProperties.setProcessEngineName(processEngineName);\r
69     camundaBpmProperties.setAutoDeploymentEnabled(true);\r
70     camundaBpmProperties.setHistoryLevel(HistoryLevel.HISTORY_LEVEL_FULL.getName());\r
71     camundaBpmProperties.setDefaultNumberOfRetries(1);\r
72 \r
73     setProcessEngineName(configuration);\r
74     setDefaultSerializationFormat(configuration);\r
75     setIdGenerator(configuration);\r
76     setJobExecutorAcquireByPriority(configuration);\r
77     setDefaultNumberOfRetries(configuration);\r
78 \r
79     configuration.setDataSource(dataSource);\r
80     configuration.setTransactionManager(transactionManager);\r
81     configuration.setHistory("true");\r
82     configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);\r
83     configuration.setJobExecutorActivate(true);\r
84     configuration.setCreateIncidentOnFailedJobEnabled(true);\r
85     configuration.setFailedJobListenerMaxRetries(0);\r
86     configuration.setJavaSerializationFormatEnabled(true);\r
87     configuration.setMetricsEnabled(false);\r
88   }\r
89 \r
90   private void setIdGenerator(SpringProcessEngineConfiguration configuration) {\r
91     idGenerator.ifPresent(configuration::setIdGenerator);\r
92   }\r
93 \r
94   private void setDefaultSerializationFormat(SpringProcessEngineConfiguration configuration) {\r
95     String defaultSerializationFormat = camundaBpmProperties.getDefaultSerializationFormat();\r
96     if (StringUtils.hasText(defaultSerializationFormat)) {\r
97       configuration.setDefaultSerializationFormat(defaultSerializationFormat);\r
98     } else {\r
99       logger.warn("Ignoring invalid defaultSerializationFormat='{}'", defaultSerializationFormat);\r
100     }\r
101   }\r
102 \r
103   private void setProcessEngineName(SpringProcessEngineConfiguration configuration) {\r
104     String processEngineName =\r
105         StringUtils.trimAllWhitespace(camundaBpmProperties.getProcessEngineName());\r
106     if (!StringUtils.isEmpty(processEngineName) && !processEngineName.contains("-")) {\r
107       configuration.setProcessEngineName(processEngineName);\r
108     } else {\r
109       logger.warn(\r
110           "Ignoring invalid processEngineName='{}' - must not be null, blank or contain hyphen",\r
111           camundaBpmProperties.getProcessEngineName());\r
112     }\r
113   }\r
114 \r
115   private void setJobExecutorAcquireByPriority(SpringProcessEngineConfiguration configuration) {\r
116     Optional.ofNullable(camundaBpmProperties.getJobExecutorAcquireByPriority())\r
117         .ifPresent(configuration::setJobExecutorAcquireByPriority);\r
118   }\r
119 \r
120   private void setDefaultNumberOfRetries(SpringProcessEngineConfiguration configuration) {\r
121     Optional.ofNullable(camundaBpmProperties.getDefaultNumberOfRetries())\r
122         .ifPresent(configuration::setDefaultNumberOfRetries);\r
123   }\r
124 \r
125   @Bean\r
126   CamundaEventBus camundaEventBus() {\r
127     return new CamundaEventBus();\r
128   }\r
129 \r
130   @Bean\r
131   @Qualifier("camunda")\r
132   EventBus eventBus(final CamundaEventBus camundaEventBus) {\r
133     return camundaEventBus.get();\r
134   }\r
135 \r
136   @Bean\r
137   ReactorProcessEnginePlugin reactorProcessEnginePlugin(final CamundaEventBus camundaEventBus) {\r
138     return new ReactorProcessEnginePlugin(camundaEventBus);\r
139   }\r
140 \r
141   @Bean\r
142   ConnectProcessEnginePlugin connectProcessEnginePlugin() {\r
143     return new ConnectProcessEnginePlugin();\r
144   }\r
145 \r
146   @Bean\r
147   SpinProcessEnginePlugin spinProcessEnginePlugin() {\r
148     return new SpinProcessEnginePlugin();\r
149   }\r
150 \r
151   @Bean\r
152   ProcessApplicationEventListenerPlugin processApplicationEventListenerPlugin() {\r
153     return new ProcessApplicationEventListenerPlugin();\r
154   }\r
155 }\r