1/* 2 * Copyright (C) 2010 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.google.clearsilver.jsilver.data; 18 19import com.google.clearsilver.jsilver.autoescape.EscapeMode; 20 21import java.io.IOException; 22 23/** 24 * This class is meant to hold implementation common to different instances of Data interface. 25 */ 26public abstract class AbstractData implements Data { 27 28 protected EscapeMode escapeMode = EscapeMode.ESCAPE_NONE; 29 30 public int getIntValue() { 31 // If we ever use the integer value of a node to create the string 32 // representation we must ensure that an empty node is not mistaken 33 // for a node with the integer value '0'. 34 return TypeConverter.asNumber(getValue()); 35 } 36 37 public boolean getBooleanValue() { 38 // If we ever use the boolean value of a node to create the string 39 // representation we must ensure that an empty node is not mistaken 40 // for a node with the boolean value 'false'. 41 return TypeConverter.asBoolean(getValue()); 42 } 43 44 // ******************* Convenience methods ******************* 45 46 /** 47 * Retrieves the value at the specified path in this HDF node's subtree. 48 * 49 * Use {@link #getValue(String)} in preference to ensure ClearSilver compatibility. 50 */ 51 public String getValue(String path, String defaultValue) { 52 Data child = getChild(path); 53 if (child == null) { 54 return defaultValue; 55 } else { 56 String result = child.getValue(); 57 return result == null ? defaultValue : result; 58 } 59 } 60 61 /** 62 * Retrieves the integer value at the specified path in this HDF node's subtree. If the value does 63 * not exist, or cannot be converted to an integer, default_value will be returned. 64 * 65 * Use {@link #getValue(String)} in preference to ensure ClearSilver compatibility. 66 */ 67 public int getIntValue(String path, int defaultValue) { 68 Data child = getChild(path); 69 if (child == null) { 70 return defaultValue; 71 } else { 72 String result = child.getValue(); 73 try { 74 return result == null ? defaultValue : TypeConverter.parseNumber(result); 75 } catch (NumberFormatException e) { 76 return defaultValue; 77 } 78 } 79 } 80 81 /** 82 * Retrieves the value at the specified path in this HDF node's subtree. If not found, returns 83 * null. 84 */ 85 public String getValue(String path) { 86 return getValue(path, null); 87 } 88 89 /** 90 * Retrieves the value at the specified path in this HDF node's subtree. If not found or invalid, 91 * returns 0. 92 */ 93 public int getIntValue(String path) { 94 return TypeConverter.asNumber(getChild(path)); 95 } 96 97 /** 98 * Retrieves the value at the specified path in this HDF node's subtree. If not found or invalid, 99 * returns false. 100 */ 101 public boolean getBooleanValue(String path) { 102 return TypeConverter.asBoolean(getChild(path)); 103 } 104 105 /** 106 * Sets the value at the specified path in this HDF node's subtree. 107 */ 108 public void setValue(String path, String value) { 109 Data child = createChild(path); 110 child.setValue(value); 111 } 112 113 // ******************* String representation ******************* 114 115 @Override 116 public String toString() { 117 StringBuilder stringBuilder = new StringBuilder(); 118 toString(stringBuilder, 0); 119 return stringBuilder.toString(); 120 } 121 122 public void toString(StringBuilder out, int indent) { 123 try { 124 write(out, indent); 125 } catch (IOException ioe) { 126 throw new RuntimeException(ioe); // COV_NF_LINE 127 } 128 } 129 130 @Override 131 public void optimize() { 132 // Do nothing. 133 } 134 135 @Override 136 public void setEscapeMode(EscapeMode mode) { 137 this.escapeMode = mode; 138 } 139 140 @Override 141 public EscapeMode getEscapeMode() { 142 return escapeMode; 143 } 144} 145