GQLInlineFragment.java
package net.morimekta.providence.graphql.gql;
import net.morimekta.providence.descriptor.PMessageDescriptor;
import net.morimekta.util.collect.UnmodifiableList;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.Immutable;
import java.util.List;
import java.util.Objects;
/**
* An inline fragment, defining type-conditional field
* in-place.
*
* {@inheritDoc}
*/
@Immutable
public class GQLInlineFragment implements GQLFragment {
private final PMessageDescriptor<?> descriptor;
private final List<GQLSelection> selectionSet;
/**
* Inline fragment with field set.
*
* @param descriptor Descriptor of type defined in this fragment.
* @param selectionSet Field selectionSet for the fragment.
*/
public GQLInlineFragment(@Nonnull PMessageDescriptor<?> descriptor,
@Nonnull List<GQLSelection> selectionSet) {
this.descriptor = descriptor;
this.selectionSet = UnmodifiableList.copyOf(selectionSet);
}
@Nonnull
@Override
public PMessageDescriptor<?> getTypeCondition() {
return descriptor;
}
@Nonnull
@Override
public List<GQLSelection> getSelectionSet() {
return selectionSet;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("... on ")
.append(descriptor.getName())
.append(" {");
boolean first = true;
for (GQLSelection entry : selectionSet) {
if (first) {
first = false;
} else {
builder.append(", ");
}
builder.append(entry.toString());
}
builder.append("}");
return builder.toString();
}
@Override
public int hashCode() {
return Objects.hash(getClass(),
descriptor,
selectionSet);
}
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof GQLInlineFragment)) return false;
GQLInlineFragment other = (GQLInlineFragment) o;
return Objects.equals(descriptor, other.descriptor) &&
Objects.equals(selectionSet, other.selectionSet);
}
}