Merge Event and Thread code. 27/133727/2
authorhekeguang <hekeguang@chinamobile.com>
Wed, 22 Mar 2023 07:59:14 +0000 (15:59 +0800)
committerzhen zhang <781953240@qq.com>
Wed, 22 Mar 2023 09:28:53 +0000 (09:28 +0000)
Issue-ID: USECASEUI-784
Change-Id: I0cdef6c490f96c45e77013b0da5c372decdef6a1
Signed-off-by: hekeguang <hekeguang@chinamobile.com>
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/ThreadPoolConfig.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/bean/models/IntentEventRecord.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentCreateEvent.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentDeleteEvent.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/listener/IntentEventListener.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentEventRecord/IntentEventRecordService.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/mapper/IntentEventRecordMapper.java [new file with mode: 0644]
intentanalysis/src/main/resources/mybatis/sql/IntentEventRecordMapper.xml [new file with mode: 0644]

diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java
new file mode 100644 (file)
index 0000000..b91eb63
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.Thread;
+
+import org.onap.usecaseui.intentanalysis.bean.enums.IntentGoalType;
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule;
+import org.springframework.context.ApplicationContext;
+
+import java.util.concurrent.Callable;
+
+public class CreateCallable implements Callable<String> {
+    private Intent originalIntent;
+    private IntentGoalBean intentGoalBean;
+    private IntentManagementFunction handler;
+    private ApplicationContext applicationContext;
+
+    public CreateCallable() {
+    }
+    public CreateCallable(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler, ApplicationContext applicationContext) {
+        this.originalIntent = originalIntent;
+        this.intentGoalBean = intentGoalBean;
+        this.handler = handler;
+        this.applicationContext = applicationContext;
+    }
+
+    @Override
+    public String call() throws Exception {
+        ActuationModule actuationModule = handler.getActuationModule();
+        IntentGoalType type = intentGoalBean.getIntentGoalType();
+        if (type == IntentGoalType.CREATE) {
+            actuationModule.saveIntentToDb(intentGoalBean.getIntent());
+        }else if (type==IntentGoalType.UPDATE){
+            actuationModule.updateIntentToDb(intentGoalBean.getIntent());
+        }else if (type == IntentGoalType.DELETE) {
+            actuationModule.deleteIntentToDb(intentGoalBean.getIntent());
+        }
+        actuationModule.fulfillIntent(intentGoalBean, handler);
+        //update origin intent if need
+        actuationModule.updateIntentOperationInfo(originalIntent, intentGoalBean);
+        return  intentGoalBean.getIntent().getIntentName() +" Intent operate finished";
+    }
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/ThreadPoolConfig.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/ThreadPoolConfig.java
new file mode 100644 (file)
index 0000000..e1f0af7
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.Thread;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+//@EnableAsync
+public class ThreadPoolConfig {
+
+    @Bean("intentTaskExecutor")
+    public Executor asyncServiceExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        // corePoolSize
+        executor.setCorePoolSize(2);
+        // maxPoolSize
+        executor.setMaxPoolSize(10);
+        //queueCapacity
+        executor.setQueueCapacity(60);
+        //set  destroy time (seconds)
+        executor.setKeepAliveSeconds(60);
+        // thread name
+        executor.setThreadNamePrefix("Intent_Thread_Excutor-");
+        // Wait for all tasks to finish before closing the thread pool
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        //rejectPolicy
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
+        //init pool
+        executor.initialize();
+        return executor;
+    }
+}
+
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/bean/models/IntentEventRecord.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/bean/models/IntentEventRecord.java
new file mode 100644 (file)
index 0000000..6f75863
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.bean.models;
+
+import lombok.Data;
+
+@Data
+public class IntentEventRecord {
+    private String id;
+    private String intentId;
+    private String intentName;
+    private String intentStatus;
+    private String operateType;
+
+
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentCreateEvent.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentCreateEvent.java
new file mode 100644 (file)
index 0000000..ec9b4c7
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.eventAndPublish.event;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.springframework.context.ApplicationEvent;
+
+@Setter
+@Getter
+@ToString
+public class IntentCreateEvent extends ApplicationEvent {
+    private Intent originalIntent;
+    private IntentGoalBean intentGoalBean;
+    private IntentManagementFunction handler;
+    private String intentStatus;
+    public IntentCreateEvent(Object source, Intent originalIntent, IntentGoalBean intentGoalBean,
+                             IntentManagementFunction handler,String intentStatus) {
+        super(source);
+        this.originalIntent = originalIntent;
+        this.intentGoalBean = intentGoalBean;
+        this.handler = handler;
+        this.intentStatus=intentStatus;
+        
+
+    }
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentDeleteEvent.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentDeleteEvent.java
new file mode 100644 (file)
index 0000000..3708f87
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.eventAndPublish.event;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.springframework.context.ApplicationEvent;
+
+@Setter
+@Getter
+@ToString
+public class IntentDeleteEvent extends ApplicationEvent {
+    private String ownerName;
+    private Intent originalIntent;
+
+    public IntentDeleteEvent(Object source, String ownerName, Intent originalIntent) {
+        super(source);
+        this.ownerName= ownerName;
+        this.originalIntent = originalIntent;
+    }
+
+
+
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/listener/IntentEventListener.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/listener/IntentEventListener.java
new file mode 100644 (file)
index 0000000..045a75b
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.eventAndPublish.listener;
+
+import org.apache.commons.lang.StringUtils;
+import org.onap.usecaseui.intentanalysis.bean.models.Context;
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentEventRecord;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.onap.usecaseui.intentanalysis.eventAndPublish.event.IntentCreateEvent;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentEventRecord.IntentEventRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class IntentEventListener {
+    @Autowired
+    private IntentEventRecordService intentEventRecordService;
+
+    @EventListener
+    public void listenIntentCreateEvent(IntentCreateEvent intentCreateEvent){
+        String intentStatus = intentCreateEvent.getIntentStatus();//create status
+        IntentGoalBean intentGoalBean = intentCreateEvent.getIntentGoalBean();//current operate intent
+        Intent currentIntent = intentGoalBean.getIntent();
+        List<Context> owner_info = currentIntent.getIntentContexts().stream().filter(x ->
+                StringUtils.equals(x.getContextName(), "owner info")).collect(Collectors.toList());
+        List<Context> handler_info = currentIntent.getIntentContexts().stream().filter(x ->
+                StringUtils.equals(x.getContextName(), "handler info")).collect(Collectors.toList());
+        String owner = owner_info.get(0).getContextConditions().get(0).getConditionValue();
+        String handler = handler_info.get(0).getContextConditions().get(0).getConditionValue();
+
+        IntentEventRecord intentEventRecord = new IntentEventRecord();
+        intentEventRecord.setIntentId(currentIntent.getIntentId());
+        intentEventRecord.setIntentName(currentIntent.getIntentName());
+        intentEventRecord.setIntentStatus(intentStatus);
+        intentEventRecord.setOperateType(intentGoalBean.getIntentGoalType().name());
+        intentEventRecordService.createIntentEventRecord(intentEventRecord);
+    }
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentEventRecord/IntentEventRecordService.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentEventRecord/IntentEventRecordService.java
new file mode 100644 (file)
index 0000000..454d6bd
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.intentBaseService.intentEventRecord;
+
+import org.onap.usecaseui.intentanalysis.bean.models.IntentEventRecord;
+import org.onap.usecaseui.intentanalysis.mapper.IntentEventRecordMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IntentEventRecordService {
+    @Autowired
+    IntentEventRecordMapper intentEventRecordMapper;
+
+    // insert into record table
+    public void createIntentEventRecord(IntentEventRecord intentEventRecord){
+        intentEventRecordMapper.insertIntentRecord(intentEventRecord);
+
+    }
+    // get record by intent nameid, status
+    public IntentEventRecord getIntentEventRecordByntentId(String intentId,String operateType){
+       return intentEventRecordMapper.getIntentEventRecordByntentId(intentId,operateType);
+    }
+}
+
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/mapper/IntentEventRecordMapper.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/mapper/IntentEventRecordMapper.java
new file mode 100644 (file)
index 0000000..c5415aa
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2023 CMCC, Inc. and others. All rights reserved.
+ *
+ * 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.onap.usecaseui.intentanalysis.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentEventRecord;
+
+public interface IntentEventRecordMapper {
+    int insertIntentRecord(@Param(value = "intentEventRecord") IntentEventRecord intentEventRecord);
+
+    IntentEventRecord getIntentEventRecordByntentId(@Param(value = "intentId") String intentId,
+                                                    @Param(value = "operateType") String operateType);
+}
diff --git a/intentanalysis/src/main/resources/mybatis/sql/IntentEventRecordMapper.xml b/intentanalysis/src/main/resources/mybatis/sql/IntentEventRecordMapper.xml
new file mode 100644 (file)
index 0000000..296fc43
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.onap.usecaseui.intentanalysis.mapper.IntentEventRecordMapper">
+
+    <insert id="insertIntentRecord">
+        insert into intent_Event_Record(intentId, intentName, intentStatus, operateType)
+        values(#{intentEventRecord.intentId}, #{intentEventRecord.intentName},
+               #{intentEventRecord.intentStatus},#{intentEventRecord.operateType})
+    </insert>
+
+
+    <select id="getIntentEventRecordByntentId"  resultType="org.onap.usecaseui.intentanalysis.bean.models.IntentEventRecord">
+       select * from intent_Event_Record where intentId = #{intentId};
+    </select>
+</mapper>