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    }