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

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

There is a newer version: 0.10.5
Show newest version
package net.amygdalum.testrecorder.values;

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

import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
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.SerializedImmutableType;
import net.amygdalum.testrecorder.types.SerializedValue;

public class SerializedProxy extends AbstractSerializedReferenceType implements SerializedImmutableType {

	private List>> interfaces;
	private SerializedValue invocationHandler;
	private List fields;

	public SerializedProxy(Type type) {
		super(Proxy.class);
		this.fields = new ArrayList<>();
	}
	
	@Override
	public  T accept(RoleVisitor visitor) {
		return visitor.visitReferenceType(this);
	}

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

	public void setInterfaces(List>> interfaces) {
		this.interfaces = interfaces;
	}
	
	public List>> getInterfaces() {
		return interfaces;
	}

	public void setInvocationHandler(SerializedValue invocationHandler) {
		this.invocationHandler = invocationHandler;
	}
	
	public SerializedValue getInvocationHandler() {
		return invocationHandler;
	}

	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);
	}

	@Override
	public List referencedValues() {
		List referencedValues = new ArrayList<>();
		referencedValues.addAll(interfaces);
		referencedValues.add(invocationHandler);
		referencedValues.addAll(fields.stream()
			.map(field -> field.getValue())
			.collect(toList()));
		return referencedValues;
	}

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

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy