Add intent distribution process code . 32/130532/1
authorhekeguang <hekeguang@chinamobile.com>
Wed, 31 Aug 2022 08:38:15 +0000 (16:38 +0800)
committerhekeguang <hekeguang@chinamobile.com>
Wed, 31 Aug 2022 08:38:28 +0000 (16:38 +0800)
Issue-ID: USECASEUI-696
Change-Id: I82e2e1c6a15a153fe9117ad219f18b678ab14756
Signed-off-by: hekeguang <hekeguang@chinamobile.com>
18 files changed:
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessActuationModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessDecisionModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/cllBusinessIntentMgt/cllBusinessModule/CLLBusinessKnowledgeModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/FormatIntentInputManagementFunction.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputActuationModule.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputDecisionModule.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputKnowledgeModule.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/IntentHandleService.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/ActuationModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/DecisionModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentModule/KnowledgeModule.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDetectionService.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentDistributionService.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentProcessService/IntentProcessService.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/IntentInterfaceService.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/intentBaseService/intentinterfaceservice/impl/IntentInterfaceServiceImpl.java [new file with mode: 0644]
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/service/ImfRegInfoService.java
intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/service/impl/ImfRegInfoServiceImpl.java

index 4209c1b..acd580f 100644 (file)
 package org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt.cllBusinessModule;
 
 
+import org.apache.commons.lang.StringUtils;
+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.IntentHandleService;
-import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule;
 import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule;
 import org.onap.usecaseui.intentanalysis.intentBaseService.intentProcessService.IntentProcessService;
