// This file is part of OpenTSDB. // Copyright (C) 2015 The OpenTSDB Authors. // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 2.1 of the License, or (at your // option) any later version. This program is distributed in the hope that it // will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser // General Public License for more details. You should have received a copy // of the GNU Lesser General Public License along with this program. If not, // see <http://www.gnu.org/licenses/>. package net.opentsdb.query.pojo; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.google.common.base.Objects; /** * Pojo builder class used for serdes of the output component of a query * @since 2.3 */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonDeserialize(builder = Output.Builder.class) public class Output extends Validatable { /** The ID of a metric or expression to emit */ private String id; /** An alias to use as the metric name for the output */ private String alias; /** * Default ctor * @param builder The builder to pull values from */ public Output(Builder builder) { this.id = builder.id; this.alias = builder.alias; } /** @return the ID of a metric or expression to emit */ public String getId() { return id; } /** @return an alias to use as the metric name for the output */ public String getAlias() { return alias; } /** @return A new builder for the output */ public static Builder Builder() { return new Builder(); } /** Validates the output * @throws IllegalArgumentException if one or more parameters were invalid */ @Override public void validate() { if (id == null || id.isEmpty()) { throw new IllegalArgumentException("missing or empty id"); } Query.validateId(id); } @Override public String toString() { return "var=" + id + ", alias=" + alias; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Output output = (Output) o; return Objects.equal(output.alias, alias) && Objects.equal(output.id, id); } @Override public int hashCode() { return Objects.hashCode(id, alias); } /** * A builder for the downsampler component of a query */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonPOJOBuilder(buildMethodName = "build", withPrefix = "") public static final class Builder { @JsonProperty private String id; @JsonProperty private String alias; public Builder setId(String id) { Query.validateId(id); this.id = id; return this; } public Builder setAlias(String alias) { this.alias = alias; return this; } public Output build() { return new Output(this); } } }