package im.actor.generator.scheme;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
/**
* Created by ex3ndr on 14.11.14.
*/
public abstract class SchemeContainer {
private ArrayList<SchemeAttribute> attributes = new ArrayList<SchemeAttribute>();
private ArrayList<SchemeDoc> docs = new ArrayList<SchemeDoc>();
public ArrayList<SchemeAttribute> getAttributes() {
return attributes;
}
public ArrayList<SchemeAttribute> getFilteredAttributes() {
ArrayList<SchemeAttribute> res = new ArrayList<SchemeAttribute>();
for (int i = 0; i < attributes.size(); i++) {
SchemeAttribute a = attributes.get(i);
if (a.getType() instanceof SchemePrimitiveType && ((SchemePrimitiveType) a.getType()).getName().equals("int32") &&
i < attributes.size() - 1) {
if (attributes.get(i + 1).getType() instanceof SchemeTraitType) {
continue;
}
if (attributes.get(i + 1).getType() instanceof SchemeOptionalType &&
((SchemeOptionalType) attributes.get(i + 1).getType()).getType() instanceof SchemeTraitType) {
continue;
}
}
if (a.getType() instanceof SchemeOptionalType) {
SchemeType t = ((SchemeOptionalType) a.getType()).getType();
if (t instanceof SchemePrimitiveType && ((SchemePrimitiveType) t).getName().equals("int32") &&
i < attributes.size() - 1) {
if (attributes.get(i + 1).getType() instanceof SchemeTraitType) {
continue;
}
if (attributes.get(i + 1).getType() instanceof SchemeOptionalType &&
((SchemeOptionalType) attributes.get(i + 1).getType()).getType() instanceof SchemeTraitType) {
continue;
}
}
}
res.add(a);
}
return res;
}
public SchemeAttribute getAttribute(String name) {
for (SchemeAttribute attribute : attributes) {
if (attribute.getName().equals(name)) {
return attribute;
}
}
return null;
}
public ArrayList<SchemeDoc> getDocs() {
return docs;
}
public ParameterCategory getParameterCategory(String name) {
for (SchemeDoc doc : docs) {
if (doc instanceof SchemeDocParameter) {
SchemeDocParameter docParameter = (SchemeDocParameter) doc;
if (docParameter.getArgument().equals(name)) {
return docParameter.getCategory();
}
}
}
return ParameterCategory.HIDDEN;
}
}