All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.weaverplatform.sp4rql.model.token.LiteralToken Maven / Gradle / Ivy

package com.weaverplatform.sp4rql.model.token;

import com.weaverplatform.sp4rql.error.ParseException;
import com.weaverplatform.sp4rql.model.expression.ExpressionArgument;
import com.weaverplatform.sp4rql.model.solution.SolutionType;
import com.weaverplatform.util.IndentStringBuilder;

public class LiteralToken extends Sp4rqlToken implements ExpressionArgument {

  private Double doubleValue = null;
  private Integer integerValue = null;
  private Boolean booleanValue = null;
  private String stringValue = null;
  private ReferenceToken dataType = null;
  private String languageTag = null;

  public LiteralToken(String value) {
    this.stringValue = value;
  }

  public LiteralToken(String value, ReferenceToken dataType) {
    this.stringValue = value;
    this.dataType = dataType;
  }

  public LiteralToken(boolean value) {
    this.booleanValue = value;
  }

  public LiteralToken(double value) {
    this.doubleValue = value;
  }

  public LiteralToken(int value) {
    this.integerValue = value;
  }

  public void setLanguageTag(String tag) {
    this.languageTag = tag;
  }

  public boolean isDouble() {
    return doubleValue != null;
  }

  public boolean isInteger() {
    return integerValue != null;
  }

  public boolean isBoolean() {
    return booleanValue != null;
  }

  public boolean isRdfLiteral() {
    return stringValue != null;
  }

  public boolean hasDataType() {
    return dataType != null;
  }

  public Double getDoubleValue() {
    return doubleValue;
  }

  public Integer getIntegerValue() {
    return integerValue;
  }

  public Boolean getBooleanValue() {
    return booleanValue;
  }

  public String getStringValue() {
    return stringValue;
  }

  public ReferenceToken getDataType() {
    return dataType;
  }

  public void setDataType(ReferenceToken dataType) {
    this.dataType = dataType;
  }

  public String getLanguageTag() {
    return languageTag;
  }

  @Override
  public Integer resolvesTo() {
    return SolutionType.LITERAL;
  }

  @Override
  public String toString() {
    if(isDouble()) {
      return doubleValue.toString();
    }
    if(isInteger()) {
      return integerValue.toString();
    }
    if(isBoolean()) {
      return booleanValue.toString();
    }
    if(isRdfLiteral()) {
      if(hasDataType()) {
        return String.format("\"%s\"^^%s", stringValue, dataType);
      } else {
        return String.format("\"%s\"", stringValue);
      }
    }
    throw new ParseException("This LiteralToken was constructed without value");
  }

  @Override
  public void buildString(IndentStringBuilder builder) {
    builder.append(toString());
  }

  @Override
  public int hashCode() {
    if(isRdfLiteral()) {
      return stringValue.hashCode();
    }
    if(isInteger()) {
      return integerValue.hashCode();
    }
    if(isDouble()) {
      return doubleValue.hashCode();
    }
    if(isBoolean()) {
      return booleanValue.hashCode();
    }
    throw new ParseException("This LiteralToken was constructed without value");
  }

  @Override
  public boolean equals(Object object) {
    if(! (object instanceof LiteralToken)) {
      return false;
    }
    LiteralToken literalToken = (LiteralToken) object;
    if(literalToken.isRdfLiteral() && isRdfLiteral()) {
      boolean identicalDatatype = (literalToken.getDataType() == null && getDataType() == null)  ||
        literalToken.getDataType() != null && literalToken.getDataType().equals(getDataType());
      return identicalDatatype && literalToken.getStringValue().equals(getStringValue());
    }
    if(literalToken.isInteger() && isInteger()) {
      return literalToken.getIntegerValue() == getIntegerValue();
    }
    if(literalToken.isDouble() && isDouble()) {
      return literalToken.getDoubleValue() == getDoubleValue();
    }
    if(literalToken.isBoolean() && isBoolean()) {
      return literalToken.getBooleanValue() == getBooleanValue();
    }
    return false;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy