/** * Copyright 2010 Bing Ran<bing_ran@hotmail.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 cn.bran.japid.template; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import cn.bran.japid.util.WebUtils; /** * a java based template that dump content to a stream. * * @author bran * */ public abstract class JapidTemplateBaseStreaming { private static final String UTF_8 = "UTF-8"; // private PrintWriter out; private OutputStream out; protected OutputStream getOut() { return out; } public JapidTemplateBaseStreaming(OutputStream out2) { if (out2 == null) throw new RuntimeException("JapidTemplateBaseStreaming do not take null OutputStream."); this.out = out2; } // // private BranTemplateBase() { // } // call this if run in PlayContainer public void runtimeInit() { // scope = Scope. } // don't use it since it will lead to new instance of stringencoder Charset UTF8 = Charset.forName("UTF-8"); final protected void p(byte[] ba) { try { out.write(ba); } catch (IOException e) { throw new RuntimeException(e); } } final protected void p(String s) { try { writeString(s); } catch (IOException e) { throw new RuntimeException(e); } } final protected void pln(String s) { try { writeString(s); out.write('\n'); } catch (IOException e) { throw new RuntimeException(e); } } /** * @param s * @throws IOException * @throws UnsupportedEncodingException */ private void writeString(String s) throws IOException, UnsupportedEncodingException { // ByteBuffer bb = StringUtils.encodeUTF8(s); // out.write(bb.array(), 0, bb.position()); // ok my code is slower in large trunk of data if (s != null) out.write(s.getBytes("UTF-8")); } final protected void pln(byte[] ba) { try { out.write(ba); out.write('\n'); } catch (IOException e) { throw new RuntimeException(e); } } final protected void p(Object... ss) { for (Object s : ss) { if (s != null) { writeObject(s); // out.append(s); } } } /** * @param s */ private void writeObject(Object s) { try { if (s instanceof byte[]) { out.write((byte[])s); } else { writeString(s.toString()); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } final protected void pln(Object... ss) { for (Object s : ss) { if (s != null) writeObject(s); } pln(); } final protected void pln() { try { out.write('\n'); } catch (IOException e) { throw new RuntimeException(e); } } protected void layout() { doLayout(); } protected abstract void doLayout(); public boolean asBoolean(Object o) { return WebUtils.asBoolean(o); } static protected byte[] getBytes(String src) { if (src == null || src.length() == 0) return new byte[] {}; try { return src.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } }