
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