diff --git a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue index fc30aba7ba5e1a38161e7a02acdad9c1c71f382c..28b8106bce60fad851a4807cb75d35dc48b10701 100644 --- a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue +++ b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue @@ -636,11 +636,15 @@ Object.assign(LexicalUnitEdit, { } }, change_slowal2unified_frame_argument_mapping(slowal_frame) { - if (slowal_frame === this.active_slowal_frame && this.selectedFrameArguments && this.selectedFrameArguments.length == 2) { + if (this.active_slowal_frame === null) { + alert(gettext("Zamiany pozycji argumentów w ramie wymaga wybrania ramy.")); + } else if (slowal_frame !== this.active_slowal_frame) { + alert(gettext("Zamiany pozycji argumentów w ramie jest możliwa tylko dla wskazanej wczesniej ramy.")); + } else if (this.selectedFrameArguments && this.selectedFrameArguments.length == 2) { const data = { 'unified_frame_id': this.unified_frame.id, 'slowal_frame_id': slowal_frame.id, - 'slowal_frame_selected_arguments': JSON.stringify(this.selectedFrameArguments.map(arg => arg.argument_id)) + 'slowal_frame_selected_arguments': JSON.stringify(this.selectedFrameArguments.map(arg => arg.argument_id ? arg.argument_id : -arg.unified_frame_argument_id)), }; $.ajax({ type: 'post', @@ -937,6 +941,7 @@ Object.assign(LexicalUnitEdit, { if (unified_frame_argument_mapping == null) { slowal_frame_argument = { 'str': 'Empty', + 'unified_frame_argument_id': unified_frame_argument.id, 'id': slowal_frame.id + '-_' + (unified_frame_argument.id), 'role': 'Empty', 'role_type': 'Empty', @@ -945,6 +950,7 @@ Object.assign(LexicalUnitEdit, { } } else { slowal_frame_argument = slowal_frame.arguments.find(o => o.argument_id === unified_frame_argument_mapping.slowal_frame_agrument_id); + slowal_frame_argument['unified_frame_argument_id'] = unified_frame_argument.id; } new_slowal_frame_arguments.push(slowal_frame_argument) } diff --git a/frontend/src/components/unification/Unification/SelectionalPreference.js b/frontend/src/components/unification/Unification/SelectionalPreference.js index 46d14855b6c44096427ebe43ae09c8df5f33be7c..3adb76a20f1fcf48e89d0d580b24657ff227723b 100644 --- a/frontend/src/components/unification/Unification/SelectionalPreference.js +++ b/frontend/src/components/unification/Unification/SelectionalPreference.js @@ -311,38 +311,34 @@ export default class SelectionalPreference { 'complement_id': complement_id, 'synset_preference_id': synset_preference_id }; - $.ajax({ - type: 'post', - url: '/' + lang + '/unifier/save_synset_preference/', - dataType: 'json', - data: data, - timeout: 60000, - success: function (response) { - const succ = response.succ; - 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; + + send_post_request('/unifier/save_synset_preference/', + data, + (response) => { + const succ = response.succ; + 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.'); } - 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.'); - } - }, - error: function (request, errorType, errorMessage) { - show_error(errorType + ' (' + errorMessage + ')'); - } - }); + }, + (request, errorType, errorMessage) => { + show_error(errorType + ' (' + errorMessage + ')'); + }) } savePredefinedPreference(frame_id, complement_id, predefined_preference_id) { @@ -355,25 +351,30 @@ export default class SelectionalPreference { send_post_request('/unifier/save_predefined_preference/', data, (response) => { - show_info('Preferencja zosała zapisana'); + const succ = response.succ; + 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.'); + } }, (request, errorType, errorMessage) => { show_error(errorType + ' (' + errorMessage + ')'); }) - - // $.ajax({ - // type: 'post', - // url: '/' + lang + '/unifier/save_predefined_preference/', - // dataType: 'json', - // data: data, - // timeout: 60000, - // success: function (response) { - // show_info('Preferencja zosała zapisana'); - // }, - // error: function (request, errorType, errorMessage) { - // show_error(errorType + ' (' + errorMessage + ')'); - // } - // }); } saveRelationalSelectionalPreference(frame_id, complement_id_from, complement_id_to, relation_id) { diff --git a/unifier/views.py b/unifier/views.py index 99c2add142b814d1468a9d5904c5f05dab7e4d2e..959b0e26605613a02e4fedb450b8ec29129a0b8f 100644 --- a/unifier/views.py +++ b/unifier/views.py @@ -15,7 +15,8 @@ from financial_settlement.models import FinStatement from importer.unification.UnificationPreprocessXML import UnificationPreprocessHandler from meanings.models import LexicalUnit from semantics.choices import FrameStatus -from semantics.models import Frame, ArgumentRole, SemanticRole, RoleAttribute, RoleType, RoleSubAttribute +from semantics.models import Frame, ArgumentRole, SemanticRole, RoleAttribute, RoleType, RoleSubAttribute, \ + PredefinedSelectionalPreference from syntax.models import Schema from unifier.models import UnifiedFrameArgument, UnifiedRelationalSelectionalPreference, UnifiedFrame, \ UnifiedFrame2SlowalFrameMapping, UnifiedFrameArgumentSlowalFrameMapping, HierarchyModel @@ -57,33 +58,45 @@ def save_synset_preference(request): unified_frame_argument = UnifiedFrameArgument.objects.get(unified_frame_id=int(frame_id), id=int(complement_id)) - synset_ids_map = map(lambda s: s.id, unified_frame_argument.synsets.all()) + check_sysnet_hierarchy_constraints_ret = check_sysnet_hierarchy_constraints([synset_preference_id], unified_frame_argument) - predefined_synset_ids = [] - get_predefined_preference_synsets(unified_frame_argument.predefined.all(), predefined_synset_ids) - - synset_ids_list = list(synset_ids_map) - synset_ids_list.extend(predefined_synset_ids) - - conflict_hyponym, conflict_hyperonym = synset_hierarchy_constraint_check(int(synset_preference_id), set(synset_ids_list)) - - if conflict_hyponym is None and conflict_hyperonym is None: + if check_sysnet_hierarchy_constraints_ret['succ'] is True: unified_frame_argument.synsets.add(int(synset_preference_id)) unified_frame_argument.save() update_argument_preferences_count(unified_frame_argument) - return JsonResponse({"succ": True}) - else: - 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 - 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 - - return JsonResponse({"succ": False, "conflict_hyponym": conflict_hyponym_lu_str, "conflict_hyperonym": conflict_hyperonym_lu_str}) + return JsonResponse(check_sysnet_hierarchy_constraints_ret) return JsonResponse({}) +def check_sysnet_hierarchy_constraints(synset_preference_ids, unified_frame_argument): + synset_ids_map = map(lambda s: s.id, unified_frame_argument.synsets.all()) + predefined_synset_ids = [] + get_predefined_preference_synsets(unified_frame_argument.predefined.all(), predefined_synset_ids) + synset_ids_list = list(synset_ids_map) + 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), + 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 + + 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 + + return {"succ": False, "conflict_hyponym": conflict_hyponym_lu_str, + "conflict_hyperonym": conflict_hyperonym_lu_str} + + return {"succ": True} + + @ajax_required @transaction.atomic def save_predefined_preference(request): @@ -93,10 +106,18 @@ def save_predefined_preference(request): predefined_preference_id = request.POST['predefined_preference_id'] unified_frame_argument = UnifiedFrameArgument.objects.get(unified_frame_id=int(frame_id), id=int(complement_id)) - unified_frame_argument.predefined.add(int(predefined_preference_id)) - unified_frame_argument.save() - update_argument_preferences_count(unified_frame_argument) + predefined_synset_ids = [] + get_predefined_preference_synsets([PredefinedSelectionalPreference.objects.get(id=predefined_preference_id)], predefined_synset_ids) + + check_sysnet_hierarchy_constraints_ret = check_sysnet_hierarchy_constraints(predefined_synset_ids, unified_frame_argument) + + if check_sysnet_hierarchy_constraints_ret['succ'] is True: + unified_frame_argument.predefined.add(int(predefined_preference_id)) + unified_frame_argument.save() + update_argument_preferences_count(unified_frame_argument) + + return JsonResponse(check_sysnet_hierarchy_constraints_ret) return JsonResponse({})