org.webpieces.plugins.backend.menu.MenuCreator Maven / Gradle / Ivy
package org.webpieces.plugins.backend.menu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.webpieces.plugins.backend.spi.BackendGuiDescriptor;
import org.webpieces.plugins.backend.spi.MenuCategory;
import org.webpieces.plugins.backend.spi.PageDescriptor;
import org.webpieces.router.api.routing.ReverseRouteLookup;
import org.webpieces.router.impl.RoutingHolder;
@Singleton
public class MenuCreator {
private List menus;
private RoutingHolder routes;
private Set descriptors;
@Inject
public MenuCreator(RoutingHolder routes, Set descriptors) {
this.routes = routes;
this.descriptors = descriptors;
}
private SingleMenu convert(Entry> entry) {
boolean allSecure = true;
for(SingleMenuItem item : entry.getValue()) {
if(!item.isSecure())
allSecure = false;
}
return new SingleMenu(entry.getKey(), entry.getValue(), allSecure);
}
private void wireInPages(ReverseRouteLookup reverseRouteLookup, Map> secureMenuMap, BackendGuiDescriptor desc) {
for(PageDescriptor pageDesc : desc.getWireIntoGuiDescriptors()) {
List descriptors = secureMenuMap.getOrDefault(pageDesc.getMenuCategory(), new ArrayList<>());
if(!reverseRouteLookup.isGetRequest(pageDesc.getRouteId()))
throw new RuntimeException("Plugin "+desc.getPluginName()+" supplied an illegal route id that is not a GET request="+pageDesc.getRouteId());
String url = reverseRouteLookup.convertToUrl(pageDesc.getRouteId());
descriptors.add(new SingleMenuItem(pageDesc.getMenuTitle(), url, pageDesc.isSecure()));
secureMenuMap.putIfAbsent(pageDesc.getMenuCategory(), descriptors);
}
}
public synchronized List getMenu() {
if(menus == null)
createMenuOnce();
return menus;
}
private void createMenuOnce() {
Map> menuMap = new HashMap<>();
for(BackendGuiDescriptor desc : descriptors) {
wireInPages(routes.getReverseRouteLookup(), menuMap, desc);
}
menus = create(menuMap);
}
private List create(Map> secureMenuMap) {
List menu = new ArrayList<>();
for(Map.Entry> entry : secureMenuMap.entrySet()) {
menu.add(convert(entry));
}
return menu;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy