diff options
author | hekeguang <hekeguang@chinamobile.com> | 2023-03-22 15:59:14 +0800 |
---|---|---|
committer | zhen zhang <781953240@qq.com> | 2023-03-22 09:28:53 +0000 |
commit | 4a90df529431588f3228c236aa17d2c11116328f (patch) | |
tree | 01670374593745f7a18bb430c0a2d07245946779 | |
parent | 765575b67283f0d71327bcd27d8fa4e921061a56 (diff) |
Merge Event and Thread code.
Issue-ID: USECASEUI-784
Change-Id: I0cdef6c490f96c45e77013b0da5c372decdef6a1
Signed-off-by: hekeguang <hekeguang@chinamobile.com>
9 files changed, 358 insertions, 0 deletions
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 index 0000000..b91eb63 --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java @@ -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 index 0000000..e1f0af7 --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/ThreadPoolConfig.java @@ -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 index 0000000..6f75863 --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/bean/models/IntentEventRecord.java @@ -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 index 0000000..ec9b4c7 --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentCreateEvent.java @@ -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 index 0000000..3708f87 --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/event/IntentDeleteEvent.java @@ -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 index 0000000..045a75b --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/eventAndPublish/listener/IntentEventListener.java @@ -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 index 0000000..454d6bd --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentEventRecord/IntentEventRecordService.java @@ -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 index 0000000..c5415aa --- /dev/null +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/mapper/IntentEventRecordMapper.java @@ -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 index 0000000..296fc43 --- /dev/null +++ b/intentanalysis/src/main/resources/mybatis/sql/IntentEventRecordMapper.xml @@ -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> |