+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.stereotype.Service;
@@ -29,7 +32,6 @@ import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
@@ -40,6 +42,8 @@ public class CLLBusinessActuationModule implements ActuationModule {
     IntentHandleService intentHandleService;
     @Autowired
     IntentService intentService;
+    @Autowired
+    IntentInterfaceService intentInterfaceService;
 
 
     @Override
@@ -57,16 +61,31 @@ public class CLLBusinessActuationModule implements ActuationModule {
     }
 
     @Override
-    public void saveIntentToDb(List<Map<IntentGoalBean,IntentManagementFunction>> intentMapList) {
+    public void saveIntentToDb(List<Map<IntentGoalBean, IntentManagementFunction>> intentMapList) {
         List<IntentGoalBean> subIntentGoalLit = new ArrayList<>();
-        for (Map<IntentGoalBean,IntentManagementFunction> map:intentMapList) {
+        for (Map<IntentGoalBean, IntentManagementFunction> map : intentMapList) {
             subIntentGoalLit.addAll(map.keySet());
         }
         List<Intent> subIntentList = subIntentGoalLit.stream().map(IntentGoalBean::getIntent)
                 .collect(Collectors.toList());
-        for (Intent subIntent:subIntentList) {
+        for (Intent subIntent : subIntentList) {
             intentService.createIntent(subIntent);
         }
 
     }
+
+    @Override
+    public boolean distrubuteIntentToHandler(Map<IntentGoalBean, IntentManagementFunction> intentMap) {
+        for (Map.Entry<IntentGoalBean, IntentManagementFunction> entry : intentMap.entrySet()) {
+            IntentGoalType intentGoalType = entry.getKey().getIntentGoalType();
+            if (StringUtils.equalsIgnoreCase("create", intentGoalType.name())) {
+                return intentInterfaceService.createInterface(entry.getKey().getIntent(), entry.getValue());
+            } else if (StringUtils.equalsIgnoreCase("update", intentGoalType.name())) {
+                return intentInterfaceService.updateInterface(entry.getKey().getIntent(), entry.getValue());
+            } else if (StringUtils.equalsIgnoreCase("delete", intentGoalType.name())) {
+                return intentInterfaceService.deleteInterface(entry.getKey().getIntent(), entry.getValue());
+            }
+        }
+        return false;
+    }
 }
index bcda367..3313af5 100644 (file)
@@ -51,17 +51,8 @@ public class CLLBusinessDecisionModule implements DecisionModule {
     public IntentManagementFunction exploreIntentHandlers(IntentGoalBean intentGoalBean) {
         //  db  filter imf  supportArea;
         //SupportInterface> supportInterfaces;
-        IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType();
-        String intentName = intentGoalBean.getIntent().getIntentName();
-        List<IntentManagementFunctionRegInfo> imfRegInfoList = imfRegInfoService.getImfRegInfoList();
-        //todo
-        List<IntentManagementFunctionRegInfo> imfList = imfRegInfoList.stream().
-                filter(x -> x.getSupportArea().contains(intentName)
-                        && x.getSupportInterfaces().contains(intentGoalType)).collect(Collectors.toList());
-        if (!Optional.ofNullable(imfList).isPresent()) {
-            log.info("The intent name is %s not find the corresponding IntentManagementFunction", intentName);
-        }
-        return (IntentManagementFunction) applicationContext.getBean(imfList.get(0).getHandleName());
+        IntentManagementFunctionRegInfo imfRegInfo = imfRegInfoService.getImfRegInfoList(intentGoalBean);
+        return (IntentManagementFunction) applicationContext.getBean(imfRegInfo.getHandleName());
     }
 
     @Override
@@ -146,7 +137,6 @@ public class CLLBusinessDecisionModule implements DecisionModule {
             for (IntentGoalBean subIntentGoal : sortList) {
                 Map<IntentGoalBean, IntentManagementFunction> map = new HashMap<>();
                 IntentManagementFunction imf = exploreIntentHandlers(subIntentGoal);
-                //TODO call probe  interface  if fail  intentFulfilmentInfo throw exception
                 map.put(subIntentGoal, imf);
                 intentMapList.add(map);
             }
@@ -157,4 +147,5 @@ public class CLLBusinessDecisionModule implements DecisionModule {
         }
         return intentMapList;
     }
+
 }
index 372b0d5..c7d0872 100644 (file)
@@ -22,6 +22,7 @@ import org.onap.usecaseui.intentanalysis.bean.models.Expectation;
 import org.onap.usecaseui.intentanalysis.bean.models.ExpectationTarget;
 import org.onap.usecaseui.intentanalysis.bean.models.Intent;
 import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentProcessService.IntentDetectionService;
 import org.onap.usecaseui.intentanalysis.service.IntentService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,56 +39,29 @@ public class CLLBusinessKnowledgeModule implements KnowledgeModule {
 
     @Autowired
     IntentService intentService;
+    @Autowired
+    IntentDetectionService intentDetectionService;
 
     @Override
     public IntentGoalBean intentCognition(Intent intent) {
-        List<String> intendIdList = intentResolution(intent);
+        List<String> intendIdList = intentDetectionService.intentResolution(intent);
         getSystemStatus();
         return determineDetectionGoal(intent, intendIdList);
     }
 
-    /**
-     * find similar intents in DB
-     *
-     * @param intent
-     */
+    @Override
+    public boolean recieveCreateIntent() {
+        return false;
+    }
 
-    public List<String> intentResolution(Intent intent) {
-        //db contain original intent
-        List<Intent> sameNameIntentList = intentService.getIntentByName(intent.getIntentName());
-        List<String> intentIdList = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(sameNameIntentList)) {
-            List<Expectation> expectationList = intent.getIntentExpectations();
-            for (Intent dbIntent : sameNameIntentList) {
-                String intentId = dbIntent.getIntentId();
-                int count = 0;
-                for (Expectation expectation : expectationList) {//original expectations
-                    //Determine if there is the same ObjectType
-                    List<Expectation> sameObjTypeList = dbIntent.getIntentExpectations().stream()
-                            .filter(x -> x.getExpectationObject().getObjectType().equals(expectation.getExpectationObject().getObjectType()))
-                            .collect(Collectors.toList());
-                    if (CollectionUtils.isNotEmpty(sameObjTypeList)) {
-                        //Determine the targetName of the Expectation which hava same ObjectType
-                        List<String> targetNameList = expectation.getExpectationTargets()
-                                .stream().map(ExpectationTarget::getTargetName).collect(Collectors.toList());
-                        for (Expectation dbExpectation : sameObjTypeList) {
-                            List<String> dbTargetNameList = dbExpectation.getExpectationTargets()
-                                    .stream().map(ExpectationTarget::getTargetName).collect(Collectors.toList());
-                            //todo name compare need ai
-                            if (dbTargetNameList.containsAll(targetNameList)) {
-                                count++;
-                                break;
-                            }
-                        }
-                    }
-                    if (count == expectationList.size()) {
-                        intentIdList.add(intentId);
-                        break;
-                    }
-                }
-            }
-        }
-        return intentIdList;
+    @Override
+    public boolean recieveUpdateIntent() {
+        return false;
+    }
+
+    @Override
+    public boolean recieveDeleteIntent() {
+        return false;
     }
 
     void intentReportResolution() {
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
new file mode 100644 (file)
index 0000000..235d638
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 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.formatintentinputMgt;
+
+import org.onap.usecaseui.intentanalysis.formatintentinputMgt.formatintentinputModule.FormatIntentInputActuationModule;
+import org.onap.usecaseui.intentanalysis.formatintentinputMgt.formatintentinputModule.FormatIntentInputDecisionModule;
+import org.onap.usecaseui.intentanalysis.formatintentinputMgt.formatintentinputModule.FormatIntentInputKnowledgeModule;
+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;
+
+public class FormatIntentInputManagementFunction extends IntentManagementFunction {
+    private ActuationModule actuationModule  = new FormatIntentInputActuationModule();
+    private DecisionModule decisoinModule = new FormatIntentInputDecisionModule();
+    private KnowledgeModule knowledgeModule = new FormatIntentInputKnowledgeModule();
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputActuationModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputActuationModule.java
new file mode 100644 (file)
index 0000000..e556356
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2022 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.formatintentinputMgt.formatintentinputModule;
+
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.ActuationModule;
+
+import java.util.List;
+import java.util.Map;
+
+public class FormatIntentInputActuationModule implements ActuationModule {
+    @Override
+    public void sendToIntentHandler(IntentManagementFunction IntentHandler) {
+    }
+
+    @Override
+    public void sendToNonIntentHandler() {
+    }
+
+    @Override
+    public void interactWithIntentHandle() {
+    }
+
+    @Override
+    public void saveIntentToDb(List<Map<IntentGoalBean, IntentManagementFunction>> intentMapList) {
+       //
+    }
+
+    @Override
+    public boolean distrubuteIntentToHandler(Map<IntentGoalBean, IntentManagementFunction> intentMap) {
+        return false;
+    }
+}
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
new file mode 100644 (file)
index 0000000..af29747
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2022 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.formatintentinputMgt.formatintentinputModule;
+
+import org.apache.commons.lang.StringUtils;
+import org.onap.usecaseui.intentanalysis.bean.models.Expectation;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.onap.usecaseui.intentanalysis.cllBusinessIntentMgt.CLLBusinessIntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.DecisionModule;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class FormatIntentInputDecisionModule implements DecisionModule {
+    @Autowired
+    ApplicationContext applicationContext;
+
+    @Override
+    public void determineUltimateGoal() {
+    }
+
+    @Override
+    public IntentManagementFunction exploreIntentHandlers(IntentGoalBean intentGoalBean) {
+        // if intentName contain cll  return
+        if (StringUtils.equalsIgnoreCase(intentGoalBean.getIntent().getIntentName(), "cll")) {
+            return (IntentManagementFunction) applicationContext.getBean(CLLBusinessIntentManagementFunction.class.getName());
+        }
+        return null;
+    }
+
+    @Override
+    public void intentDefinition() {
+    }
+
+    @Override
+    public void decideSuitableAction() {
+    }
+
+    @Override
+    public void interactWithTemplateDb() {
+    }
+
+    @Override
+    public List<Map<IntentGoalBean, IntentManagementFunction>> findHandler(IntentGoalBean intentGoalBean) {
+        boolean needDecompostion = needDecompostion(intentGoalBean);
+        if (needDecompostion) {
+            intentDecomposition(intentGoalBean);
+        }
+        exploreIntentHandlers(intentGoalBean);
+        return null;
+    }
+
+    public boolean needDecompostion(IntentGoalBean intentGoalBean) {
+        //expectationName just contain cll and slicing need decompost
+        List<Expectation> intentExpectations = intentGoalBean.getIntent().getIntentExpectations();
+        List<String> expectationNameList = intentExpectations.stream().map(Expectation::getExpectationName)
+                .distinct().collect(Collectors.toList());
+        if (expectationNameList.size() > 1) {
+            List<String> cllList = expectationNameList.stream().filter(x -> StringUtils.equalsIgnoreCase(x, "cll")).collect(Collectors.toList());
+            List<String> slicingList = expectationNameList.stream().filter(x -> StringUtils.equalsIgnoreCase(x, "slicing")).collect(Collectors.toList());
+            if (cllList.size() > 0 && slicingList.size() > 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public List<IntentGoalBean> intentDecomposition(IntentGoalBean intentGoalBean) {
+        //todo
+        return null;
+    }
+}
diff --git a/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputKnowledgeModule.java b/intentanalysis/src/main/java/org/onap/usecaseui/intentanalysis/formatintentinputMgt/formatintentinputModule/FormatIntentInputKnowledgeModule.java
new file mode 100644 (file)
index 0000000..d6952f4
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022 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.formatintentinputMgt.formatintentinputModule;
+
+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.intentModule.KnowledgeModule;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentProcessService.IntentDetectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+public class FormatIntentInputKnowledgeModule implements KnowledgeModule {
+    @Autowired
+    IntentDetectionService intentDetectionService;
+
+    @Override
+    public IntentGoalBean intentCognition(Intent intent) {
+        List<String> intendIdList = intentDetectionService.intentResolution(intent);
+        getSystemStatus();
+        return determineDetectionGoal(intent, intendIdList);
+    }
+
+    @Override
+    public boolean recieveCreateIntent() {
+        return false;
+    }
+
+    @Override
+    public boolean recieveUpdateIntent() {
+        return false;
+    }
+
+    @Override
+    public boolean recieveDeleteIntent() {
+        return false;
+    }
+
+    public void getSystemStatus() {
+    }
+
+    public IntentGoalBean determineDetectionGoal(Intent intent, List<String> intentIdList) {
+        int size = intentIdList.size();
+        if (size == 0) {
+            return new IntentGoalBean(intent, IntentGoalType.CREATE);
+        } else {
+            return new IntentGoalBean(intent, IntentGoalType.UPDATE);
+        }
+    }
+}
index 2d420d7..1f18c52 100644 (file)
@@ -42,7 +42,7 @@ public class IntentHandleService {
     /**
      * Process the original intent and find the corresponding IntentManagementFunction
      *
-     * @param intent
+     * @param intent  todo
      */
     public void handleOriginalIntent(Intent intent) {
         IntentManagementFunction intentOwner = getOriginalIMF(intent);
index 2800c1e..8f753e4 100644 (file)
@@ -28,5 +28,6 @@ public interface ActuationModule {
     void interactWithIntentHandle();
     //Save intent information to the intent instance database
     void saveIntentToDb(List<Map<IntentGoalBean,IntentManagementFunction>> intentMapList);
+    boolean distrubuteIntentToHandler(Map<IntentGoalBean,IntentManagementFunction> intentMap);
 
 }
index 76601a8..113d50d 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Map;
 public interface DecisionModule {
     void determineUltimateGoal();
 
+    // find intentManageFunction
     IntentManagementFunction exploreIntentHandlers(IntentGoalBean intentGoalBean);
 
     void intentDefinition();
@@ -34,4 +35,5 @@ public interface DecisionModule {
     public void interactWithTemplateDb();
 
     public List<Map<IntentGoalBean, IntentManagementFunction>> findHandler(IntentGoalBean intentGoalBean);
+
 }
index d5caf1f..818b812 100644 (file)
@@ -21,4 +21,9 @@ import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
 public interface KnowledgeModule {
     //Parse, decompose, orchestrate the original intent
     IntentGoalBean intentCognition(Intent intent);
+
+    // in distribution, ask permission from imf
+    boolean recieveCreateIntent();// ·Ö¿ªÐ´
+    boolean recieveUpdateIntent();
+    boolean recieveDeleteIntent();
 }
index 699c1b1..3273925 100644 (file)
  */
 package org.onap.usecaseui.intentanalysis.intentBaseService.intentProcessService;
 
-import org.onap.usecaseui.intentanalysis.bean.models.Intent;
-import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.onap.usecaseui.intentanalysis.bean.enums.OperatorType;
+import org.onap.usecaseui.intentanalysis.bean.models.*;
 import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
 import org.onap.usecaseui.intentanalysis.intentBaseService.intentModule.KnowledgeModule;
+import org.onap.usecaseui.intentanalysis.service.IntentService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 public class IntentDetectionService {
 
     private IntentManagementFunction intentHandler;
     private IntentManagementFunction intentOwner;
+    @Autowired
+    IntentService intentService;
 
-    public void setIntentRole(IntentManagementFunction intentOwner, IntentManagementFunction intentHandler){
-        if (intentOwner!= null){
+    public void setIntentRole(IntentManagementFunction intentOwner, IntentManagementFunction intentHandler) {
+        if (intentOwner != null) {
             this.intentOwner = intentOwner;
         }
-        if (intentHandler!= null){
-            this.intentHandler= intentHandler;
+        if (intentHandler != null) {
+            this.intentHandler = intentHandler;
         }
     }
 
@@ -41,4 +51,73 @@ public class IntentDetectionService {
 
         return ownerKnowledgeModule.intentCognition(intent);
     }
+
+    public List<String> intentResolution(Intent intent) {
+        //db contain original intent
+        List<Intent> sameNameIntentList = intentService.getIntentByName(intent.getIntentName());
+        List<String> intentIdList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(sameNameIntentList)) {
+            //remove context.condition  ownerName = formatIntentInputManagementFunction
+            List<Intent> filterIntentList = filterIntent(sameNameIntentList);
+            List<Expectation> expectationList = intent.getIntentExpectations();
+            for (Intent dbIntent : filterIntentList) {
+                String intentId = dbIntent.getIntentId();
+                int count = 0;
+                for (Expectation expectation : expectationList) {//original expectations
+                    //Determine if there is the same ObjectType
+                    List<Expectation> sameObjTypeList = dbIntent.getIntentExpectations().stream()
+                            .filter(x -> x.getExpectationObject().getObjectType().equals(expectation.getExpectationObject().getObjectType()))
+                            .collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(sameObjTypeList)) {
+                        //Determine the targetName of the Expectation which hava same ObjectType
+                        List<String> targetNameList = expectation.getExpectationTargets()
+                                .stream().map(ExpectationTarget::getTargetName).collect(Collectors.toList());
+                        for (Expectation dbExpectation : sameObjTypeList) {
+                            List<String> dbTargetNameList = dbExpectation.getExpectationTargets()
+                                    .stream().map(ExpectationTarget::getTargetName).collect(Collectors.toList());
+                            //todo name compare need ai
+                            if (dbTargetNameList.containsAll(targetNameList)) {
+                                count++;
+                                break;
+                            }
+                        }
+                    }
+                    if (count == expectationList.size()) {
+                        intentIdList.add(intentId);
+                        break;
+                    }
+                }
+            }
+        }
+        return intentIdList;
+    }
+
+    public List<Intent> filterIntent(List<Intent> list) {
+        //// condition   ownerName = foramtIntentInput
+        List<Intent> fiterList = new ArrayList<>();
+        for (Intent intent : list) {
+            List<Context> ownerInfo = intent.getIntentContexts().stream().filter(x ->
+                    StringUtils.equalsIgnoreCase(x.getContextName(), "ownerInfo")).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(ownerInfo)) {
+                for (Context context : ownerInfo) {
+                    List<Condition> contextConditions = context.getContextConditions();
+                    boolean equals = false;
+                    for (Condition condition : contextConditions) {
+                        String conditionstr = "ownerName = formatIntentInputManagementFunction";
+                        String concatStr = condition.getConditionName() + condition.getOperator() + condition.getConditionValue();
+                        if (StringUtils.equalsIgnoreCase(concatStr.trim(), conditionstr.trim())) {
+                            fiterList.add(intent);
+                            equals = true;
+                            break;
+                        }
+                    }
+                    if (equals==true) {
+                        break;
+                    }
+                }
+            }
+        }
+        list.removeAll(fiterList);
+        return list;
+    }
 }
index 4622aa1..d803718 100644 (file)
 package org.onap.usecaseui.intentanalysis.intentBaseService.intentProcessService;
 
 
+import org.apache.commons.lang.StringUtils;
+import org.onap.usecaseui.intentanalysis.bean.enums.IntentGoalType;
+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.intentinterfaceservice.IntentInterfaceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class IntentDistributionService {
     private IntentManagementFunction intentHandler;
     private IntentManagementFunction intentOwner;
 
-    public void setIntentRole(IntentManagementFunction intentOwner, IntentManagementFunction intentHandler){
-        if (intentOwner!= null){
+    @Autowired
+    IntentInterfaceService intentInterfaceService;
+
+    public void setIntentRole(IntentManagementFunction intentOwner, IntentManagementFunction intentHandler) {
+        if (intentOwner != null) {
             this.intentOwner = intentOwner;
         }
-        if (intentHandler!= null){
-            this.intentHandler= intentHandler;
+        if (intentHandler != null) {
+            this.intentHandler = intentHandler;
         }
     }
 
-    public void distributionProcess() {
-        ActuationModule intentActuationModule = intentHandler.getActuationModule();
+    public boolean distributionProcess(Map<IntentGoalBean, IntentManagementFunction> intentMap) {
 
-        intentActuationModule.sendToIntentHandler(intentHandler);
+        intentOwner.getActuationModule().distrubuteIntentToHandler(intentMap);
+        return false;
     }
 
+    public boolean distrubuteIntentToHandler(Map<IntentGoalBean, IntentManagementFunction> intentMap) {
+
+        for (Map.Entry<IntentGoalBean, IntentManagementFunction> entry : intentMap.entrySet()) {
+            IntentGoalType intentGoalType = entry.getKey().getIntentGoalType();
+            if (StringUtils.equalsIgnoreCase("create", intentGoalType.name())) {
+                return intentInterfaceService.createInterface(entry.getKey().getIntent(), entry.getValue());
+            } else if (StringUtils.equalsIgnoreCase("update", intentGoalType.name())) {
+                return intentInterfaceService.updateInterface(entry.getKey().getIntent(), entry.getValue());
+            } else if (StringUtils.equalsIgnoreCase("delete", intentGoalType.name())) {
+                return intentInterfaceService.deleteInterface(entry.getKey().getIntent(), entry.getValue());
+            }
+        }
+        return false;
+    }
 }
+
index ec4037e..5d4a5dc 100644 (file)
@@ -66,7 +66,7 @@ public class IntentProcessService {
 
             //distribution process
             intentDistributionService.setIntentRole(intentOwner,intentHandler);
-            intentDistributionService.distributionProcess();
+            intentDistributionService.distributionProcess(map);
 
             //operation process
             intentOperationService.setIntentRole(intentOwner,intentHandler);
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
new file mode 100644 (file)
index 0000000..4470d05
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 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.intentinterfaceservice;
+
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+
+public interface IntentInterfaceService {
+    public boolean createInterface(Intent intent, IntentManagementFunction imf);
+
+    public boolean updateInterface(Intent intent, 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
new file mode 100644 (file)
index 0000000..1c6d853
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2022 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.intentinterfaceservice.impl;
+
+import org.onap.usecaseui.intentanalysis.bean.models.Intent;
+import org.onap.usecaseui.intentanalysis.intentBaseService.IntentManagementFunction;
+import org.onap.usecaseui.intentanalysis.intentBaseService.intentinterfaceservice.IntentInterfaceService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IntentInterfaceServiceImpl implements IntentInterfaceService {
+    @Override
+    public boolean createInterface(Intent intent, IntentManagementFunction imf) {
+        //ask  knowledgeModole of handler imf for permision
+        imf.getKnowledgeModule().recieveCreateIntent();
+        return false;
+    }
+
+    @Override
+    public boolean updateInterface(Intent intent, IntentManagementFunction imf) {
+        imf.getKnowledgeModule().recieveUpdateIntent();
+        return false;
+    }
+
+    @Override
+    public boolean deleteInterface(Intent intent, IntentManagementFunction imf) {
+        imf.getKnowledgeModule().recieveDeleteIntent();
+        return false;
+    }
+}
index 0d7a6b1..c148975 100644 (file)
@@ -15,6 +15,7 @@
  */
 package org.onap.usecaseui.intentanalysis.service;
 
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
 import org.onap.usecaseui.intentanalysis.bean.models.IntentManagementFunctionRegInfo;
 
 import java.util.List;
@@ -23,4 +24,7 @@ public interface ImfRegInfoService {
 
     int insertIMFRegInfoRegInfo(IntentManagementFunctionRegInfo regInfo);
     List<IntentManagementFunctionRegInfo>  getImfRegInfoList();
+    IntentManagementFunctionRegInfo getImfRegInfoList(IntentGoalBean intentGoalBean);
+
+
 }
index 9fdc3ba..ba1a4fe 100644 (file)
@@ -16,6 +16,8 @@
 package org.onap.usecaseui.intentanalysis.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
+import org.onap.usecaseui.intentanalysis.bean.enums.IntentGoalType;
+import org.onap.usecaseui.intentanalysis.bean.models.IntentGoalBean;
 import org.onap.usecaseui.intentanalysis.bean.models.IntentManagementFunctionRegInfo;
 import org.onap.usecaseui.intentanalysis.mapper.IMFRegInfoMapper;
 import org.onap.usecaseui.intentanalysis.service.ImfRegInfoService;
@@ -23,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -39,4 +43,22 @@ public class ImfRegInfoServiceImpl implements ImfRegInfoService {
     public List<IntentManagementFunctionRegInfo> getImfRegInfoList() {
         return imfRegInfoMapper.getImfRegInfoList();
     }
+
+    @Override
+    public IntentManagementFunctionRegInfo getImfRegInfoList(IntentGoalBean intentGoalBean) {
+        String intentName = intentGoalBean.getIntent().getIntentName();
+        IntentGoalType intentGoalType = intentGoalBean.getIntentGoalType();
+        List<IntentManagementFunctionRegInfo> imfRegInfoList = imfRegInfoMapper.getImfRegInfoList();
+
+        List<IntentManagementFunctionRegInfo> imfList = imfRegInfoList.stream().
+                filter(x -> x.getSupportArea().contains(intentName)
+                        && x.getSupportInterfaces().contains(intentGoalType)).collect(Collectors.toList());
+        if (!Optional.ofNullable(imfList).isPresent()) {
+            log.info("The intent name is %s not find the corresponding IntentManagementFunction", intentName);
+        }
+        //TODO call probe  interface  if fail  intentFulfilmentInfo throw exception
+
+        return imfList.get(0);
+    }
+
 }
\ No newline at end of file