package org.webpieces.router.impl.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.webpieces.ctx.api.RouterRequest; import org.webpieces.router.impl.Route; import org.webpieces.router.impl.RouteMeta; public class L1AllRouting { //This is specifically for ONE or TWO domains really. Use the main field for //1..N domains that generally use all the same routes. private final Map<String, L2DomainRoutes> specificDomainRoutes = new HashMap<>(); //routes for all domains EXCEPT those in specificDomainRoutes private final L2DomainRoutes main = new L2DomainRoutes(null); private final List<RouteMeta> staticRoutes = new ArrayList<>(); public L2DomainRoutes getMainRoutes() { return main; } public L2DomainRoutes getCreateDomainScoped(String domain) { L2DomainRoutes routes = specificDomainRoutes.get(domain); if(routes == null) { routes = new L2DomainRoutes(domain); specificDomainRoutes.put(domain, routes); } return routes; } public List<L2DomainRoutes> getAllDomains() { List<L2DomainRoutes> list = new ArrayList<>(); list.add(main); list.addAll(specificDomainRoutes.values()); return list; } public MatchResult fetchRoute(RouterRequest req, String relativePath) { String domain = req.domain; L2DomainRoutes domainRoutes = specificDomainRoutes.get(domain); if(domainRoutes != null) return domainRoutes.fetchRoute(staticRoutes, req, relativePath); return main.fetchRoute(staticRoutes, req, relativePath); } public RouteMeta getPageNotfoundRoute(String domain) { if(domain != null) { L2DomainRoutes domainRoutes = specificDomainRoutes.get(domain); if(domainRoutes != null) return domainRoutes.getPageNotFoundRoute(); } return main.getPageNotFoundRoute(); } public RouteMeta getInternalErrorRoute(String domain) { if(domain != null) { L2DomainRoutes domainRoutes = specificDomainRoutes.get(domain); if(domainRoutes != null) return domainRoutes.getInternalSvrErrorRoute(); } return main.getInternalSvrErrorRoute(); } public void addStaticRoute(RouteMeta meta) { staticRoutes.add(meta); } public List<Route> getStaticRoutes() { return staticRoutes.stream().map(m -> m.getRoute()).collect(Collectors.toList()); } }