/**
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* 
*     http://www.eclipse.org/legal/epl-v10.html
* 
******************************************************************************
*/

package org.eclipse.openK.api;

import com.fasterxml.jackson.annotation.JsonProperty;
import org.glassfish.jersey.internal.util.Base64;

public class ServiceRequestEnvelope {
    public static class HttpHeader {
        private String attribute;
        private String value;

        public String getAttribute() {
            return attribute;
        }

        public void setAttribute(String attribute) {
            this.attribute = attribute;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }
    }

    private String serviceName;
    private boolean isHttps;
    private String method;
    private String uriFragment;
    private String payload;
    private HttpHeader[] headers;

    @JsonProperty
    public String getServiceName() {
        return serviceName;
    }

    @JsonProperty
    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }

    @JsonProperty
    public boolean isHttps() {
        return isHttps;
    }

    @JsonProperty
    public void setHttps(boolean https) {
        isHttps = https;
    }

    @JsonProperty
    public String getMethod() {
        return method;
    }

    @JsonProperty
    public void setMethod(String method) {
        this.method = method;
    }

    @JsonProperty
    public String getUriFragment() {
        return uriFragment;
    }

    @JsonProperty
    public void setUriFragment(String uriFragment) {
        this.uriFragment = uriFragment;
    }

    @JsonProperty
    public String getPayload() {
        return payload;
    }

    @JsonProperty
    public void setPayload(String payload) {
        this.payload = payload;
    }

    @JsonProperty
    public HttpHeader[] getHeaders() {
        return headers;
    }

    @JsonProperty
    public void setHeaders(HttpHeader[] headers) {
        this.headers = headers;
    }

    public String getPayloadDecode() {
        return Base64.decodeAsString(payload);
    }

    public void setPayloadEncode(String payload) {
        this.payload = Base64.encodeAsString(payload);
    }
}
