NavAction.java

package emissary.server.mvc;

import emissary.config.ConfigUtil;
import emissary.config.Configurator;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import org.glassfish.jersey.server.mvc.Template;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Path("")
// context is emissary
public class NavAction {

    EmissaryNav nav;

    public NavAction() throws IOException {
        Configurator config = ConfigUtil.getConfigInfo(this.getClass());
        nav = new EmissaryNav();
        nav.setAppName(config.findStringEntry("APP_NAME", "Emissary"));
        nav.setAppVersion(config.findStringEntry("APP_VERSION", ""));
        nav.setNavItems(config.findStringMatchMap("NAV_ITEM_", true, true));
        nav.setNavButtons(config.findStringMatchMap("NAV_BUTTON_", true, true));
    }

    @GET
    @Path("/Nav.action")
    @Produces(MediaType.TEXT_HTML)
    @Template(name = "/nav")
    public EmissaryNav nav() {
        return nav;
    }

    public static class EmissaryNav {

        String appName;
        String appVersion;
        List<NavItem> navItems;
        List<NavItem> navButtons;

        public String getAppName() {
            return appName;
        }

        public void setAppName(String appName) {
            this.appName = appName;
        }

        public String getAppVersion() {
            return appVersion;
        }

        public void setAppVersion(String appVersion) {
            this.appVersion = appVersion;
        }

        public List<NavItem> getNavItems() {
            return navItems;
        }

        public void setNavItems(Map<String, String> navItems) {
            this.navItems = convert(navItems);
        }

        public List<NavItem> getNavButtons() {
            return navButtons;
        }

        public void setNavButtons(Map<String, String> navButtons) {
            this.navButtons = convert(navButtons);
        }

        protected static List<NavItem> convert(Map<String, String> map) {
            return map.entrySet().stream().map(e -> new NavItem(e.getKey(), e.getValue())).collect(Collectors.toList());
        }

        public static class NavItem {

            String display;
            String link;

            public NavItem(String display, String link) {
                this.display = display;
                this.link = link;
            }

            public String getDisplay() {
                return display;
            }

            public void setDisplay(String display) {
                this.display = display;
            }

            public String getLink() {
                return link;
            }

            public void setLink(String link) {
                this.link = link;
            }
        }
    }


}