Search in sources :

Example 1 with DavResource

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);
    }
}
Also used : DavResource(com.github.sardine.DavResource) IOException(java.io.IOException)

Example 2 with DavResource

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());
}
Also used : DavResource(com.github.sardine.DavResource) Date(java.util.Date) Test(org.junit.Test)

Example 3 with DavResource

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());
}
Also used : DavResource(com.github.sardine.DavResource) Date(java.util.Date) Test(org.junit.Test)

Example 4 with DavResource

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());
}
Also used : Sardine(com.github.sardine.Sardine) ParserException(net.fortuna.ical4j.data.ParserException) DavResource(com.github.sardine.DavResource) EventContainer(org.openhab.io.caldav.internal.EventStorage.EventContainer) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) CalDavConfig(org.openhab.io.caldav.internal.CalDavConfig) DateTime(net.fortuna.ical4j.model.DateTime) LocalDateTime(org.joda.time.LocalDateTime) FileInputStream(java.io.FileInputStream) URL(java.net.URL) SardineException(com.github.sardine.impl.SardineException) CalendarRuntime(org.openhab.io.caldav.internal.EventStorage.CalendarRuntime) File(java.io.File)

Example 5 with DavResource

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());
}
Also used : DavResource(com.github.sardine.DavResource) Date(java.util.Date) Test(org.junit.Test)

Aggregations

DavResource (com.github.sardine.DavResource)6 Date (java.util.Date)4 Test (org.junit.Test)4 Sardine (com.github.sardine.Sardine)1 SardineException (com.github.sardine.impl.SardineException)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 URL (java.net.URL)1 ParserException (net.fortuna.ical4j.data.ParserException)1 DateTime (net.fortuna.ical4j.model.DateTime)1 LocalDateTime (org.joda.time.LocalDateTime)1 CalDavConfig (org.openhab.io.caldav.internal.CalDavConfig)1 CalendarRuntime (org.openhab.io.caldav.internal.EventStorage.CalendarRuntime)1 EventContainer (org.openhab.io.caldav.internal.EventStorage.EventContainer)1