diff --git a/src/components/SingleClassViewer.vue b/src/components/SingleClassViewer.vue index 618530b..21bf5db 100644 --- a/src/components/SingleClassViewer.vue +++ b/src/components/SingleClassViewer.vue @@ -93,6 +93,23 @@ + + + +
+
Seleziona uno Scenario
+
+
+
+
@@ -100,6 +117,7 @@ import { ApplicationCodeService } from '@/service/ApplicationCodeService'; import { LoadingStore } from '@/stores/LoadingStore'; +import { ScenarioStore } from '@/stores/ScenarioStore'; import { UserPrefStore } from '@/stores/UserPrefStore.js'; import axios from 'axios'; import { MdPreview } from 'md-editor-v3'; @@ -132,6 +150,7 @@ const { className } = toRefs(props); const classDetails = ref(null); const classLoaded = ref(false); const loadingStore = LoadingStore(); +const scenario_store = ScenarioStore(); const nodes = ref(null) const edges = ref(null) const dark = ref(false) @@ -144,6 +163,9 @@ const userPrefStore = UserPrefStore(); const toast = useToast(); const loading_data = ref(false); const { graph, layout, previousDirection } = useLayout() +const showScenarioDialog = ref(false); // Controlla la visibilità del dialog +const selectedScenario = ref(null); // Lo scenario selezionato +const scenarios = ref([]); // Lista degli scenari disponibili const commonRevRequest = reactive({ repositoryEntityId: '', applicationName: '', @@ -151,18 +173,83 @@ const commonRevRequest = reactive({ fullClassQualifiedName: '', applicationVersion: '', deleteExistingData: true, // Valore booleano - applicationType: 'JAVA', - commitSha: '' + applicationType: '', + commitSha: '', + scenarioId: '' }); onMounted(() => { loadClassDetails(); console.log("class details: ", classDetails.value); console.log("class name: ", className.value); + }); + + +// Mostra il dialog quando si clicca il pulsante const openToastRE = () => { + showScenarioDialog.value = true; +}; + +// Esegue l'azione con lo scenario selezionato +const executeScenario = () => { + if (!selectedScenario.value) { + toast.add({ + severity: 'warn', + summary: 'Attenzione', + detail: 'Seleziona uno scenario prima di continuare', + life: 3000 + }); + return; + } + + // Imposta l'ID dello scenario + commonRevRequest.scenarioId = selectedScenario.value.id; + + // Nasconde il dialog e chiama la funzione per l'RE + showScenarioDialog.value = false; + doREClass(); +}; + +function checkExtension() { + // Ottieni la parte dopo il punto + const extension = userPrefStore.getSelFile.split('.').pop(); + + // Controlla se è "java" + if (extension === 'java' || extension === 'jsp') { + commonRevRequest.applicationType = extension; + } else { + commonRevRequest.applicationType = 'GENERIC'; + } + + }; + +// Logica per eseguire l'RE +const doREClass = () => { + commonRevRequest.fullClassQualifiedName = props.className; + checkExtension(); + console.log("commonRevRequest.fullClassQualifiedName", commonRevRequest.fullClassQualifiedName); + commonRevRequest.applicationName = userPrefStore.getSelApp.internal_name; + commonRevRequest.applicationProjectName = userPrefStore.selectedProject.internal_name; + + ApplicationCodeService.doRevEngForSingleClass(commonRevRequest) + .then(response => { + if (response.data !== "KO") { + startPolling(response.data); + } else { + toast.add({ + severity: 'error', + summary: 'Errore', + detail: 'Si è verificato un errore. Riprova più tardi.', + life: 3000 + }); + } + }); +}; + +/*const openToastRE = () => { confirm.require({ message: 'Do you want to proceed for the Reverse Engeeniring for this class?', header: 'RE Confirmation', @@ -196,8 +283,7 @@ const doREClass = () => { }) -} - +}*/ // Function to start polling function startPolling(processId) { // Set polling interval (every 5 seconds in this case) @@ -257,7 +343,7 @@ axios.get('/java-re-module/getProgressRevSingleClass/'+processId).then(response } function tabUpdate(value) { - console.log(value); + console.log("tab update: ",value); if ((value === 'class-description' || value ==='class-code') && classLoaded.value === false) { loadClassDetails() } @@ -273,7 +359,7 @@ function updateSelectedMethod(value) { } loadingMethod.value = true; axios.get("/source-module/getMethodDetailedInfo?methodName=" + value.value ).then(resp => { - console.log(resp.data); + console.log("updateSelectedMethod",resp.data); selectedMethodDetails.value = resp.data; loadingMethod.value = false; }) @@ -296,9 +382,13 @@ function loadClassDetails() { function createMethodList() { let methods = []; + console.log("classDetails.value.methods", classDetails.value.methods); classDetails.value.methods.forEach(method => { methods.push({name: method.split(".").slice(-1)[0], value: method}); }); + console.log("methods", methods); + methods.sort((a, b) => a.name.localeCompare(b.name)); + console.log("methods ordered", methods); return methods; } @@ -307,4 +397,6 @@ function createMethodList() { diff --git a/src/layout/AppTopbar.vue b/src/layout/AppTopbar.vue index debc4de..f1f0f53 100644 --- a/src/layout/AppTopbar.vue +++ b/src/layout/AppTopbar.vue @@ -12,7 +12,6 @@ import { UserPrefStore } from '../stores/UserPrefStore.js'; import { computed, ref, watch } from 'vue'; import { useRoute } from 'vue-router'; import { JellyfishLoader, RiseLoader } from "vue3-spinner"; -import AppConfigurator from './AppConfigurator.vue'; import AppProfileMenu from './AppProfileMenu.vue'; const auth = useAuth(); @@ -110,7 +109,9 @@ watch(() => userPrefStore.getSelApp, appUpdated, { immediate: true });
- + + + diff --git a/src/service/ScenarioService.js b/src/service/ScenarioService.js index 0a6316a..9b05834 100644 --- a/src/service/ScenarioService.js +++ b/src/service/ScenarioService.js @@ -24,8 +24,8 @@ export const ScenarioService = { getScenariosForRE(){ return axios.get('/getScenariosForRE') }, - updateScenarioExecRating(data) { - return axios.post('/updateRating', data) + updateScenarioExecRating(id, rating) { + return axios.get('/updateRating?id=' + id + '&rating=' + rating) } } \ No newline at end of file diff --git a/src/stores/ScenarioStore.js b/src/stores/ScenarioStore.js index 85532a0..aa0c9e4 100644 --- a/src/stores/ScenarioStore.js +++ b/src/stores/ScenarioStore.js @@ -13,6 +13,7 @@ export const ScenarioStore = defineStore('scenario_store', () => { const filterString = ref('') const allScenarios = ref([]) const typeFilter = ref({ name: 'All', value: 'all' }) + const scenariosForRE = ref([]) const userPrefStore = UserPrefStore() const loadingStore = LoadingStore() @@ -28,6 +29,15 @@ export const ScenarioStore = defineStore('scenario_store', () => { } + async function fetchScenariosForRE() { + loadingStore.scenario_loading = true; + await ScenarioService.getScenariosForRE().then(resp => { + scenariosForRE.value = resp.data; + loadingStore.scenario_loading = false; + }); + + } + async function fetchScenariosCross() { loadingStore.scenario_loading = true; await ScenarioService.getScenariosCross().then(resp => { @@ -55,6 +65,7 @@ export const ScenarioStore = defineStore('scenario_store', () => { return allScenarios.value }) + const filteredScenarios = computed(() => { console.log("scenarios", allScenarios.value); var filteredScenario = [] @@ -87,5 +98,5 @@ export const ScenarioStore = defineStore('scenario_store', () => { fetchScenarios, fetchApplicationScenarios, scenarios, - filterString , typeFilter, fetchScenariosCross, globalScenarios} + filterString , typeFilter, fetchScenariosCross, globalScenarios, fetchScenariosForRE, scenariosForRE} }) \ No newline at end of file diff --git a/src/stores/UserPrefStore.js b/src/stores/UserPrefStore.js index 487405f..e8ac888 100644 --- a/src/stores/UserPrefStore.js +++ b/src/stores/UserPrefStore.js @@ -10,6 +10,7 @@ export const UserPrefStore = defineStore('userpref_store', () => { const userLoaded = ref(false) const selectedApp = ref(null) const loadingStore = LoadingStore() + const selectedFileRE = ref(null) async function fetchUserData(){ @@ -61,6 +62,10 @@ export const UserPrefStore = defineStore('userpref_store', () => { } }); + async function setSelectedFile(file){ + selectedFileRE.value = file; + } + const getSelProj = computed(() => { return selectedProject.value }) @@ -68,8 +73,12 @@ export const UserPrefStore = defineStore('userpref_store', () => { const getSelApp = computed(() => { return selectedApp.value }) + + const getSelFile = computed(() => { + return selectedFileRE.value + }) - return { user,fetchUserData,userLoaded,selectedProject,availableApp,getSelApp,setSelectedApp,selectedApp, updateSelectedProject,getSelProj } + return {getSelFile, user,selectedFileRE,fetchUserData,userLoaded,selectedProject,availableApp,getSelApp,setSelectedApp,selectedApp, updateSelectedProject,getSelProj, setSelectedFile } }) \ No newline at end of file diff --git a/src/views/pages/ApplicationBrowser.vue b/src/views/pages/ApplicationBrowser.vue index 5d5bf09..5559278 100644 --- a/src/views/pages/ApplicationBrowser.vue +++ b/src/views/pages/ApplicationBrowser.vue @@ -40,10 +40,11 @@ import FileFlowViewer from '@/components/FileFlowViewer.vue'; import { ApplicationCodeService } from '@/service/ApplicationCodeService'; import { LoadingStore } from '@/stores/LoadingStore.js'; +import { ScenarioStore } from '@/stores/ScenarioStore.js'; +import { UserPrefStore } from '@/stores/UserPrefStore.js'; import Tree from 'primevue/tree'; import { onMounted, ref, watch } from 'vue'; import { useRouter } from 'vue-router'; -import { UserPrefStore } from '@/stores/UserPrefStore.js'; const nodes = ref(null) const expandedKeys = ref({}); @@ -51,10 +52,13 @@ const selectedFile = ref({}) const router = useRouter(); const userPrefStore = UserPrefStore(); const loadingStore = LoadingStore() +const scenario_store = ScenarioStore(); onMounted(() => { console.log("Mounted") fetchApplicationData(); + scenario_store.fetchScenariosForRE(); + }) function fetchApplicationData() { @@ -88,6 +92,8 @@ function onNodeSelect(e){ if(e.icon == "pi pi-fw pi-file"){ selectedFile.value = e.key } + userPrefStore.setSelectedFile(e.label) + console.log("user pref store file", userPrefStore.getSelFile) console.log(e) }; diff --git a/src/views/pages/OldScenarioExec.vue b/src/views/pages/OldScenarioExec.vue index fd2345c..20227a6 100644 --- a/src/views/pages/OldScenarioExec.vue +++ b/src/views/pages/OldScenarioExec.vue @@ -33,8 +33,29 @@ +
@@ -91,8 +112,10 @@ import JsonEditorVue from 'json-editor-vue'; import { MdPreview } from 'md-editor-v3'; import 'md-editor-v3/lib/style.css'; import ProgressSpinner from 'primevue/progressspinner'; +import { useToast } from 'primevue/usetoast'; import { onMounted, ref } from 'vue'; import { useRoute, useRouter } from 'vue-router'; +import { ScenarioService } from '../../service/ScenarioService.js'; import { ScenarioExecutionStore } from '../../stores/ScenarioExecutionStore.js'; const router = useRouter(); @@ -107,10 +130,12 @@ const formData = ref({}); const exec_id = ref(null); const exec_scenario = ref({}); const debug_modal = ref(false); +const rating = ref(null); const scenario_execution_store = ScenarioExecutionStore(); const execution = scenario_execution_store.getSelectedExecScenario; const execution_id = ref(null) const inputs = ref(null); +const toast = useToast(); onMounted(() => { @@ -136,12 +161,46 @@ const retrieveScenarioExec = (id) => { scenario.value = response.data.scenario exec_scenario.value = response.data data_loaded.value = true; + rating.value = response.data.rating scenario_output.value = response.data.execSharedMap.scenario_output; exec_id.value = response.data.scenarioExecution_id inputs.value = response.data.scenarioExecutionInput.inputs }); }; +async function updateRating(newRating) { + + loading_data.value = true; + ScenarioService.updateScenarioExecRating(execution_id.value,newRating.value).then((response) => { + + console.log('response:', response); + if (response.data === "OK") { + rating.value = newRating.value; + console.log('Rating aggiornato con successo:', response.data); + toast.add({ + severity: 'success', // Tipo di notifica (successo) + summary: 'Successo', // Titolo della notifica + detail: 'Rating updated with success.', // Messaggio dettagliato + life: 3000 // Durata della notifica in millisecondi + }); + } else { + console.error('Errore nell\'aggiornamento del rating', response.data); + toast.add({ + severity: 'error', // Tipo di notifica (errore) + summary: 'Errore', // Titolo della notifica + detail: 'Error updating rating. Try later.', // Messaggio dettagliato + life: 3000 // Durata della notifica in millisecondi + }); + } + }).catch((error) => { + console.error('Errore durante la chiamata al backend:', error); + }).finally(() => { + loading_data.value = false; + }); + + +} + diff --git a/src/views/pages/ScenarioExec.vue b/src/views/pages/ScenarioExec.vue index 17083b2..fdf4f84 100644 --- a/src/views/pages/ScenarioExec.vue +++ b/src/views/pages/ScenarioExec.vue @@ -71,8 +71,18 @@
Workflow Response
+
+ +
+