All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.liverig.plugin.widgets.AssetWidgetQueryDetailsExtractor Maven / Gradle / Ivy

The newest version!
package net.intelie.liverig.plugin.widgets;

import com.google.common.base.Strings;
import net.intelie.liverig.plugin.assets.*;
import net.intelie.liverig.plugin.normalizer.NormalizerConfig;
import net.intelie.liverig.plugin.util.WebExceptionUtils;
import net.intelie.pipes.util.Escapes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.core.Response;
import java.util.Locale;

import static net.intelie.liverig.plugin.assets.AssetNormalizerService.Helper.*;

public class AssetWidgetQueryDetailsExtractor {

    private static final Logger LOGGER = LoggerFactory.getLogger(AssetWidgetQueryDetailsExtractor.class);

    private static final String ASSET_WIDGET_OVERRIDE_FILTER = "assetWidgetOverrideFilter";
    private static final String ASSET_WIDGET_OVERRIDE_FILTER_NO_LOOKUP = "assetWidgetOverrideFilterNoLookup";
    private static final String RIG_TYPE_SERVICE_QUALIFIER = "rig";

    @NotNull
    private final AssetService assetService;
    @NotNull
    private final PipesMacroService pipesMacroService;
    @NotNull
    private final AssetPerspectivePermission assetPerspectivePermission;

    public AssetWidgetQueryDetailsExtractor(@NotNull AssetService assetService,
                                            @NotNull PipesMacroService pipesMacroService,
                                            @NotNull AssetPerspectivePermission assetPerspectivePermission) {
        this.assetService = assetService;
        this.pipesMacroService = pipesMacroService;
        this.assetPerspectivePermission = assetPerspectivePermission;
    }

    @Nullable
    public AssetWidgetQueryDetails extractQueryDetails(@NotNull AssetRequest assetRequest) {
        String lookup = assetRequest.getLookup();

        if (!Strings.isNullOrEmpty(lookup)) {
            // Allow users to override filters in runtime when lookup
            if (pipesMacroService.macroExists(ASSET_WIDGET_OVERRIDE_FILTER))
                return detailsForLookup("@@" + ASSET_WIDGET_OVERRIDE_FILTER, lookup);

            return detailsForLookup(PipesExpressions.LOOKUP_VALUE_MACRO, lookup);
        }

        String assetId = assetRequest.getAssetId();
        String assetType = getAssetType(assetId);

        AssetTypeService assetTypeService = assetService.get(assetType);

        if (assetTypeService == null)
            return null;

        Integer extensionId = getExtensionId(assetRequest, assetId);
        Asset asset = assetTypeService.get(String.valueOf(extensionId));
        NormalizerConfig normalizerConfig = getNormalizer(assetTypeService, extensionId);

        if (normalizerConfig == null)
            return null;

        if (!assetPerspectivePermission.userCanView(asset)) {
            String id = String.format(Locale.ROOT, "%s/%s", assetType, extensionId);
            LOGGER.info("User does not have permission to view {}", id);
            return null;
        }

        String outputAssetId = null;
        if (!Strings.isNullOrEmpty(assetId))
            outputAssetId = "'" + assetId + "'";

        String outputAssetName = null;
        if (asset != null)
            outputAssetName = "'" + asset.getName() + "'";

        String eventType = normalizerConfig.event_type();

        if (Strings.isNullOrEmpty(eventType))
            throw WebExceptionUtils.webException(Response.Status.BAD_REQUEST, "Empty event type");

        String filter;

        // Allow users to override filters in runtime when no lookup
        if (pipesMacroService.macroExists(ASSET_WIDGET_OVERRIDE_FILTER_NO_LOOKUP))
            filter = "@@" + ASSET_WIDGET_OVERRIDE_FILTER_NO_LOOKUP;
        else
            filter = Escapes.formatUnquotedString(eventType);

        return new AssetWidgetQueryDetails(filter, outputAssetId, outputAssetName, null);
    }

    @NotNull
    private AssetWidgetQueryDetails detailsForLookup(String filter, String lookup) {
        String l = "@@lookup." + lookup;
        return new AssetWidgetQueryDetails(filter, l + "[0]", l + ".keys[0]", lookup);
    }

    private String getAssetType(String assetId) {
        String assetType;
        if (assetId != null) {
            String[] assetIdParts = assetId.split("/", 2);
            assetType = assetIdParts[0];
        } else {
            assetType = RIG_TYPE_SERVICE_QUALIFIER;
        }
        return assetType;
    }

    private Integer getExtensionId(AssetRequest request, String assetId) {
        Integer extensionId;
        if (assetId != null) {
            String[] assetIdParts = assetId.split("/", 2);
            extensionId = Integer.valueOf(assetIdParts[1]);
        } else {
            extensionId = request.getExtensionId();
        }
        return extensionId;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy