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

com.mnubo.java.sdk.client.services.ModelSDKServices Maven / Gradle / Ivy

package com.mnubo.java.sdk.client.services;

import com.mnubo.java.sdk.client.models.datamodel.*;
import com.mnubo.java.sdk.client.spi.ModelSDK;
import org.springframework.core.ParameterizedTypeReference;

import java.util.Collections;
import java.util.Map;
import java.util.Set;

class ModelSDKServices implements ModelSDK {

    private final SDKService sdkCommonServices;

    private final SandboxEntityOps tsOps;
    private final String tsBasePath = "/timeseries";

    private final SandboxEntityOps objectsOps;
    private final String objBasePath = "/objectAttributes";

    private final SandboxEntityOps ownersOps;
    private final String ownersBasePath = "/ownerAttributes";

    private final SandboxTypeOps objectTypesOps;
    private final String objectTypesBasePath = "/objectTypes";

    private final SandboxTypeOps eventTypesOps;
    private final String eventTypesBasePath = "/eventTypes";


    private final SandboxOnlyOps sandboxOnlyOps;
    private final ResetOps resetOps;


    ModelSDKServices(SDKService sdkCommonServices) {
        this.sdkCommonServices = sdkCommonServices;

        tsOps = new SandboxEntityOpsImpl<>(this.sdkCommonServices, tsBasePath);
        objectsOps = new SandboxEntityOpsImpl<>(this.sdkCommonServices, objBasePath);
        ownersOps = new SandboxEntityOpsImpl<>(this.sdkCommonServices, ownersBasePath);

        objectTypesOps = new SandboxTypeOpsImpl<>(this.sdkCommonServices, objectTypesBasePath);
        eventTypesOps = new SandboxTypeOpsImpl<>(this.sdkCommonServices, eventTypesBasePath);

        resetOps = new ResetOpsImpl(this.sdkCommonServices);

        sandboxOnlyOps = new SandboxOnlyOps() {
            @Override
            public SandboxEntityOps timeseriesOps() {
                return tsOps;
            }

            @Override
            public SandboxEntityOps objectAttributesOps() {
                return objectsOps;
            }

            @Override
            public SandboxEntityOps ownerAttributesOps() {
                return ownersOps;
            }

            @Override
            public SandboxTypeOps objectTypesOps() {
                return objectTypesOps;
            }

            @Override
            public SandboxTypeOps eventTypesOps() {
                return eventTypesOps;
            }

            @Override
            public ResetOps resetOps() {
                return resetOps;
            }

        };
    }

    @Override
    public Model export() {
        return this.sdkCommonServices.getRequest(
            this.sdkCommonServices.getModelBaseUri().path("/export").toUriString(),
            Model.class
        );
    }

    @Override
    public SandboxOnlyOps sandboxOps() {
        return sandboxOnlyOps;
    }

    @Override
    public Set getTimeseries() {
        return this.sdkCommonServices.getRequest(
            this.sdkCommonServices.getModelBaseUri().path(tsBasePath).toUriString(),
                new ParameterizedTypeReference>() {}
        );
    }

    @Override
    public Set getObjectAttributes() {
        return this.sdkCommonServices.getRequest(
            this.sdkCommonServices.getModelBaseUri().path(objBasePath).toUriString(),
                new ParameterizedTypeReference>() {}
        );
    }

    @Override
    public Set getOwnerAttributes() {
        return this.sdkCommonServices.getRequest(
            this.sdkCommonServices.getModelBaseUri().path(ownersBasePath).toUriString(),
                new ParameterizedTypeReference>() {}
        );
    }

    @Override
    public Set getObjectTypes() {
        return this.sdkCommonServices.getRequest(
            this.sdkCommonServices.getModelBaseUri().path(objectTypesBasePath).toUriString(),
                new ParameterizedTypeReference>() {}
        );
    }

