package io.fabianterhorst.fastlayout.converters; import java.util.ArrayList; import java.util.List; /** * Created by fabianterhorst on 18.05.16. */ public class LayoutConverters { private List<LayoutConverter> converters; public LayoutConverters() { } public void setAll(List<LayoutConverter> converters) { this.converters = converters; } public LayoutAttribute convert(String attributeValue, String attributeName, List<LayoutAttribute> attributes) { LayoutAttribute layoutAttribute = null; for (LayoutConverter layoutConverter : converters) { if (layoutAttribute == null) { layoutAttribute = layoutConverter.convert(attributeValue, attributeName); if (layoutAttribute != null && (layoutAttribute.getType() == LayoutAttribute.Type.ASSIGNED)) { break; } else if (layoutAttribute != null && checkIfConstructorTypeIsAlreadyDefined(layoutAttribute.getType(), attributes)) { return new LayoutAttribute(); } } } return layoutAttribute; } private boolean checkIfConstructorTypeIsAlreadyDefined(LayoutAttribute.Type type, List<LayoutAttribute> attributes) { if (type == LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_1 || type == LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_2 || type == LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_3 || type == LayoutAttribute.Type.PARAM_CONSTRUCTOR_1 || type == LayoutAttribute.Type.PARAM_CONSTRUCTOR_2 || type == LayoutAttribute.Type.PARAM_CONSTRUCTOR_3) { checkAttributesForType(type, attributes); } return false; } private boolean checkAttributesForType(LayoutAttribute.Type type, List<LayoutAttribute> attributes) { for (LayoutAttribute attribute : attributes) { if (attribute.getType() == type) { return true; } } return false; } public List<LayoutAttribute> finish(List<LayoutAttribute> attributes) { List<LayoutAttribute> finished = new ArrayList<>(); for (LayoutConverter layoutConverter : converters) { List<LayoutAttribute> currentlyFinished = layoutConverter.finish(); if (currentlyFinished != null) { finished.addAll(currentlyFinished); } } if (!checkAttributesForType(LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_1, attributes)) { finished.add(new LayoutAttribute(LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_1, "getContext()")); } if (checkAttributesForType(LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_3, attributes) && !checkAttributesForType(LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_2, attributes)) { finished.add(new LayoutAttribute(LayoutAttribute.Type.LAYOUT_CONSTRUCTOR_2, "(AttributeSet) null")); } return finished; } }