XmpDataHandler.java
5.11 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.scene7.is.provider.FmtSpec
* com.scene7.is.provider.ProcessingStatus
* com.scene7.is.provider.RequestTypeEnum
* com.scene7.is.provider.Response
* com.scene7.is.provider.ResponseData
* com.scene7.is.sleng.CacheEnum
* com.scene7.is.sleng.FXGServer
* com.scene7.is.sleng.ImageAccess
* com.scene7.is.sleng.ImageAccessException
* com.scene7.is.sleng.ImageServer
* com.scene7.is.sleng.ResponseFormatEnum
* com.scene7.is.sleng.ipp.IppConnection
* com.scene7.is.sleng.ipp.IppImageAccess
* com.scene7.is.sleng.ipp.operations.GetXmpDataOp
* com.scene7.is.sleng.ipp.operations.ImageState
* com.scene7.is.util.MimeTypeEnum
* com.scene7.is.util.TextEncodingTypeEnum
* com.scene7.is.util.XMLUtil
* com.scene7.is.util.text.ParameterException
* org.jetbrains.annotations.NotNull
*/
package com.scene7.is.ps.provider;
import com.scene7.is.provider.FmtSpec;
import com.scene7.is.provider.ProcessingStatus;
import com.scene7.is.provider.RequestTypeEnum;
import com.scene7.is.provider.Response;
import com.scene7.is.provider.ResponseData;
import com.scene7.is.ps.provider.IZoomException;
import com.scene7.is.ps.provider.ModifierSet;
import com.scene7.is.ps.provider.Request;
import com.scene7.is.ps.provider.RequestHandler;
import com.scene7.is.ps.provider.SlengCompiler;
import com.scene7.is.ps.provider.Util;
import com.scene7.is.ps.provider.defs.ModifierEnum;
import com.scene7.is.sleng.CacheEnum;
import com.scene7.is.sleng.FXGServer;
import com.scene7.is.sleng.ImageAccess;
import com.scene7.is.sleng.ImageAccessException;
import com.scene7.is.sleng.ImageServer;
import com.scene7.is.sleng.ResponseFormatEnum;
import com.scene7.is.sleng.ipp.IppConnection;
import com.scene7.is.sleng.ipp.IppImageAccess;
import com.scene7.is.sleng.ipp.operations.GetXmpDataOp;
import com.scene7.is.sleng.ipp.operations.ImageState;
import com.scene7.is.util.MimeTypeEnum;
import com.scene7.is.util.TextEncodingTypeEnum;
import com.scene7.is.util.XMLUtil;
import com.scene7.is.util.text.ParameterException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public class XmpDataHandler
implements RequestHandler {
@NotNull
private final ImageServer imageServer;
@NotNull
private final FXGServer fxgServer;
public XmpDataHandler(@NotNull ImageServer imageServer, @NotNull FXGServer fxgServer) {
this.imageServer = imageServer;
this.fxgServer = fxgServer;
}
@NotNull
@Override
public Response getResponse(@NotNull Request parsedRequest, @NotNull ProcessingStatus status) throws IZoomException, ImageAccessException {
IppImageAccess imageAccess;
try {
SlengCompiler compiler = new SlengCompiler(this.imageServer, true, false, false);
byte[] sleng = compiler.compileRequest(parsedRequest);
imageAccess = (IppImageAccess)this.imageServer.getImageAccess(this.fxgServer, CacheEnum.ON, sleng);
}
catch (ParameterException e) {
throw new IZoomException(IZoomException.INVALID_REQUEST, "", (Throwable)e);
}
try {
Document doc;
ImageState imageState = imageAccess.getState();
ModifierSet attr = parsedRequest.getGlobalAttributes();
ResponseFormatEnum format = attr.getOrDie(ModifierEnum.FMT).format;
GetXmpDataOp op = new GetXmpDataOp(imageState, format);
IppConnection connection = imageAccess.getConnection();
String xmpData = (String)op.execute(connection);
if (xmpData.length() == 0) {
doc = XMLUtil.createDocument();
Element root = XMLUtil.createElement((Document)doc, (String)"xmpmeta");
doc.appendChild(root);
} else {
ByteArrayInputStream is = new ByteArrayInputStream(xmpData.getBytes("UTF-8"));
doc = XMLUtil.createDocumentBuilder().parse(is);
}
TextEncodingTypeEnum encoding = parsedRequest.getResponseEncoding();
long expires = Util.computeExpiration(parsedRequest, this.imageServer);
Response response = new Response().setData(ResponseData.createResponseMessage((String)XMLUtil.toXMLString((Document)doc, (TextEncodingTypeEnum)encoding, (boolean)false), (TextEncodingTypeEnum)encoding, (MimeTypeEnum)MimeTypeEnum.TEXT_XML)).setExpiration(expires).setClientCacheUse(CacheEnum.ON).setRequestType(parsedRequest.getType());
return response;
}
catch (UnsupportedEncodingException e) {
throw new IZoomException(IZoomException.XML_ENCODING_ERROR, "Unsupported encoding", e);
}
catch (SAXException e) {
throw new IZoomException(IZoomException.XML_PARSING_ERROR, "Parsing Error", e);
}
catch (IOException e) {
throw new AssertionError(e);
}
finally {
imageAccess.dispose();
}
}
}