package at.ac.tuwien.dsg.scaledom.lazy.impl; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.events.XMLEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.ac.tuwien.dsg.scaledom.lazy.LazyLoadingStrategy; import at.ac.tuwien.dsg.scaledom.parser.XmlEventLocation; /** * This LLS * * @author Dominik Rauch */ public class StepLazyLoadingStrategy extends LazyLoadingStrategy { /** Logger. */ private final static Logger log = LoggerFactory.getLogger(StepLazyLoadingStrategy.class); /** Maximum depth to load. */ private final int depth; /** Current level. */ private int level; /** * Default constructor. * * @see LazyLoadingStrategy#LazyLoadingStrategy(int) */ public StepLazyLoadingStrategy(final int absoluteLevel) { super(absoluteLevel); if (absoluteLevel == 0) { depth = 2; } else if (absoluteLevel == 1) { depth = 1; } else { depth = Math.min(absoluteLevel * 3, 9); } level = 0; log.debug("Reloading on level " + absoluteLevel + ", determined loading depth: " + depth); } @Override public boolean shouldLoad(final XMLEvent event, final XmlEventLocation eventLocation) { if (event.getEventType() == XMLStreamConstants.END_ELEMENT) { --level; } final boolean shouldLoad = level < depth; if (event.getEventType() == XMLStreamConstants.START_ELEMENT) { ++level; } return shouldLoad; } }