package org.juxtasoftware.resource.heatmap;
import java.util.Iterator;
import java.util.List;
import org.juxtasoftware.model.PageMark;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* Used to inject page break tagging into the html of
* the current line in the heatmap
*
* @author loufoster
*
*/
@Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class PageMarkInjector implements StreamInjector<PageMark> {
private List<PageMark> marks;
private Iterator<PageMark> markItr;
private PageMark currMark;
@Override
public void initialize( List<PageMark> data) {
this.marks = data;
this.markItr = this.marks.iterator();
if ( this.markItr.hasNext() ) {
this.currMark = this.markItr.next();
}
}
@Override
public List<PageMark> getData() {
return this.marks;
}
@Override
public boolean hasContent(long pos) {
if ( this.currMark == null) {
return false;
}
return ( this.currMark.getOffset()== pos);
}
@Override
public void injectContentStart(StringBuilder line, final long currPositon) {
if ( this.currMark != null ) {
if ( this.currMark.getOffset() == currPositon) { // x25ae x25c6
line.append( this.currMark.toHtml());
this.currMark = null;
if ( this.markItr.hasNext() ) {
this.currMark = this.markItr.next();
}
}
}
}
@Override
public void injectContentEnd(StringBuilder line, final long currPosition) {
// Page mark content atomic (all injected at start). No need
// for anything to be injected to end it.
}
}