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

com.gooddata.dataset.DatasetManifest Maven / Gradle / Ivy

There is a newer version: 3.12.0+api3
Show newest version
/*
 * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved.
 */
package com.gooddata.dataset;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.gooddata.util.BooleanIntegerDeserializer;
import com.gooddata.util.BooleanIntegerSerializer;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import static com.gooddata.util.Validate.notEmpty;
import static com.gooddata.util.Validate.notNull;


/**
 * Dataset specific upload manifest
 */
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName("dataSetSLIManifest")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DatasetManifest {

    public static final String URI = "/gdc/md/{projectId}/ldm/singleloadinterface/{dataSet}/manifest";

    private final String dataSet;
    private String file;
    private List parts;
    private InputStream source;

    public DatasetManifest(String dataSet) {
        this.dataSet = dataSet;
    }

    /**
     * Create dataset upload manifest.
     * @param dataSet dataset name
     * @param source  source CSV
     */
    public DatasetManifest(final String dataSet, final InputStream source) {
        this.source = notNull(source, "source");
        this.dataSet = notEmpty(dataSet, "dataSet");
    }

    @JsonCreator
    public DatasetManifest(@JsonProperty("dataSet") String dataSet, @JsonProperty("file") String file,
                           @JsonProperty("parts") List parts) {
        this.dataSet = dataSet;
        this.file = file;
        this.parts = parts;
    }

    public String getDataSet() {
        return dataSet;
    }

    public List getParts() {
        return parts;
    }

    public void setParts(List parts) {
        this.parts = parts;
    }

    public String getFile() {
        return file;
    }

    public void setFile(String file) {
        this.file = notEmpty(file, "file");
    }

    /**
     * Set upload mode for all parts of this dataset manifest
     * @param uploadMode upload mode
     */
    public void setUploadMode(final UploadMode uploadMode) {
        notNull(uploadMode, "uploadMode");
        for (Part part : parts) {
            part.setUploadMode(uploadMode.name());
        }
    }

    /**
     * Map the given CSV column name to the dataset field
     * @param columnName column name
     * @param populates dataset field
     */
    public void setMapping(final String columnName, final String populates) {
        notNull(columnName, "columnName");
        notNull(populates, "populates");
        for (Part part : parts) {
            if (part.getPopulates() == null || part.getPopulates().size() != 1) {
                throw new IllegalStateException("Only parts with exactly one populates are supported " + part.getPopulates());
            }
            final String field = part.getPopulates().iterator().next();
            if (populates.equals(field)) {
                part.setColumnName(columnName);
                return;
            }
        }
        throw new IllegalArgumentException("Dataset manifest parts doesn't contain populate value " + populates);
    }

    @JsonIgnore
    public InputStream getSource() {
        return source;
    }

    @JsonIgnore
    public void setSource(final InputStream source) {
        this.source = notNull(source, "source");
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class Part {

        @JsonProperty("mode")
        private String uploadMode;
        private String columnName;
        private List populates;
        private Boolean referenceKey;
        private Map constraints;

        @JsonCreator
        Part(@JsonProperty("mode") String uploadMode,
             @JsonProperty("columnName") String columnName,
             @JsonProperty("populates") List populates,
             @JsonProperty("referenceKey") @JsonDeserialize(using = BooleanIntegerDeserializer.class) Boolean referenceKey,
             @JsonProperty("constraints") Map constraints) {
            this.uploadMode = uploadMode;
            this.columnName = columnName;
            this.populates = populates;
            this.referenceKey = referenceKey;
            this.constraints = constraints;
        }

        public String getUploadMode() {
            return uploadMode;
        }

        public void setUploadMode(String uploadMode) {
            this.uploadMode = uploadMode;
        }

        public String getColumnName() {
            return columnName;
        }

        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }

        public List getPopulates() {
            return populates;
        }

        public void setPopulates(List populates) {
            this.populates = populates;
        }

        /**
         * @return true if the referenceKey is set and is true
         */
        @JsonIgnore
        public boolean isReferenceKey() {
            return Boolean.TRUE.equals(referenceKey);
        }

        @JsonSerialize(using = BooleanIntegerSerializer.class)
        public Boolean getReferenceKey() {
            return referenceKey;
        }

        public void setReferenceKey(boolean referenceKey) {
            this.referenceKey = referenceKey;
        }

        public Map getConstraints() {
            return constraints;
        }

        public void setConstraints(Map constraints) {
            this.constraints = constraints;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy