package org.dcache.services.info.serialisation; import org.dcache.services.info.base.StateGuide; import org.dcache.services.info.base.StatePath; import org.dcache.services.info.base.StateVisitor; import org.dcache.services.info.base.guides.SubtreeStateGuide; import org.dcache.services.info.base.guides.VisitEverythingStateGuide; /** * The SubtreeVisitor allows one to visit either the whole dCache * state or some subtree of the state. The scope of the visiting * may be changed. */ public abstract class SubtreeVisitor implements StateVisitor { private StateGuide _guide; public SubtreeVisitor() { setVisitScopeToEverything(); } public SubtreeVisitor(StatePath subtreeRoot) { setVisitScopeToSubtree(subtreeRoot); } protected void setVisitScopeToEverything() { _guide = new VisitEverythingStateGuide(); } protected void setVisitScopeToSubtree(StatePath subtreeRoot) { _guide = new SubtreeStateGuide(subtreeRoot); } @Override public boolean isVisitable(StatePath path) { return _guide.isVisitable(path); } protected boolean isInsideScope(StatePath path) { if (_guide instanceof SubtreeStateGuide) { SubtreeStateGuide ssg = (SubtreeStateGuide) _guide; return ssg.isInSubtree(path); } else { return true; } } }