VariableExpander.java
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 3k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * Copyright (c) JForum Team
  3.  * All rights reserved.
  4.  
  5.  * Redistribution and use in source and binary forms, 
  6.  * with or without modification, are permitted provided 
  7.  * that the following conditions are met:
  8.  
  9.  * 1) Redistributions of source code must retain the above 
  10.  * copyright notice, this list of conditions and the 
  11.  * following  disclaimer.
  12.  * 2)  Redistributions in binary form must reproduce the 
  13.  * above copyright notice, this list of conditions and 
  14.  * the following disclaimer in the documentation and/or 
  15.  * other materials provided with the distribution.
  16.  * 3) Neither the name of "Rafael Steil" nor 
  17.  * the names of its contributors may be used to endorse 
  18.  * or promote products derived from this software without 
  19.  * specific prior written permission.
  20.  * 
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 
  22.  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
  23.  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
  24.  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  25.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  26.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
  27.  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  29.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  30.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
  31.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
  32.  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  33.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
  34.  * IN CONTRACT, STRICT LIABILITY, OR TORT 
  35.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
  36.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  37.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
  38.  * 
  39.  * Created on May 31, 2004 by pieter
  40.  * The JForum Project
  41.  * http://www.jforum.net
  42.  */
  43. package net.jforum.util.preferences;
  44. import java.util.HashMap;
  45. import java.util.Map;
  46. /**
  47.  * @author Pieter
  48.  * @author Rafael Steil
  49.  * @version $Id: VariableExpander.java,v 1.6 2006/08/20 22:47:37 rafaelsteil Exp $
  50.  */
  51. public class VariableExpander
  52. {
  53. private VariableStore variables;
  54. private String pre;
  55. private String post;
  56. private Map cache;
  57. public VariableExpander(VariableStore variables, String pre, String post)
  58. {
  59. this.variables = variables;
  60. this.pre = pre;
  61. this.post = post;
  62. cache = new HashMap();
  63. }
  64. public void clearCache()
  65. {
  66. cache.clear();
  67. }
  68. public String expandVariables(String source)
  69. {
  70. String result = (String)this.cache.get(source);
  71. if (source == null || result != null) {
  72. return result;
  73. }
  74. int fIndex = source.indexOf(this.pre);
  75. if (fIndex == -1) {
  76. return source;
  77. }
  78. StringBuffer sb = new StringBuffer(source);
  79. while (fIndex > -1) {
  80. int lIndex = sb.indexOf(this.post);
  81. int start = fIndex + this.pre.length();
  82. if (fIndex == 0) {
  83. String varName = sb.substring(start, start + lIndex - this.pre.length());
  84. sb.replace(fIndex, fIndex + lIndex + 1, this.variables.getVariableValue(varName));
  85. }
  86. else {
  87. String varName = sb.substring(start, lIndex);
  88. sb.replace(fIndex, lIndex + 1, this.variables.getVariableValue(varName));
  89. }
  90. fIndex = sb.indexOf(this.pre);
  91. }
  92. result = sb.toString();
  93. this.cache.put(source, result);
  94. return result;
  95. }
  96. }