c0633539fbddfcd69a77590b20c1d547c5d74210
[vamsas.git] / src / org / apache / tools / zip / JarMarker.java
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  */
18
19 package org.apache.tools.zip;
20
21 import java.util.zip.ZipException;
22
23 /**
24  * If this extra field is added as the very first extra field of the
25  * archive, Solaris will consider it an executable jar file.
26  *
27  * @since Ant 1.6.3
28  */
29 public final class JarMarker implements ZipExtraField {
30
31     private static final ZipShort ID = new ZipShort(0xCAFE);
32     private static final ZipShort NULL = new ZipShort(0);
33     private static final byte[] NO_BYTES = new byte[0];
34     private static final JarMarker DEFAULT = new JarMarker();
35
36     /** No-arg constructor */
37     public JarMarker() {
38         // empty
39     }
40
41     /**
42      * Since JarMarker is stateless we can always use the same instance.
43      * @return the DEFAULT jarmaker.
44      */
45     public static JarMarker getInstance() {
46         return DEFAULT;
47     }
48
49     /**
50      * The Header-ID.
51      * @return the header id
52      */
53     public ZipShort getHeaderId() {
54         return ID;
55     }
56
57     /**
58      * Length of the extra field in the local file data - without
59      * Header-ID or length specifier.
60      * @return 0
61      */
62     public ZipShort getLocalFileDataLength() {
63         return NULL;
64     }
65
66     /**
67      * Length of the extra field in the central directory - without
68      * Header-ID or length specifier.
69      * @return 0
70      */
71     public ZipShort getCentralDirectoryLength() {
72         return NULL;
73     }
74
75     /**
76      * The actual data to put into local file data - without Header-ID
77      * or length specifier.
78      * @return the data
79      * @since 1.1
80      */
81     public byte[] getLocalFileDataData() {
82         return NO_BYTES;
83     }
84
85     /**
86      * The actual data to put central directory - without Header-ID or
87      * length specifier.
88      * @return the data
89      */
90     public byte[] getCentralDirectoryData() {
91         return NO_BYTES;
92     }
93
94     /**
95      * Populate data from this array as if it was in local file data.
96      * @param data an array of bytes
97      * @param offset the start offset
98      * @param length the number of bytes in the array from offset
99      *
100      * @throws ZipException on error
101      */
102     public void parseFromLocalFileData(byte[] data, int offset, int length)
103         throws ZipException {
104         if (length != 0) {
105             throw new ZipException("JarMarker doesn't expect any data");
106         }
107     }
108 }