Java tutorial
/** * Copyright (C) 2009 GIP RECIA http://www.recia.fr * @Author (C) 2009 GIP RECIA <contact@recia.fr> * @Contributor (C) 2009 SOPRA http://www.sopragroup.com/ * @Contributor (C) 2011 Pierre Legay <pierre.legay@recia.fr> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.myfaces.shared_impl.renderkit.html.util; import org.apache.myfaces.shared_impl.config.MyfacesConfig; import org.apache.myfaces.shared_impl.renderkit.html.HTML; import org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * @author Manfred Geiler (latest modification by $Author: grantsmith $) * @author Anton Koinov * @version $Revision: 472792 $ $Date: 2006-11-09 07:34:47 +0100 (Do, 09 Nov 2006) $ */ public final class JavascriptUtils { private static final Log log = LogFactory.getLog(JavascriptUtils.class); public static final String JAVASCRIPT_DETECTED = JavascriptUtils.class.getName() + ".JAVASCRIPT_DETECTED"; private static final String OLD_VIEW_ID = JavascriptUtils.class + ".OLD_VIEW_ID"; private JavascriptUtils() { // utility class, do not instantiate } private static final Set RESERVED_WORDS = new HashSet(Arrays.asList(new String[] { "abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "delete", "do", "double", "else", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "in", "instanceof", "int", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "typeof", "var", "void", "while", "with" })); /**Don't use this function - except when compatibility with the RI is a must, * as in the name for the clear form parameters script. */ public static String getValidJavascriptNameAsInRI(String origIdentifier) { return origIdentifier.replaceAll("-", "\\$_"); } public static String getValidJavascriptName(String s, boolean checkForReservedWord) { if (checkForReservedWord && RESERVED_WORDS.contains(s)) { return s + "_"; } StringBuffer buf = null; for (int i = 0, len = s.length(); i < len; i++) { char c = s.charAt(i); if (Character.isLetterOrDigit(c)) { // allowed char if (buf != null) buf.append(c); } else { if (buf == null) { buf = new StringBuffer(s.length() + 10); buf.append(s.substring(0, i)); } buf.append('_'); if (c < 16) { // pad single hex digit values with '0' on the left buf.append('0'); } if (c < 128) { // first 128 chars match their byte representation in UTF-8 buf.append(Integer.toHexString(c).toUpperCase()); } else { byte[] bytes; try { bytes = Character.toString(c).getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } for (int j = 0; j < bytes.length; j++) { int intVal = bytes[j]; if (intVal < 0) { // intVal will be >= 128 intVal = 256 + intVal; } else if (intVal < 16) { // pad single hex digit values with '0' on the left buf.append('0'); } buf.append(Integer.toHexString(intVal).toUpperCase()); } } } } return buf == null ? s : buf.toString(); } public static String encodeString(String string) { if (string == null) { return ""; } StringBuffer sb = null; //create later on demand String app; char c; for (int i = 0; i < string.length(); ++i) { app = null; c = string.charAt(i); switch (c) { case '\\': app = "\\"; break; case '"': app = "\\\""; break; case '\'': app = "\\'"; break; case '\n': app = "\\n"; break; case '\r': app = "\\r"; break; } if (app != null) { if (sb == null) { sb = new StringBuffer(string.substring(0, i)); } sb.append(app); } else { if (sb != null) { sb.append(c); } } } if (sb == null) { return string; } else { return sb.toString(); } } public static boolean isJavascriptAllowed(ExternalContext externalContext) { MyfacesConfig myfacesConfig = MyfacesConfig.getCurrentInstance(externalContext); if (myfacesConfig.isAllowJavascript()) { if (myfacesConfig.isDetectJavascript()) { return isJavascriptDetected(externalContext); } else { return true; } } else { return false; } } public static void setJavascriptDetected(HttpSession session, boolean value) { session.setAttribute(JAVASCRIPT_DETECTED, Boolean.valueOf(value)); } public static boolean isJavascriptDetected(ExternalContext externalContext) { //TODO/FIXME (manolito): This info should be better stored in the viewroot component and not in the session Boolean sessionValue = (Boolean) externalContext.getSessionMap().get(JAVASCRIPT_DETECTED); return sessionValue != null && sessionValue.booleanValue(); } public static void setOldViewId(ExternalContext externalContext, String viewId) { externalContext.getRequestMap().put(OLD_VIEW_ID, viewId); } public static String getOldViewId(ExternalContext externalContext) { return (String) externalContext.getRequestMap().get(OLD_VIEW_ID); } }