package com.constellio.app.modules.es.connectors.smb.cache;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.modules.es.connectors.smb.service.SmbModificationIndicator;
public class SmbConnectorContext implements Serializable {
final String connectorId;
SmbConnectorContext(String connectorId) {
this.connectorId = connectorId;
}
Map<String, SmbModificationIndicator> recordUrls = new HashMap<>();
public synchronized SmbModificationIndicator getModificationIndicator(String url) {
return recordUrls.get(url);
}
public synchronized void traverseModified(String url, SmbModificationIndicator modificationIndicator, String parentId, String traversalCode) {
modificationIndicator.setParentId(parentId);
modificationIndicator.setTraversalCode(traversalCode);
recordUrls.put(url, modificationIndicator);
}
public synchronized void traverseUnchanged(String url, String traversalCode) {
SmbModificationIndicator indicator = recordUrls.get(url);
if (indicator != null) {
indicator.setTraversalCode(traversalCode);
}
}
public synchronized String getParentId(String url) {
SmbModificationIndicator indicator = recordUrls.get(url);
if (indicator != null) {
return indicator.getParentId();
}
return null;
}
public synchronized void delete(String url) {
recordUrls.remove(url);
}
public synchronized List<String> staleUrls(String traversalCode) {
List<String> urls = new ArrayList<>();
for (Map.Entry<String, SmbModificationIndicator> entry : this.recordUrls.entrySet()) {
SmbModificationIndicator indicator = entry.getValue();
if (indicator == null || !StringUtils.equals(indicator.getTraversalCode(), traversalCode)) {
urls.add(entry.getKey());
}
}
return urls;
}
public String getConnectorId() {
return connectorId;
}
}