com.sap.cloud.sdk.result.DefaultCollectedResultCollection Maven / Gradle / Ivy
/*
* Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved.
*/
package com.sap.cloud.sdk.result;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
/**
* Default implementation of the {@code CollectedResultCollection} interface, allowing strongly typed access to specific
* fields annotated with {@code ElementName} in elements of a {@code ResultCollection}.
*
* @see ResultCollection
*/
@RequiredArgsConstructor
@EqualsAndHashCode
@ToString
public class DefaultCollectedResultCollection implements CollectedResultCollection
{
/**
* The common name of all elements addressed by this collection.
*/
@Getter
private final String collectedElementName;
@Getter
private final Iterable resultElements;
@Override
public List asList( final Class objectType )
throws UnsupportedOperationException
{
return collectListFromObject(new GenericObjectExtractor<>(objectType));
}
private List collectListFromObject( final ObjectExtractor extractor )
throws UnsupportedOperationException
{
return collectListFromCollection(new GenericCollectionExtractor<>(extractor));
}
private List collectListFromCollection( final CollectionExtractor, T> extractor )
throws UnsupportedOperationException
{
return getCollection(extractor, Lists. newArrayList());
}
private , T> CollectionT getCollection(
final CollectionExtractor extractor,
final CollectionT collection )
throws UnsupportedOperationException
{
try {
for( final ResultElement element : resultElements ) {
if( element.isResultObject() ) {
final ResultElement nestedElement = element.getAsObject().get(collectedElementName);
collection.addAll(extractor.extract(nestedElement));
}
}
}
catch( final Exception e ) {
throw new UnsupportedOperationException(
"Failed to collect nested elements with name " + collectedElementName + ".",
e);
}
return collection;
}
@Override
public Set asSet( final Class objectType )
throws UnsupportedOperationException
{
return collectSetFromObject(new GenericObjectExtractor<>(objectType));
}
private Set collectSetFromObject( final ObjectExtractor extractor )
throws UnsupportedOperationException
{
return collectSetFromCollection(resultElement -> Collections.singleton(extractor.extract(resultElement)));
}
private Set collectSetFromCollection( final CollectionExtractor, T> extractor )
throws UnsupportedOperationException
{
return getCollection(extractor, Sets. newHashSet());
}
@Override
public List asBooleanList()
throws UnsupportedOperationException
{
return collectListFromObject(new BooleanExtractor());
}
@Override
public Set asBooleanSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new BooleanExtractor());
}
@Override
public List asByteList()
throws UnsupportedOperationException
{
return collectListFromObject(new ByteExtractor());
}
@Override
public Set asByteSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new ByteExtractor());
}
@Override
public List asCharacterList()
throws UnsupportedOperationException
{
return collectListFromObject(new CharacterExtractor());
}
@Override
public Set asCharacterSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new CharacterExtractor());
}
@Override
public List asStringList()
throws UnsupportedOperationException
{
return collectListFromObject(new StringExtractor());
}
@Override
public Set asStringSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new StringExtractor());
}
@Override
public List asIntegerList()
throws UnsupportedOperationException
{
return collectListFromObject(new IntegerExtractor());
}
@Override
public Set asIntegerSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new IntegerExtractor());
}
@Override
public List asShortList()
throws UnsupportedOperationException
{
return collectListFromObject(new ShortExtractor());
}
@Override
public Set asShortSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new ShortExtractor());
}
@Override
public List asLongList()
throws UnsupportedOperationException
{
return collectListFromObject(new LongExtractor());
}
@Override
public Set asLongSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new LongExtractor());
}
@Override
public List asFloatList()
throws UnsupportedOperationException
{
return collectListFromObject(new FloatExtractor());
}
@Override
public Set asFloatSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new FloatExtractor());
}
@Override
public List asDoubleList()
throws UnsupportedOperationException
{
return collectListFromObject(new DoubleExtractor());
}
@Override
public Set asDoubleSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new DoubleExtractor());
}
@Override
public List asBigIntegerList()
throws UnsupportedOperationException
{
return collectListFromObject(new BigIntegerExtractor());
}
@Override
public Set asBigIntegerSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new BigIntegerExtractor());
}
@Override
public List asBigDecimalList()
throws UnsupportedOperationException
{
return collectListFromObject(new BigDecimalExtractor());
}
@Override
public Set asBigDecimalSet()
throws UnsupportedOperationException
{
return collectSetFromObject(new BigDecimalExtractor());
}
public boolean isResultPrimitive()
{
return false;
}
public boolean isResultCollection()
{
return true;
}
public boolean isResultObject()
{
return false;
}
public ResultPrimitive getAsPrimitive()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public ResultObject getAsObject()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as object.");
}
public boolean asBoolean()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public byte asByte()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public char asCharacter()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public String asString()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public int asInteger()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public short asShort()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public long asLong()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public float asFloat()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public double asDouble()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public BigInteger asBigInteger()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public BigDecimal asBigDecimal()
throws UnsupportedOperationException
{
throw new UnsupportedOperationException("Cannot get a collection as primitive.");
}
public Iterator iterator()
{
return resultElements.iterator();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy