ImageLayerSource.java
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.scene7.is.provider.LayerSourceEnum
* com.scene7.is.util.serializers.Serializer
* org.jetbrains.annotations.NotNull
*/
package com.scene7.is.ps.provider;
import com.scene7.is.provider.LayerSourceEnum;
import com.scene7.is.ps.provider.LayerSource;
import com.scene7.is.util.serializers.Serializer;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jetbrains.annotations.NotNull;
public class ImageLayerSource
implements LayerSource {
private static final Pattern DEVICE_NAME = Pattern.compile("^[A-z]+:");
private static final Pattern PARENT_DIR = Pattern.compile("(^|/)\\.\\.($|/)");
private static final Serializer<ImageLayerSource> SERIALIZER = new Serializer<ImageLayerSource>(){
public ImageLayerSource load(@NotNull DataInput in) throws IOException {
String path = in.readUTF();
return ImageLayerSource.imageLayerSource(path);
}
public void store(ImageLayerSource value, @NotNull DataOutput out) throws IOException {
out.writeUTF(value.path);
}
public int dataLength() throws UnsupportedOperationException {
throw new UnsupportedOperationException("dataLength");
}
};
@NotNull
private final String path;
@NotNull
public static Serializer<ImageLayerSource> imageLayerSourceSerializer() {
return SERIALIZER;
}
@NotNull
public static ImageLayerSource imageLayerSource(@NotNull String path) {
return new ImageLayerSource(path);
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || this.getClass() != obj.getClass()) {
return false;
}
ImageLayerSource that = (ImageLayerSource)obj;
return this.path.equals(that.path);
}
public int hashCode() {
return this.path.hashCode();
}
@NotNull
public String toString() {
return "path['" + this.path + "']";
}
@NotNull
@Override
public LayerSourceEnum getType() {
return LayerSourceEnum.IS;
}
@NotNull
@Override
public String getValue() {
return this.path;
}
private void readObject(ObjectInputStream in) throws IOException {
throw new AssertionError();
}
private void writeObject(ObjectOutputStream out) throws IOException {
throw new AssertionError();
}
private ImageLayerSource(@NotNull String path) {
if (DEVICE_NAME.matcher(path).find()) {
throw new IllegalArgumentException("path may not start with windows device name");
}
if (PARENT_DIR.matcher(path).find()) {
throw new IllegalArgumentException("path may not contain '..' segments");
}
this.path = path;
}
protected Object writeReplace() {
return new Serializable(){
private ImageLayerSource value;
private Object readResolve() {
assert (this.value != null);
return this.value;
}
private void readObject(ObjectInputStream in) throws IOException {
this.value = (ImageLayerSource)SERIALIZER.load((DataInput)in);
}
private void writeObject(ObjectOutputStream out) throws IOException {
SERIALIZER.store((Object)ImageLayerSource.this, (DataOutput)out);
}
};
}
}