/* * Copyright 2015 Shashank Tulsyan <shashaank at neembuu.com>. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package neembuu.rus; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import neembuu.rus.type.TypeHandlerProvider; /** * * @author Shashank Tulsyan <shashaank at neembuu.com> */ public class VObj implements V{ private final Object w; public VObj(Object w) { this.w = w; } @Override public int i(int defaultValue) { if(isNull())return defaultValue; if(w instanceof Integer)return (Integer)w; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return Integer.parseInt(s); } @Override public long l(long defaultValue) { if(isNull())return defaultValue; if(w instanceof Long)return (Long)w; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return Long.parseLong(s); } @Override public double d(double defaultValue) { if(isNull())return defaultValue; if(w instanceof Double)return (Double)w; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return Double.parseDouble(s); } @Override public float f(float defaultValue) { if(isNull())return defaultValue; if(w instanceof Float)return (Float)w; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return Float.parseFloat(s); } @Override public String s(String defaultValue) { if(isNull())return defaultValue; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return s; } @Override public boolean b(boolean defaultValue) { if(isNull())return defaultValue; if(w instanceof Boolean)return (Boolean)w; String s; if(w instanceof String)s = (String)w; else s = w.toString(); return Boolean.parseBoolean(s); } @Override public boolean isNull() { return w==null || w.toString()==null; } @Override public Object o(DefaultValue dv, Rus r, String name, TypeHandlerProvider thp) { if(dv==null)return s(null); if(dv.subElementType().isAssignableFrom(int.class)){ return i(dv.i()); }else if(dv.subElementType().isAssignableFrom(double.class)){ return d(dv.d()); }else if(dv.subElementType().isAssignableFrom(float.class)){ return f(dv.f()); }else if(dv.subElementType().isAssignableFrom(boolean.class)){ return b(dv.b()); }else if(dv.subElementType().isAssignableFrom(long.class)){ return l(dv.l()); }else if(dv.subElementType().isAssignableFrom(String.class)){ return s(dv.s()); } return thp.provideFor(dv.subElementType(),dv).handle(s(null), r,name, dv); } @Override public byte[] raw() { try{ if(w instanceof String)return ((String)w).getBytes(); ByteArrayOutputStream os = new ByteArrayOutputStream(1024); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(w); os.flush(); return os.toByteArray(); }catch(IOException ioe){ return w.toString().getBytes(); } } @Override public <X> X o(Class<X> cast, X defaultValue) { if(cast.isAssignableFrom(w.getClass())){ return w==null?defaultValue:((X)w); }return defaultValue; } }