package cz.habarta.typescript.generator.parser;
import cz.habarta.typescript.generator.util.Utils;
import java.lang.reflect.Type;
import java.util.*;
public class BeanModel extends DeclarationModel {
private final Type parent;
private final List<Class<?>> taggedUnionClasses;
private final String discriminantProperty;
private final String discriminantLiteral;
private final List<Type> interfaces;
private final List<PropertyModel> properties;
public BeanModel(Class<?> origin, Type parent, List<Class<?>> taggedUnionClasses, String discriminantProperty, String discriminantLiteral, List<Type> interfaces, List<PropertyModel> properties, List<String> comments) {
super(origin, comments);
this.parent = parent;
this.taggedUnionClasses = taggedUnionClasses;
this.discriminantProperty = discriminantProperty;
this.discriminantLiteral = discriminantLiteral;
this.interfaces = Utils.listFromNullable(interfaces);
this.properties = properties;
}
public Type getParent() {
return parent;
}
public List<Class<?>> getTaggedUnionClasses() {
return taggedUnionClasses;
}
public String getDiscriminantProperty() {
return discriminantProperty;
}
public String getDiscriminantLiteral() {
return discriminantLiteral;
}
public List<Type> getInterfaces() {
return interfaces;
}
public List<Type> getParentAndInterfaces() {
final List<Type> ancestors = new ArrayList<>();
if (parent != null) {
ancestors.add(parent);
}
ancestors.addAll(interfaces);
return ancestors;
}
public List<PropertyModel> getProperties() {
return properties;
}
public BeanModel withProperties(List<PropertyModel> properties) {
return new BeanModel(origin, parent, taggedUnionClasses, discriminantProperty, discriminantLiteral, interfaces, properties, comments);
}
@Override
public BeanModel withComments(List<String> comments) {
return new BeanModel(origin, parent, taggedUnionClasses, discriminantProperty, discriminantLiteral, interfaces, properties, comments);
}
@Override
public String toString() {
return "BeanModel{" + "origin=" + getOrigin() + ", properties=" + properties + '}';
}
}