AvsProxy.java 8.67 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.scene7.is.catalog.CatalogRecord
 *  com.scene7.is.catalog.util.ObjectTypeEnum
 *  com.scene7.is.catalog.util.localization.LocalizedText
 *  com.scene7.is.catalog.util.localization.LocalizedTextEntry
 *  com.scene7.is.provider.UserData
 *  com.scene7.is.util.AbstractPath
 *  com.scene7.is.util.PathUtil
 *  com.scene7.is.util.SizeInt
 *  com.scene7.is.util.callbacks.Option
 *  com.scene7.is.util.text.ParsingException
 *  com.scene7.is.util.text.coders.Base16Coder
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 */
package com.adobe.cq.dam.s7imaging.impl.catalog;

import com.adobe.cq.dam.s7imaging.impl.catalog.JcrUtil;
import com.adobe.cq.dam.s7imaging.impl.jcr.props.JcrProps;
import com.adobe.cq.dam.s7imaging.impl.jcr.props.PropExtractor;
import com.adobe.cq.dam.s7imaging.impl.jcr.props.PropKey;
import com.adobe.cq.dam.s7imaging.impl.jcr.props.StandardExtractors;
import com.scene7.is.catalog.CatalogRecord;
import com.scene7.is.catalog.util.ObjectTypeEnum;
import com.scene7.is.catalog.util.localization.LocalizedText;
import com.scene7.is.catalog.util.localization.LocalizedTextEntry;
import com.scene7.is.provider.UserData;
import com.scene7.is.util.AbstractPath;
import com.scene7.is.util.PathUtil;
import com.scene7.is.util.SizeInt;
import com.scene7.is.util.callbacks.Option;
import com.scene7.is.util.text.ParsingException;
import com.scene7.is.util.text.coders.Base16Coder;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.RepositoryException;

public class AvsProxy {
    private static final String VIDEO = "video";
    private static final String METADATA = "jcr:content/metadata";
    private static final String WIDTH = "width";
    private static final String HEIGHT = "height";
    private static final String VIDEO_BIT_RATE = "videoBitrate";
    private static final String AUDIO_BIT_RATE = "audioBitrate";
    private static final String VIDEO_CODEC = "videoCodec";
    private static final String AUDIO_CODEC = "audioCodec";
    private static final String VIDEO_DURATION = "videoDuration";
    private static final String DURATION = "duration";
    private static final String DAM_PROXY_URL = "jcr:content/dam:proxyUrl";
    private static final PropKey<Option<String>> ProxyUrl = PropKey.optional("jcr:content/dam:proxyUrl", StandardExtractors.toString);
    private static final PropKey<Option<Integer>> Width = PropKey.optional("width", StandardExtractors.toInteger);
    private static final PropKey<Option<Integer>> Height = PropKey.optional("height", StandardExtractors.toInteger);
    private static final PropKey<Option<Long>> VideoBitRate = PropKey.optional("videoBitrate", StandardExtractors.toLong);
    private static final PropKey<Option<Long>> AudioBitRate = PropKey.optional("audioBitrate", StandardExtractors.toLong);
    private static final PropKey<Option<String>> VideoCodec = PropKey.optional("videoCodec", StandardExtractors.toString);
    private static final PropKey<Option<String>> AudioCodec = PropKey.optional("audioCodec", StandardExtractors.toString);
    private static final PropKey<Option<Double>> VideoDuration = PropKey.optional("videoDuration", StandardExtractors.toDouble);
    private static final PropKey<Option<Double>> DurationLegacy = PropKey.optional("duration", StandardExtractors.toDouble);
    private static final PropKey<Long> LastModified = PropKey.required("jcr:content/jcr:lastModified", StandardExtractors.toLong);

    public static Option<CatalogRecord> avsProxy(String rootId, String recordId, Node node) throws RepositoryException {
        Iterator i$ = JcrProps.jcrProps(node).get(ProxyUrl).iterator();
        if (i$.hasNext()) {
            String proxyUrl = (String)i$.next();
            CatalogRecord record = CatalogRecord.catalogRecord((String)rootId, (String)recordId, (ObjectTypeEnum)ObjectTypeEnum.STATIC);
            record.setAssetType(Option.some((Object)"video"));
            record.setPath(AvsProxy.proxyPath(proxyUrl, node));
            record.setLastModified(JcrProps.jcrProps(node).get(LastModified));
            AvsProxy.processMetadata(node, record);
            return Option.some((Object)record);
        }
        return Option.none();
    }

