Package com.getperka.flatpack.ext

Source Code of com.getperka.flatpack.ext.Type$Builder

/*
* #%L
* FlatPack serialization code
* %%
* Copyright (C) 2012 Perka 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.
* #L%
*/
package com.getperka.flatpack.ext;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

import javax.inject.Inject;

import com.getperka.flatpack.BaseHasUuid;
import com.getperka.flatpack.util.UuidDigest;

/**
* A simple JSON type description.
*
* @see Codex#describe()
*/
public class Type extends BaseHasUuid {
  public static class Builder {
    private Type type = new Type();

    public Type build() {
      Type toReturn = type;
      type = null;
      return toReturn;
    }

    public Builder withEnumValues(List<String> enumValues) {
      type.enumValues = Collections.unmodifiableList(new ArrayList<String>(enumValues));
      return this;
    }

    public Builder withJsonKind(JsonKind kind) {
      type.jsonKind = kind;
      return this;
    }

    public Builder withListElement(Type t) {
      type.listElement = t;
      return this;
    }

    public Builder withMapKey(Type t) {
      type.mapKey = t;
      return this;
    }

    public Builder withMapValue(Type t) {
      type.mapValue = t;
      return this;
    }

    public Builder withName(String name) {
      type.name = name;
      return this;
    }

    public Builder withTypeHint(TypeHint hint) {
      type.hint = hint;
      return this;
    }
  }

  private JsonKind jsonKind;
  private List<String> enumValues;
  private String name;
  private Type listElement;
  private Type mapKey;
  private Type mapValue;

  private TypeHint hint;

  @Inject
  private Type() {}

  public List<String> getEnumValues() {
    return enumValues;
  }

  public JsonKind getJsonKind() {
    return jsonKind;
  }

  public Type getListElement() {
    return listElement;
  }

  public Type getMapKey() {
    return mapKey;
  }

  public Type getMapValue() {
    return mapValue;
  }

  public String getName() {
    return name;
  }

  public TypeHint getTypeHint() {
    return hint;
  }

  /**
   * Returns a human-readable description of the type.
   */
  @Override
  public String toString() {
    switch (jsonKind) {
      case LIST:
        return "[ " + listElement + " ]";
      case MAP:
        return "{ " + mapKey + " : " + mapValue + " }";
      default:
        break;
    }
    if (name != null) {
      return name;
    }
    if (hint != null) {
      return jsonKind.toString() + ":" + hint.getValue();
    }
    return jsonKind.toString();
  }

  @Override
  protected UUID defaultUuid() {
    return new UuidDigest(getClass())
        .addStrings(enumValues)
        .add(hint == null ? null : hint.getValue())
        .add(jsonKind.name())
        .add(listElement)
        .add(mapKey)
        .add(mapValue)
        .add(name)
        .digest();
  }

  void setEnumValues(List<String> enumValues) {
    this.enumValues = enumValues;
  }

  void setJsonKind(JsonKind kind) {
    this.jsonKind = kind;
  }

  void setListElement(Type listElement) {
    this.listElement = listElement;
  }

  void setMapKey(Type mapKey) {
    this.mapKey = mapKey;
  }

  void setMapValue(Type mapValue) {
    this.mapValue = mapValue;
  }

  void setName(String name) {
    this.name = name;
  }

  void setTypeHint(TypeHint hint) {
    this.hint = hint;
  }
}
TOP

Related Classes of com.getperka.flatpack.ext.Type$Builder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.