| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.datatorrent.lib.appdata.schemas; |
| |
| import javax.validation.constraints.NotNull; |
| |
| import com.google.common.base.Preconditions; |
| |
| /** |
| * This is the base class used to represent AppData queries. App Data quries have the following features: |
| * <br/> |
| * <br/> |
| * <ul> |
| * <li><b>id:</b>This is the client id for the query. It is also the same id which is attached to results.</li> |
| * <li><b>countdown:</b>This is the number of times results are returned for the query. This is meant to allow |
| * the client to display updated data without incurring the latency of issuing a separate query for each update.</li> |
| * <li><b>schemaKeys:</b>This is used in the case where an operator responding to queries is hosting multiple schemas. When |
| * an operator is exposing multiple schemas, the schemakeys are used to select the schema that this query is intended to be |
| * run against.</li> |
| * </ul> |
| * |
| * This base class holds the basic setters and getters for manipulating and storing these query properies. |
| * @since 3.0.0 |
| */ |
| public abstract class QRBase extends Message |
| { |
| /** |
| * The String that is used as a key in JSON requests to represent the countdown. |
| */ |
| public static final String FIELD_COUNTDOWN = "countdown"; |
| /** |
| * The String that is used as a key in JSON requests to represent the query id. |
| */ |
| public static final String FIELD_ID = "id"; |
| |
| /** |
| * The query id. |
| */ |
| @NotNull |
| private String id; |
| /** |
| * The query countdown. |
| */ |
| private long countdown; |
| |
| /** |
| * Creates a query base object with nothing set. |
| */ |
| public QRBase() |
| { |
| } |
| |
| /** |
| * Creates a query with the given id. |
| * @param id The query id. |
| */ |
| public QRBase(String id) |
| { |
| this.id = Preconditions.checkNotNull(id); |
| } |
| |
| /** |
| * Creates a query with the given id and type. |
| * @param id The query id. |
| * @param type The type of the query. |
| */ |
| public QRBase(String id, String type) |
| { |
| super(type); |
| this.id = Preconditions.checkNotNull(id); |
| } |
| |
| /** |
| * Creates a query with the given id, type, and countdown. |
| * @param id The query id. |
| * @param type The type of the query. |
| * @param countdown The countdown for the query. |
| */ |
| public QRBase(String id, String type, long countdown) |
| { |
| this(id, type); |
| setCountdown(countdown); |
| } |
| |
| |
| /** |
| * Sets the countdown for the query. Valid countdowns are greater than zero. |
| * @param countdown The countdown for the query. |
| */ |
| public final void setCountdown(long countdown) |
| { |
| Preconditions.checkArgument(countdown > 0L); |
| this.countdown = countdown; |
| } |
| |
| /** |
| * Gets the countdown for the query. |
| * @return The countdown for the query. |
| */ |
| public long getCountdown() |
| { |
| return countdown; |
| } |
| |
| /** |
| * Returns true if the countdown is one. False otherwise. |
| * @return True if the countdown is one. False otherwise. |
| */ |
| public boolean isOneTime() |
| { |
| return countdown == 0L; |
| } |
| |
| /** |
| * Returns the query id. |
| * @return The query id. |
| */ |
| public String getId() |
| { |
| return id; |
| } |
| |
| /** |
| * Sets the query id. |
| * @param id The query id to set. |
| */ |
| public void setId(String id) |
| { |
| this.id = id; |
| } |
| |
| @Override |
| public String toString() |
| { |
| return "Query{" + "id=" + id + ", type=" + getType() + '}'; |
| } |
| } |