All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.amygdalum.testrecorder.values.SerializedObject Maven / Gradle / Ivy

package net.amygdalum.testrecorder.values;

import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import net.amygdalum.testrecorder.types.RoleVisitor;
import net.amygdalum.testrecorder.types.ReferenceTypeVisitor;
import net.amygdalum.testrecorder.types.SerializedField;
import net.amygdalum.testrecorder.types.SerializedStructuralType;
import net.amygdalum.testrecorder.types.SerializedValue;

/**
 * Serializing to SerializedObject is the default if no other SerializedValue matches.
 * 
 * There is no restriction to objects that are serialized in this way other than being non-primitive.
 */
public class SerializedObject extends AbstractSerializedReferenceType implements SerializedStructuralType {

	private List fields;

	public SerializedObject(Class type) {
		super(type);
		this.fields = new ArrayList<>();
	}

	public SerializedObject withFields(List fields) {
		this.fields.addAll(fields);
		return this;
	}

	public SerializedObject withFields(SerializedField... fields) {
		return withFields(asList(fields));
	}

	@Override
	public List fields() {
		return new ArrayList<>(fields);
	}

	public List getFields() {
		return fields;
	}

	public Optional getField(String name) {
		return fields.stream()
			.filter(field -> name.equals(field.getName()))
			.findFirst();
	}

	public void addField(SerializedField field) {
		fields.add(field);
	}

	public  T accept(RoleVisitor visitor) {
		return visitor.visitReferenceType(this);
	}

	@Override
	public  T accept(ReferenceTypeVisitor visitor) {
		return visitor.visitStructuralType(this);
	}

	@Override
	public List referencedValues() {
		return fields.stream()
			.map(field -> field.getValue())
			.collect(toList());
	}

	@Override
	public String toString() {
		return ValuePrinter.print(this);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy