From 8755c589443ce1662e493c599813afc07d883d19 Mon Sep 17 00:00:00 2001 From: kaixiliu Date: Tue, 28 Mar 2023 16:40:53 +0800 Subject: update intent execute process Issue-ID: USECASEUI-785 Signed-off-by: kaixiliu Change-Id: Ib38d171e9a1c389a093bb9c46fdb9050e2b8423e --- .../intentanalysis/IntentAnalysisApplication.java | 2 + .../intentanalysis/Thread/CreateCallable.java | 5 + .../CLLBusinessIntentManagementFunction.java | 157 +++++++++++++++++++-- .../CLLBusinessActuationModule.java | 3 +- .../CLLBusinessKnowledgeModule.java | 6 +- .../CLLAssuranceIntentManagementFunction.java | 36 +++++ .../CLLAssuranceDecisionModule.java | 3 - .../CLLAssuranceKnowledgeModule.java | 6 +- .../CLLDeliveryIntentManagementFunction.java | 33 +++++ .../CLLDeliveryDecisionModule.java | 1 - .../CLLDeliveryKnowledgeModule.java | 6 +- .../FormatIntentInputManagementFunction.java | 135 +++++++++++++++++- .../FormatIntentInputDecisionModule.java | 2 +- .../IntentManagementFunction.java | 5 + .../contextService/IntentContextService.java | 6 + .../intentModule/ActuationModule.java | 6 +- .../intentModule/DecisionModule.java | 2 +- .../IntentDefinitionService.java | 2 +- .../IntentInterfaceService.java | 11 +- .../impl/IntentInterfaceServiceImpl.java | 46 ++++-- .../src/main/resources/intent-analysis-init.sql | 8 ++ .../src/test/resources/intentdb-test-init.sql | 8 ++ 22 files changed, 443 insertions(+), 46 deletions(-) diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/IntentAnalysisApplication.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/IntentAnalysisApplication.java index 573749d..5403490 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/IntentAnalysisApplication.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/IntentAnalysisApplication.java @@ -19,11 +19,13 @@ package org.onap.usecaseui.intentanalysis; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.transaction.annotation.EnableTransactionManagement; @MapperScan("org.onap.usecaseui.intentanalysis.mapper") @SpringBootApplication @EnableTransactionManagement +@EnableAsync public class IntentAnalysisApplication { public static void main(String[] args) { 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 index b91eb63..2d548f2 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/Thread/CreateCallable.java @@ -18,6 +18,7 @@ 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.eventAndPublish.event.IntentCreateEvent; import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule; import org.springframework.context.ApplicationContext; @@ -53,6 +54,10 @@ public class CreateCallable implements Callable { actuationModule.fulfillIntent(intentGoalBean, handler); //update origin intent if need actuationModule.updateIntentOperationInfo(originalIntent, intentGoalBean); + + String intentStatus = "success"; + IntentCreateEvent intentCreateEvent = new IntentCreateEvent(this, originalIntent, intentGoalBean, handler, intentStatus); + applicationContext.publishEvent(intentCreateEvent); return intentGoalBean.getIntent().getIntentName() +" Intent operate finished"; } } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/CLLBusinessIntentManagementFunction.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/CLLBusinessIntentManagementFunction.java index 80ff29e..1203508 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/CLLBusinessIntentManagementFunction.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/CLLBusinessIntentManagementFunction.java @@ -17,32 +17,171 @@ package org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt; import lombok.Data; -import org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt.cllBusinessModule.CLLBusinessActuationModule; -import org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt.cllBusinessModule.CLLBusinessDecisionModule; -import org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt.cllBusinessModule.CLLBusinessKnowledgeModule; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.onap.usecaseui.intentanalysis.bean.enums.IntentGoalType; +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.intentBaseService.IntentManagementFunction; +import org.onap.usecaseui.intentanalysis.intentBaseService.contextService.IntentContextService; +import org.onap.usecaseui.intentanalysis.intentBaseService.intentEventRecord.IntentEventRecordService; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule; +import org.onap.usecaseui.intentanalysis.intentBaseService.intentinterfaceservice.IntentInterfaceService; +import org.onap.usecaseui.intentanalysis.service.ContextService; +import org.onap.usecaseui.intentanalysis.service.IntentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +@Slf4j @Data @Component("CLLBusinessIntentManagementFunction") public class CLLBusinessIntentManagementFunction extends IntentManagementFunction { - @Resource(name= "CLLBusinessActuationModule") + @Resource(name = "CLLBusinessActuationModule") public void setActuationModule(ActuationModule actuationModule) { - this.actuationModule=actuationModule; + this.actuationModule = actuationModule; } - @Resource(name= "CLLBusinessKnowledgeModule") + + @Resource(name = "CLLBusinessKnowledgeModule") public void setKnowledgeModule(KnowledgeModule knowledgeModule) { - this.knowledgeModule=knowledgeModule; + this.knowledgeModule = knowledgeModule; } - @Resource(name= "CLLBusinessDecisionModule") + + @Resource(name = "CLLBusinessDecisionModule") public void setDecisionModule(DecisionModule decisionModule) { - this.decisionModule=decisionModule; + this.decisionModule = decisionModule; + } + + @Autowired + public IntentContextService intentContextService; + @Autowired + IntentInterfaceService intentInterfaceService; + @Autowired + ApplicationContext applicationContext; + @Autowired + ContextService contextService; + @Autowired + IntentService intentService; + @Autowired + IntentEventRecordService intentEventRecordService; + + @Resource(name = "intentTaskExecutor") + ThreadPoolTaskExecutor executor; + + @Override + public void receiveIntentAsOwner(IntentGoalBean intentGoalBean) { + IntentGoalBean originIntentGoalBean = detection(intentGoalBean); + LinkedHashMap linkedMap = investigation(originIntentGoalBean); + implementIntent(intentGoalBean.getIntent(), linkedMap); + if (intentGoalBean.getIntentGoalType() == IntentGoalType.DELETE) { + List parentInfo = intentGoalBean.getIntent().getIntentContexts().stream().filter(a -> + StringUtils.equalsIgnoreCase(a.getContextName(), "parentIntent info")).collect(Collectors.toList()); + + String userInputId = parentInfo.get(0).getContextConditions().get(0).getConditionValue(); + intentService.deleteIntent(intentGoalBean.getIntent().getIntentId()); + intentService.deleteIntent(userInputId); + } + } + + @Override + public void receiveIntentAsHandler(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + 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()); + } + //update origin intent if need + actuationModule.updateIntentOperationInfo(originalIntent, intentGoalBean); + handler.receiveIntentAsOwner(intentGoalBean); + + } + + public IntentGoalBean detection(IntentGoalBean intentGoalBean) { + Intent originIntent = intentGoalBean.getIntent(); + IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType(); + if (intentGoalType == IntentGoalType.CREATE) { + //return knowledgeModule.intentCognition(originIntent); + return intentGoalBean; + } else if (intentGoalType == IntentGoalType.UPDATE) { + return new IntentGoalBean(intentGoalBean.getIntent(), IntentGoalType.UPDATE); + } else { + return new IntentGoalBean(intentGoalBean.getIntent(), IntentGoalType.DELETE); + } + } + + public LinkedHashMap investigation(IntentGoalBean intentGoalBean) { + IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType(); + if (intentGoalType == IntentGoalType.CREATE) { + return decisionModule.investigationCreateProcess(intentGoalBean); + } else if (intentGoalType == IntentGoalType.UPDATE) { + return decisionModule.investigationUpdateProcess(intentGoalBean); + } else { + return decisionModule.investigationDeleteProcess(intentGoalBean); + } + } + + @SneakyThrows + public boolean implementIntent(Intent originIntent, LinkedHashMap linkedIntentMap) { + Iterator> iterator = linkedIntentMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + IntentGoalBean newIntentGoalBean = next.getKey(); + IntentGoalType intentGoalType = newIntentGoalBean.getIntentGoalType(); + IntentManagementFunction handler = next.getValue(); + if (intentGoalType == IntentGoalType.CREATE) { + Intent newIdIntent = decisionModule.intentObjectDefine(originIntent, next.getKey().getIntent()); + intentContextService.updateIntentOwnerHandlerContext(newIdIntent, this, next.getValue()); + intentContextService.updateParentIntentContext(originIntent, newIdIntent); + intentContextService.updateChindIntentContext(originIntent, newIdIntent); + contextService.updateContextList(originIntent.getIntentContexts(), originIntent.getIntentId()); + //intent-Distribution-create + boolean isAcceptCreate = intentInterfaceService.createInterface(originIntent, + new IntentGoalBean(newIdIntent, IntentGoalType.CREATE), next.getValue()); + // TODO: 2023/3/27 isParallel status need deal before distribution + boolean isParallel = false; + if (!isParallel) { + //Block and regularly query whether the event is published + boolean isPublish = false; + while (isPublish) { + Thread.sleep(1000); + IntentEventRecord record = intentEventRecordService.getIntentEventRecordByntentId(newIdIntent.getIntentId(), "create"); + if (null != record) { + isPublish = true; + } + } + } + // return isAcceptCreate; + } else if (intentGoalType == IntentGoalType.UPDATE) { + //define process just send probe interface + // intent-Distribution-update + boolean isAcceptupdate = intentInterfaceService.updateInterface(originIntent, + next.getKey(), next.getValue()); + } else { + // actuationModule.deleteIntentToDb(next.getKey().getIntent()); + // intent-Distribution-delete + boolean isAcceptDelete = intentInterfaceService.deleteInterface(originIntent, + next.getKey(), next.getValue()); + } + } + return false; } } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessActuationModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessActuationModule.java index 62626bc..aa82ee9 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessActuationModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessActuationModule.java @@ -64,7 +64,8 @@ public class CLLBusinessActuationModule extends ActuationModule { @Override public void fulfillIntent(IntentGoalBean intentGoalBean, IntentManagementFunction intentHandler) { - toNextIntentHandler(intentGoalBean, intentHandler); + //toNextIntentHandler(intentGoalBean, intentHandler); + intentHandler.receiveIntentAsOwner(intentGoalBean); } @Override diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessKnowledgeModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessKnowledgeModule.java index d2c984d..c57c707 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessKnowledgeModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessKnowledgeModule.java @@ -46,17 +46,17 @@ public class CLLBusinessKnowledgeModule extends KnowledgeModule { @Override public boolean recieveCreateIntent() { - return false; + return true; } @Override public boolean recieveUpdateIntent() { - return false; + return true; } @Override public boolean recieveDeleteIntent() { - return false; + return true; } void intentReportResolution() { diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/CLLAssuranceIntentManagementFunction.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/CLLAssuranceIntentManagementFunction.java index 7947edb..88c1264 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/CLLAssuranceIntentManagementFunction.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/CLLAssuranceIntentManagementFunction.java @@ -16,13 +16,24 @@ package org.onap.usecaseui.intentanalysis.cllassuranceIntentmgt; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.onap.usecaseui.intentanalysis.Thread.CreateCallable; +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.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.concurrent.FutureTask; + +@Slf4j @Data @Component("CLLAssuranceIntentManagementFunction") public class CLLAssuranceIntentManagementFunction extends IntentManagementFunction { @@ -40,4 +51,29 @@ public class CLLAssuranceIntentManagementFunction extends IntentManagementFuncti public void setDecisionModule(DecisionModule decisionModule) { this.decisionModule = decisionModule; } + + @Autowired + ApplicationContext applicationContext; + @Resource(name = "intentTaskExecutor") + ThreadPoolTaskExecutor executor; + + @Override + public void receiveIntentAsOwner(IntentGoalBean intentGoalBean) { + } + + @Override + public void receiveIntentAsHandler(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + //ask knowledgeModole of handler imf for permision and operate + try { + log.debug("cllAssurance Intent {} begin time:{}", intentGoalBean.getIntentGoalType(), LocalDateTime.now()); + log.debug(Thread.currentThread().getName()); + CreateCallable createCallable = new CreateCallable(originalIntent, intentGoalBean, handler, applicationContext); + FutureTask futureTask = new FutureTask<>(createCallable); + executor.submit(futureTask); + } catch (Exception ex) { + ex.printStackTrace(); + } + + } + } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceDecisionModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceDecisionModule.java index abd10fd..3ea832d 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceDecisionModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceDecisionModule.java @@ -15,9 +15,6 @@ */ package org.onap.usecaseui.intentanalysis.cllassuranceIntentmgt.cllassurancemodule; -import java.util.List; -import org.onap.usecaseui.intentanalysis.bean.models.Expectation; -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.DecisionModule; diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceKnowledgeModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceKnowledgeModule.java index dd560ff..44fb9f8 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceKnowledgeModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllassuranceIntentmgt/cllassurancemodule/CLLAssuranceKnowledgeModule.java @@ -57,17 +57,17 @@ public class CLLAssuranceKnowledgeModule extends KnowledgeModule { @Override public boolean recieveCreateIntent() { - return false; + return true; } @Override public boolean recieveUpdateIntent() { - return false; + return true; } @Override public boolean recieveDeleteIntent() { - return false; + return true; } /** diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/CLLDeliveryIntentManagementFunction.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/CLLDeliveryIntentManagementFunction.java index fe37f95..4e358cb 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/CLLDeliveryIntentManagementFunction.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/CLLDeliveryIntentManagementFunction.java @@ -16,13 +16,24 @@ package org.onap.usecaseui.intentanalysis.clldeliveryIntentmgt; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.onap.usecaseui.intentanalysis.Thread.CreateCallable; +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.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.concurrent.FutureTask; + +@Slf4j @Data @Component("CLLDeliveryIntentManagementFunction") public class CLLDeliveryIntentManagementFunction extends IntentManagementFunction { @@ -40,4 +51,26 @@ public class CLLDeliveryIntentManagementFunction extends IntentManagementFunctio public void setDecisionModule(DecisionModule decisionModule) { this.decisionModule = decisionModule; } + + @Autowired + ApplicationContext applicationContext; + @Resource(name = "intentTaskExecutor") + ThreadPoolTaskExecutor executor; + + @Override + public void receiveIntentAsOwner(IntentGoalBean intentGoalBean) { + } + + @Override + public void receiveIntentAsHandler(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + //ask knowledgeModole of handler imf for permision and operate + try { + log.debug("cllDelivery Intent create begin time:" + LocalDateTime.now()); + CreateCallable createCallable = new CreateCallable(originalIntent, intentGoalBean, handler, applicationContext); + FutureTask futureTask = new FutureTask<>(createCallable); + executor.submit(futureTask); + } catch (Exception ex) { + ex.printStackTrace(); + } + } } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryDecisionModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryDecisionModule.java index c18cb16..9e344e8 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryDecisionModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryDecisionModule.java @@ -15,7 +15,6 @@ */ package org.onap.usecaseui.intentanalysis.clldeliveryIntentmgt.clldeliverymodule; -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.DecisionModule; diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryKnowledgeModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryKnowledgeModule.java index 1222d4d..051c01c 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryKnowledgeModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/clldeliveryIntentmgt/clldeliverymodule/CLLDeliveryKnowledgeModule.java @@ -29,16 +29,16 @@ public class CLLDeliveryKnowledgeModule extends KnowledgeModule { @Override public boolean recieveCreateIntent() { - return false; + return true; } @Override public boolean recieveUpdateIntent() { - return false; + return true; } @Override public boolean recieveDeleteIntent() { - return false; + return true; } } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/FormatIntentInputManagementFunction.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/FormatIntentInputManagementFunction.java index 2e80c88..4d16d92 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/FormatIntentInputManagementFunction.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/FormatIntentInputManagementFunction.java @@ -16,30 +16,153 @@ package org.onap.usecaseui.intentanalysis.formatintentinputMgt; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.onap.usecaseui.intentanalysis.bean.enums.IntentGenerateType; +import org.onap.usecaseui.intentanalysis.bean.enums.IntentGoalType; +import org.onap.usecaseui.intentanalysis.bean.models.Expectation; +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.contextService.IntentContextService; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule; +import org.onap.usecaseui.intentanalysis.intentBaseService.intentinterfaceservice.IntentInterfaceService; +import org.onap.usecaseui.intentanalysis.service.IntentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.*; +@Slf4j @Data @Component("formatIntentInputManagementFunction") public class FormatIntentInputManagementFunction extends IntentManagementFunction { + @Autowired + public IntentContextService intentContextService; - @Resource(name= "formatIntentInputKnowledgeModule") + @Resource(name = "formatIntentInputKnowledgeModule") public void setKnowledgeModule(KnowledgeModule knowledgeModule) { - this.knowledgeModule=knowledgeModule; + this.knowledgeModule = knowledgeModule; } - @Resource(name= "formatIntentInputActuationModule") + + @Resource(name = "formatIntentInputActuationModule") public void setActuationModule(ActuationModule actuationModule) { - this.actuationModule=actuationModule; + this.actuationModule = actuationModule; } - @Resource(name= "formatIntentInputDecisionModule") + + @Resource(name = "formatIntentInputDecisionModule") public void setDecisionModule(DecisionModule decisionModule) { - this.decisionModule=decisionModule; + this.decisionModule = decisionModule; + } + + @Autowired + IntentInterfaceService intentInterfaceService; + @Autowired + ApplicationContext applicationContext; + @Autowired + IntentService intentService; + + @Override + public void receiveIntentAsOwner(IntentGoalBean intentGoalBean) { + + IntentGoalBean originIntentGoalBean = detection(intentGoalBean); + LinkedHashMap linkedMap = investigation(originIntentGoalBean); + implementIntent(intentGoalBean.getIntent(), linkedMap); + } + + @Override + public void receiveIntentAsHandler(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + } + + public IntentGoalBean detection(IntentGoalBean intentGoalBean) { + Intent originIntent = intentGoalBean.getIntent(); + IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType(); + if (intentGoalType == IntentGoalType.CREATE) { + return knowledgeModule.intentCognition(originIntent); + } else if (intentGoalType == IntentGoalType.UPDATE) { + return new IntentGoalBean(intentGoalBean.getIntent(), IntentGoalType.UPDATE); + } else { + return new IntentGoalBean(intentGoalBean.getIntent(), IntentGoalType.DELETE); + } + } + + public LinkedHashMap investigation(IntentGoalBean intentGoalBean) { + IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType(); + if (intentGoalType == IntentGoalType.CREATE) { + return decisionModule.investigationCreateProcess(intentGoalBean); + } else if (intentGoalType == IntentGoalType.UPDATE) { + return decisionModule.investigationUpdateProcess(intentGoalBean); + } else { + return decisionModule.investigationDeleteProcess(intentGoalBean); + } + } + + public boolean implementIntent(Intent originIntent, LinkedHashMap linkedIntentMap) { + Iterator> iterator = linkedIntentMap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + IntentGoalBean newIntentGoalBean = next.getKey(); + IntentGoalType intentGoalType = newIntentGoalBean.getIntentGoalType(); + if (intentGoalType == IntentGoalType.CREATE) { + Intent newIdIntent = decisionModule.intentObjectDefine(originIntent, next.getKey().getIntent()); + intentContextService.updateIntentOwnerHandlerContext(newIdIntent, this, next.getValue()); + intentContextService.updateParentIntentContext(originIntent, newIdIntent); + intentContextService.updateChindIntentContext(originIntent, newIdIntent); + //intent-Distribution-create + boolean isAcceptCreate = intentInterfaceService.createInterface(originIntent, + new IntentGoalBean(newIdIntent, IntentGoalType.CREATE), next.getValue()); + originIntent.setIntentGenerateType(IntentGenerateType.USERINPUT); + //save user input intent + intentService.createIntent(originIntent); + return isAcceptCreate; + } else if (intentGoalType == IntentGoalType.UPDATE) { + log.info("formatIntentInputIMF UPDATE"); + //update cllBusinessIntent's expectation + Intent subIntent = newIntentGoalBean.getIntent(); + updateIntentInfo(originIntent, subIntent); + // intent-Distribution and operate |update cllBusiness intent + boolean isAcceptUpdate = intentInterfaceService.updateInterface(originIntent, + new IntentGoalBean(subIntent, IntentGoalType.UPDATE), next.getValue()); + //update userInput intent + intentService.updateIntent(originIntent); + } else { + // intent-Distribution-delete + boolean isAcceptDelete = intentInterfaceService.deleteInterface(originIntent, next.getKey(), next.getValue()); + } + } + return true; + } + + public void updateIntentInfo(Intent originIntent, Intent intent) { + + List originIntentExpectationList = originIntent.getIntentExpectations(); + List intentExpectationList = intent.getIntentExpectations(); + int newIntentExpectationNum = originIntentExpectationList.size(); + int oldIntentExpectationNum = intentExpectationList.size(); + + List changeList = new ArrayList<>(); + if (newIntentExpectationNum != oldIntentExpectationNum) { + if (newIntentExpectationNum < oldIntentExpectationNum) { + + for (Expectation oldExpectation : intentExpectationList) {//search + boolean bFindExpectation = false; + for (Expectation newExpectation : originIntentExpectationList) {//param + if (oldExpectation.getExpectationName().equals(newExpectation.getExpectationName())) { + bFindExpectation = true; + break; + } + } + if (bFindExpectation) { + changeList.add(oldExpectation); + } + } + } + } + intent.setIntentExpectations(changeList); } } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputDecisionModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputDecisionModule.java index be6d9ef..efd09a2 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputDecisionModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputDecisionModule.java @@ -121,7 +121,7 @@ public class FormatIntentInputDecisionModule extends DecisionModule { List subIntentList = intentContextService.getSubIntentInfoFromContext(intentGoalBean.getIntent()); for (Intent intent : subIntentList) { IntentManagementFunction intentHandlerInfo = intentContextService.getHandlerInfo(intent); - UpdateIntentInfo(intentGoalBean.getIntent(), intent); + // UpdateIntentInfo(intentGoalBean.getIntent(), intent);//new process move to defineProcess IntentGoalBean subIntentGoalBean = new IntentGoalBean(intent, IntentGoalType.UPDATE); intentMap.put(subIntentGoalBean, intentHandlerInfo); } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/IntentManagementFunction.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/IntentManagementFunction.java index 387d728..453a1cd 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/IntentManagementFunction.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/IntentManagementFunction.java @@ -17,6 +17,8 @@ package org.onap.usecaseui.intentanalysis.intentBaseService; import lombok.Data; +import org.onap.usecaseui.intentanalysis.bean.models.Intent; +import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule; import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule; @@ -30,4 +32,7 @@ public class IntentManagementFunction { protected ActuationModule actuationModule; protected DecisionModule decisionModule; protected KnowledgeModule knowledgeModule; + + public void receiveIntentAsOwner(IntentGoalBean intentGoalBean){}; + public void receiveIntentAsHandler(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler){}; } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/contextService/IntentContextService.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/contextService/IntentContextService.java index 76ff2d2..4d2ee3e 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/contextService/IntentContextService.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/contextService/IntentContextService.java @@ -41,6 +41,12 @@ public class IntentContextService { @Autowired ApplicationContext applicationContext; + public void updateIntentContext(Intent newIdIntent,Intent originIntent,IntentManagementFunction intentOwner, IntentManagementFunction intentHandler){ + updateIntentOwnerHandlerContext(newIdIntent, intentOwner, intentHandler); + updateParentIntentContext(originIntent, newIdIntent); + updateChindIntentContext(originIntent, newIdIntent); + } + public void updateChindIntentContext(Intent originIntent, Intent intent){ List contextList = intent.getIntentContexts(); if (CollectionUtils.isEmpty(contextList)) { diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/ActuationModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/ActuationModule.java index 9b4c248..f41c5ee 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/ActuationModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/ActuationModule.java @@ -65,11 +65,11 @@ public abstract class ActuationModule { public boolean distrubuteIntentToHandler(Map.Entry entry) { IntentGoalType intentGoalType = entry.getKey().getIntentGoalType(); if (StringUtils.equalsIgnoreCase("create", intentGoalType.name())) { - return intentInterfaceService.createInterface(entry.getKey().getIntent(), entry.getValue()); + return intentInterfaceService.createInterface(entry.getKey(), entry.getValue()); } else if (StringUtils.equalsIgnoreCase("update", intentGoalType.name())) { - return intentInterfaceService.updateInterface(entry.getKey().getIntent(), entry.getValue()); + return intentInterfaceService.updateInterface(entry.getKey(), entry.getValue()); } else if (StringUtils.equalsIgnoreCase("delete", intentGoalType.name())) { - return intentInterfaceService.deleteInterface(entry.getKey().getIntent(), entry.getValue()); + return intentInterfaceService.deleteInterface(entry.getKey(), entry.getValue()); } return false; } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/DecisionModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/DecisionModule.java index 51d50d4..549672c 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/DecisionModule.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/DecisionModule.java @@ -35,7 +35,7 @@ public abstract class DecisionModule { // find intentManageFunction public abstract IntentManagementFunction exploreIntentHandlers(IntentGoalBean intentGoalBean); - public Intent intentDefinition(Intent originIntent, Intent intent) { + public Intent intentObjectDefine(Intent originIntent, Intent intent) { log.debug("definition create process start to define intent:" + intent.getIntentName()); Intent newIntent = new Intent(); newIntent.setIntentId(CommonUtil.getUUid()); diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDefinitionService.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDefinitionService.java index c2a48ff..64ab8c4 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDefinitionService.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDefinitionService.java @@ -56,7 +56,7 @@ public class IntentDefinitionService { IntentGoalBean newIntentGoalBean = entry.getKey(); if (newIntentGoalBean.getIntentGoalType() == IntentGoalType.CREATE){ - Intent newIdIntent = intentDecisionModule.intentDefinition(originIntent, entry.getKey().getIntent()); + Intent newIdIntent = intentDecisionModule.intentObjectDefine(originIntent, entry.getKey().getIntent()); intentContextService.updateIntentOwnerHandlerContext(newIdIntent, intentOwner, intentHandler); intentContextService.updateParentIntentContext(originIntent, newIdIntent); intentContextService.updateChindIntentContext(originIntent, newIdIntent); diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/IntentInterfaceService.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/IntentInterfaceService.java index 4470d05..bbb09f4 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/IntentInterfaceService.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/IntentInterfaceService.java @@ -16,12 +16,17 @@ package org.onap.usecaseui.intentanalysis.intentBaseService.intentinterfaceservice; import org.onap.usecaseui.intentanalysis.bean.models.Intent; +import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean; import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction; public interface IntentInterfaceService { - public boolean createInterface(Intent intent, IntentManagementFunction imf); + public boolean createInterface(IntentGoalBean intentGoalBean, IntentManagementFunction imf); + public boolean createInterface(Intent originalIntent,IntentGoalBean intentGoalBean, IntentManagementFunction imf); - public boolean updateInterface(Intent intent, IntentManagementFunction imf); + public boolean updateInterface(IntentGoalBean intentGoalBean, IntentManagementFunction imf); + public boolean updateInterface(Intent originalIntent,IntentGoalBean intentGoalBean, IntentManagementFunction imf); + + public boolean deleteInterface(IntentGoalBean intentGoalBean, IntentManagementFunction imf); + public boolean deleteInterface(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction imf); - public boolean deleteInterface(Intent intent, IntentManagementFunction imf); } diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/impl/IntentInterfaceServiceImpl.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/impl/IntentInterfaceServiceImpl.java index 1c6d853..a9410c6 100644 --- a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/impl/IntentInterfaceServiceImpl.java +++ b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/impl/IntentInterfaceServiceImpl.java @@ -16,28 +16,58 @@ package org.onap.usecaseui.intentanalysis.intentBaseService.intentinterfaceservice.impl; 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.intentinterfaceservice.IntentInterfaceService; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; + @Service public class IntentInterfaceServiceImpl implements IntentInterfaceService { @Override - public boolean createInterface(Intent intent, IntentManagementFunction imf) { - //ask knowledgeModole of handler imf for permision - imf.getKnowledgeModule().recieveCreateIntent(); + public boolean createInterface(IntentGoalBean intentGoalBean, IntentManagementFunction imf) { return false; } @Override - public boolean updateInterface(Intent intent, IntentManagementFunction imf) { - imf.getKnowledgeModule().recieveUpdateIntent(); - return false; + public boolean createInterface(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + //ask knowledgeModole of handler imf for permision + boolean receive = handler.getKnowledgeModule().recieveCreateIntent(); + LocalDateTime now = LocalDateTime.now(); + if (receive) { + handler.receiveIntentAsHandler(originalIntent, intentGoalBean, handler); + } + return receive; + } @Override - public boolean deleteInterface(Intent intent, IntentManagementFunction imf) { - imf.getKnowledgeModule().recieveDeleteIntent(); + public boolean updateInterface(IntentGoalBean intentGoalBean, IntentManagementFunction imf) { return false; } + + @Override + public boolean updateInterface(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + boolean receive = handler.getKnowledgeModule().recieveUpdateIntent(); + if (receive) { + handler.receiveIntentAsHandler(originalIntent, intentGoalBean, handler); + } + return true; + } + + @Override + public boolean deleteInterface(IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + handler.getKnowledgeModule().recieveDeleteIntent(); + return true; + } + + @Override + public boolean deleteInterface(Intent originalIntent, IntentGoalBean intentGoalBean, IntentManagementFunction handler) { + boolean receive = handler.getKnowledgeModule().recieveDeleteIntent(); + if (receive) { + handler.receiveIntentAsHandler(originalIntent, intentGoalBean, handler); + } + return true; + } } diff --git a/intentanalysis/src/main/resources/intent-analysis-init.sql b/intentanalysis/src/main/resources/intent-analysis-init.sql index 682c976..a3834f9 100644 --- a/intentanalysis/src/main/resources/intent-analysis-init.sql +++ b/intentanalysis/src/main/resources/intent-analysis-init.sql @@ -70,4 +70,12 @@ create table if not exists intent_management_function_reg_info( support_interfaces varchar(255), handle_name varchar(255), intent_function_type varchar(255) + ); + +create table if not exists intent_Event_Record( + id varchar(255) DEFAULT uuid_generate_v4 (), + intentId varchar(255), + intentName varchar(255), + intentStatus varchar (225), + operateType varchar (225) ); \ No newline at end of file diff --git a/intentanalysis/src/test/resources/intentdb-test-init.sql b/intentanalysis/src/test/resources/intentdb-test-init.sql index 855d5dd..b3b9e71 100644 --- a/intentanalysis/src/test/resources/intentdb-test-init.sql +++ b/intentanalysis/src/test/resources/intentdb-test-init.sql @@ -88,3 +88,11 @@ create table if not exists intent_management_function_reg_info( handle_name varchar(255), intent_function_type varchar(255) ); + +create table if not exists intent_Event_Record( + id varchar(255) DEFAULT random_uuid(), + intentId varchar(255), + intentName varchar(255), + intentStatus varchar (225), + operateType varchar (225) + ); -- cgit 1.2.3-korg