001// Copyright 2004, 2005 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014 015package org.apache.hivemind.schema.rules; 016 017import java.util.Map; 018 019import org.apache.hivemind.ApplicationRuntimeException; 020import org.apache.hivemind.HiveMind; 021import org.apache.hivemind.Location; 022import org.apache.hivemind.internal.Module; 023import org.apache.hivemind.schema.Translator; 024 025/** 026 * Translates a string value to a boolean value. "true" and "false" are acceptible values. 027 * Other values are logged as errors and treated as false. Null is simply considered false. 028 * 029 * @author Howard Lewis Ship 030 */ 031public class BooleanTranslator implements Translator 032{ 033 private Boolean _defaultValue = Boolean.FALSE; 034 035 public BooleanTranslator() 036 { 037 } 038 039 /** 040 * Initializes the translator, recognizing key "default" as the 041 * default value for the translator when the input is blank. 042 */ 043 044 public BooleanTranslator(String initializer) 045 { 046 Map m = RuleUtils.convertInitializer(initializer); 047 048 String defaultInit = (String) m.get("default"); 049 050 if (defaultInit != null) 051 _defaultValue = Boolean.valueOf(defaultInit); 052 } 053 054 public Object translate( 055 Module contributingModule, 056 Class propertyType, 057 String inputValue, 058 Location location) 059 { 060 if (HiveMind.isBlank(inputValue)) 061 return _defaultValue; 062 063 if (inputValue.equals("true")) 064 return Boolean.TRUE; 065 066 if (inputValue.equals("false")) 067 return Boolean.FALSE; 068 069 throw new ApplicationRuntimeException( 070 RulesMessages.invalidBooleanValue(inputValue), 071 location, 072 null); 073 } 074 075}