/* * 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.util; import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.logging.Logger; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.giavacms.common.model.Search; import org.giavacms.common.repository.Repository; import org.primefaces.model.menu.DefaultMenuItem; import org.primefaces.model.menu.DefaultMenuModel; import org.primefaces.model.menu.MenuModel; @SuppressWarnings({ "unchecked", "rawtypes" }) public class JSFUtils { static Logger logger = Logger.getLogger(JSFUtils.class.getName()); @Deprecated /* * use BeanUtils.getBean */ public static <T> T getBean(Class<T> beanClass) { try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/"); BeanManager beanManager = (BeanManager) envCtx .lookup("BeanManager"); Bean phBean = (Bean) beanManager.getBeans(beanClass).iterator() .next(); CreationalContext cc = beanManager.createCreationalContext(phBean); T bean = (T) beanManager.getReference(phBean, beanClass, cc); return bean; } catch (Exception e) { e.printStackTrace(); return null; } } public static String getCurrentPage() { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); return httpRequest.getRequestURI(); } public static String getPageId() { String pageId = getCurrentPage(); if (pageId.contains("/")) pageId = pageId.substring(pageId.lastIndexOf("/") + 1); if (pageId.contains(".jsf")) pageId = pageId.substring(0, pageId.lastIndexOf(".jsf")); logger.info("page id: " + pageId); return pageId; } public static String getContextPath() { FacesContext fc = FacesContext.getCurrentInstance(); String cp = fc.getExternalContext().getRequestContextPath(); return cp; } public static String getAbsolutePath() { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpServletRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); String scheme = httpServletRequest.getScheme(); String hostName = httpServletRequest.getServerName(); int port = httpServletRequest.getServerPort(); // Because this is rendered in a <div> layer, portlets for some reason // need the scheme://hostname:port part of the URL prepended. return scheme + "://" + hostName + ":" + port + getContextPath(); } public static int count(Collection collection) { return collection == null ? 0 : collection.size(); } /** * @param ricerca * @param ejb * @param idField il nome del campo del par il cui valore è da usare come selectItem.value * @param valueField il nome del campo del par il cui valore è da usare selectItem.label * @param emptyMessage messaggio da mettere in caso di no risultati: selectItem(null,"nessun entity trovato...") * @param labelMessage messaggio da mettere nel primo selectitem in caso di no-selezione: * select(null,"scegli l'entity....") * @return */ public static SelectItem[] setupItems(Search ricerca, Repository ejb, String idField, String valueField, String emptyMessage, String labelMessage) { Class ID_Class = null; Class VALUE_Class = null; Field ID_Field = null; Field VALUE_Field = null; ID_Class = ricerca.getObj().getClass(); while (ID_Class != null) { try { ID_Field = ID_Class.getDeclaredField(idField); ID_Field.setAccessible(true); // esco dal ciclo break; } catch (Exception e) { // ciclo sui campi della superclasse ora che c'e' estensione ID_Class = ID_Class.getSuperclass(); } } VALUE_Class = ricerca.getObj().getClass(); while (VALUE_Class != null) { try { VALUE_Field = VALUE_Class.getDeclaredField(valueField); VALUE_Field.setAccessible(true); // esco dal ciclo break; } catch (Exception e) { VALUE_Class = VALUE_Class.getSuperclass(); } } SelectItem[] selectItems = new SelectItem[1]; selectItems[0] = new SelectItem(null, emptyMessage); List entities = ejb.getList(ricerca, 0, 0); if (entities != null && entities.size() > 0) { boolean allowNull = labelMessage != null && labelMessage.trim().length() > 0; selectItems = new SelectItem[entities.size() + (allowNull ? 1 : 0)]; if (allowNull) { selectItems[0] = new SelectItem(null, labelMessage); } int i = (allowNull ? 1 : 0); for (Object o : entities) { try { selectItems[i] = new SelectItem(ID_Field.get(ID_Class.cast(o)), "" + VALUE_Field.get(VALUE_Class.cast(o))); i++; } catch (Exception e) { logger.info(e.getClass().getCanonicalName() + " - " + e.getMessage()); } } } return selectItems; } public static Object getManagedBean(String name) { FacesContext fc = FacesContext.getCurrentInstance(); if (fc == null) { logger.info("Faces Context Application NULL"); return null; } return fc.getApplication().getELResolver() .getValue(fc.getELContext(), null, name); // return fc.getApplication().getVariableResolver().resolveVariable(fc, // name); // return // ((HttpSession)fc.getExternalContext().getSession(false)).getAttribute(name); } public static void redirect(String nameUrl) throws IOException { try { String url = getAbsolutePath() + nameUrl; FacesContext context = FacesContext.getCurrentInstance(); try { context.getExternalContext().redirect(url); context.responseComplete(); } catch (Exception e) { logger.info(e.getMessage()); } } catch (Exception e) { e.printStackTrace(); } } public static Map getMap(String mapName, FacesContext fc) { // return (HashMap) fc.getApplication().getVariableResolver() // .resolveVariable(fc, mapName); return (HashMap) fc.getApplication().getELResolver() .getValue(fc.getELContext(), null, mapName); } public static List getArray(String name, FacesContext fc) { // return (java.util.ArrayList) // fc.getApplication().getVariableResolver() // .resolveVariable(fc, name); return (ArrayList) fc.getApplication().getELResolver() .getValue(fc.getELContext(), null, name); } public static Object getParameter(String name) { FacesContext context = FacesContext.getCurrentInstance(); return context.getExternalContext().getRequestParameterMap().get(name); } public static String getRemoteAddr() { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); return httpRequest.getRemoteAddr(); } /** * Return the username from the context principal * * @return the username or null if the principal is null */ public static String getUserName() { FacesContext context = FacesContext.getCurrentInstance(); HttpServletRequest req = (HttpServletRequest) context .getExternalContext().getRequest(); Principal pr = req.getUserPrincipal(); if (pr == null) { return null; } return pr.getName(); } public static String getHostPort() { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpServletRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); String scheme = httpServletRequest.getScheme(); String hostName = httpServletRequest.getServerName(); int port = httpServletRequest.getServerPort(); return scheme + "://" + hostName + ":" + port + "/"; } public static String breadcrumbs() { HttpServletRequest hsr = (HttpServletRequest) FacesContext .getCurrentInstance().getExternalContext().getRequest(); String url = hsr.getRequestURL().toString(); url = url.substring("http://".length()); if (url.indexOf("/") >= 0) url = url.substring(url.indexOf("/") + 1); String[] crumbs = url.split("/"); String base = "/"; StringBuffer sb = new StringBuffer(); for (int i = 0; i < crumbs.length; i++) { base += crumbs[i]; String label = i == 0 ? "home" : crumbs[i]; if (label.contains(".")) { label = label.substring(0, label.indexOf(".")); sb.append("<b>" + label + "</b>"); } else { sb.append("<a href=\"" + base + "\" title=\"" + crumbs[i] + "\">" + label + "</a> "); sb.append("<span style=\"color: black;\">></span> "); } base += "/"; } return sb.toString(); } public static MenuModel primeBreadcrumbs() { HttpServletRequest hsr = (HttpServletRequest) FacesContext .getCurrentInstance().getExternalContext().getRequest(); String url = hsr.getRequestURL().toString(); url = url.substring("http://".length()); return primeBreadcrumbs(url); } public static void main2(String[] args) { primeBreadcrumbs("martina-pietraia.rhcloud.com/private/page/edit.jsf"); } private static MenuModel primeBreadcrumbs(String url) { // logger.info("url: " + url); String contextPath = getContextPath().substring( getContextPath().indexOf("/") + 1); MenuModel model = new DefaultMenuModel(); if (url.indexOf("/") >= 0) url = url.substring(url.indexOf("/") + 1); String[] crumbs = url.split("/"); // logger.info("" + Arrays.asList(crumbs)); // logger.info("context path: " + getContextPath()); DefaultMenuItem item = null; String label = null; String base = null; // StringBuffer sb = new StringBuffer(); for (int i = 0; i < crumbs.length; i++) { if (crumbs[i] == null || crumbs[i].trim().isEmpty()) { continue; } if (crumbs[i].equals(contextPath)) continue; // logger.info(i + ") " + crumbs[i] + " --> "); if (base == null) { item = new DefaultMenuItem(); base = "/" + crumbs[i]; label = "home"; item.setValue(label); item.setUrl(base); model.addElement(item); // logger.info(" |" + item.getValue() + " = " + item.getUrl()); base += "/"; continue; } // pezzi intermedi if (i != (crumbs.length - 1)) { item = new DefaultMenuItem(); base += crumbs[i]; label = crumbs[i]; // sb.append("<a href=\"" + base + "\" title=\"" + crumbs[i] // + "\">" + label + "</a> "); // sb.append("<span style=\"color: black;\">></span> "); item.setValue(crumbs[i]); item.setUrl(base); model.addElement(item); // logger.info(" |" + item.getValue() + " = " + item.getUrl()); base += "/"; } // serve per l'ultimo pezzo del bcrumps: la pagina corrente else { item = new DefaultMenuItem(); base += crumbs[i]; label = crumbs[i].substring(0, crumbs[i].indexOf(".")); // sb.append("<b>" + label + "</b>"); item.setValue(label); item.setUrl("#"); model.addElement(item); // logger.info(" |" + item.getValue() + " = " + item.getUrl()); base += "/"; } } return model; } public static String shorten(String in, int max) { if (in == null) return ""; if (in.length() < max) return in; return in.substring(0, max) + "..."; } /** * @param role * @return */ public static boolean isUserInRole(String role) { FacesContext context = FacesContext.getCurrentInstance(); HttpServletRequest req = (HttpServletRequest) context .getExternalContext().getRequest(); return req.isUserInRole(role); } public static String getWebRootPath(Class clazz) { String webRoot_WEBINF = getWebInfPath(clazz); String webRoot = webRoot_WEBINF.substring(0, webRoot_WEBINF.lastIndexOf("/")); return webRoot; } public static String getWebInfLibPath(Class clazz) { String webRoot_WEBINF = getWebInfPath(clazz); return webRoot_WEBINF + "/lib"; } public static String getWebInfPath(Class clazz) { String webRoot_WEBINF_classes_it_slash = clazz.getClassLoader() .getResource("it").getPath().replaceAll("%5c", File.separator); String webRoot_WEBINF_classes_it = webRoot_WEBINF_classes_it_slash .substring(0, webRoot_WEBINF_classes_it_slash.lastIndexOf("/")); String webRoot_WEBINF_classes = webRoot_WEBINF_classes_it.substring(0, webRoot_WEBINF_classes_it.lastIndexOf("/")); String webRoot_WEBINF = webRoot_WEBINF_classes.substring(0, webRoot_WEBINF_classes.lastIndexOf("/")); return webRoot_WEBINF; } public static String getContextParam(String name) { try { return ((ServletContext) FacesContext.getCurrentInstance() .getExternalContext().getContext()).getInitParameter(name); } catch (Exception e) { return null; } } /** * Verifica se l'elemento di cui è stato passato l'id come parametro ha degli errori di validazione. * * @param clientId Id dell'elemento di cui verificare se ha degli errori di validazione. * * @return Ritorne vero se e solo se l'elemento ha degli errori di validazione. * */ public static Boolean hasErrors(String clientId) { return FacesContext.getCurrentInstance().getMessages(clientId) .hasNext(); } /** * Verifica se l'elemento il cui id è composto nel seguente modo: 'formId:elementId' ha degli errori di validazione. * * @param elementId Id dell'elemento di cui verificare se ha degli errori di validazione. * * @param formId Id del form che contiene l'elemento. * * @return Ritorne vero se e solo se l'elemento ha degli errori di validazione. * */ public static Boolean hasErrors(String elementId, String formId) { return hasErrors(formId + ":" + elementId); } /** * Ritorna gli errori per un certo clientId * * @param clientId * @return */ public static List<FacesMessage> getErrors(String clientId) { List<FacesMessage> messages = new ArrayList<FacesMessage>(); for (Iterator<FacesMessage> iterator = FacesContext .getCurrentInstance().getMessages(clientId); iterator.hasNext();) { messages.add(iterator.next()); } return messages; } public static String getErrorMessage(String clientId) { Iterator<FacesMessage> iterator = FacesContext.getCurrentInstance() .getMessages(clientId); if (!iterator.hasNext()) { return ""; } StringBuffer sb = new StringBuffer(); for (; iterator.hasNext();) { sb.append(iterator.next().getDetail()); if (iterator.hasNext()) { sb.append(", "); } } return sb.toString(); } public static String getSessionId() { try { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); return httpRequest.getSession().getId(); } catch (Exception e) { e.printStackTrace(); return ""; } } public static Map<String, String[]> getParameters() { try { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); return httpRequest.getParameterMap(); } catch (Exception e) { e.printStackTrace(); return new HashMap<String, String[]>(); } } public static Map<String, String[]> getQueryStringParameters() { Map<String, String[]> queryStringParameters = new HashMap<String, String[]>(); try { FacesContext fc = FacesContext.getCurrentInstance(); HttpServletRequest httpRequest = (HttpServletRequest) fc .getExternalContext().getRequest(); String queryString = httpRequest.getQueryString(); if (queryString != null && !queryString.equals("")) { Map<String, String[]> allParameters = httpRequest .getParameterMap(); if (allParameters != null) { for (String p : allParameters.keySet()) { if (queryString.contains(p)) { queryStringParameters.put(p, allParameters.get(p)); } } } } } catch (Exception e) { e.printStackTrace(); } return queryStringParameters; } }