    private static void processMetadata(Node node, CatalogRecord record) throws RepositoryException {
        for (Node m : JcrUtil.getNode(node, "jcr:content/metadata")) {
            JcrProps props = JcrProps.jcrProps(m);
            HashMap<String, LocalizedText> ud = new HashMap<String, LocalizedText>();
            AvsProxy.setVideoSize(props, ud, record);
            AvsProxy.setBitRates(props, ud, record);
            for (String v2 : props.get(VideoCodec)) {
                ud.put("Video_Codec", AvsProxy.localizedText(v2));
            }
            for (String v2 : props.get(AudioCodec)) {
                ud.put("Audio_Codec", AvsProxy.localizedText(v2));
            }
            Iterator i$ = props.get(VideoDuration).orElse(props.get(DurationLegacy)).iterator();
            while (i$.hasNext()) {
                double v3 = (Double)i$.next();
                ud.put("Video_Length", AvsProxy.localizedText(v3));
            }
            if (ud.isEmpty()) continue;
            record.setUserData(new UserData(ud));
        }
    }

    private static void setBitRates(JcrProps props, Map<String, LocalizedText> ud, CatalogRecord record) throws RepositoryException {
        long v;
        Option<Long> videoBitRate = props.get(VideoBitRate);
        Option<Long> audioBitRate = props.get(AudioBitRate);
        Iterator i$ = videoBitRate.iterator();
        while (i$.hasNext()) {
            v = (Long)i$.next();
            record.setVideoBitRate(Option.some((Object)v));
            ud.put("Video_Bit_Rate", AvsProxy.localizedText(v));
        }
        i$ = audioBitRate.iterator();
        while (i$.hasNext()) {
            v = (Long)i$.next();
            record.setAudioBitRate(Option.some((Object)v));
            ud.put("Audio_Bit_Rate", AvsProxy.localizedText(v));
        }
        if (videoBitRate.isDefined() && audioBitRate.isDefined()) {
            long totalBitRate = (Long)videoBitRate.get() + (Long)audioBitRate.get();
            ud.put("Total_Stream_Bit_Rate", AvsProxy.localizedText(totalBitRate));
        }
    }

    private static void setVideoSize(JcrProps props, Map<String, LocalizedText> ud, CatalogRecord record) throws RepositoryException {
        int v;
        Option<Integer> videoWidth = props.get(Width);
        Option<Integer> videoHeight = props.get(Height);
        Iterator i$ = videoWidth.iterator();
        while (i$.hasNext()) {
            v = (Integer)i$.next();
            ud.put("Video_Width", AvsProxy.localizedText(v));
        }
        i$ = videoHeight.iterator();
        while (i$.hasNext()) {
            v = (Integer)i$.next();
            ud.put("Video_Height", AvsProxy.localizedText(v));
        }
        if (videoWidth.isDefined() || videoHeight.isDefined()) {
            SizeInt videoSize = SizeInt.sizeInt((int)((Integer)videoWidth.getOrElse((Object)0)), (int)((Integer)videoHeight.getOrElse((Object)0)));
            record.setVideoSize(Option.some((Object)videoSize));
        }
    }

    private static AbstractPath proxyPath(String proxyUrl, Node asset) throws RepositoryException {
        String encoded = AvsProxy.base16Encode(proxyUrl);
        String extension = PathUtil.parseExtention((String)asset.getName());
        String path = "/external-url:/" + encoded + "." + extension;
        try {
            return new AbstractPath(path);
        }
        catch (ParsingException e) {
            throw new AssertionError((Object)e);
        }
    }

    private static String base16Encode(String s) {
        try {
            return Base16Coder.base16Coder().encode(s.getBytes("UTF-8"));
        }
        catch (UnsupportedEncodingException e) {
            throw new AssertionError(e);
        }
    }

    private static LocalizedText localizedText(Object v) {
        return LocalizedText.localizedText((String)String.valueOf(v), (LocalizedTextEntry[])new LocalizedTextEntry[0]);
    }

    private AvsProxy() {
    }

    private static interface UD {
        public static final String VIDEO_BIT_RATE = "Video_Bit_Rate";
        public static final String AUDIO_BIT_RATE = "Audio_Bit_Rate";
        public static final String VIDEO_CODEC = "Video_Codec";
        public static final String AUDIO_CODEC = "Audio_Codec";
        public static final String VIDEO_LENGTH = "Video_Length";
        public static final String VIDEO_WIDTH = "Video_Width";
        public static final String VIDEO_HEIGHT = "Video_Height";
        public static final String TOTAL_STREAM_BIT_RATE = "Total_Stream_Bit_Rate";
    }

}