PropertyMappingHolder.java
package org.codefilarete.stalactite.engine.configurer.model;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.codefilarete.reflection.PropertyMutator;
import org.codefilarete.reflection.ReadWritePropertyAccessPoint;
import org.codefilarete.stalactite.engine.configurer.model.Entity.AbstractPropertyMapping;
import org.codefilarete.stalactite.engine.configurer.model.Entity.PropertyMapping;
import org.codefilarete.stalactite.engine.configurer.model.Entity.ReadOnlyPropertyMapping;
import org.codefilarete.stalactite.sql.ddl.structure.Column;
import org.codefilarete.stalactite.sql.ddl.structure.Table;
import org.codefilarete.tool.collection.KeepOrderSet;
public class PropertyMappingHolder<SRC, RIGHTTABLE extends Table<RIGHTTABLE>> {
private final Set<PropertyMapping<SRC, ?, RIGHTTABLE>> writablePropertyToColumn = new KeepOrderSet<>();
// Could be a Map<Mutator> if we could have an AccessorChain that can be a Mutator that is not currently the case
private final Set<ReadOnlyPropertyMapping<SRC, ?, RIGHTTABLE>> readonlyPropertyToColumn = new KeepOrderSet<>();
public void addMapping(Iterable<? extends AbstractPropertyMapping<SRC, ?, ?>> propertyMapping) {
propertyMapping.forEach(this::addMapping);
}
public void addMapping(AbstractPropertyMapping<SRC, ?, ?> propertyMapping) {
if (propertyMapping instanceof PropertyMapping) {
this.writablePropertyToColumn.add((PropertyMapping<SRC, ?, RIGHTTABLE>) propertyMapping);
} else {
this.readonlyPropertyToColumn.add((ReadOnlyPropertyMapping<SRC, ?, RIGHTTABLE>) propertyMapping);
}
}
public Set<PropertyMapping<SRC, ?, RIGHTTABLE>> getWritablePropertyToColumn() {
return writablePropertyToColumn;
}
public Map<ReadWritePropertyAccessPoint<SRC, ?>, Column<RIGHTTABLE, ?>> getWritablePropertiesPerAccessor() {
Map<ReadWritePropertyAccessPoint<SRC, ?>, Column<RIGHTTABLE, ?>> readonlyPropertyToColumn = new HashMap<>();
getWritablePropertyToColumn().forEach(propertyMapping -> {
readonlyPropertyToColumn.put(propertyMapping.getAccessPoint(), propertyMapping.getColumn());
});
return readonlyPropertyToColumn;
}
public Set<ReadOnlyPropertyMapping<SRC, ?, RIGHTTABLE>> getReadonlyPropertyToColumn() {
return readonlyPropertyToColumn;
}
public Map<PropertyMutator<SRC, ?>, Column<RIGHTTABLE, ?>> getReadonlyPropertiesPerAccessor() {
Map<PropertyMutator<SRC, ?>, Column<RIGHTTABLE, ?>> readonlyPropertyToColumn = new HashMap<>();
getReadonlyPropertyToColumn().forEach(propertyMapping -> {
readonlyPropertyToColumn.put(propertyMapping.getAccessPoint(), propertyMapping.getColumn());
});
return readonlyPropertyToColumn;
}
}