Commit eb9b69f2 by Owen

more loading screens, handle err_connection, added pull-to-refresh.

parent f9ca2955
import { createLoadingScreen, removeLoadingScreen, resetGDE } from "../../script.js";
import { resetGDE } from "../../script.js";
import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js";
import { validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js";
import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { PROJECT_CODE } from "../Submit/config.js";
import { ENCODING_PASS, REASON_LIST } from "../config.js";
import { createInfoModal, createModal } from "../genericPopup/genericPopup.js";
......@@ -39,7 +39,7 @@ async function rejectElement() {
document.getElementById("backdropContainer").remove();
if(goBackToElementListViewer()){
resetGDE();
removePrompt();
removeLoadingModal();
};
}
createInfoModal(successfulReturn, 'OK', "Element rejected");
......
import { createLoadingScreen, removeLoadingScreen, resetGDE } from "../../script.js";
import { SCHEMA_FILE_PATH } from "../DataInputWidget/config.js";
import { validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js";
import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { PROJECT_CODE } from "../Submit/config.js";
import { interval } from "../captureMetrics/captureMetrics.js";
import { createConfirmationModal, createInfoModal, createModal } from "../genericPopup/genericPopup.js";
......@@ -92,12 +91,12 @@ export function createReturnWindow() {
if (response.status == 200) {
sessionStorage.removeItem("section");
sessionStorage.removeItem("doctype");
removePrompt();
removeLoadingModal();
goBackToElementListViewer();
}else{
function errorReturn(){
removePrompt();
removeLoadingModal();
}
createInfoModal(errorReturn, 'Error', "Error ${response.status}: Returning element");
}
......
import { createWebGdeInterface, removeLoadingScreen } from '../../script.js';
import { createWebGdeInterface } from '../../script.js';
import { createReturnWindow } from '../BPO/returnElement.js';
import { populateFields } from '../DataInputWidget/generateFields.js';
import { createLoadingModal, removeLoadingModal } from '../LoadingModal/LoadingModal.js';
import { logoutKeycloak } from '../Logout/Logout.js';
import { ADD_NEW_OPTION, CURRENT_NODE, BPO_URL, DISPLAYED_DETAILS } from '../config.js';
import { DocumentControlWidget } from "../documentControlWidget/documentControlWidget.js";
import { createErrorModal } from '../genericPopup/genericPopup.js';
import { INDEXED_DB_STORAGE, HIGHLIGHT_OBJECT, IMAGE_VIEWER_OBJECT, INDEXED_DB_NAME, INDEXED_DB_TBL_NAME, setIndexedDBStorage, setHighlightObject, setImageViewerObject, setBPOObject, BPO_OBJECT, DISPLAY_FIELD_OBJECT, setDisplayFieldObject, activateGDE, setDocumentControlObject, DOCUMENT_CONTROL_OBJECT, IS_GDE_ACTIVATED } from "../globalVariable.js";
import PullToRefresh from './PullToRefresh.js';
const API_ROOT = `${BPO_URL}req`;
......@@ -16,7 +20,9 @@ export class ElementListWidget {
selectedElement: null,
workers: [],
queueIndex: null,
workerId: null
workerId: null,
searchInput: null,
pullToRefresh: null
};
constructor(nodeId, containerId) {
......@@ -34,6 +40,18 @@ export class ElementListWidget {
}
async init(nodeId, workerId) {
this.render();
createLoadingModal("Fetching Elements", "Fetching Workers", null, null, null);
this.global.pullToRefresh = PullToRefresh.init({
mainElement: '#element-list',
onRefresh: async () => {
// Call the init function again
await this.reloadElementList(nodeId, workerId);
}
});
console.log(`Fetching workers for node ID: ${nodeId}`);
const workerResponse = await fetchWorkersForNode(nodeId);
console.log("Worker API Response:", workerResponse);
......@@ -42,6 +60,8 @@ export class ElementListWidget {
this.global.workers = workerResponse.workers;
} else {
console.error('Failed to fetch workers:', workerResponse);
removeLoadingModal();
createErrorModal(null, "Close", "Failed to fetch workers.");
return;
}
......@@ -49,6 +69,8 @@ export class ElementListWidget {
if (!selectedWorker) {
console.error(`Worker with ID ${workerId} not found.`);
removeLoadingModal();
createErrorModal(null, "Close", "Worker not found.");
return;
}
......@@ -62,10 +84,54 @@ export class ElementListWidget {
);
} else {
this.elements = [];
removeLoadingModal();
createErrorModal(null, "Close", `Failed to fetch elements or received malformed data: ${elementResponse}`);
console.error('Failed to fetch elements or received malformed data:', elementResponse);
return;
}
this.render();
// Populate the list with all elements initially
this.applySearchFilter('');
removeLoadingModal();
}
async reloadElementList (nodeId, workerId){
console.log(`Fetching workers for node ID: ${nodeId}`);
const workerResponse = await fetchWorkersForNode(nodeId);
console.log("Worker API Response:", workerResponse);
if (workerResponse.successful && Array.isArray(workerResponse.workers)) {
this.global.workers = workerResponse.workers;
} else {
console.error('Failed to fetch workers:', workerResponse);
createErrorModal(null, "Close", "Failed to fetch workers.");
return;
}
const selectedWorker = this.global.workers.find(worker => worker.workerId === workerId);
if (!selectedWorker) {
console.error(`Worker with ID ${workerId} not found.`);
createErrorModal(null, "Close", "Worker not found.");
}
/* console.log(`Fetching elements for node ID: ${nodeId}`);*/
const elementResponse = await fetchElementsForNode(nodeId);
/* console.log("Elements API Response:", elementResponse);*/
if (elementResponse.successful && Array.isArray(elementResponse.elements)) {
this.elements = elementResponse.elements.filter(element =>
selectedWorker.queueIndex.includes(element.queueIndex)
);
} else {
this.elements = [];
createErrorModal(null, "Close", `Failed to fetch elements or received malformed data: ${elementResponse}`);
console.error('Failed to fetch elements or received malformed data:', elementResponse);
return;
}
// Populate the list with all elements initially
this.applySearchFilter(this.global.searchInput.value);
}
render() {
......@@ -94,11 +160,11 @@ export class ElementListWidget {
topDiv.classList.add("element-list-top-div");
// Create a search input field
const searchInput = document.createElement("input");
searchInput.placeholder = "Search elements...";
searchInput.id = "search-input";
searchInput.type = "text";
topDiv.appendChild(searchInput);
this.global.searchInput = document.createElement("input");
this.global.searchInput.placeholder = "Search elements...";
this.global.searchInput.id = "search-input";
this.global.searchInput.type = "text";
topDiv.appendChild(this.global.searchInput);
this.global.container.appendChild(topDiv);
// Create user profile icon span
......@@ -146,8 +212,8 @@ export class ElementListWidget {
topDiv.appendChild(userProfileIcon);
// Event listener for search input
searchInput.addEventListener("input", () => {
this.applySearchFilter(searchInput.value);
this.global.searchInput.addEventListener("input", () => {
this.applySearchFilter(this.global.searchInput.value);
});
// Create an element list container for the elements
......@@ -156,9 +222,6 @@ export class ElementListWidget {
elementList.id = "element-list";
this.global.container.appendChild(elementList);
// Populate the list with all elements initially
this.applySearchFilter('');
// Create a parent div for the buttons
const buttonContainer = document.createElement("div");
buttonContainer.classList.add("button-container");
......@@ -259,8 +322,6 @@ export class ElementListWidget {
}
showExtraDetails(element, elementContainer) {
// Remove existing extra details if any
this.removeExtraDetails(elementContainer);
......@@ -417,23 +478,59 @@ export class ElementListWidget {
}
async function fetchWorkersForNode(nodeId) {
try {
const response = await fetch(`${API_ROOT}/nodes/${nodeId}/workers`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
}
async function fetchElementsForNode(nodeId) {
try {
const response = await fetch(`${API_ROOT}/nodes/${nodeId}/elements`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
}
async function assignElementToWorker(workerId, nodeId, queueIndex, elementId) {
try {
const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/elements/${queueIndex}/${elementId}`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
}
async function assignReturnedElementToWorker(workerId, nodeId, elementId) {
try {
const response = await fetch(`${API_ROOT}/workers/${workerId}/nodes/${nodeId}/returned-elements/${elementId}`);
if (!response.ok) {
throw new Error(`Error: ${response.status}`);
}
return await response.json();
} catch (error) {
return { error: 'Connection error' };
}
}
export function goBackToElementListViewer() {
......@@ -447,7 +544,6 @@ export function goBackToElementListViewer() {
// Reinstantiate and reinitialize the ElementListWidget
new ElementListWidget(CURRENT_NODE, 'containerId');
removeLoadingScreen();
return true;
}
......
export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc) => {
let modal = document.getElementById("modal-container");
if(modal){
removePrompt;
removeLoadingModal;
}
createPrompt();
......@@ -104,7 +104,7 @@ export const createLoadingModal = (titleTxt, message, type, btnTxt, callBackFunc
modal.style.display = 'block';
}
export const removePrompt = () => {
export const removeLoadingModal = () => {
let modal = document.getElementById("modal-container");
modal.remove();
}
......
......@@ -109,7 +109,7 @@ top: 4px;
}
.modal-body{
margin-top: 40px;
margin-top: 20px;
display: flex;
align-items: center;
flex-wrap: wrap;
......
......@@ -170,7 +170,7 @@ async function createNonBPOXML(fields, metrics, doctype, section, fieldOrder){
"fieldOrder" : fieldOrder
}
const authToken = sessionStorage.getItem('token');
try {
let response = await fetch(urlWriteXml, {
method: "POST",
headers: {
......@@ -180,7 +180,16 @@ async function createNonBPOXML(fields, metrics, doctype, section, fieldOrder){
body: JSON.stringify(xmlData)
});
return response;
if (response.ok) {
return true;
} else {
return false;
}
} catch (error) {
// Handle connection errors or other issues
console.error('Error:', error);
return false;
}
}
async function createBPOXML(fields, metrics, doctype, section, fieldOrder){
......@@ -213,6 +222,7 @@ async function createBPOXML(fields, metrics, doctype, section, fieldOrder){
}
const authToken = sessionStorage.getItem('token');
try {
let response = await fetch(urlWriteXml, {
method: "POST",
headers: {
......@@ -222,8 +232,16 @@ async function createBPOXML(fields, metrics, doctype, section, fieldOrder){
body: JSON.stringify(xmlData)
});
return response;
if (response.ok) {
return true;
} else {
return false;
}
} catch (error) {
// Handle connection errors or other issues
console.error('Error:', error);
return false;
}
}
......
import { createLoadingScreen } from "../../script.js";
import { getUrlCompleteToNextNode } from "../BPO/bpoService.js";
import { saveForm } from "../DataInputWidget/generateFields.js";
import { checkValidValues, validateInput } from "../DataInputWidget/validateInput.js";
import { goBackToElementListViewer } from "../ElementListWidget/ElementListWidget.js";
import { uploadFile } from "../FileUpload/fileUpload.js";
import { createLoadingModal, removePrompt } from "../LoadingModal/LoadingModal.js";
import { createLoadingModal, removeLoadingModal } from "../LoadingModal/LoadingModal.js";
import { global_end_time, saveMetrics, stopMetricCapture, setGlobalEndTime, interval } from "../captureMetrics/captureMetrics.js";
import { IS_RETRIEVE_FROM_BPO, SHOW_ELEMENT_LIST_VIEWER } from "../config.js";
import { createConfirmationModal, createErrorModal, createInfoModal } from "../genericPopup/genericPopup.js";
......@@ -141,7 +140,7 @@ export const submitForm = async (e) => {
console.log(getFile.text());
// await uploadTOGFS(getFile.text(), sessionStorage.getItem("recentlySavedFileName"));
} else {
createInfoModal(null, 'OK', 'Error while uploading');
createInfoModal(null, 'OK', 'Error while generating output.');
return false
}
}else {
......@@ -161,6 +160,9 @@ export const submitForm = async (e) => {
},
body: JSON.stringify(filePath)
});
} else {
createInfoModal(null, 'OK', 'Error while generating output.');
return false
}
}
// saveForm(sessionStorage.getItem("display_counter"));
......@@ -179,7 +181,7 @@ export async function createSubmitWindow(e){
createLoadingModal("Submitting Element", "Please wait...", null, null, null);
submitStatus = await submitForm(e);
if(submitStatus){
removePrompt();
removeLoadingModal();
DISPLAY_FIELD_OBJECT.clearForm();
if (SHOW_ELEMENT_LIST_VIEWER === "Y") {
console.log("PUMASOK DITO");
......@@ -191,7 +193,7 @@ export async function createSubmitWindow(e){
let response = await completeToNextNode(sessionStorage.getItem("element_id"));
}
} else{
removePrompt();
removeLoadingModal();
}
};
......
import { createLoadingScreen, removeLoadingScreen } from '../../script.js';
import { createRejectWindow } from '../BPO/rejectElement.js';
import { createReturnWindow } from '../BPO/returnElement.js';
import { goBackToElementListViewer } from '../ElementListWidget/ElementListWidget.js';
......
......@@ -17,7 +17,6 @@ document.addEventListener("DOMContentLoaded", function() {
startApplication();
export async function startApplication() {
createLoadingScreen();
await initializeWebGDE();
}
......@@ -36,7 +35,6 @@ async function initializeWebGDE() {
if(mainLogInScreenContainer){
mainLogInScreenContainer.remove();
}
removeLoadingScreen();
new ElementListWidget(CURRENT_NODE, 'containerId');
} else {
......@@ -48,7 +46,6 @@ async function initializeWebGDE() {
if(mainLogInScreenContainer){
mainLogInScreenContainer.remove();
}
removeLoadingScreen();
}
}
......@@ -88,48 +85,6 @@ async function createInputForm() {
//document.getElementById("input-field-container").appendChild(controls.getWidget());
}
export function createLoadingScreen() {
const centerContainer = document.createElement("center");
let modalContainer = document.getElementById("modal-container");
if (modalContainer) {
modalContainer.style.display = "block";
} else {
modalContainer = document.createElement("div");
modalContainer.setAttribute("class", "modal-container");
modalContainer.setAttribute("id", "modal-container");
}
let loaderContainer = document.getElementById("loaderContainer");
if (!loaderContainer) {
loaderContainer = document.createElement("div");
loaderContainer.setAttribute("id", "loaderContainer");
loaderContainer.setAttribute("class", "modal");
}
let loader1 = document.createElement("div");
loader1.setAttribute("class", "loader");
loader1.setAttribute("id", "loader");
loaderContainer.appendChild(loader1);
centerContainer.appendChild(loaderContainer);
modalContainer.appendChild(centerContainer);
document.body.appendChild(modalContainer);
}
export function removeLoadingScreen() {
let modalContainer = document.getElementById("modal-container");
if (modalContainer) {
modalContainer.style.display = "none";
}
let loaderContainer = document.getElementById("loaderContainer");
if (loaderContainer) {
loaderContainer.remove();
}
}
export async function resetGDE() {
// TO-DO
}
......
import { createLoadingModal, removePrompt } from "./WebGde-Widgets/LoadingModal/LoadingModal.js";
import { createLoadingModal, removeLoadingModal } from "./WebGde-Widgets/LoadingModal/LoadingModal.js";
import { fallbackLogin, loginGde } from "./WebGde-Widgets/LogInWidget/LoginJavaInterface.js";
const scriptElement = document.createElement("script");
......@@ -9,7 +9,7 @@ document.addEventListener("DOMContentLoaded", function() {
window.createLoadingModal = createLoadingModal;
window.fallbackLogin = fallbackLogin;
window.loginGde = loginGde;
window.removePrompt = removePrompt;
window.removeLoadingModal = removeLoadingModal;
// const LOG_IN_COMPONENT = new LogInClass(startApplication);
// LOG_IN_COMPONENT.establishEventListeners();
});
......
......@@ -44,7 +44,8 @@ public class AuthorizedFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
System.out.println("Authorized annotation detected!");
if (!verifyCaller(requestContext)) {
if (false) { // IMPORTANT! PLEASE COMMENT OUT BEFORE COMMIT.
// if (!verifyCaller(requestContext)) {
try {
redirect(requestContext);
} catch (URISyntaxException e) {
......
......@@ -239,13 +239,15 @@ public class GDEWebServices {
}
}
File file = new File(filePath);
if (!file.exists()) {
System.out.println("creating output directory");
response = XMLUtil.generateXML(xml);
} else {
response = XMLUtil.udpateXML(xml);
}
// File file = new File(filePath);
// if (!file.exists()) {
// System.out.println("creating output directory");
// response = XMLUtil.generateXML(xml);
// } else {
// response = XMLUtil.udpateXML(xml);
// }
} catch (Exception e) {
e.printStackTrace();
return Response.status(500).entity("Fail").build();
......
package com.svi.webgde.restservice.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.nio.file.Files;
import java.nio.file.Paths;
......@@ -109,9 +111,18 @@ public class XMLUtil {
transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
Result result = new StreamResult(xml.getOutputDir());
try (OutputStream outputStream = new FileOutputStream(xml.getOutputDir())) {
// Set the output stream for the StreamResult
Result result = new StreamResult(outputStream);
// Perform the transformation
transformer.transform(source, result);
} catch (IOException e) {
// Handle IOException
e.printStackTrace();
}
// Return the content of the generated file
return new String(Files.readAllBytes(Paths.get(xml.getOutputDir())));
}
......
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