From b0cb7a2a0a203df61b2adb96d909e76b66c978e7 Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Thu, 3 Sep 2026 10:43:09 -0400 Subject: [PATCH 01/10] Group Status Summaries Fixes #22 --- build.gradle | 7 ++++ container/oracle/initdb.d/02_ddl.sql | 16 ++++++++- container/oracle/initdb.d/04_settings.sql | 34 +++++++++++++++++++ .../session/AccActivityRecordFacade.java | 2 +- .../business/session/AccessRecordFacade.java | 2 +- .../session/BeamToHallRecordFacade.java | 2 +- .../business/session/BodySlideFacade.java | 2 +- .../business/session/BtaRecordFacade.java | 2 +- .../session/BtaShiftInfoSlideFacade.java | 2 +- .../session/CCPresentationFacade.java | 2 +- .../business/session/IFrameSlideFacade.java | 2 +- .../business/session/ImageSlideFacade.java | 2 +- .../session/LASOPresentationFacade.java | 2 +- .../session/LOPresentationFacade.java | 2 +- .../session/PDPresentationFacade.java | 2 +- .../business/session/PdAccessSlideFacade.java | 2 +- .../session/PdBeamAccSlideFacade.java | 2 +- .../business/session/PdInfoSlideFacade.java | 2 +- .../business/session/PresentationFacade.java | 2 +- .../session/PresentationLogFacade.java | 2 +- .../session/ShiftInfoSlideFacade.java | 2 +- .../business/session/SlideFacade.java | 2 +- .../session/TitleBodyImageSlideFacade.java | 2 +- .../session/TitleBodySlideFacade.java | 2 +- .../session/TitleImageSlideFacade.java | 2 +- .../session/UITFPresentationFacade.java | 2 +- .../controller/ContextRootController.java | 34 +++++++++++++++++++ src/main/resources/META-INF/persistence.xml | 3 +- src/main/webapp/WEB-INF/web.xml | 26 +++++++++----- 29 files changed, 132 insertions(+), 34 deletions(-) create mode 100644 container/oracle/initdb.d/04_settings.sql create mode 100644 src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java diff --git a/build.gradle b/build.gradle index 1559bc7..1fefb2f 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ description = "Presentation app" group = 'org.jlab' version = new File("${projectDir}/VERSION").text.trim() ext.version = project.version +ext.smoothnessVersion = '5.2.0' ext.releaseDate = new Date().format('MMM dd yyyy') tasks.withType(JavaCompile).configureEach { @@ -18,6 +19,9 @@ repositories { mavenCentral() } dependencies { + // No matter what smoothness weblib MUST be included in WAR (https://github.com/JeffersonLab/smoothness/issues/4) + implementation "org.jlab:smoothness-weblib:${smoothnessVersion}" + // Java 11 / Java EE 8 oddly doesn't support POSTING multipart/form-data implementation 'org.apache.httpcomponents:httpmime:4.5.14' @@ -46,6 +50,9 @@ war { filter { String line -> line.replaceAll("@RELEASE_DATE@", releaseDate) } + filter { + String line -> line.replaceAll("@SMOOTHNESS_VERSION@", smoothnessVersion) + } } } spotless { diff --git a/container/oracle/initdb.d/02_ddl.sql b/container/oracle/initdb.d/02_ddl.sql index bb14987..7a5c7c6 100644 --- a/container/oracle/initdb.d/02_ddl.sql +++ b/container/oracle/initdb.d/02_ddl.sql @@ -332,4 +332,18 @@ CREATE TABLE PRESENTER_OWNER.STAFF ( "STAFF_ID" NUMBER(*,0) NOT NULL, "USERNAME" VARCHAR2(32) -); \ No newline at end of file +); + +CREATE TABLE PRESENTER_OWNER.SETTING +( + KEY VARCHAR2(128 CHAR) NOT NULL, + VALUE VARCHAR2(4000 BYTE) NOT NULL, + TYPE VARCHAR2(32 CHAR) DEFAULT 'STRING' NOT NULL, + DESCRIPTION VARCHAR2(2048 CHAR) NOT NULL, + TAG VARCHAR2(32 CHAR) DEFAULT 'OTHER' NOT NULL, + WEIGHT INTEGER DEFAULT 0 NOT NULL, + CHANGE_ACTION_JNDI VARCHAR2(128 CHAR) NULL , + CONSTRAINT SETTING_PK PRIMARY KEY (KEY), + CONSTRAINT SETTING_CK1 CHECK (TYPE IN ('STRING', 'BOOLEAN', 'CSV')), + CONSTRAINT SETTING_CK2 CHECK ((VALUE in ('Y', 'N') AND TYPE = 'BOOLEAN') OR TYPE <> 'BOOLEAN') +); diff --git a/container/oracle/initdb.d/04_settings.sql b/container/oracle/initdb.d/04_settings.sql new file mode 100644 index 0000000..376597b --- /dev/null +++ b/container/oracle/initdb.d/04_settings.sql @@ -0,0 +1,34 @@ +alter session set container = XEPDB1; + +-- SETTING CONFIG +-- Update with your schema name +ALTER SESSION SET CURRENT_SCHEMA = PRESENTER_OWNER; + +-- REQUIRED: Admin Config +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('ADMIN_ROLE_NAME', 'presenter-admin', 'STRING', 'App-specific Admin Role Name', 'AUTH', 1); + +-- OPTIONAL: CDN Config +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('SMOOTHNESS_CDN_ENABLED', 'N', 'BOOLEAN', 'Smoothness weblib resources from CDN. Defaults to No = serve files locally. CDN is for minified files on shared Content Delivery Network (CDN) server - Nice for when multiple apps use same resources to have warm cache.', 'CDN', 1); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('SMOOTHNESS_SERVER', 'ace.jlab.org/cdn', 'STRING', 'Host name and port of content delivery network host for shared smoothness resources. Only used if SMOOTHNESS_CDN_ENABLED = Y', 'CDN', 2); + +-- OPTIONAL: IP READ FILTER (ACL) +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('IP_READ_FILTER_ENABLED', 'N', 'BOOLEAN', 'Whether to enable IP filtering of pages requiring auth to view. You must redeploy the app for this setting change to take effect.', 'ACL', 1); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT, CHANGE_ACTION_JNDI) values ('IP_READ_ALLOWLIST_PATTERN', '127\.0.*', 'STRING', 'Java REGEX Pattern of allowed IPs for unauthenticated access to view IpReadFilter pages', 'ACL', 2, 'java:global/smoothness/IpReadAllowlistReconfigureService'); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('IP_READ_URL_PATTERN', '/*', 'STRING', 'URL patterns to match when applying the IP Read Filter. You must redeploy the app for this setting change to take effect.', 'ACL', 3); + +-- OPTIONAL: Notification Banner +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_ENABLED', 'Y', 'BOOLEAN', 'Notification banner enabled', 'NOTIFICATION', 1); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_MESSAGE', 'Development Environment', 'STRING', 'Notification message', 'NOTIFICATION', 2); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_LINK_NAME', 'Home', 'STRING', 'Notification link name', 'NOTIFICATION', 3); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_LINK_URL', 'https://github.com/JeffersonLab/presenter', 'STRING', 'Notification link URL', 'NOTIFICATION', 4); + +-- OPTIONAL: Help Page +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_CONTENT_CONTACT', 'John Doe (jdoe)', 'STRING', 'Content Contact for help page', 'HELP', 1); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_TECHNICAL_CONTACT', 'John Doe (jdoe)', 'STRING', 'Technical Contact for help page', 'HELP', 2); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_DOC_CSV', 'https://github.com/JeffersonLab/presenter|Home', 'CSV', 'CSV of documentation items where each item is a URL and a Label separated with the pipe symbol', 'HELP', 3); + +-- OPTIONAL: Email +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_ENABLED', 'Y', 'BOOLEAN', 'Emails (including Help/Feedback) enabled', 'EMAIL', 1); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_TESTING_ENABLED', 'N', 'BOOLEAN', 'Send all emails to testlead user group', 'EMAIL', 2); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_DOMAIN_NAME', '@jlab.org', 'STRING', 'The email domain to append to usernames, starting with and including the ampersat.', 'EMAIL', 3); +insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_SENDER_ADDRESS', 'template@jlab.org', 'STRING', 'Email address to use as sender from emails generated in this app. Note: this is not the same as "from".', 'EMAIL', 4); diff --git a/src/main/java/org/jlab/presenter/business/session/AccActivityRecordFacade.java b/src/main/java/org/jlab/presenter/business/session/AccActivityRecordFacade.java index bac8cf9..835f914 100644 --- a/src/main/java/org/jlab/presenter/business/session/AccActivityRecordFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/AccActivityRecordFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class AccActivityRecordFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/AccessRecordFacade.java b/src/main/java/org/jlab/presenter/business/session/AccessRecordFacade.java index dc528ff..808d625 100644 --- a/src/main/java/org/jlab/presenter/business/session/AccessRecordFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/AccessRecordFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class AccessRecordFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/BeamToHallRecordFacade.java b/src/main/java/org/jlab/presenter/business/session/BeamToHallRecordFacade.java index ec2e601..f162ecc 100644 --- a/src/main/java/org/jlab/presenter/business/session/BeamToHallRecordFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/BeamToHallRecordFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class BeamToHallRecordFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/BodySlideFacade.java b/src/main/java/org/jlab/presenter/business/session/BodySlideFacade.java index d9e6f2d..11d34ab 100644 --- a/src/main/java/org/jlab/presenter/business/session/BodySlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/BodySlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class BodySlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/BtaRecordFacade.java b/src/main/java/org/jlab/presenter/business/session/BtaRecordFacade.java index f29f766..184c6d0 100644 --- a/src/main/java/org/jlab/presenter/business/session/BtaRecordFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/BtaRecordFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class BtaRecordFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/BtaShiftInfoSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/BtaShiftInfoSlideFacade.java index 1777619..5a6fc37 100644 --- a/src/main/java/org/jlab/presenter/business/session/BtaShiftInfoSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/BtaShiftInfoSlideFacade.java @@ -13,7 +13,7 @@ */ @Stateless public class BtaShiftInfoSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/CCPresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/CCPresentationFacade.java index caec570..5e15d14 100644 --- a/src/main/java/org/jlab/presenter/business/session/CCPresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/CCPresentationFacade.java @@ -16,7 +16,7 @@ */ @Stateless(mappedName = "CCPresentationFacade") public class CCPresentationFacade extends ShiftPresentationFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/IFrameSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/IFrameSlideFacade.java index 9feadbb..2d21a05 100644 --- a/src/main/java/org/jlab/presenter/business/session/IFrameSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/IFrameSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class IFrameSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/ImageSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/ImageSlideFacade.java index db15c3f..2770b41 100644 --- a/src/main/java/org/jlab/presenter/business/session/ImageSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/ImageSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class ImageSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/LASOPresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/LASOPresentationFacade.java index da5ccd3..98b1c46 100644 --- a/src/main/java/org/jlab/presenter/business/session/LASOPresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/LASOPresentationFacade.java @@ -17,7 +17,7 @@ @Stateless public class LASOPresentationFacade extends ShiftPresentationFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/LOPresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/LOPresentationFacade.java index 5e67de7..c696b1f 100644 --- a/src/main/java/org/jlab/presenter/business/session/LOPresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/LOPresentationFacade.java @@ -17,7 +17,7 @@ @Stateless public class LOPresentationFacade extends ShiftPresentationFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/PDPresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/PDPresentationFacade.java index ceb59bb..6628f0e 100644 --- a/src/main/java/org/jlab/presenter/business/session/PDPresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PDPresentationFacade.java @@ -26,7 +26,7 @@ @DeclareRoles({"pd", "presenter-admin"}) public class PDPresentationFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @EJB SlideFacade slideFacade; diff --git a/src/main/java/org/jlab/presenter/business/session/PdAccessSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/PdAccessSlideFacade.java index 710b657..c50d631 100644 --- a/src/main/java/org/jlab/presenter/business/session/PdAccessSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PdAccessSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class PdAccessSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/PdBeamAccSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/PdBeamAccSlideFacade.java index 82eea86..0c3c06b 100644 --- a/src/main/java/org/jlab/presenter/business/session/PdBeamAccSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PdBeamAccSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class PdBeamAccSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/PdInfoSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/PdInfoSlideFacade.java index 878049d..f5dd180 100644 --- a/src/main/java/org/jlab/presenter/business/session/PdInfoSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PdInfoSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class PdInfoSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/PresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/PresentationFacade.java index 8dd9728..1441b22 100644 --- a/src/main/java/org/jlab/presenter/business/session/PresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PresentationFacade.java @@ -63,7 +63,7 @@ public class PresentationFacade extends AbstractFacade { private static final Logger LOGGER = Logger.getLogger(PresentationFacade.class.getName()); - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Resource private SessionContext context; diff --git a/src/main/java/org/jlab/presenter/business/session/PresentationLogFacade.java b/src/main/java/org/jlab/presenter/business/session/PresentationLogFacade.java index 6e9d7e6..79fcade 100644 --- a/src/main/java/org/jlab/presenter/business/session/PresentationLogFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/PresentationLogFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class PresentationLogFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/ShiftInfoSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/ShiftInfoSlideFacade.java index ce5ed89..41c2352 100644 --- a/src/main/java/org/jlab/presenter/business/session/ShiftInfoSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/ShiftInfoSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class ShiftInfoSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/SlideFacade.java b/src/main/java/org/jlab/presenter/business/session/SlideFacade.java index 864518d..2cdf24f 100644 --- a/src/main/java/org/jlab/presenter/business/session/SlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/SlideFacade.java @@ -22,7 +22,7 @@ @DeclareRoles({"pd", "cc", "presenter-admin"}) public class SlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Resource private SessionContext context; diff --git a/src/main/java/org/jlab/presenter/business/session/TitleBodyImageSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/TitleBodyImageSlideFacade.java index c4b5979..36c375b 100644 --- a/src/main/java/org/jlab/presenter/business/session/TitleBodyImageSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/TitleBodyImageSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class TitleBodyImageSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/TitleBodySlideFacade.java b/src/main/java/org/jlab/presenter/business/session/TitleBodySlideFacade.java index 2d5ef77..ad7c4a8 100644 --- a/src/main/java/org/jlab/presenter/business/session/TitleBodySlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/TitleBodySlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class TitleBodySlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/TitleImageSlideFacade.java b/src/main/java/org/jlab/presenter/business/session/TitleImageSlideFacade.java index 7945889..6f96ac8 100644 --- a/src/main/java/org/jlab/presenter/business/session/TitleImageSlideFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/TitleImageSlideFacade.java @@ -10,7 +10,7 @@ */ @Stateless public class TitleImageSlideFacade extends AbstractFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/business/session/UITFPresentationFacade.java b/src/main/java/org/jlab/presenter/business/session/UITFPresentationFacade.java index 0bbec0e..f2a14ee 100644 --- a/src/main/java/org/jlab/presenter/business/session/UITFPresentationFacade.java +++ b/src/main/java/org/jlab/presenter/business/session/UITFPresentationFacade.java @@ -17,7 +17,7 @@ @Stateless public class UITFPresentationFacade extends ShiftPresentationFacade { - @PersistenceContext(unitName = "presenterPU") + @PersistenceContext(unitName = "webappPU") private EntityManager em; @Override diff --git a/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java b/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java new file mode 100644 index 0000000..71360a9 --- /dev/null +++ b/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java @@ -0,0 +1,34 @@ +package org.jlab.presenter.presentation.controller; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author ryans + */ +@WebServlet( + name = "ContextRootController", + urlPatterns = {""}) +public class ContextRootController extends HttpServlet { + + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + // Using welcome-file in web.xml is less-good way of doing this as instead of redirect, it's a + // forward. + response.sendRedirect(request.getContextPath() + "/pd-menu"); + } +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 232c4b0..2f173c4 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -2,7 +2,7 @@ - + org.hibernate.jpa.HibernatePersistenceProvider jdbc/presenter false @@ -11,5 +11,6 @@ + org.jlab.smoothness.persistence.entity.Setting diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 4ba25cd..62071d6 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -3,9 +3,6 @@ xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"> - - pd-menu - appName Presenter @@ -23,13 +20,14 @@ @RELEASE_DATE@ - contentContact - Daniel Moser (moser) - - - technicalContact - Ryan Slominski (ryans) + smoothnessVersion + @SMOOTHNESS_VERSION@ + Needed if you enable CDN. Set once in build.gradle. + + org.jlab.smoothness.presentation.util.SettingsCacheInit + We don't use @WebListener because we want this listener to be first in case others use DB Setting Cache + UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter @@ -70,6 +68,16 @@ CONFIDENTIAL + + Enforce Admin on setup pages + + Setup Pages + /setup/* + + + presenter-admin + + OIDC From b5c04c745db667e17d51af9d42ca74b7b2a54d46 Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Thu, 3 Sep 2026 11:02:53 -0400 Subject: [PATCH 02/10] Fit pd-menu to new layout --- .../controller/ContextRootController.java | 2 +- .../{PDMenu.java => Presentations.java} | 12 +- .../presentation/filter/IPAuthFilter.java | 2 +- .../util/PresentationMenuUtil.java | 2 +- .../presenter/presentation/util/ShowInfo.java | 2 +- src/main/webapp/WEB-INF/tags/app-script.tag | 2 + src/main/webapp/WEB-INF/tags/app-style.tag | 2 + src/main/webapp/WEB-INF/tags/footnote.tag | 1 + src/main/webapp/WEB-INF/tags/header-extra.tag | 1 + src/main/webapp/WEB-INF/tags/page.tag | 141 ------------------ src/main/webapp/WEB-INF/tags/primary-nav.tag | 21 +++ src/main/webapp/WEB-INF/tags/setup-nav.tag | 13 ++ src/main/webapp/WEB-INF/tags/user-extra.tag | 1 + src/main/webapp/WEB-INF/views/error.jsp | 5 +- .../views/{pd-menu.jsp => presentations.jsp} | 11 +- src/main/webapp/resources/css/presenter.css | 3 + src/main/webapp/resources/img/logo32x32.png | Bin 0 -> 779 bytes 17 files changed, 63 insertions(+), 158 deletions(-) rename src/main/java/org/jlab/presenter/presentation/controller/{PDMenu.java => Presentations.java} (98%) create mode 100644 src/main/webapp/WEB-INF/tags/app-script.tag create mode 100644 src/main/webapp/WEB-INF/tags/app-style.tag create mode 100644 src/main/webapp/WEB-INF/tags/footnote.tag create mode 100644 src/main/webapp/WEB-INF/tags/header-extra.tag delete mode 100644 src/main/webapp/WEB-INF/tags/page.tag create mode 100644 src/main/webapp/WEB-INF/tags/primary-nav.tag create mode 100644 src/main/webapp/WEB-INF/tags/setup-nav.tag create mode 100644 src/main/webapp/WEB-INF/tags/user-extra.tag rename src/main/webapp/WEB-INF/views/{pd-menu.jsp => presentations.jsp} (97%) create mode 100644 src/main/webapp/resources/css/presenter.css create mode 100644 src/main/webapp/resources/img/logo32x32.png diff --git a/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java b/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java index 71360a9..2969fe5 100644 --- a/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java +++ b/src/main/java/org/jlab/presenter/presentation/controller/ContextRootController.java @@ -29,6 +29,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) // Using welcome-file in web.xml is less-good way of doing this as instead of redirect, it's a // forward. - response.sendRedirect(request.getContextPath() + "/pd-menu"); + response.sendRedirect(request.getContextPath() + "/presentations"); } } diff --git a/src/main/java/org/jlab/presenter/presentation/controller/PDMenu.java b/src/main/java/org/jlab/presenter/presentation/controller/Presentations.java similarity index 98% rename from src/main/java/org/jlab/presenter/presentation/controller/PDMenu.java rename to src/main/java/org/jlab/presenter/presentation/controller/Presentations.java index d130be2..617baa4 100644 --- a/src/main/java/org/jlab/presenter/presentation/controller/PDMenu.java +++ b/src/main/java/org/jlab/presenter/presentation/controller/Presentations.java @@ -34,11 +34,11 @@ * @author ryans */ @WebServlet( - name = "PDMenu", - urlPatterns = {"/pd-menu"}) -public class PDMenu extends HttpServlet { + name = "Presentations", + urlPatterns = {"/presentations"}) +public class Presentations extends HttpServlet { - private static final Logger logger = Logger.getLogger(PDMenu.class.getName()); + private static final Logger logger = Logger.getLogger(Presentations.class.getName()); @EJB PresentationFacade presentationFacade; @EJB PDPresentationFacade pdPresentationFacade; @EJB CCPresentationFacade ccPresentationFacade; @@ -85,7 +85,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) getServletConfig() .getServletContext() - .getRequestDispatcher("/WEB-INF/views/pd-menu.jsp") + .getRequestDispatcher("/WEB-INF/views/presentations.jsp") .forward(request, response); } @@ -182,7 +182,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) getServletConfig() .getServletContext() - .getRequestDispatcher("/WEB-INF/views/pd-menu.jsp") + .getRequestDispatcher("/WEB-INF/views/presentations.jsp") .forward( request, response); /*This is bad. Should not forward from POST. This POST should be done via AJAX*/ diff --git a/src/main/java/org/jlab/presenter/presentation/filter/IPAuthFilter.java b/src/main/java/org/jlab/presenter/presentation/filter/IPAuthFilter.java index 1be8f06..44ae8f5 100644 --- a/src/main/java/org/jlab/presenter/presentation/filter/IPAuthFilter.java +++ b/src/main/java/org/jlab/presenter/presentation/filter/IPAuthFilter.java @@ -34,7 +34,7 @@ public class IPAuthFilter implements Filter { "/resources", "/keep-alive", "/logout", - "/pd-menu" // welcome page + "/presentations" // welcome page }; public static final String LOCAL_PATTERN_STRING = "127\\.0\\.0\\.1"; diff --git a/src/main/java/org/jlab/presenter/presentation/util/PresentationMenuUtil.java b/src/main/java/org/jlab/presenter/presentation/util/PresentationMenuUtil.java index 6acbd2a..b734c5b 100644 --- a/src/main/java/org/jlab/presenter/presentation/util/PresentationMenuUtil.java +++ b/src/main/java/org/jlab/presenter/presentation/util/PresentationMenuUtil.java @@ -38,7 +38,7 @@ public class PresentationMenuUtil { public static void delete( HttpServletRequest request, HttpServletResponse response, BigInteger presentationId) throws IOException { - response.sendRedirect("pd-menu"); + response.sendRedirect("presentations"); } private PresentationMenuUtil() { diff --git a/src/main/java/org/jlab/presenter/presentation/util/ShowInfo.java b/src/main/java/org/jlab/presenter/presentation/util/ShowInfo.java index 2817752..f5c4520 100644 --- a/src/main/java/org/jlab/presenter/presentation/util/ShowInfo.java +++ b/src/main/java/org/jlab/presenter/presentation/util/ShowInfo.java @@ -361,7 +361,7 @@ public List getTemplateList() { @Override public String getMenuUrl() { - return "pd-menu"; + return "presentations"; } @Override diff --git a/src/main/webapp/WEB-INF/tags/app-script.tag b/src/main/webapp/WEB-INF/tags/app-script.tag new file mode 100644 index 0000000..6a3eb9a --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/app-script.tag @@ -0,0 +1,2 @@ +<%@tag description="App Script Tag" pageEncoding="UTF-8"%> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/app-style.tag b/src/main/webapp/WEB-INF/tags/app-style.tag new file mode 100644 index 0000000..81aa3b1 --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/app-style.tag @@ -0,0 +1,2 @@ +<%@tag description="App Style Tag" pageEncoding="UTF-8"%> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/footnote.tag b/src/main/webapp/WEB-INF/tags/footnote.tag new file mode 100644 index 0000000..22584b4 --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/footnote.tag @@ -0,0 +1 @@ +<%@tag description="Footnote Tag" pageEncoding="UTF-8"%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/header-extra.tag b/src/main/webapp/WEB-INF/tags/header-extra.tag new file mode 100644 index 0000000..228677c --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/header-extra.tag @@ -0,0 +1 @@ +<%@tag description="Header Extra Tag" pageEncoding="UTF-8"%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/page.tag b/src/main/webapp/WEB-INF/tags/page.tag deleted file mode 100644 index 0dfb156..0000000 --- a/src/main/webapp/WEB-INF/tags/page.tag +++ /dev/null @@ -1,141 +0,0 @@ -<%@tag description="The Site Page Template Tag" pageEncoding="UTF-8"%> -<%@taglib prefix="c" uri="jakarta.tags.core"%> -<%@taglib prefix="fn" uri="jakarta.tags.functions"%> -<%@attribute name="title"%> -<%@attribute name="stylesheets" fragment="true"%> -<%@attribute name="scripts" fragment="true"%> - - - - - - - <c:out value="${initParam.appShortName}"/> - ${title} - - - - - - - - - - - - - - -
-
-
-
-
-

-
- - - - - -
- -
-
- - -
-
- - - - - - - - - - Login - - SU - - -
-
-
-
-

- -
-
-
-
- -
-
-
- - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/primary-nav.tag b/src/main/webapp/WEB-INF/tags/primary-nav.tag new file mode 100644 index 0000000..c52180e --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/primary-nav.tag @@ -0,0 +1,21 @@ +<%@tag description="Primary Navigation Tag" pageEncoding="UTF-8"%> +<%@taglib prefix="c" uri="jakarta.tags.core"%> +<%@taglib prefix="fn" uri="jakarta.tags.functions"%> +<%@taglib prefix="fmt" uri="jakarta.tags.fmt"%> +<%@taglib prefix="s" uri="jlab.tags.smoothness"%> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/setup-nav.tag b/src/main/webapp/WEB-INF/tags/setup-nav.tag new file mode 100644 index 0000000..e29e6ae --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/setup-nav.tag @@ -0,0 +1,13 @@ +<%@tag description="Setup Navigation Tag" pageEncoding="UTF-8"%> +<%@taglib prefix="c" uri="jakarta.tags.core"%> +<%@taglib prefix="fn" uri="jakarta.tags.functions"%> +<%@taglib prefix="fmt" uri="jakarta.tags.fmt"%> +<%@taglib prefix="s" uri="jlab.tags.smoothness"%> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/user-extra.tag b/src/main/webapp/WEB-INF/tags/user-extra.tag new file mode 100644 index 0000000..ad266be --- /dev/null +++ b/src/main/webapp/WEB-INF/tags/user-extra.tag @@ -0,0 +1 @@ +<%@tag description="User Extra Tag" pageEncoding="UTF-8"%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/error.jsp b/src/main/webapp/WEB-INF/views/error.jsp index 01ed2b9..f7adf16 100644 --- a/src/main/webapp/WEB-INF/views/error.jsp +++ b/src/main/webapp/WEB-INF/views/error.jsp @@ -2,9 +2,10 @@ <%@taglib prefix="c" uri="jakarta.tags.core"%> <%@taglib prefix="fn" uri="jakarta.tags.functions"%> <%@taglib prefix="fmt" uri="jakarta.tags.fmt"%> +<%@taglib prefix="s" uri="jlab.tags.smoothness"%> <%@taglib prefix="t" tagdir="/WEB-INF/tags"%> - +