package org.sef4j.core.helpers.proptree.model;
import org.sef4j.core.util.ICopySupport;
/**
*
* for real, you should use Orika mapper framework to map (copy) prop tree values...
* cf sub class OrikaPropTreeValueMapper
*/
public interface PropTreeValueMapper {
public Object mapProp(PropTreeNode node, String propName, Object propValue);
// ------------------------------------------------------------------------
public static abstract class AbstractTypedPropTreeValueMapper<T,TDto> implements PropTreeValueMapper {
@SuppressWarnings("unchecked")
public TDto mapProp(PropTreeNode node, String propName, Object propValue) {
return mapProp((T) propValue);
}
public abstract TDto mapProp(T propValue);
}
public static class IdentityPropTreeValueMapper implements PropTreeValueMapper {
public static final IdentityPropTreeValueMapper INSTANCE = new IdentityPropTreeValueMapper();
public Object mapProp(PropTreeNode node, String propName, Object propValue) {
return propValue;
}
}
public static class CopyPropTreeValueMapper implements PropTreeValueMapper {
public static final CopyPropTreeValueMapper INSTANCE = new CopyPropTreeValueMapper();
@SuppressWarnings("unchecked")
public Object mapProp(PropTreeNode node, String propName, Object propValue) {
if (propValue instanceof ICopySupport<?>) {
return ((ICopySupport<Object>) propValue).copy();
} else {
// should not occur!
return propValue;
}
}
}
}