diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java index 302190609a..9d37ab7bc7 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/revision/delta/CDOOriginSizeProvider.java @@ -10,6 +10,8 @@ */ package org.eclipse.emf.cdo.common.revision.delta; +import org.eclipse.emf.cdo.common.revision.CDOList; + /** * If the meaning of this type isn't clear, there really should be more of a description here... * @@ -19,4 +21,27 @@ package org.eclipse.emf.cdo.common.revision.delta; public interface CDOOriginSizeProvider { public int getOriginSize(); + + /** + * @author Eike Stepper + */ + public static abstract class Caching implements CDOOriginSizeProvider + { + private static final int UNKNOWN = -1; + + private int originSize = UNKNOWN; + + public int getOriginSize() + { + if (originSize == UNKNOWN) + { + CDOList list = getList(); + originSize = list.size(); + } + + return originSize; + } + + protected abstract CDOList getList(); + } } |