/* Copyright (c) 2014 Boundless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/edl-v10.html
*
* Contributors:
* Gabriel Roldan (Boundless) - initial implementation
*/
package org.locationtech.geogig.api;
import org.locationtech.geogig.api.plumbing.HashObject;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
/**
* A binary representation of the values of a Feature.
*
*/
public class RevFeatureImpl extends AbstractRevObject implements RevFeature {
private final ImmutableList<Optional<Object>> values;
public static RevFeatureImpl build(ImmutableList<Optional<Object>> values) {
RevFeatureImpl unnamed = new RevFeatureImpl(values);
ObjectId id = new HashObject().setObject(unnamed).call();
return new RevFeatureImpl(id, values);
}
/**
* Constructs a new {@code RevFeature} with the provided set of values.
*
* @param values a list of values, with {@link Optional#absent()} representing a null value
*/
private RevFeatureImpl(ImmutableList<Optional<Object>> values) {
this(ObjectId.NULL, values);
}
/**
* Constructs a new {@code RevFeature} with the provided {@link ObjectId} and set of values
*
* @param id the {@link ObjectId} to use for this feature
* @param values a list of values, with {@link Optional#absent()} representing a null value
*/
public RevFeatureImpl(ObjectId id, ImmutableList<Optional<Object>> values) {
super(id);
this.values = values;
}
@Override
public ImmutableList<Optional<Object>> getValues() {
return values;
}
@Override
public TYPE getType() {
return TYPE.FEATURE;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Feature[");
builder.append(getId().toString());
builder.append("; ");
boolean first = true;
for (Optional<Object> value : getValues()) {
if (first) {
first = false;
} else {
builder.append(", ");
}
String valueString = String.valueOf(value.orNull());
builder.append(valueString.substring(0, Math.min(10, valueString.length())));
}
builder.append(']');
return builder.toString();
}
}