/* * Copyright 2016 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.thoughtworks.go.plugin.access.common.models; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import org.apache.commons.codec.digest.DigestUtils; import java.util.Base64; public class Image { private static final Gson GSON = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); @Expose @SerializedName("content_type") private final String contentType; @Expose @SerializedName("data") private final String data; private String hash; private byte[] dataAsBytes; private String dataURI; public Image(String contentType, String data) { this.contentType = contentType; this.data = data; } public String getContentType() { return contentType; } public String getData() { return data; } @Deprecated // used only in v2 plugin info, which is going away public String toDataURI() { if (dataURI == null) { dataURI = "data:" + contentType + ";base64," + data; } return dataURI; } public String getHash() { if (hash == null) { hash = DigestUtils.sha256Hex(toDataURI()); } return hash; } public byte[] getDataAsBytes() { if (dataAsBytes == null) { dataAsBytes = Base64.getDecoder().decode(data); } return dataAsBytes; } public static Image fromJSON(String responseData) { return GSON.fromJson(responseData, Image.class); } public com.thoughtworks.go.plugin.domain.common.Image toDomainImage() { return new com.thoughtworks.go.plugin.domain.common.Image(this.contentType, this.data, getHash()); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Image image = (Image) o; if (contentType != null ? !contentType.equals(image.contentType) : image.contentType != null) return false; return data != null ? data.equals(image.data) : image.data == null; } @Override public int hashCode() { int result = contentType != null ? contentType.hashCode() : 0; result = 31 * result + (data != null ? data.hashCode() : 0); return result; } }