    @Override
    public Set getEventTypes() {

        return this.sdkCommonServices.getRequest(
                this.sdkCommonServices.getModelBaseUri().path(eventTypesBasePath).toUriString(),
                new ParameterizedTypeReference>() {}
        );
    }
    private class SandboxEntityOpsImpl implements ModelSDK.SandboxEntityOps {

        private final SDKService sdkCommonServices;
        private final String basePath;

        SandboxEntityOpsImpl(SDKService sdkCommonServices, String basePath) {
            this.sdkCommonServices = sdkCommonServices;
            this.basePath = basePath;
        }

        @Override
        public void create(Set value) {
            this.sdkCommonServices.postRequest(
                this.sdkCommonServices.getModelBaseUri().path(this.basePath).toUriString(),
                value.toArray()
            );
        }

        @Override
        public void createOne(A value) {
            this.create(Collections.singleton(value));
        }

        @Override
        public void update(String key, UpdateEntity update) {
            this.sdkCommonServices.putRequest(
                this.sdkCommonServices.getModelBaseUri().path(this.basePath).path("/" + key).toUriString(),
                update
            );
        }

        @Override
        public String generateDeployCode(String key) {
            final Map body = this.sdkCommonServices.postRequest(
                this.sdkCommonServices.getModelBaseUri()
                    .path(this.basePath)
                    .path("/" + key)
                    .path("/deploy")
                    .toUriString(),
                new ParameterizedTypeReference>() {},
                null
            );
            if (!body.containsKey("code"))
                throw new IllegalStateException("The response json should contain a code.");
            return body.get("code");
        }

        @Override
        public void applyDeployCode(String key, String code) {
            this.sdkCommonServices.postRequest(
                this.sdkCommonServices.getModelBaseUri()
                    .path(this.basePath)
                    .path("/" + key)
                    .path("/deploy")
                    .path("/" + code)
                    .toUriString(),
                null
            );
        }

        @Override
        public void deploy(String key) {
            final String code = generateDeployCode(key);
            applyDeployCode(key, code);
        }
    }
    private class SandboxTypeOpsImpl implements ModelSDK.SandboxTypeOps {

        private final SDKService sdkCommonServices;
        private final String basePath;

        SandboxTypeOpsImpl(SDKService sdkCommonServices, String basePath) {
            this.sdkCommonServices = sdkCommonServices;
            this.basePath = basePath;
        }

        @Override
        public void create(Set value) {
            this.sdkCommonServices.postRequest(
                this.sdkCommonServices.getModelBaseUri().path(this.basePath).toUriString(),
                value.toArray()
            );
        }

        @Override
        public void createOne(A value) {
            this.create(Collections.singleton(value));
        }

        @Override
        public void update(String key, A update) {
            this.sdkCommonServices.putRequest(
                this.sdkCommonServices.getModelBaseUri().path(this.basePath).path("/" + key).toUriString(),
                update
            );
        }

        @Override
        public void delete(String key) {
            this.sdkCommonServices.deleteRequest(
                this.sdkCommonServices.getModelBaseUri().path(this.basePath).path("/" + key).toUriString()
            );
        }
    }

    private class ResetOpsImpl implements ModelSDK.ResetOps {

        private final SDKService sdkCommonServices;

        ResetOpsImpl(SDKService sdkCommonServices) {
            this.sdkCommonServices = sdkCommonServices;
        }

        @Override
        public String generateResetCode() {
            final Map body = this.sdkCommonServices.postRequest(
                    this.sdkCommonServices.getModelBaseUri()
                            .path("/reset")
                            .toUriString(),
                    new ParameterizedTypeReference>() {},
                    null
            );
            if (!body.containsKey("code"))
                throw new IllegalStateException("The response json should contain a code.");
            return body.get("code");
        }

        @Override
        public void applyResetCode(String code) {
            this.sdkCommonServices.postRequest(
                    this.sdkCommonServices.getModelBaseUri()
                        .path("/reset")
                        .path("/" + code)
                        .toUriString(),
                    null
            );
        }

        @Override
        public void reset() {
            final String code = generateResetCode();
            applyResetCode(code);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy