1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.id.serial; 18 19 /** 20 * <code>PrefixedAlphanumericGenerator</code> is an identifier generator 21 * that generates an incrementing number in base 36 with a prefix as a String 22 * object. 23 * 24 * <p>All generated ids have the same length (prefixed and padded with 0's 25 * on the left), which is determined by the <code>size</code> parameter passed 26 * to the constructor.<p> 27 * 28 * <p>The <code>wrap</code> property determines whether or not the sequence wraps 29 * when it reaches the largest value that can be represented in <code>size</code> 30 * base 36 digits. If <code>wrap</code> is false and the the maximum representable 31 * value is exceeded, an {@link IllegalStateException} is thrown.</p> 32 * 33 * @author Commons-Id team 34 * @version $Id$ 35 */ 36 public class PrefixedAlphanumericGenerator extends AlphanumericGenerator { 37 38 /** Prefix. */ 39 private final String prefix; 40 41 42 /** 43 * Create a new prefixed alphanumeric generator with the specified prefix. 44 * 45 * @param prefix prefix, must not be null 46 * @param wrap should the factory wrap when it reaches the maximum 47 * value that can be represented in <code>size</code> base 36 digits 48 * (or throw an exception) 49 * @param size the size of the identifier, including prefix length 50 * @throws IllegalArgumentException if size less prefix length is not at least one 51 * @throws NullPointerException if prefix is <code>null</code> 52 */ 53 public PrefixedAlphanumericGenerator(String prefix, boolean wrap, int size) { 54 super(wrap, size - ((prefix == null) ? 0 : prefix.length())); 55 56 if (prefix == null) { 57 throw new NullPointerException("prefix must not be null"); 58 } 59 if (size <= prefix.length()) { 60 throw new IllegalArgumentException("size less prefix length must be at least one"); 61 } 62 this.prefix = prefix; 63 } 64 65 66 /** 67 * Return the prefix for this prefixed alphanumeric generator. 68 * 69 * @return the prefix for this prefixed alphanumeric generator 70 */ 71 public String getPrefix() { 72 return prefix; 73 } 74 75 public long maxLength() { 76 return super.maxLength() + prefix.length(); 77 } 78 79 public long minLength() { 80 return super.minLength() + prefix.length(); 81 } 82 83 public int getSize() { 84 return super.getSize() + prefix.length(); 85 } 86 87 public String nextStringIdentifier() { 88 StringBuffer sb = new StringBuffer(prefix); 89 sb.append(super.nextStringIdentifier()); 90 return sb.toString(); 91 } 92 }