XmpDataHandler.java 5.11 KB
/*
 * 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();
        }
    }
}