catlett 01/05/21 13:57:33 Added: random/src/org/apache/taglibs/random RandomStrgTag.java Log: first import of random taglib Revision Changes Path 1.1 jakarta-taglibs/random/src/org/apache/taglibs/random/RandomStrgTag.java Index: RandomStrgTag.java =================================================================== /* * $Header: /home/cvs/jakarta-taglibs/random/src/org/apache/taglibs/random/RandomStrgTag.java,v 1.1 2001/05/21 20:57:32 catlett Exp $ * $Revision: 1.1 $ * $Date: 2001/05/21 20:57:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.taglibs.random; import java.util.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import org.apache.taglibs.random.RandomStrg; /** * RandomStrg tag will create a random string generator accessiable by the * <b>jsp:getProperty</b> tag.. * * <tag> * <name>random</name> * <tagclass>org.apache.taglibs.random.RandomTag</tagclass> * <bodycontent>empty</bodycontent> * <info>Creates an variable length random string generator</info> * * <attribute> * <name>id</name> * <required>true</required> * <rtexprvalue>false</rtexprvalue> * </attribute> * <attribute> * <name>length</name> * <required>false</required> * <rtexprvalue>false</rtexprvalue> * </attribute> * <attribute> * <name>map</name> * <required>false</required> * <rtexprvalue>false</rtexprvalue> * </attribute> * <attribute> * <name>charset</name> * <required>false</required> * <rtexprvalue>false</rtexprvalue> * </attribute> * </tag> * * @author Rich Catlett * * @version 1.0 * */ public class RandomStrgTag extends TagSupport { /** * generated password */ private String randomstr = null; /** * flag determines if all chars ar to be used */ private boolean allchars = false; /** * length of random string defaults to 8 */ private Integer length = new Integer(8); /** * list of all generated strings, list is stored at the application level */ private HashMap hmap; /** * Hashmap to check keys against to see if they have already been used */ private String map = null; /** * ArrayList for the lowerbound of the char sets */ private ArrayList lower = null; /** * ArrayList for the upperbound of the char sets */ private ArrayList upper = null; /** * ArrayL for the set of chars that aren't part of a range */ private char[] single = null; /** * counter for position in the array single */ private int singlecount = 0; /** * implementation of method from the Tag interface that tells the JSP what * to do upon encountering the start tag for this tag set * * @return SKIP_BODY - integer value telling the JSP engine to not evaluate * the body of this tag * * @throw JspException thrown when error occurs in processing the body of * this method * */ public final int doStartTag() throws JspException { // create the class that will become the script variable available through // the jsp:getProperty tag RandomStrg random = new RandomStrg(); // set the default for the charset to a-ZA-Z0-9 if ((lower == null) && (single == null)) setCharset("a-zA-Z0-9"); if (map != null) { try { // check if the list is to be used if so get list if ((hmap = (HashMap) pageContext.findAttribute(map)) == null) // named hashmap does not exist throw error out to the author throw new JspException("A hashmap does not exist in any " + "scope under the name " + map); } catch (ClassCastException cce) { throw new JspException("The named attribute exists but it is not" + " a hashmap."); } random.setHmap(hmap); // set the Hashmap in the script variable } // if ranges exist set them in the script variable if (lower != null) random.setRanges(lower, upper); // if a set of single chars exists set that in the script variable if (single != null) random.setSingle(single, singlecount); random.setLength(length); // set the length of the random string random.setAllchars(allchars); // set the allchars flag // place the script variable in the page scope pageContext.setAttribute(id, random, PageContext.PAGE_SCOPE); return SKIP_BODY; } /** * set the name of the map * * @param value name of the hashmap to search for on the server that contains * the keys to compare the random strings to */ public final void setMap(String value) { map = value; } /** * set the length of the password * * @param value length of the random string to be generated */ public final void setLength(String value) { try { length = new Integer(value); } catch (NumberFormatException ne) { pageContext.getServletContext().log("length attribute could not be" + " turned into an Integer default value was used"); } } /** * set the range of characters to use * * @param value the range of characters to use could be any char from a-z, A-Z * 0-9 or ! @ # $ % ^ & * ( ) _ \- + = [ ] { } \ | ; : ' " , . / * < > ? * */ public final void setCharset(String value) { // values tells the method whether or not to check for single chars boolean more = true; // create the arraylists to hold the upper and lower bounds for the char // ranges lower = new ArrayList(3); upper = new ArrayList(3); // user has chosen to use all possible characters in the random string if (value.compareTo("all") == 0) { allchars = true; // set allchars flag // all chars are to be used so there are no single chars to sort // through more = false; } else if ((value.charAt(1) == '-') && (value.charAt(0) != '\\')) { // run through the ranges at most 3 while (more && (value.charAt(1) == '-')){ // check to make sure that the dash is not the single char if (value.charAt(0) == '\\') break; else { // add upper and lower ranges to there list lower.add(new Character(value.charAt(0))); upper.add(new Character(value.charAt(2))); } // check to see if there is more to the charset if (value.length() <= 3) more = false; else // create a new string so that the next range if there is one // starts it value = value.substring(3); } } // if more = false there are no single chars in the charset if (more) { single = new char[30]; // create single // create a set of tokens from the string of single chars StringTokenizer tokens = new StringTokenizer(value); while (tokens.hasMoreTokens()) { // get the next token from the string String token = tokens.nextToken(); if (token.length() > 1) // char is a - add it to the list single[singlecount++] = '-'; // add the current char to the list single[singlecount++] = token.charAt(0); } } } }
