org.sfm.map.impl.PropertyMappingsBuilder Maven / Gradle / Ivy
package org.sfm.map.impl;
import java.util.ArrayList;
import java.util.List;
import org.sfm.map.MapperBuildingException;
import org.sfm.reflect.meta.*;
import org.sfm.utils.ForEachCallBack;
public final class PropertyMappingsBuilder> {
protected final PropertyFinder propertyFinder;
protected final List> properties = new ArrayList>();
protected final PropertyNameMatcherFactory propertyNameMatcherFactory;
protected boolean modifiable = true;
public PropertyMappingsBuilder(final ClassMeta classMeta, final PropertyNameMatcherFactory propertyNameMatcherFactory) throws MapperBuildingException {
this.propertyFinder = classMeta.newPropertyFinder();
this.propertyNameMatcherFactory = propertyNameMatcherFactory;
}
public boolean addProperty(final K key) {
if (!modifiable) throw new IllegalStateException("Builder not modifiable");
@SuppressWarnings("unchecked")
final PropertyMeta prop = (PropertyMeta) propertyFinder.findProperty(propertyNameMatcherFactory.newInstance(key));
addProperty(key, prop);
return prop != null;
}
public void addProperty(final K key, final PropertyMeta prop) {
while(properties.size() <= key.getIndex()) {
properties.add(null);
}
properties.set(key.getIndex(), new PropertyMapping(prop, key));
}
public List getKeys() {
modifiable = false;
List keys = new ArrayList(properties.size());
for(int i = 0; i < properties.size(); i++) {
PropertyMapping propMapping = properties.get(i);
if (propMapping != null) {
keys.add(propMapping.getColumnKey());
} else {
keys.add(null);
}
}
return keys;
}
public void forEachConstructorProperties(ForEachCallBack> handler) {
modifiable = false;
for(int i = 0; i < properties.size(); i++) {
PropertyMapping property = properties.get(i);
if (property != null) {
PropertyMeta propertyMeta = property.getPropertyMeta();
if (propertyMeta != null && propertyMeta.isConstructorProperty()) {
handler.handle(property, i);
}
}
}
}
public void forEachSubProperties(ForEachCallBack> handler) {
modifiable = false;
for(int i = 0; i < properties.size(); i++) {
PropertyMapping property = properties.get(i);
if (property != null) {
PropertyMeta propertyMeta = property.getPropertyMeta();
if (propertyMeta != null && propertyMeta.isSubProperty()) {
handler.handle(property, i);
}
}
}
}
public >> H forEachProperties(H handler) {
forEachProperties(handler, 0);
return handler;
}
public void forEachProperties(ForEachCallBack> handler, int start) {
forEachProperties(handler, start, properties.size());
}
public void forEachProperties(ForEachCallBack> handler, int start, int end) {
modifiable = false;
for(int i = start; i < end; i++) {
PropertyMapping prop = properties.get(i);
handler.handle(prop, i);
}
}
public PropertyFinder getPropertyFinder() {
modifiable = false;
return propertyFinder;
}
public int size() {
return properties.size();
}
public PropertyMapping get(int i) {
modifiable = false;
return properties.get(i);
}
}