FileSaveRequestHandler.java 5.02 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.provider.RequestTypeEnum
 *  com.scene7.is.provider.RequestTypeSpec
 *  com.scene7.is.provider.catalog.Catalog
 *  com.scene7.is.provider.catalog.CatalogException
 *  com.scene7.is.provider.catalog.ObjectRecord
 *  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.util.AbstractPath
 *  com.scene7.is.util.error.Scaffold
 *  com.scene7.is.util.text.ParameterException
 *  com.scene7.is.util.text.ParsingException
 *  org.jetbrains.annotations.NotNull
 */
package com.scene7.is.ps.provider;

import com.scene7.is.provider.RequestTypeEnum;
import com.scene7.is.provider.RequestTypeSpec;
import com.scene7.is.provider.catalog.Catalog;
import com.scene7.is.provider.catalog.CatalogException;
import com.scene7.is.provider.catalog.ObjectRecord;
import com.scene7.is.ps.provider.IZoomException;
import com.scene7.is.ps.provider.ModifierSet;
import com.scene7.is.ps.provider.PropertiesHandler;
import com.scene7.is.ps.provider.Request;
import com.scene7.is.ps.provider.SaveToFileRequestHandler;
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.util.AbstractPath;
import com.scene7.is.util.error.Scaffold;
import com.scene7.is.util.text.ParameterException;
import com.scene7.is.util.text.ParsingException;
import java.util.HashMap;
import java.util.Map;
import org.jetbrains.annotations.NotNull;

class FileSaveRequestHandler
extends PropertiesHandler {
    @NotNull
    private final ImageServer server;
    @NotNull
    private final FXGServer fxgServer;

    FileSaveRequestHandler(@NotNull ImageServer server, @NotNull FXGServer fxgServer) {
        this.server = server;
        this.fxgServer = fxgServer;
    }

    @Override
    public Map<String, Object> getProperties(Request request) throws ImageAccessException, IZoomException, CatalogException, ParsingException {
        ModifierSet attr = request.getGlobalAttributes();
        try {
            RequestTypeEnum requestType = attr.getOrDie(ModifierEnum.REQ).type;
            if (requestType == RequestTypeEnum.SAVE_INIT) {
                HashMap<String, Object> properties = new HashMap<String, Object>();
                String name = attr.get(ModifierEnum.NAME);
                if (!SaveToFileRequestHandler.isValidName(name)) {
                    throw new IZoomException(IZoomException.ILLEGAL_PATH, name, null);
                }
                SlengCompiler compiler = new SlengCompiler(this.server, true, false, false);
                byte[] code = Util.doOptimize(request) ? compiler.compileOptimizedRequest(this.fxgServer, request) : compiler.compileRequest(request);
                Catalog catalog = request.getRecord().getCatalog();
                ObjectRecord record = catalog.getRecord(name);
                AbstractPath catalogPath = record.getCatalog().getPath();
                String subPath = record.getName();
                String fileName = new AbstractPath(catalogPath, subPath).getPath();
                String saveId = this.saveInitAsynchronous(code, fileName);
                properties.put("context.id", saveId);
                return properties;
            }
            if (!attr.contains(ModifierEnum.ID)) {
                throw new ParameterException(1, ModifierEnum.ID.toString(), null, null);
            }
            String saveId = attr.getOrDie(ModifierEnum.ID);
            if (requestType == RequestTypeEnum.SAVE_STATUS) {
                return this.server.saveProgress(saveId);
            }
            if (requestType == RequestTypeEnum.SAVE_RELEASE) {
                this.server.saveRelease(saveId);
                return new HashMap<String, Object>();
            }
            if (requestType == RequestTypeEnum.SAVE_CANCEL) {
                this.server.saveCancel(saveId);
                return new HashMap<String, Object>();
            }
            throw Scaffold.error((Object)requestType);
        }
        catch (ParameterException e) {
            IZoomException wrapper = new IZoomException(IZoomException.INVALID_REQUEST, "image handler", (Throwable)e);
            wrapper.setProperty("message", e.getMessage());
            throw wrapper;
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private String saveInitAsynchronous(byte[] slengCode, String fileName) throws ImageAccessException {
        ImageAccess imageAccess = this.server.getImageAccess(this.fxgServer, CacheEnum.ON, slengCode);
        try {
            String string = this.server.saveInit(imageAccess, fileName);
            return string;
        }
        finally {
            imageAccess.dispose();
        }
    }
}