001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007-2008 Three Rings Design, Inc. 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without 008 * modification, are permitted provided that the following conditions 009 * are met: 010 * 1. Redistributions of source code must retain the above copyright 011 * notice, this list of conditions and the following disclaimer. 012 * 2. Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in the 014 * documentation and/or other materials provided with the distribution. 015 * 3. Neither the name of the copyright owner nor the names of contributors 016 * may be used to endorse or promote products derived from this software 017 * without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 029 * POSSIBILITY OF SUCH DAMAGE. 030 */ 031 package com.threerings.jpkg.ant.dpkg.scripts; 032 033 import java.io.ByteArrayInputStream; 034 import java.io.ByteArrayOutputStream; 035 import java.io.IOException; 036 import java.io.InputStream; 037 import java.io.OutputStreamWriter; 038 039 import com.threerings.antidote.field.BaseField; 040 import com.threerings.jpkg.ant.VelocityHelper; 041 import com.threerings.jpkg.ant.VelocityTemplate; 042 import com.threerings.jpkg.ant.dpkg.scripts.runner.PackageScript; 043 044 /** 045 * A {@link PackageScript} where the script source comes from a Velocity template. 046 * See {@link TemplateScript} for a useful subclass to extend from. 047 */ 048 public abstract class BaseTemplateScript extends BaseField 049 implements ValidationScript, VelocityTemplate 050 { 051 /** 052 * Return an {@link InputStream} of the merged script template. 053 */ 054 protected InputStream mergeTemplate () 055 throws IOException 056 { 057 // write the template to memory 058 final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 059 060 final OutputStreamWriter writer = new OutputStreamWriter(bytes); 061 try { 062 VelocityHelper.mergeTemplate(this, writer); 063 064 } catch (final Exception e) { 065 throw new IOException(e.getMessage()); 066 067 } finally { 068 writer.close(); 069 } 070 return new ByteArrayInputStream(bytes.toByteArray()); 071 } 072 }