/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.autentia.tnt.bean; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.faces.context.FacesContext; import javax.servlet.http.HttpSession; import org.acegisecurity.GrantedAuthority; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.myfaces.custom.navmenu.NavigationMenuItem; import com.autentia.tnt.businessobject.AccountEntry; import com.autentia.tnt.businessobject.AccountEntryType; import com.autentia.tnt.businessobject.Activity; import com.autentia.tnt.businessobject.AdminHoliday; import com.autentia.tnt.businessobject.Bill; import com.autentia.tnt.businessobject.Book; import com.autentia.tnt.businessobject.BulletinBoard; import com.autentia.tnt.businessobject.BulletinBoardCategory; import com.autentia.tnt.businessobject.Collaborator; import com.autentia.tnt.businessobject.Commissioning; import com.autentia.tnt.businessobject.CompanyState; import com.autentia.tnt.businessobject.Contact; import com.autentia.tnt.businessobject.ContractType; import com.autentia.tnt.businessobject.CreditTitle; import com.autentia.tnt.businessobject.Department; import com.autentia.tnt.businessobject.FinancialRatio; import com.autentia.tnt.businessobject.Holiday; import com.autentia.tnt.businessobject.Idea; import com.autentia.tnt.businessobject.Interaction; import com.autentia.tnt.businessobject.InteractionType; import com.autentia.tnt.businessobject.Inventary; import com.autentia.tnt.businessobject.Magazine; import com.autentia.tnt.businessobject.Objective; import com.autentia.tnt.businessobject.Occupation; import com.autentia.tnt.businessobject.Offer; import com.autentia.tnt.businessobject.OfferRejectReason; import com.autentia.tnt.businessobject.Organization; import com.autentia.tnt.businessobject.OrganizationISOCategory; import com.autentia.tnt.businessobject.OrganizationType; import com.autentia.tnt.businessobject.PeriodicalAccountEntry; import com.autentia.tnt.businessobject.Position; import com.autentia.tnt.businessobject.Project; import com.autentia.tnt.businessobject.Publication; import com.autentia.tnt.businessobject.RequestHoliday; import com.autentia.tnt.businessobject.Setting; import com.autentia.tnt.businessobject.Tag; import com.autentia.tnt.businessobject.Tutorial; import com.autentia.tnt.businessobject.User; import com.autentia.tnt.businessobject.UserCategory; import com.autentia.tnt.businessobject.WorkingAgreement; import com.autentia.tnt.manager.security.AuthenticationManager; import com.autentia.tnt.manager.security.Permission; import com.autentia.tnt.manager.security.Principal; import com.autentia.tnt.util.FacesUtils; import com.autentia.tnt.util.SpringUtils; /** * Dynamic Menu definition bean * @author German */ public class DynMenuBean extends BaseBean implements Serializable { private static final long serialVersionUID = 1L; /** Log system */ private static final Log log = LogFactory.getLog(DynMenuBean.class); /** Language resources */ private static final ResourceBundle msg = ResourceBundle .getBundle("com.autentia.tnt.resources.messages"); /** List of NavigationItems */ private List<NavigationMenuItem> navItems = null; private Locale locale = FacesUtils.getViewLocale(); /** * Constructor */ public DynMenuBean() { } /** * Inicializa las prefencias necesarias del usuario, obtidas de base de datos, * y que han de ser genéricas para toda l apalicacion (por ejemplo el locale). * * Se pone en este punto de generación del menu porque se realiza el mismo para cualquier * pantalla. * */ public void initUserPreferences() { FacesUtils.setActualLoggedLocale(); } public List<NavigationMenuItem> getNavItems() { initUserPreferences(); return generateMenu(); } /** * Generates a list of navigation items, representating entries of the dynamic menu bar * * @return */ private List<NavigationMenuItem> generateMenu() { if (navItems == null || !locale.equals(FacesUtils.getViewLocale())) { locale = FacesUtils.getViewLocale(); if (log.isDebugEnabled()) { log.debug("generating dynamic menu"); } Principal creds = null; boolean isAnonymous = true; try { creds = SpringUtils.getPrincipal(); isAnonymous = false; } catch (ClassCastException e) { // veamos si es un usuario anonimo if ("anonymousUser".equals(SpringUtils.getPrincipalAsObject())) { isAnonymous = true; } else { throw new RuntimeException(e); } } catch (Exception e) { throw new RuntimeException(e); } navItems = new ArrayList<NavigationMenuItem>(); NavigationMenuItem item = null; if (!isAnonymous) { // menu items for NON anonymous users if (log.isDebugEnabled()) { log.debug("user is NOT anonymous"); } // file menu if ((item = createMenuItem(creds, null, "file", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Setting.class), "settings","/img/configure.png"))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(User.class), "#{dynMenuBean.exit}","/img/exit.png"))); addItem2Items(navItems,item); } // administration menu if ((item = createMenuItem(creds, null, "admin", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(User.class), "users", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(UserCategory.class), "userCategorys", null))); addItem2Item(item,(createMenuItem(creds, null, "changePassword", "/img/key.png"))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Department.class), "departments", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(WorkingAgreement.class), "workingAgreements", null))); addItem2Items(navItems,item); } // master tables menu if ((item = createMenuItem(creds, null, "masterTables", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(AccountEntryType.class), "accountEntryTypes", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(OrganizationType.class), "organizationTypes", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(InteractionType.class), "interactionTypes", null))); addItem2Item(item,(createMenuItem(creds, Permission .Entity_Menu(OrganizationISOCategory.class), "organizationISOCategorys", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(ContractType.class), "contractTypes", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Magazine.class), "magazines", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(OfferRejectReason.class), "offerRejectReasons", null))); addItem2Items(navItems,item); } // billing if ((item = createMenuItem(creds, null, "billing", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Bill.class), "bills", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(CreditTitle.class), "creditTitles", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(AccountEntryType.class), "accounts", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(AccountEntry.class), "accountEntrys", null))); addItem2Item(item,(createMenuItem(creds, Permission .Entity_Menu(PeriodicalAccountEntry.class), "periodicalAccountEntrys", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_NOF, "nof", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(FinancialRatio.class), "financialRatios", null))); addItem2Items(navItems,item); } // contacts if ((item = createMenuItem(creds, null, "contacts", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Organization.class), "organizations", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Position.class), "positions", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Interaction.class), "interactions", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Contact.class), "contacts", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Offer.class), "offers", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Project.class), "projects", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Tag.class), "tags", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Collaborator.class), "collaborators", null))); addItem2Items(navItems,item); } // commissionings if ((item = createMenuItem(creds, null, "commissionings", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Commissioning.class), "commissionings", null))); addItem2Items(navItems,item); } // quality if ((item = createMenuItem(creds, null, "quality", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Action_ListQualityDocuments, "qualityDocuments", null))); addItem2Items(navItems,item); } // bulletin if ((item = createMenuItem(creds, null, "bulletin", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(BulletinBoard.class), "bulletinBoards", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(CompanyState.class), "companyStates", null))); addItem2Item(item,(createMenuItem(creds, Permission .Entity_Menu(BulletinBoardCategory.class), "bulletinBoardCategorys", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Idea.class), "ideas", null))); addItem2Items(navItems,item); } // activity if ((item = createMenuItem(creds, null, "activity", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Activity.class), "activitys", null))); //addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(ExternalActivity.class), // "externalActivities", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Objective.class), "objectives", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_GlobalHoursReport, "globalHoursReport", null))); //addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Occupation.class), "jpivotTest", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Occupation.class), "availabilitys", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Occupation.class), "occupations", null))); addItem2Items(navItems,item); } // reports tables menu if ((item = createMenuItem(creds, null, "reports", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Action_GeneralReports, "generalReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_BitacoreReports, "bitacoreReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_BillReports, "billReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_ProjectReports, "projectReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_InteractionReports, "interactionReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_OrganizationReports, "organizationReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_OfferReports, "offerReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_CommissioningReports, "commissioningReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_OwnReports, "ownReports", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_PersonalReports, "personalReports", null))); addItem2Items(navItems,item); } // publish if ((item = createMenuItem(creds, null, "publish", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Tutorial.class), "tutorials", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Publication.class), "publications", null))); addItem2Items(navItems,item); } // holiday if ((item = createMenuItem(creds, null, "holiday", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Holiday.class), "holidays", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(RequestHoliday.class), "requestHolidays", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(AdminHoliday.class), "adminHolidays", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_UserHolidaysState, "userHolidayState", null))); addItem2Item(item,(createMenuItem(creds, Permission.Action_MyHolidays, "#{userHolidaysStateBean.myHolidays}", null))); addItem2Items(navItems,item); } // utils if ((item = createMenuItem(creds, null, "utils", null)) != null) { addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Book.class), "books", null))); addItem2Item(item,(createMenuItem(creds, Permission.Entity_Menu(Inventary.class), "inventarys", null))); addItem2Items(navItems,item); } } else { // menu items for anonymous users if (log.isDebugEnabled()) { log.debug("user is NOT anonymous"); } } } return navItems; } private void addItem2Items(List<NavigationMenuItem> items, NavigationMenuItem item) { if(item==null || item.getNavigationMenuItems()==null || item.getNavigationMenuItems().length<=0) { return; } items.add(item); } private void addItem2Item(NavigationMenuItem padre, NavigationMenuItem hijo) { if(hijo!=null) padre.add(hijo); } /** * Generates a navigation menu item. This item could be nested into others navigation menu items * * @param creds * @param neededRole * @param cmd * @param iconUrl * @return */ private NavigationMenuItem createMenuItem(Principal creds, GrantedAuthority neededRole, String cmd, String iconUrl) { NavigationMenuItem item = null; if (neededRole == null || creds.hasAuthority(neededRole)) { String text = cmd; if (text.indexOf("#{") >= 0) { text = text.substring(text.indexOf('.') + 1, text.indexOf('}')); } try { //text = msg.getString("menu." + text); text = FacesUtils.getMessage("menu." + text); } catch (MissingResourceException e) { text = "MISSING : " + text + " : MISSING"; } if (iconUrl == null) { item = new NavigationMenuItem(text, cmd); } else { item = new NavigationMenuItem(text, cmd, iconUrl, false); } } return item; } //XXX llamar a este metodo para limpiar la sesion.. (desde donde???) /** * Clear admin beans from session private void clearSession() { // Remove admin beans from session FacesUtils.removeFromSession("userBean"); FacesUtils.removeFromSession("userCategoryBean"); FacesUtils.removeFromSession("inventaryBean"); FacesUtils.removeFromSession("projectBean"); FacesUtils.removeFromSession("ideaBean"); FacesUtils.removeFromSession("changePasswordBean"); FacesUtils.removeFromSession("userBean"); FacesUtils.removeFromSession("userCategoryBean"); FacesUtils.removeFromSession("inventaryBean"); FacesUtils.removeFromSession("projectBean"); FacesUtils.removeFromSession("projectRoleBean"); FacesUtils.removeFromSession("ideaBean"); FacesUtils.removeFromSession("changePasswordBean"); FacesUtils.removeFromSession("departmentBean"); FacesUtils.removeFromSession("contractTypeBean"); // Remove biling beans from session FacesUtils.removeFromSession("billBean"); FacesUtils.removeFromSession("accountBean"); FacesUtils.removeFromSession("accountEntryTypeBean"); FacesUtils.removeFromSession("accountEntryBean"); FacesUtils.removeFromSession("periodicalAccountEntryBean"); FacesUtils.removeFromSession("nofBean"); FacesUtils.removeFromSession("financialRatioBean"); // Remove contacts beans from session FacesUtils.removeFromSession("organizationBean"); FacesUtils.removeFromSession("contactBean"); FacesUtils.removeFromSession("interactionBean"); FacesUtils.removeFromSession("interactionTypeBean"); FacesUtils.removeFromSession("organizationTypeBean"); FacesUtils.removeFromSession("organizationISOCategoryBean"); FacesUtils.removeFromSession("offerRejectReasonBean"); FacesUtils.removeFromSession("offerBean"); // Remove quality beans from session FacesUtils.removeFromSession("qualityDocumentBean"); // Remove bulletin beans from session FacesUtils.removeFromSession("bulletinBoardBean"); FacesUtils.removeFromSession("companypathBean"); FacesUtils.removeFromSession("bulletinBoardCategoryBean"); // Remove activity beans from session FacesUtils.removeFromSession("activityBean"); FacesUtils.removeFromSession("objectiveBean"); // Remove activity beans from session FacesUtils.removeFromSession("activityReportBean"); FacesUtils.removeFromSession("generalReportBean"); FacesUtils.removeFromSession("billReportBean"); FacesUtils.removeFromSession("interactionReportBean"); FacesUtils.removeFromSession("projectReportBean"); FacesUtils.removeFromSession("organizationReportBean"); FacesUtils.removeFromSession("personalReportBean"); FacesUtils.removeFromSession("offerReportBean"); // Remove tutorial beans from session FacesUtils.removeFromSession("tutorialBean"); FacesUtils.removeFromSession("publicationBean"); FacesUtils.removeFromSession("magazineBean"); // Remove util beans from session FacesUtils.removeFromSession("sendMailBean"); } */ public String exit() { HttpSession sessionContext = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false); if(sessionContext!=null) { sessionContext.invalidate(); } return "exit"; } }