blob: 58793e8436b3288287c49e952e63fd7b56a02610 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.tinkerpop.gremlin.driver;
import org.apache.tinkerpop.gremlin.driver.message.ResponseResult;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import java.util.Iterator;
/**
* A {@code Result} represents a result value from the server-side {@link Iterator} of results. This would be
* one item from that result set. This class provides methods for coercing the result {@link Object} to an
* expected type.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public final class Result {
final Object resultObject;
/**
* Constructs a "result" from data found in {@link ResponseResult#getData()}.
*/
public Result(final Object responseData) {
this.resultObject = responseData;
}
/**
* Gets the result item by coercing it to a {@code String} via {@code toString()}.
*/
public String getString() {
return resultObject.toString();
}
/**
* Gets the result item by coercing it to an {@code int}.
*
* @throws NumberFormatException if the value is not parsable as an {@code int}.
*/
public int getInt() {
return Integer.parseInt(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code byte}.
*
* @throws NumberFormatException if the value is not parsable as an {@code byte}.
*/
public byte getByte() {
return Byte.parseByte(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code short}.
*
* @throws NumberFormatException if the value is not parsable as an {@code short}.
*/
public short getShort() {
return Short.parseShort(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code long}.
*
* @throws NumberFormatException if the value is not parsable as an {@code long}.
*/
public long getLong() {
return Long.parseLong(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code float}.
*
* @throws NumberFormatException if the value is not parsable as an {@code float}.
*/
public float getFloat() {
return Float.parseFloat(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code double}.
*
* @throws NumberFormatException if the value is not parsable as an {@code double}.
*/
public double getDouble() {
return Double.parseDouble(resultObject.toString());
}
/**
* Gets the result item by coercing it to an {@code boolean}.
*
* @throws NumberFormatException if the value is not parsable as an {@code boolean}.
*/
public boolean getBoolean() {
return Boolean.parseBoolean(resultObject.toString());
}
/**
* Determines if the result item is null or not. This is often a good check prior to calling other methods to
* get the object as they could throw an unexpected {@link NullPointerException} if the result item is
* {@code null}.
*/
public boolean isNull() {
return null == resultObject;
}
/**
* Gets the result item by casting it to a {@link Vertex}.
*/
public Vertex getVertex() {
return (Vertex) resultObject;
}
/**
* Gets the result item by casting it to an {@link Edge}.
*/
public Edge getEdge() {
return (Edge) resultObject;
}
/**
* Gets the result item by casting it to an {@link Element}.
*/
public Element getElement() {
return (Element) resultObject;
}
/**
* Gets the result item by casting it to a {@link Path}.
*/
public Path getPath() {
return (Path) resultObject;
}
/**
* Gets the result item by casting it to a {@link Property}.
*/
public <V> Property<V> getProperty() {
return (Property<V>) resultObject;
}
/**
* Gets the result item by casting it to a {@link VertexProperty}.
*/
public <V> VertexProperty<V> getVertexProperty() {
return (VertexProperty<V>) resultObject;
}
/**
* Gets the result item by casting it to the specified {@link Class}.
*/
public <T> T get(final Class<? extends T> clazz) {
return clazz.cast(this.resultObject);
}
/**
* Gets the result item.
*/
public Object getObject() {
return this.resultObject;
}
@Override
public String toString() {
final String c = resultObject != null ? resultObject.getClass().getCanonicalName() : "null";
return "result{" +
"object=" + resultObject + " " +
"class=" + c +
'}';
}
}