/* * Copyright 2013 GiavaCms.org. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.giavacms.common.module; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Instance; import javax.enterprise.inject.Produces; import javax.faces.model.SelectItem; import javax.inject.Inject; import javax.inject.Named; @Named @Singleton @ApplicationScoped public class ModuleRegistry { private Map<String, ModuleProvider> modules = new HashMap<String, ModuleProvider>(); @Inject Instance<ModuleProvider> moduleProviders; @PostConstruct public void postConstruct() { for (ModuleProvider provider : moduleProviders) { modules.put(provider.getName(), provider); } } @Named @Produces public List<ModuleProvider> getModules() { // LA HASH MAP FA GIA' SORT PER CHIAVE DA SE' List<ModuleProvider> list = new ArrayList<ModuleProvider>( modules.values()); // return new ArrayList<ModuleProvider>(modules.values()); Collections.sort(list, new Comparator<ModuleProvider>() { @Override public int compare(ModuleProvider o1, ModuleProvider o2) { if (o1.getPriority() > o2.getPriority()) return 1; else if (o1.getPriority() < o2.getPriority()) return -1; else return 0; } }); return list; } public Map<String, String> getPermissions() { Map<String, String> map = new HashMap<String, String>(); for (ModuleProvider module : getModules()) { Map<String, String> module_map = module.getPermissions(); for (String key : module_map.keySet()) { map.put(key, module_map.get(key)); } } return map; } public List<String> getAllowableOperations() { List<String> list = new ArrayList<String>(); for (ModuleProvider module : getModules()) { list.addAll(module.getAllowableOperations()); } return list; } @Named @Produces public SelectItem[] getRuoliItems() { List<ModuleProvider> moduli = getModules(); if (moduli != null) { List<SelectItem> ruoliItems = new ArrayList<SelectItem>(); for (ModuleProvider module : getModules()) { Map<String, String> module_map = module.getPermissions(); if (module_map != null && module_map.size() > 0) { for (String key : module_map.keySet()) { String value = module_map.get(key); ruoliItems.add(new SelectItem(key, module.getName() + "-" + value)); } } } return ruoliItems.toArray(new SelectItem[] {}); } return new SelectItem[] {}; } @Named @Produces public SelectItem[] getRuoliItemsWithAdminAndAll() { List<ModuleProvider> moduli = getModules(); if (moduli != null) { List<SelectItem> ruoliItems = new ArrayList<SelectItem>(); ruoliItems.add(new SelectItem(null, "ruolo")); ruoliItems.add(new SelectItem("admin", "admin")); for (ModuleProvider module : getModules()) { Map<String, String> module_map = module.getPermissions(); if (module_map != null && module_map.size() > 0) { for (String key : module_map.keySet()) { String value = module_map.get(key); ruoliItems.add(new SelectItem(key, module.getName() + "-" + value)); } } } return ruoliItems.toArray(new SelectItem[] {}); } return new SelectItem[] {}; } }