Commit 7d930a87 authored by Weerasinghe D.N.H's avatar Weerasinghe D.N.H

BACKEND : merge conflicts resolved

parents 3c385a39 f7d51f08
......@@ -11,7 +11,7 @@ from routes.module_routes import module
from routes.assignment_routes import assignment
from routes.diagram_routes import diagram
from routes.submission_routes import submission
from routes.plagiarism_routes import use_case_diagram_plagiarism
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
OUTPUTS_GENERATED_DOT_FILES_PATH = os.path.join('outputs', 'generated_dot_files')
......@@ -47,7 +47,6 @@ app.register_blueprint(module)
app.register_blueprint(assignment)
app.register_blueprint(diagram)
app.register_blueprint(submission)
app.register_blueprint(use_case_diagram_plagiarism)
@app.before_first_request
......
......@@ -3,9 +3,9 @@ from config.database import db
class Attribute(db.Model):
id = db.Column(db.Integer, primary_key=True)
data_type = db.Column(db.String(50), nullable=False)
data_type = db.Column(db.String(50))
name = db.Column(db.String(50), nullable=False)
access_spec = db.Column(db.String(50), nullable=False)
access_spec = db.Column(db.String(50))
class_id = db.Column(db.Integer)
def __repr__(self) -> str:
......
from config.database import db
class Method(db.Model):
id = db.Column(db.Integer, primary_key=True)
return_type = db.Column(db.String(50))
name = db.Column(db.String(50), nullable=False)
access_spec = db.Column(db.String(50))
class_id = db.Column(db.Integer)
def __repr__(self) -> str:
return 'Method>>> {self.content}'
import requests
from sqlalchemy import func
from flask import Blueprint, jsonify, request
from constants.http_status_codes_constant import HTTP_200_OK, HTTP_400_BAD_REQUEST, HTTP_201_CREATED, \
HTTP_500_INTERNAL_SERVER_ERROR
from config.database import db
# from datetime import datetime
from models.actor_and_use_case import ActorANDUseCase
from models.extend_relationship import ExtendRelationship
from models.include_relationship import IncludeRelationship
from models.use_case_generalization_relationship import UseCaseGeneralizationRelationship
from models.use_case_association_relationship import UseCaseAssociationRelationship
from models.use_case_answer import UseCaseAnswer
from models.actor_generalization_relationship import ActorGeneralizationRelationship
from services.similarity import similarity_components
use_case_diagram_plagiarism = Blueprint('use_case_diagram_plagiarism', __name__,
url_prefix='/api/v1/use_case_diagram_plagiarism')
@use_case_diagram_plagiarism.get('/similarities')
def get_use_case():
extent_component = None
include_component = None
user_case_association_component = None
user_cases_generalization_component = None
actor_generalization_component = None
actor_association_component = None
includes = IncludeRelationship.query.all()
extents = ExtendRelationship.query.all()
user_cases = ActorANDUseCase.query.all()
user_case_associations = UseCaseAssociationRelationship.query.all()
user_cases_generalizations = UseCaseGeneralizationRelationship.query.all()
actor_generalizations = ActorGeneralizationRelationship.query.all()
for user_case in user_cases:
if user_case.type == "use case":
for extent in extents:
if user_case.id == extent.connected_component_01:
extent_component = user_case
similarity_components(extent_component.use_case_answer, extent_component.text)
print("Extend component 1 : ", extent_component.text)
elif user_case.id == extent.connected_component_02:
extent_component = user_case
similarity_components(extent_component.use_case_answer, extent_component.text)
print("Extend component 2 : ", extent_component.text)
for include in includes:
if user_case.id == include.connected_component_01:
include_component = user_case
similarity_components(include_component.use_case_answer, include_component.text)
print("Include component 1 : ", include_component.text)
elif user_case.id == include.connected_component_02:
include_component = user_case
similarity_components(include_component.use_case_answer, include_component.text)
print("Include component 2 : ", include_component.text)
for user_case_association in user_case_associations:
if user_case.id == user_case_association.connected_component_01:
user_case_association_component = user_case
similarity_components(user_case_association_component.use_case_answer,
user_case_association_component.text)
print("User cases association component 1 : ", user_case_association_component.text)
elif user_case.id == user_case_association.connected_component_02:
user_case_association_component = user_case
similarity_components(user_case_association_component.use_case_answer,
user_case_association_component.text)
print("User cases association component 2 : ", user_case_association_component.text)
for user_cases_generalization in user_cases_generalizations:
if user_case.id == user_cases_generalization.connected_component_01:
user_cases_generalization_component = user_case
similarity_components(user_cases_generalization_component.use_case_answer,
user_cases_generalization_component.text)
print("User cases generalization Component 1 : ", user_cases_generalization_component.text)
elif user_case.id == user_cases_generalization.connected_component_02:
user_cases_generalization_component = user_case
similarity_components(user_cases_generalization_component.use_case_answer,
user_cases_generalization_component.text)
print("User cases generalization Component 2 : ", user_cases_generalization_component.text)
elif user_case.type == "actor":
for actor_generalization in actor_generalizations:
if user_case.id == actor_generalization.connected_component_01:
actor_generalization_component = user_case
similarity_components(actor_generalization_component.use_case_answer,
actor_generalization_component.text)
print("Actor generalization component 1 : ", actor_generalization_component.text)
elif user_case.id == actor_generalization.connected_component_02:
actor_generalization_component = user_case
similarity_components(actor_generalization_component.use_case_answer,
actor_generalization_component.text)
print("Actor generalization component 2 : ", actor_generalization_component.text)
for actor_association in user_case_associations:
if user_case.id == actor_association.connected_component_01:
actor_association_component = user_case
similarity_components(actor_association_component.use_case_answer,
actor_association_component.text)
print("Actor association component 1 : ", actor_association_component.text)
elif user_case.id == actor_association.connected_component_02:
actor_association_component = user_case
similarity_components(actor_association_component.use_case_answer,
actor_association_component.text)
print("Actor association component 2 : ", actor_association_component.text)
return jsonify({"Message": "Success"}), HTTP_200_OK
@use_case_diagram_plagiarism.get('/use_case_plagiarism_percentage')
def get_actor():
user_cases = ActorANDUseCase.query.all()
use_case_answers = UseCaseAnswer.query.all()
all_count = db.session.query(ActorANDUseCase.use_case_answer,
func.count(ActorANDUseCase.use_case_answer)).group_by(
ActorANDUseCase.use_case_answer).all()
actor_similarity = db.session.query(ActorANDUseCase.use_case_answer,
func.count(ActorANDUseCase.plagiarism_count)).filter_by(
plagiarism_count=1).group_by(
ActorANDUseCase.use_case_answer).all()
for use_case_answer in use_case_answers:
print(use_case_answer.id)
counter = 0
counter1 = 0
for user_case in user_cases:
if user_case.use_case_answer == use_case_answer.id:
counter += 1
if user_case.plagiarism_count == "1":
counter1 += 1
print("All use cases and actors count :", counter)
print("similarity count :", counter1)
if counter != 0:
plagirism_count = counter1/counter * 100
print("Plagiarism Percentage :", plagirism_count)
return jsonify({"Message": "Success"}), HTTP_200_OK
......@@ -5,7 +5,7 @@ from flask_jwt_extended import jwt_required, get_jwt_identity
from constants.http_status_codes_constant import HTTP_400_BAD_REQUEST, HTTP_200_OK
from services.class_model_detection_service import component_separation
from services.class_diagram_class_detection_service import component_separation
from models.actor_and_use_case import ActorANDUseCase
from services.submission_service import save_submission
from services.use_case_model_detection_service import model_object_detection
......
......@@ -11,15 +11,15 @@ def remove_unwanted_values(data):
return data
# removing duplicates
def remove_duplicates(data):
return list(set(data))
# # removing duplicates
# def remove_duplicates(data):
# return list(set(data))
# punctuation removal
# punctuation removing
def remove_punctuation(sentence):
text_no_punct = [token for token in sentence if not token.is_punct]
cleaned_sentence = ' '.join(token.text for token in text_no_punct)
text_without_punctuation = [token for token in sentence if not token.is_punct]
cleaned_sentence = ' '.join(token.text for token in text_without_punctuation)
return cleaned_sentence
......@@ -37,31 +37,32 @@ def main(scenario, assignment_type):
del sentences[-1]
# creating required lists
nc = []
nouns_pronouns = []
cleaned_extracted_actions = []
cleaned_sentences = []
splitted_actions_array = []
splitted_actions_and_actor_array = []
# looping through each sentence
for sentence in sentences:
# getting actors using nouns pronouns
res = get_nouns_pronouns(sentence)
nc.append(str(res))
nouns_pronouns.append(str(res))
cleaned_sentence = remove_punctuation(sentence)
cleaned_sentences.append(cleaned_sentence)
splitted_actions = split_actions(str(cleaned_sentence))
splitted_actions_array.append(splitted_actions)
splitted_actions_and_actor = split_actions(str(cleaned_sentence))
splitted_actions_and_actor_array.append(splitted_actions_and_actor)
extracted_actions = get_actions(splitted_actions)
extracted_actions = get_actions(splitted_actions_and_actor)
if extracted_actions is not None:
cleaned_extracted_actions.append(extracted_actions)
# remove duplicates of the actors
nc = list(dict.fromkeys(nc))
data = remove_unwanted_values(nc)
nouns_pronouns = list(dict.fromkeys(nouns_pronouns))
data = remove_unwanted_values(nouns_pronouns)
extracted_relationships = get_include_extend_relationships(splitted_actions_array)
extracted_relationships = get_include_extend_relationships(splitted_actions_and_actor_array)
actors_and_use_cases_array = identify_use_cases(cleaned_extracted_actions)
if assignment_type == 1:
......
from models.actor_and_use_case import ActorANDUseCase
from config.database import db
def similarity_components(use_case_answer, use_case_text):
user_cases = ActorANDUseCase.query.all()
for use_case1 in user_cases:
if use_case1.use_case_answer != use_case_answer and use_case1.text == use_case_text:
use_case1.plagiarism_count = 1
db.session.add(use_case1)
db.session.commit()
......@@ -24,12 +24,14 @@ def get_nouns_pronouns(sentence):
return token
# removing punctuations
def remove_punctuation(sentence):
text_no_punct = [token for token in sentence if not token.is_punct]
cleaned_sentence = ' '.join(token.text for token in text_no_punct)
return cleaned_sentence
# get actions and actors
def split_actions(sentence):
split_string = "should be able to "
if split_string in sentence:
......@@ -37,16 +39,18 @@ def split_actions(sentence):
return extracted_string
def get_actions(splitted_action):
# get
def get_actions(splitted_action_and_actor):
temp_array = []
if splitted_action is not None and '|' in splitted_action[1]:
res = splitted_action[1].split(' | ')
# print('res',res)
temp_array.append(splitted_action[0])
if splitted_action_and_actor is not None and '|' in splitted_action_and_actor[1]:
res = splitted_action_and_actor[1].split(' | ')
temp_array.append(splitted_action_and_actor[0])
temp_array.append(res[0])
print(temp_array)
return temp_array
else:
return splitted_action
return splitted_action_and_actor
def get_sentences(text):
......
item {
id: 1
name: 'class'
name: 'association'
}
item {
id: 2
name: 'relationship'
name: 'class'
}
item {
id: 3
name: 'composition'
}
item {
id: 4
name: 'indirect association'
}
item {
id: 5
name: 'inheritance'
}
item {
id: 6
name: 'interface'
}
item {
id: 7
name: 'realization'
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment