From 70a6c2fbdbbf0e7da8b105c35131df7c580db4ae Mon Sep 17 00:00:00 2001
From: dcz <dcz@ipipan.waw.pl>
Date: Fri, 22 Sep 2023 09:10:09 +0200
Subject: [PATCH] Improve logging. Selectional preference conflict exists.
 Refactoring.

---
 .../Unification/SelectionalPreference.js      | 56 +++++++++----------
 unifier/apps.py                               |  7 ++-
 unifier/views.py                              | 31 ++++++----
 3 files changed, 50 insertions(+), 44 deletions(-)

diff --git a/frontend/src/components/unification/Unification/SelectionalPreference.js b/frontend/src/components/unification/Unification/SelectionalPreference.js
index 3adb76a..b4bab13 100644
--- a/frontend/src/components/unification/Unification/SelectionalPreference.js
+++ b/frontend/src/components/unification/Unification/SelectionalPreference.js
@@ -319,21 +319,7 @@ export default class SelectionalPreference {
           if(succ) {
             show_info('Preferencja zosała zapisana');
           } else {
-            const conflict_hyponym = response.conflict_hyponym;
-            const conflict_hyperonym = response.conflict_hyperonym;
-            let typeStr = 'hiponimii';
-            if(conflict_hyperonym != null){
-              typeStr = 'hieronimii';
-            }
-            let errorStr = conflict_hyponym;
-            if(conflict_hyperonym != null){
-              errorStr = conflict_hyperonym;
-            }
-            alert('Wybrana preferencja selekcyjna nie mogła zostać zapisana ponieważ wystąpił konflikt w relacji ' +
-                typeStr +
-                ' z istniejÄ…cÄ… preferencjÄ… selekcyjnÄ…: ' +
-                errorStr)
-            show_info('Preferencja nie zosała zapisana. Wystąpił konflikt w hierarchii ontologicznej.');
+            this.synset_hierarchy_conflict_alert(response);
           }
         },
         (request, errorType, errorMessage) => {
@@ -355,21 +341,7 @@ export default class SelectionalPreference {
           if(succ) {
             show_info('Preferencja zosała zapisana');
           } else {
-            const conflict_hyponym = response.conflict_hyponym;
-            const conflict_hyperonym = response.conflict_hyperonym;
-            let typeStr = 'hiponimii';
-            if (conflict_hyperonym != null) {
-              typeStr = 'hieronimii';
-            }
-            let errorStr = conflict_hyponym;
-            if (conflict_hyperonym != null) {
-              errorStr = conflict_hyperonym;
-            }
-            alert('Wybrana preferencja selekcyjna nie mogła zostać zapisana ponieważ wystąpił konflikt w relacji ' +
-                typeStr +
-                ' z istniejÄ…cÄ… preferencjÄ… selekcyjnÄ…: ' +
-                errorStr)
-            show_info('Preferencja nie zosała zapisana. Wystąpił konflikt w hierarchii ontologicznej.');
+            this.synset_hierarchy_conflict_alert(response);
           }
         },
         (request, errorType, errorMessage) => {
@@ -377,6 +349,30 @@ export default class SelectionalPreference {
         })
   }
 
+  synset_hierarchy_conflict_alert(response) {
+    const conflict_exists = response.conflict_exists;
+    if (conflict_exists != null) {
+      alert('Wybrana preferencja selekcyjna nie mogła zostać zapisana ponieważ widnieje już na liście preferencji selekcyjnych: ' +
+          conflict_exists)
+    } else {
+      const conflict_hyponym = response.conflict_hyponym;
+      const conflict_hyperonym = response.conflict_hyperonym;
+      let typeStr = 'hiponimii';
+      if (conflict_hyperonym != null) {
+        typeStr = 'hieronimii';
+      }
+      let errorStr = conflict_hyponym;
+      if (conflict_hyperonym != null) {
+        errorStr = conflict_hyperonym;
+      }
+      alert('Wybrana preferencja selekcyjna nie mogła zostać zapisana ponieważ wystąpił konflikt w relacji ' +
+          typeStr +
+          ' z istniejÄ…cÄ… preferencjÄ… selekcyjnÄ…: ' +
+          errorStr)
+      show_info('Preferencja nie zosała zapisana. Wystąpił konflikt w hierarchii ontologicznej.');
+    }
+  }
+
   saveRelationalSelectionalPreference(frame_id, complement_id_from, complement_id_to, relation_id) {
     const data = {
       'frame_id': frame_id,
diff --git a/unifier/apps.py b/unifier/apps.py
index e18d141..5bbe9c0 100644
--- a/unifier/apps.py
+++ b/unifier/apps.py
@@ -19,7 +19,7 @@ class UnifierConfig(AppConfig):
     name = 'unifier'
 
     def ready(self):
-        print("XXXXXXXXXXXXX")
+        print("Loading the slowosiec ontology hierarchy...")
         from meanings.models import Synset
         from django.db.models import Prefetch
         i = 0
@@ -31,7 +31,8 @@ class UnifierConfig(AppConfig):
             )
         )
         for synset in objs.all():
