package water.api.schemas3;
import water.Iced;
import water.api.API;
import water.api.Schema;
/**
* Base Schema class for all v3 REST API objects.
*
* Any schema which is *NOT* used for requests (i.e. it cannot be an input to a REST API handler) should inherit from
* this class.
* However if a schema is used for requests, then it should inherit from {@link RequestSchemaV3}, which contains some
* additional fields common for all REST API requests.
*/
public class SchemaV3<I extends Iced, S extends SchemaV3<I,S>> extends Schema<I, S> {
@API(help="Metadata on this schema instance, to make it self-describing.", direction=API.Direction.OUTPUT)
public Meta __meta;
/**
* Metadata for a Schema, including the version, name and type. This information is included in all v3 REST API
* responses as a field in the Schema so that the payloads are self-describing, and it is also available through
* the /Metadata/schemas REST API endpoint for the purposes of REST service discovery.
*/
public static final class Meta extends Iced {
@API(help="Version number of this Schema. Must not be changed after creation (treat as final).", direction=API.Direction.OUTPUT)
public int schema_version;
@API(help="Simple name of this Schema. NOTE: the schema_names form a single namespace.", direction=API.Direction.OUTPUT)
public String schema_name;
@API(help="Simple name of H2O type that this Schema represents. Must not be changed after creation (treat as final).", direction=API.Direction.OUTPUT)
public String schema_type;
/** Default constructor used only for newInstance() in generic reflection-based code. */
public Meta() {}
/** Standard constructor which supplies all the fields. The fields should be treated as immutable once set. */
public Meta(int version, String name, String type) {
schema_version = version;
schema_name = name;
schema_type = type;
}
/** Used during markdown generation. */
public String toString() { return schema_name; }
}
public SchemaV3() { this(null); }
public SchemaV3(I impl) {
__meta = new Meta(getSchemaVersion(), getSchemaName(), getSchemaType());
if (impl != null)
this.fillFromImpl(impl);
}
public water.AutoBuffer writeJSON(water.AutoBuffer ab) {
// Ugly hack, but sometimes I find that __meta was not initialized by now; which means that constructor was
// somehow skipped, which means the object was created in roundabout way and then unsafely cast... Hope we'll
// find a proper solution to this issue eventually...
if (__meta == null)
__meta = new Meta(getSchemaVersion(), getSchemaName(), getSchemaType());
return super.writeJSON(ab);
}
}