ResolveRequestHandler.java 5 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.provider.ModifierList
 *  com.scene7.is.provider.PSModifierEnum
 *  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.HotSpot
 *  com.scene7.is.sleng.ImageAccessException
 *  com.scene7.is.util.MimeTypeEnum
 *  com.scene7.is.util.NullablePair
 *  com.scene7.is.util.TextEncodingTypeEnum
 *  org.jetbrains.annotations.NotNull
 */
package com.scene7.is.ps.provider;

import com.scene7.is.provider.ModifierList;
import com.scene7.is.provider.PSModifierEnum;
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.defs.LayerSpec;
import com.scene7.is.ps.provider.defs.ModifierEnum;
import com.scene7.is.ps.provider.parsers.query.PSModifierListConverter;
import com.scene7.is.sleng.CacheEnum;
import com.scene7.is.sleng.HotSpot;
import com.scene7.is.sleng.ImageAccessException;
import com.scene7.is.util.MimeTypeEnum;
import com.scene7.is.util.NullablePair;
import com.scene7.is.util.TextEncodingTypeEnum;
import java.awt.geom.Area;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.NotNull;

class ResolveRequestHandler
implements RequestHandler {
    ResolveRequestHandler() {
    }

    @NotNull
    @Override
    public Response getResponse(@NotNull Request parsedRequest, @NotNull ProcessingStatus status) throws ImageAccessException, IZoomException {
        String resolved = this.resolveRequest(parsedRequest);
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        PrintWriter out = new PrintWriter(buffer);
        out.println("#S7Z OK");
        out.println("" + '#' + new Date().toString());
        out.println();
        out.println(resolved);
        out.close();
        return new Response().setData(ResponseData.createResponseData((byte[])buffer.toByteArray(), (TextEncodingTypeEnum)TextEncodingTypeEnum.UTF_8, (MimeTypeEnum)MimeTypeEnum.TEXT_PLAIN)).setClientCacheUse(CacheEnum.ON).setRequestType(parsedRequest.getType());
    }

    @NotNull
    private String resolveRequest(@NotNull Request parsedRequest) {
        StringBuilder result = new StringBuilder();
        ModifierSet globalAttributes = parsedRequest.getGlobalAttributes();
        String netPath = globalAttributes.getOrDie(ModifierEnum.I_RESOLVED_IMAGEID);
        if (!netPath.startsWith("/")) {
            result.append('/');
        }
        result.append(netPath);
        result.append('?');
        ModifierList<PSModifierEnum> modifierList = globalAttributes.getOrDie(ModifierEnum.I_RESOLVED_URL);
        modifierList = ResolveRequestHandler.cleanModifiers(modifierList);
        result.append(modifierList.toString());
        return result.toString();
    }

    @NotNull
    private static ModifierList<PSModifierEnum> cleanModifiers(@NotNull ModifierList<PSModifierEnum> list) {
        ModifierList<PSModifierEnum> result = PSModifierListConverter.psModifierList();
        block6 : for (NullablePair entry : list.getModifiers()) {
            PSModifierEnum key = (PSModifierEnum)entry.getKey();
            Object value = entry.getValue();
            switch (key) {
                case REQ: {
                    break;
                }
                case TEMPLATE: {
                    break;
                }
                case LAYER: {
                    if (result.isEmpty() && ResolveRequestHandler.isCompLayer(value)) continue block6;
                    result.append((Enum)key, value);
                    break;
                }
                case MAP: 
                case MAPA: {
                    List hotSpotList = (List)value;
                    if (hotSpotList.size() == 1) {
                        HotSpot hotSpot = (HotSpot)hotSpotList.get(0);
                        if (hotSpot.getArea() == null && hotSpot.getProperties().size() == 0) {
                            result.append((Enum)key, new ArrayList());
                            break;
                        }
                        result.append((Enum)key, value);
                        break;
                    }
                    result.append((Enum)key, value);
                    break;
                }
                default: {
                    result.append((Enum)key, value);
                }
            }
        }
        return result;
    }

    private static boolean isCompLayer(Object value) {
        return "COMP".equalsIgnoreCase(((LayerSpec)value).getLayerId().toString());
    }

}