-            print("i: "+str(i))
+            if i % 10000 == 0:
+                print("i: "+str(i))
             i = i + 1
             curr = None
             if synset.id not in synset_hierarchy_dict:
@@ -51,3 +52,5 @@ class UnifierConfig(AppConfig):
                 curr.hyperonyms.append(curr_hypernym)
                 curr_hypernym.hyponyms.append(curr)
 
+        print("Slowosiec ontology hierarchy loaded.")
+
diff --git a/unifier/views.py b/unifier/views.py
index 959b0e2..a74ab31 100644
--- a/unifier/views.py
+++ b/unifier/views.py
@@ -78,25 +78,28 @@ def check_sysnet_hierarchy_constraints(synset_preference_ids, unified_frame_argu
     synset_ids_list.extend(predefined_synset_ids)
 
     for synset_preference_id in synset_preference_ids:
-        conflict_hyponym, conflict_hyperonym = synset_hierarchy_constraint_check(int(synset_preference_id),
+        conflict_hyponym, conflict_hyperonym, conflict_exists = synset_hierarchy_constraint_check(int(synset_preference_id),
                                                                                  set(synset_ids_list))
-        if conflict_hyponym is not None or conflict_hyperonym is not None:
-            conflict_hyponym_lu = LexicalUnit.objects.filter(
-                synset_id=conflict_hyponym) if conflict_hyponym is not None else None
-            conflict_hyperonym_lu = LexicalUnit.objects.filter(
-                synset_id=conflict_hyperonym) if conflict_hyperonym is not None else None
+        if conflict_hyponym is not None or conflict_hyperonym is not None or conflict_exists is not None:
 
-            conflict_hyponym_lu_str = ','.join(
-                map(lambda s: str(s), conflict_hyponym_lu.all())) if conflict_hyponym is not None else None
-            conflict_hyperonym_lu_str = ','.join(
-                map(lambda s: str(s), conflict_hyperonym_lu.all())) if conflict_hyperonym is not None else None
+            conflict_exists_lu_str = conflict_lu_to_str(conflict_exists)
+            conflict_hyponym_lu_str = conflict_lu_to_str(conflict_hyponym)
+            conflict_hyperonym_lu_str = conflict_lu_to_str(conflict_hyperonym)
 
             return {"succ": False, "conflict_hyponym": conflict_hyponym_lu_str,
-                                   "conflict_hyperonym": conflict_hyperonym_lu_str}
+                                   "conflict_hyperonym": conflict_hyperonym_lu_str,
+                                   "conflict_exists": conflict_exists_lu_str}
 
     return {"succ": True}
 
 
+def conflict_lu_to_str(conflict_lu):
+    conflict_hyponym_lu = LexicalUnit.objects.filter(
+        synset_id=conflict_lu) if conflict_lu is not None else None
+    return ','.join(
+        map(lambda s: str(s), conflict_hyponym_lu.all())) if conflict_lu is not None else None
+
+
 @ajax_required
 @transaction.atomic
 def save_predefined_preference(request):
@@ -945,6 +948,10 @@ def attach_lu_to_unified_frame(request):
 
 def synset_hierarchy_constraint_check(lu_id, pref_lu_ids):
 
+    conflict_exists = None
+    if lu_id in pref_lu_ids:
+        conflict_exists = lu_id
+
     conflict_hyponym = None
     if lu_id in synset_hierarchy_dict:
         synset_hierarchy = synset_hierarchy_dict[lu_id]
@@ -955,7 +962,7 @@ def synset_hierarchy_constraint_check(lu_id, pref_lu_ids):
         synset_hierarchy = synset_hierarchy_dict[lu_id]
         conflict_hyperonym = hierarchy_constraint_check_hyperonyms(synset_hierarchy, lu_id, pref_lu_ids)
 
-    return conflict_hyponym, conflict_hyperonym
+    return conflict_hyponym, conflict_hyperonym, conflict_exists
 
 
 def hierarchy_constraint_check_hyperonyms(synset_hierarchy: SynsetHierarchy, lu_id: int, pref_lu_ids: []):
-- 
GitLab