package br.ufrgs.inf.dsmoura.repository.controller.util; import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import javax.faces.model.SelectItem; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import br.ufrgs.inf.dsmoura.repository.controller.exception.UserNotLoggedException; import br.ufrgs.inf.dsmoura.repository.model.entity.UserDTO; public class JSFUtil { final static Log logger = LogFactory.getLog(JSFUtil.class); public static String getRequestParameter(String name) { String param = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name); if (param == null) { logger.error("request parameter is null: " + name); } else if (param.length() == 0) { logger.error("request parameter is empty: " + name); } return param; } public static Object getSessionParameter(String name) { Object param = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(name); if (param == null) { logger.debug("session parameter is null: " + name); } return param; } public static String getRequestBaseURL() { Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest(); if (request instanceof HttpServletRequest) { StringBuffer requestURL = ((HttpServletRequest) request).getRequestURL(); int lastSlashIndex = requestURL.lastIndexOf("/"); return requestURL.substring(0, lastSlashIndex); } else { return ""; } } public static void addErrorMessage(String message) { addErrorMessage(null, message); } public static void addErrorMessage(String field, String message) { FacesMessage facesMessage = new FacesMessage(message); facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(field, facesMessage); } public static List<SelectItem> toSelectItem(List<?> eds, String property) { return toSelectItem(eds, property, true, false); } public static <T> List<SelectItem> toSelectItem(List<T> eds, String property, boolean firstSelectWord, boolean firstBlank) { if (firstSelectWord && firstBlank) { throw new IllegalArgumentException("The list cannot contains first select word and first blank."); } List<SelectItem> list = new ArrayList<SelectItem>(); if (firstSelectWord) { list.add(new SelectItem(null, "Select...")); } else if (firstBlank) { list.add(new SelectItem(null, "")); } for (T ed : eds) { list.add(new SelectItem(ed, getPropertyValue(ed, property))); } return list; } public static List<SelectItem> toSelectItem(List<String> itemList) { List<SelectItem> list = new ArrayList<SelectItem>(); for (String item : itemList) { list.add(new SelectItem(item, item)); } return list; } public static void downloadFile(String filename, byte[] binaryFile, String contentType) { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); response.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\""); response.setContentLength(binaryFile.length); response.setContentType(contentType); try { response.getOutputStream().write(binaryFile); response.getOutputStream().flush(); response.getOutputStream().close(); FacesContext.getCurrentInstance().responseComplete(); } catch (IOException e) { e.printStackTrace(); } } private static String getPropertyValue(Object o, String name) { String camelCaseMethodName = (new StringBuilder("get")) .append(name.substring(0, 1).toUpperCase()) .append(name.substring(1)).toString(); try { Method m = o.getClass().getMethod(camelCaseMethodName, new Class[0]); return m.invoke(o, new Object[0]).toString(); } catch (Exception e) { throw new RuntimeException((new StringBuilder("The object ")).append(o) .append(" has not the call property ").append(name) .toString(), e); } } public static UserDTO getLoggedUserDTO() { if (JSFUtil.getSessionParameter("loggedUserDTO") == null) { throw new UserNotLoggedException("User is not logged."); } return (UserDTO) JSFUtil.getSessionParameter("loggedUserDTO"); } public static boolean isLoggedUser() { return JSFUtil.getSessionParameter("loggedUserDTO") != null; } @SuppressWarnings("unchecked") public static <T> T findBean(String managedBeanName) { FacesContext context = FacesContext.getCurrentInstance(); if (context == null) { logger.warn("context is null"); return null; } return (T) context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", Object.class); } public static String getCurrentIP() { HttpServletRequest request = (HttpServletRequest) FacesContext .getCurrentInstance().getExternalContext().getRequest(); return request.getRemoteAddr(); } }