org.semantictools.jsonld.LdLiteral.java Source code

Java tutorial

Introduction

Here is the source code for org.semantictools.jsonld.LdLiteral.java

Source

/*******************************************************************************
 * Copyright 2012 Pearson Education
 * 
 * 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.
 ******************************************************************************/
package org.semantictools.jsonld;

import java.util.Calendar;

import org.joda.time.DateTime;
import org.semantictools.util.DurationUtil;

/**
 * LdLiteral represents a JSON-LD node that contains a literal value, i.e. a primitive data value.
 * @author Greg McFall
 *
 */
public class LdLiteral implements LdNode {

    private String stringValue;
    private Long longValue;
    private Double doubleValue;
    private Boolean booleanValue;
    private String type;
    private String language;

    /**
     * Returns the String representation of this literal.
     */
    public String getStringValue() {
        return stringValue != null ? stringValue
                : longValue != null ? longValue.toString()
                        : doubleValue != null ? doubleValue.toString()
                                : booleanValue != null ? booleanValue.toString() : null;
    }

    /**
     * Returns true if this literal holds a string value.
     */
    public boolean isStringValue() {
        return stringValue != null;
    }

    /**
     * Sets the String representation of this literal.
     * Setting a Long or Double value automatically makes a String value
     * accessible via getStringValue.  Thus, if you call setLongValue or setDoubleValue,
     * it is not necessary to also call setStringValue.
     */
    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }

    /**
     * Returns the value as a duration in milliseconds.
     * The underlying value must be a string in ISO 8601 format for a duration.
     */
    public long getDurationValue() {
        return DurationUtil.parseDuration(stringValue);
    }

    /**
     * Returns a Calendar representation of this literal.
     * The underlying value must be a string in ISO 8601 format.
     */
    public Calendar getCalendarValue() {

        Calendar result = null;
        String text = getStringValue();
        try {
            DateTime datetime = new DateTime(text);
            result = datetime.toGregorianCalendar();
        } catch (Exception oops) {
            throw new RuntimeException(oops);
        }
        return result;
    }

    /**
     * Returns a Long representation of this literal.
     */
    public Long getLongValue() {
        return (longValue != null) ? longValue
                : (stringValue != null) ? Long.parseLong(stringValue)
                        : (doubleValue != null) ? doubleValue.longValue() : null;
    }

    /**
     * Sets the Long representation of this literal.
     */
    public void setLongValue(Long longValue) {
        this.longValue = longValue;
    }

    /**
     * Returns a Double representation of this literal.
     * 
     */
    public Double getDoubleValue() {
        return (doubleValue != null) ? doubleValue
                : (stringValue != null) ? Double.parseDouble(stringValue)
                        : (longValue != null) ? longValue.doubleValue() : null;
    }

    /**
     * Sets the Double representation of this literal.
     */
    public void setDoubleValue(Double doubleValue) {
        this.doubleValue = doubleValue;
    }

    public Boolean getBooleanValue() {
        return booleanValue;
    }

    public void setBooleanValue(Boolean booleanValue) {
        this.booleanValue = booleanValue;
    }

    /**
     * Returns the URI of the datatype of this literal value.
     * May be null if the type is not declared in the JSON-LD context.
     */
    public String getType() {
        return type;
    }

    /**
     * Sets the URI of the datatype of this literal value.
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * Returns the language of the value, or null if the language is not specified.
     */
    public String getLanguage() {
        return language;
    }

    /**
     * Sets the language of the value, or null if the language is not specified.
     */
    public void setLanguage(String language) {
        this.language = language;
    }

    @Override
    public boolean isObject() {
        return false;
    }

    @Override
    public boolean isContainer() {
        return false;
    }

    @Override
    public boolean isLiteral() {
        return true;
    }

    @Override
    public LdLiteral asLiteral() throws ClassCastException {
        return this;
    }

    @Override
    public LdContainer asContainer() throws ClassCastException {
        throw new ClassCastException("Cannot cast as LdContainer: type is LdLiteral");
    }

    @Override
    public LdObject asObject() throws ClassCastException {
        throw new ClassCastException("Cannot cast as LdObject: type is LdLiteral");
    }

    @Override
    public boolean isIRI() {
        return false;
    }

    @Override
    public boolean isBlankNode() {
        return false;
    }

    @Override
    public LdIRI asIRI() throws ClassCastException {
        throw new ClassCastException("Cannot cast as LdIRI: type is LdLiteral");
    }

    @Override
    public LdBlankNode asBlankNode() throws ClassCastException {
        throw new ClassCastException("Cannot cast as LdBlankNode: type is LdLiteral");
    }

    public boolean equals(Object obj) {
        if (obj instanceof LdNode) {
            LdNode node = (LdNode) obj;
            if (node.isLiteral()) {
                LdLiteral other = node.asLiteral();
                return (getStringValue().equals(other.getStringValue()))
                        && (type == null || other.getType() == null || type.equals(other.getType()));
            }
        }

        return false;
    }

}