
net.intelie.liverig.plugin.widgets.AssetWidgetQueryDetailsExtractor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plugin-assets Show documentation
Show all versions of plugin-assets Show documentation
Asset framework for industries solutions
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