1 /* 2 * Copyright (c) 2003 The Visigoth Software Society. All rights 3 * reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * 17 * 3. The end-user documentation included with the redistribution, if 18 * any, must include the following acknowledgement: 19 * "This product includes software developed by the 20 * Visigoth Software Society (http://www.visigoths.org/)." 21 * Alternately, this acknowledgement may appear in the software itself, 22 * if and wherever such third-party acknowledgements normally appear. 23 * 24 * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the 25 * project contributors may be used to endorse or promote products derived 26 * from this software without prior written permission. For written 27 * permission, please contact visigoths@visigoths.org. 28 * 29 * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth" 30 * nor may "FreeMarker" or "Visigoth" appear in their names 31 * without prior written permission of the Visigoth Software Society. 32 * 33 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 34 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 35 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 36 * DISCLAIMED. IN NO EVENT SHALL THE VISIGOTH SOFTWARE SOCIETY OR 37 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 38 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 40 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 41 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 42 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 43 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 44 * SUCH DAMAGE. 45 * ==================================================================== 46 * 47 * This software consists of voluntary contributions made by many 48 * individuals on behalf of the Visigoth Software Society. For more 49 * information on the Visigoth Software Society, please see 50 * http://www.visigoths.org/ 51 */ 52 53 package freemarker.template.utility; 54 55 import freemarker.template.SimpleNumber; 56 import freemarker.template.TemplateBooleanModel; 57 import freemarker.template.TemplateCollectionModel; 58 import freemarker.template.TemplateHashModelEx; 59 import freemarker.template.TemplateModel; 60 import freemarker.template.TemplateModelException; 61 import freemarker.template.TemplateModelIterator; 62 import freemarker.template.TemplateNumberModel; 63 import freemarker.template.TemplateScalarModel; 64 import freemarker.template.TemplateSequenceModel; 65 66 /** 67 * Frequently used constant {@link TemplateModel} values. 68 * 69 * <p>These constants should be stored in the {@link TemplateModel} 70 * sub-interfaces, but for bacward compatibility they are stored here instead. 71 * Starting from FreeMarker 2.4 they should be copyed (not moved!) into the 72 * {@link TemplateModel} sub-interfaces, and this class should be marked as 73 * deprecated.</p> 74 * 75 * @version $Id: Constants.java,v 1.2 2004/11/28 12:58:34 ddekany Exp $ 76 */ 77 public class Constants { 78 79 public static final TemplateBooleanModel TRUE = TemplateBooleanModel.TRUE; 80 81 public static final TemplateBooleanModel FALSE = TemplateBooleanModel.FALSE; 82 83 public static final TemplateScalarModel EMPTY_STRING = (TemplateScalarModel) TemplateScalarModel.EMPTY_STRING; 84 85 public static final TemplateNumberModel ZERO = new SimpleNumber(0); 86 87 public static final TemplateNumberModel ONE = new SimpleNumber(1); 88 89 public static final TemplateNumberModel MINUS_ONE = new SimpleNumber(-1); 90 91 public static final TemplateModelIterator EMPTY_ITERATOR = new TemplateModelIterator() { 92 93 public TemplateModel next() throws TemplateModelException { 94 throw new TemplateModelException("The collection has no more elements."); 95 } 96 97 public boolean hasNext() throws TemplateModelException { 98 return false; 99 } 100 101 }; 102 103 public static final TemplateCollectionModel EMPTY_COLLECTION = new TemplateCollectionModel() { 104 105 public TemplateModelIterator iterator() throws TemplateModelException { 106 return EMPTY_ITERATOR; 107 } 108 109 }; 110 111 public static final TemplateSequenceModel EMPTY_SEQUENCE 112 = new TemplateSequenceModel() { 113 114 public TemplateModel get(int index) throws TemplateModelException { 115 return null; 116 } 117 118 public int size() throws TemplateModelException { 119 return 0; 120 } 121 122 }; 123 124 public static final TemplateHashModelEx EMPTY_HASH = new TemplateHashModelEx() { 125 126 public int size() throws TemplateModelException { 127 return 0; 128 } 129 130 public TemplateCollectionModel keys() throws TemplateModelException { 131 return EMPTY_COLLECTION; 132 } 133 134 public TemplateCollectionModel values() throws TemplateModelException { 135 return EMPTY_COLLECTION; 136 } 137 138 public TemplateModel get(String key) throws TemplateModelException { 139 return null; 140 } 141 142 public boolean isEmpty() throws TemplateModelException { 143 return true; 144 } 145 146 }; 147 148 }