package io.github.ibuildthecloud.gdapi.factory.impl;
import io.cattle.platform.util.type.Named;
import io.github.ibuildthecloud.gdapi.factory.SchemaFactory;
import io.github.ibuildthecloud.gdapi.model.Schema;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractSchemaFactory implements SchemaFactory, Named {
@Override
public String getSchemaName(Class<?> clz) {
Schema schema = getSchema(clz);
return schema == null ? null : schema.getId();
}
@Override
public String getSchemaName(String type) {
Schema schema = getSchema(type);
return schema == null ? null : schema.getId();
}
@Override
public List<String> getSchemaNames(Class<?> clz) {
List<String> result = new ArrayList<String>();
getNames(getSchema(clz), result);
return result;
}
protected void getNames(Schema schema, List<String> result) {
if (schema == null) {
return;
}
result.add(schema.getId());
for (String child : schema.getChildren()) {
Schema childSchema = getSchema(child);
getNames(childSchema, result);
}
}
@Override
public Class<?> getSchemaClass(Class<?> type) {
Schema schema = getSchema(type);
return schema == null ? null : getSchemaClass(schema.getId());
}
@Override
public String getPluralName(String type) {
Schema schema = getSchema(type);
return schema == null ? null : schema.getPluralName();
}
@Override
public String getSingularName(String type) {
return getSchemaName(type);
}
@Override
public boolean typeStringMatches(Class<?> clz, String type) {
if (type == null || clz == null)
return false;
Schema schema = getSchema(clz);
if (schema == null)
return false;
return schema == getSchema(type);
}
@Override
public Class<?> getSchemaClass(String type, boolean resolveParent) {
Class<?> clz = getSchemaClass(type);
if (clz == null && resolveParent) {
Schema schema = getSchema(type);
if (schema != null && schema.getParent() != null) {
return getSchemaClass(schema.getParent(), true);
}
}
return clz;
}
@Override
public String getBaseType(String type) {
Schema schema = getSchema(type);
if (schema == null) {
return null;
}
while (schema.getParent() != null) {
Schema parent = getSchema(schema.getParent());
if (parent == null) {
return null;
}
schema = parent;
}
return schema.getId();
}
@Override
public String getName() {
return "SchemaFactory:" + getId();
}
}