package net.jxta.impl.cm; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import net.jxta.document.Advertisement; import net.jxta.document.MimeMediaType; import net.jxta.document.StructuredDocument; import net.jxta.protocol.SrdiMessage.Entry; public class DeltaTracker { private Map<String,List<Entry>> deltas = new HashMap<String, List<Entry>>(); private boolean trackingDeltas = false; public void setTrackingDeltas(boolean trackDeltas) { this.trackingDeltas = trackDeltas; } public boolean isTrackingDeltas() { return trackingDeltas; } public void clearDeltas(String dn) { deltas.remove(dn); } public List<Entry> getDeltas(String dn) { List<Entry> currentDeltas = deltas.get(dn); if(currentDeltas == null) { currentDeltas = new ArrayList<Entry>(0); } clearDeltas(dn); return currentDeltas; } public void generateDeltas(String dn, Advertisement adv, StructuredDocument<?> doc, long expiry) { if(!trackingDeltas || expiry <= 0) { return; } if(doc == null) { doc = (StructuredDocument<?>)adv.getDocument(MimeMediaType.XMLUTF8); } Map<String, String> indexFields = CacheUtils.getIndexfields(adv.getIndexFields(), doc); List<Entry> deltasForDn = deltas.get(dn); if(deltasForDn == null) { deltasForDn = new LinkedList<Entry>(); } for(String indexField : indexFields.keySet()) { deltasForDn.add(new Entry(indexField, indexFields.get(indexField), expiry)); } deltas.put(dn, deltasForDn); } }