001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007 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.ar; 032 033 import java.io.ByteArrayInputStream; 034 import java.io.InputStream; 035 import java.io.UnsupportedEncodingException; 036 037 import com.threerings.jpkg.UnixStandardPermissions; 038 039 /** 040 * An {@link ArchiveEntry} where the entry data is a held in a string. 041 */ 042 public class ArchiveStringEntry 043 implements ArchiveEntry 044 { 045 /** 046 * Construct an {@link ArchiveStringEntry} with the supplied string as the entry data and the 047 * supplied path name as the entry path in the archive. The entry will be owned by the root 048 * user and group and have standard permissions. 049 * @param data The string data for the entry. 050 * @param path The path name in the archive. 051 * @see UnixStandardPermissions#ROOT_USER 052 * @see UnixStandardPermissions#ROOT_GROUP 053 * @see UnixStandardPermissions#STANDARD_FILE_MODE 054 */ 055 public ArchiveStringEntry (String data, String path) 056 { 057 _data = data; 058 _path = path; 059 } 060 061 // from ArchiveEntry 062 public InputStream getInputStream () 063 { 064 return new ByteArrayInputStream(dataAsBytes()); 065 } 066 067 // from ArchiveEntry 068 public long getSize () 069 { 070 return dataAsBytes().length; 071 } 072 073 // from ArchiveEntry 074 public String getPath () 075 { 076 return _path; 077 } 078 079 // from ArchiveEntry 080 public int getUserId () 081 { 082 return UnixStandardPermissions.ROOT_USER.getId(); 083 } 084 085 // from ArchiveEntry 086 public int getGroupId () 087 { 088 return UnixStandardPermissions.ROOT_GROUP.getId(); 089 } 090 091 // from ArchiveEntry 092 public int getMode () 093 { 094 return UnixStandardPermissions.STANDARD_FILE_MODE; 095 } 096 097 /** 098 * Return the string data as a byte array encoded for an {@link Archive} 099 */ 100 private byte[] dataAsBytes () 101 { 102 try { 103 return _data.getBytes(Archive.CHAR_ENCODING); 104 105 } catch (final UnsupportedEncodingException uee) { 106 throw new RuntimeException("Archive encoding not found. encoding=[" + Archive.CHAR_ENCODING + "]."); 107 } 108 } 109 110 /** The entry data, contained in a String. */ 111 private final String _data; 112 113 /** The entry path name. */ 114 private final String _path; 115 }