OSDN Git Service

Add new source files
[armadillo/armadillo1.git] / src / jp / sfjp / armadillo / archive / zip / ZipEntry.java
1 package jp.sfjp.armadillo.archive.zip;
2
3 import java.io.*;
4 import jp.sfjp.armadillo.archive.*;
5 import jp.sfjp.armadillo.time.*;
6
7 /**
8  * ZIP archive entry.
9  */
10 public final class ZipEntry extends ArchiveEntry {
11
12     /**
13      * <code>STORED</code>
14      */
15     public static final short STORED = 0;
16
17     /**
18      * <code>DEFLATED</code>
19      */
20     public static final short DEFLATED = 8;
21
22     private static final long UINT_MAX = 0xFFFFFFFFL;
23     private static final long USHORT_MAX = 0xFFFFL;
24     private static final FTime FTIME = new FTime();
25
26     // state
27     boolean extOverwritten;
28     int reloff;
29     // header
30     int signature;
31     short version;
32     short flags;
33     short method;
34     short mtime;
35     short mdate;
36     int crc;
37     int compsize;
38     int uncompsize;
39     short extlen;
40
41     public ZipEntry() {
42         super(false);
43         this.version = 10;
44         this.flags = 0;
45         this.method = DEFLATED;
46         this.mdate = 0;
47         this.mtime = 0;
48         this.crc = -1;
49         this.compsize = 0;
50         this.uncompsize = 0;
51     }
52
53     public ZipEntry(String name) {
54         this();
55         setName(name);
56     }
57
58     public ZipEntry(String name, File file) {
59         this(name);
60         setFileInfo(file);
61     }
62
63     public boolean hasEXT() {
64         return (flags & 8) == 8;
65     }
66
67     public boolean isOnePassMode() {
68         return crc == -1;
69     }
70
71     @Override
72     public long getSize() {
73         if (isDirectory())
74             return 0;
75         return uncompsize & UINT_MAX;
76     }
77
78     @Override
79     public void setSize(long size) {
80         if (size > UINT_MAX)
81             throw new IllegalArgumentException("max size is int.max: " + size);
82         this.uncompsize = (int)(size & UINT_MAX);
83     }
84
85     @Override
86     public long getCompressedSize() {
87         if (isDirectory())
88             return 0;
89         return compsize & UINT_MAX;
90     }
91
92     @Override
93     public void setCompressedSize(long compressedSize) {
94         if (compressedSize > UINT_MAX)
95             throw new IllegalArgumentException("max size is int-max: " + compressedSize);
96         this.compsize = (int)(compressedSize & UINT_MAX);
97     }
98
99     @Override
100     public long getLastModified() {
101         return FTIME.toMillisecond(mdate, mtime);
102     }
103
104     @Override
105     public void setLastModified(long lastModified) {
106         final int ftime = FTIME.int32From(lastModified);
107         this.mdate = (short)((ftime >> 16) & USHORT_MAX);
108         this.mtime = (short)(ftime & USHORT_MAX);
109     }
110
111     @Override
112     public String getMethodName() {
113         return getMethodName(method);
114     }
115
116     private static String getMethodName(int method) {
117         switch (method) {
118             case ZipEntry.DEFLATED:
119                 return "DEFLATED";
120             case ZipEntry.STORED:
121                 return "STORED";
122             default:
123                 return String.valueOf(method);
124         }
125     }
126
127 }