use of com.github.sardine.DavResource in project ddf by codice.
the class DavAlterationObserver method initialize.
/**
* Initialize the observer. Note this means no events will be fired for files that already existed
* before monitoring started.
*
* @param sardine
*/
public void initialize(Sardine sardine) {
this.sardine = sardine;
try {
DavResource davResource = sardine.list(rootEntry.getLocation()).get(0);
rootEntry.refresh(davResource);
final DavEntry[] children = doListFiles(rootEntry.getLocation(), rootEntry);
rootEntry.setChildren(children);
} catch (IOException e) {
// probably means root location was inaccessible
LOGGER.debug("Failed to initalize against remote {}", rootEntry.getLocation(), e);
}
}
use of com.github.sardine.DavResource in project ddf by codice.
the class DavAlterationObserverTest method testDirectory.
@Test
public void testDirectory() throws IOException {
DavEntry dir = parent.newChildInstance("dir");
DavResource mockDir = mock(DavResource.class);
doReturn("/dir").when(mockDir).getName();
doReturn(true).when(mockDir).isDirectory();
doReturn(new Date()).when(mockDir).getModified();
doReturn(0L).when(mockDir).getContentLength();
doReturn("E/0008").when(mockDir).getEtag();
doReturn(Arrays.asList(mockParent, mockChild1, mockChild3, mockDir)).when(mockSardine).list(parent.getLocation());
observer.checkAndNotify(mockSardine);
verify(mockListener, times(1)).onDirectoryCreate(any());
doReturn("E/0009").when(mockDir).getEtag();
observer.checkAndNotify(mockSardine);
verify(mockListener, times(1)).onDirectoryChange(any());
doReturn(Arrays.asList(mockParent, mockChild1, mockChild3)).when(mockSardine).list(parent.getLocation());
observer.checkAndNotify(mockSardine);
verify(mockListener, times(1)).onDirectoryDelete(any());
}
use of com.github.sardine.DavResource in project ddf by codice.
the class DavAlterationObserverTest method testInsertedCreate.
@Test
public void testInsertedCreate() throws IOException {
DavResource mockChild2 = mock(DavResource.class);
DavEntry child2 = parent.newChildInstance("/child2");
doReturn("/child2").when(mockChild2).getName();
doReturn(false).when(mockChild2).isDirectory();
doReturn(new Date()).when(mockChild2).getModified();
doReturn(17L).when(mockChild2).getContentLength();
doReturn("E/0004").when(mockChild2).getEtag();
doReturn(Arrays.asList(mockParent, mockChild1, mockChild2, mockChild3)).when(mockSardine).list(parent.getLocation());
doReturn(Collections.singletonList(mockChild2)).when(mockSardine).list(child2.getLocation());
observer.checkAndNotify(mockSardine);
verify(mockListener, only()).onFileCreate(any());
}
use of com.github.sardine.DavResource in project openhab1-addons by openhab.
the class EventReloaderJob method loadEvents.
/**
* all events which are available must be removed from the oldEventIds list
*
* @param calendarRuntime
* @param oldEventIds
* @throws IOException
* @throws ParserException
*/
public synchronized void loadEvents(final CalendarRuntime calendarRuntime, final List<String> oldEventIds) throws IOException, ParserException {
CalDavConfig config = calendarRuntime.getConfig();
Sardine sardine = Util.getConnection(config);
List<DavResource> list = sardine.list(config.getUrl(), 1, false);
log.trace("before load events : oldeventsid contains : {}", oldEventIds.toString());
for (DavResource resource : list) {
final String filename = Util.getFilename(resource.getName());
try {
if (resource.isDirectory()) {
continue;
}
// an ics file can contain multiple events
// ==> multiple eventcontainers could have the same filename (and different eventid),
// ==>we must not have one of them remaining in oldEventIds var (bad chosen name, cause it's a list of
// oldEventContainers's filename, so with doubles possible)
// or the remaining jobs with this filename will get unscheduled on the "removeDeletedEvents(config,
// oldEventIds)" call (line 136)
oldEventIds.removeAll(Arrays.asList(filename));
// must not be loaded
EventContainer eventContainer = calendarRuntime.getEventContainerByFilename(filename);
final org.joda.time.DateTime lastResourceChangeFS = new org.joda.time.DateTime(resource.getModified());
log.trace("eventContainer found: {}", eventContainer != null);
log.trace("last resource modification: {}", lastResourceChangeFS);
log.trace("last change of already loaded event: {}", eventContainer != null ? eventContainer.getLastChanged() : null);
if (config.isLastModifiedFileTimeStampValid()) {
if (eventContainer != null && !lastResourceChangeFS.isAfter(eventContainer.getLastChanged())) {
// to be created
if (eventContainer.getCalculatedUntil() != null && eventContainer.getCalculatedUntil().isAfter(org.joda.time.DateTime.now().plusMinutes(config.getReloadMinutes()))) {
// the event is calculated as long as the next reload
// interval can handle this
log.trace("skipping resource {}, not changed (calculated until: {})", resource.getName(), eventContainer.getCalculatedUntil());
continue;
}
if (eventContainer.isHistoricEvent()) {
// no more upcoming events, do nothing
log.trace("skipping resource {}, not changed (historic)", resource.getName());
continue;
}
File icsFile = Util.getCacheFile(config.getKey(), filename);
if (icsFile != null && icsFile.exists()) {
FileInputStream fis = new FileInputStream(icsFile);
this.loadEvents(filename, lastResourceChangeFS, fis, config, oldEventIds, false);
fis.close();
continue;
}
}
}
log.debug("loading resource: {} (FSchangedTS not valid)", resource);
// prepare resource url
URL url = new URL(config.getUrl());
String resourcePath = resource.getPath();
String escapedResource = resource.getName().replaceAll("/", "%2F");
resourcePath = resourcePath.replace(resource.getName(), escapedResource);
url = new URL(url.getProtocol(), url.getHost(), url.getPort(), resourcePath);
InputStream inputStream = sardine.get(url.toString().replaceAll(" ", "%20"));
this.loadEvents(filename, lastResourceChangeFS, inputStream, config, oldEventIds, false);
} catch (ParserException e) {
log.error("error parsing ics file: " + filename, e);
} catch (SardineException e) {
log.error("error reading ics file: " + filename, e);
}
}
log.trace("after load events : oldeventsid contains : {}", oldEventIds.toString());
}
use of com.github.sardine.DavResource in project ddf by codice.
the class DavAlterationObserverTest method testLeadingCreate.
@Test
public void testLeadingCreate() throws IOException {
DavResource mockChild0 = mock(DavResource.class);
DavEntry child0 = parent.newChildInstance("/child0");
doReturn("/child0").when(mockChild0).getName();
doReturn(false).when(mockChild0).isDirectory();
doReturn(new Date()).when(mockChild0).getModified();
doReturn(12345L).when(mockChild0).getContentLength();
doReturn("E/0011").when(mockChild0).getEtag();
doReturn(Arrays.asList(mockParent, mockChild1, mockChild0, mockChild3)).when(mockSardine).list(parent.getLocation());
doReturn(Collections.singletonList(mockChild0)).when(mockSardine).list(child0.getLocation());
observer.checkAndNotify(mockSardine);
verify(mockListener, only()).onFileCreate(any());
}
Aggregations