package org.sef4j.core.helpers.proptree.changes; import java.util.function.Function; import org.sef4j.core.helpers.export.ExportFragmentsAdder; import org.sef4j.core.helpers.proptree.DummyCount; import org.sef4j.core.helpers.proptree.model.PropTreeNode; /** * collector of changed DummyCount since previous copy */ public class DummyCountPropTreeValueProvider extends AbstractPropTreeValueProvider<DummyCount> { public static final Function<PropTreeNode, DummyCount> DEFAULT_DUMMYCOUNT_SRC_COPY_EXTRACTOR = new Function<PropTreeNode, DummyCount>() { @Override public DummyCount apply(PropTreeNode t) { DummyCount tmpres = t.getPropOrNull("dummyCount", DummyCount.class); return (tmpres != null)? tmpres.getCopy() : null; } }; public static final Function<PropTreeNode, DummyCount> DEFAULT_DUMMYCOUNT_PREV_EXTRACTOR = new Function<PropTreeNode, DummyCount>() { @Override public DummyCount apply(PropTreeNode t) { return t.getOrCreateProp("prev-dummyCount", DummyCount.FACTORY); } }; // ------------------------------------------------------------------------ public DummyCountPropTreeValueProvider(PropTreeNode srcRoot) { super(srcRoot, srcRoot, DEFAULT_DUMMYCOUNT_SRC_COPY_EXTRACTOR, DEFAULT_DUMMYCOUNT_PREV_EXTRACTOR); } public DummyCountPropTreeValueProvider( PropTreeNode srcRoot, PropTreeNode prevRoot, Function<PropTreeNode, DummyCount> srcValueCopyExtractor, Function<PropTreeNode, DummyCount> prevValueExtractor) { super(srcRoot, prevRoot, srcValueCopyExtractor, prevValueExtractor); } // ------------------------------------------------------------------------ @Override protected void provideFragments(PropTreeNode src, String currPath, ExportFragmentsAdder<DummyCount> res) { DummyCount srcDummyCount = srcValueCopyExtractor.apply(src); // copy new value res.putIdentifiableFragment(this, currPath, srcDummyCount, 0); } @Override protected void markAndCollectChanges(PropTreeNode src, PropTreeNode prev, String currPath, ExportFragmentsAdder<DummyCount> res) { DummyCount srcDummyCount = srcValueCopyExtractor.apply(src); // copy new value DummyCount prevDummyCount = prevValueExtractor.apply(prev); // by ref if (compareHasChange(srcDummyCount, prevDummyCount)) { prevDummyCount.setCopy(srcDummyCount); res.putIdentifiableFragment(this, currPath, srcDummyCount, 0); } } protected boolean compareHasChange(DummyCount src, DummyCount prev) { if (src.getCount1() != prev.getCount1() || src.getCount2() != prev.getCount2()) { return true; } return false; } }