Search in sources :

Example 1 with ICalendar

use of com.axelor.apps.base.db.ICalendar in project axelor-open-suite by axelor.

the class BatchCalendarSynchronization method process.

@Override
protected void process() {
    final Company company = batch.getBaseBatch().getCompany();
    ;
    final List<ICalendar> calendars = repo.all().filter("self.user.activeCompany = :company AND self.isValid = TRUE").bind("company", company).fetch();
    for (ICalendar calendar : calendars) {
        try {
            iCalendarService.sync(calendar, batch.getBaseBatch().getAllEvents(), batch.getBaseBatch().getSynchronizationDuration());
            incrementDone();
        } catch (Exception e) {
            e.printStackTrace();
            incrementAnomaly();
        }
    }
}
Also used : Company(com.axelor.apps.base.db.Company) ICalendar(com.axelor.apps.base.db.ICalendar)

Example 2 with ICalendar

use of com.axelor.apps.base.db.ICalendar in project axelor-open-suite by axelor.

the class ICalendarService method removeEventFromIcal.

public void removeEventFromIcal(ICalendarEvent event) throws MalformedURLException, ICalendarException {
    if (event.getCalendar() != null && !Strings.isNullOrEmpty(event.getUid())) {
        ICalendar calendar = event.getCalendar();
        PathResolver RESOLVER = getPathResolver(calendar.getTypeSelect());
        Protocol protocol = getProtocol(calendar.getIsSslConnection());
        URL url = new URL(protocol.getScheme(), calendar.getUrl(), calendar.getPort(), "");
        ICalendarStore store = new ICalendarStore(url, RESOLVER);
        try {
            if (store.connect(calendar.getLogin(), getCalendarDecryptPassword(calendar.getPassword()))) {
                List<CalDavCalendarCollection> colList = store.getCollections();
                if (!colList.isEmpty()) {
                    CalDavCalendarCollection collection = colList.get(0);
                    final Map<String, VEvent> remoteEvents = new HashMap<>();
                    for (VEvent item : ICalendarStore.getEvents(collection)) {
                        remoteEvents.put(item.getUid().getValue(), item);
                    }
                    VEvent target = remoteEvents.get(event.getUid());
                    if (target != null)
                        removeCalendar(collection, target.getUid().getValue());
                }
            } else {
                throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.CALENDAR_NOT_VALID));
            }
        } catch (Exception e) {
            throw new ICalendarException(e);
        } finally {
            store.disconnect();
        }
    }
}
Also used : VEvent(net.fortuna.ical4j.model.component.VEvent) AxelorException(com.axelor.exception.AxelorException) HashMap(java.util.HashMap) PathResolver(net.fortuna.ical4j.connector.dav.PathResolver) CalDavCalendarCollection(net.fortuna.ical4j.connector.dav.CalDavCalendarCollection) URL(java.net.URL) FailedOperationException(net.fortuna.ical4j.connector.FailedOperationException) URISyntaxException(java.net.URISyntaxException) ObjectStoreException(net.fortuna.ical4j.connector.ObjectStoreException) ParseException(java.text.ParseException) ParserException(net.fortuna.ical4j.data.ParserException) ValidationException(net.fortuna.ical4j.validate.ValidationException) SocketException(java.net.SocketException) AxelorException(com.axelor.exception.AxelorException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) DavException(org.apache.jackrabbit.webdav.DavException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) ConstraintViolationException(net.fortuna.ical4j.model.ConstraintViolationException) ICalendar(com.axelor.apps.base.db.ICalendar) Protocol(org.apache.commons.httpclient.protocol.Protocol)

Example 3 with ICalendar

use of com.axelor.apps.base.db.ICalendar in project axelor-open-suite by axelor.

the class ICalendarService method doSync.

@Transactional(rollbackOn = { Exception.class })
protected ICalendar doSync(ICalendar calendar, CalDavCalendarCollection collection, LocalDateTime startDate, LocalDateTime endDate) throws IOException, URISyntaxException, ParseException, ObjectStoreException, ConstraintViolationException, DavException, ParserConfigurationException, ParserException, AxelorException {
    final boolean keepRemote = calendar.getKeepRemote() == Boolean.TRUE;
    final Map<String, VEvent> modifiedRemoteEvents = new HashMap<>();
    final List<ICalendarEvent> modifiedLocalEvents = getICalendarEvents(calendar);
    final Set<String> allRemoteUids = new HashSet<>();
    final Set<VEvent> updatedEvents = new HashSet<>();
    List<VEvent> events = null;
    Instant lastSynchro = null;
    if (calendar.getLastSynchronizationDateT() != null) {
        lastSynchro = calendar.getLastSynchronizationDateT().toInstant(OffsetDateTime.now().getOffset());
    } else {
        lastSynchro = LocalDateTime.MIN.toInstant(OffsetDateTime.now().getOffset());
    }
    if (startDate == null || endDate == null) {
        events = ICalendarStore.getModifiedEvents(collection, null, allRemoteUids);
    } else {
        events = ICalendarStore.getModifiedEventsInRange(collection, lastSynchro, allRemoteUids, startDate, endDate);
    }
    if (CollectionUtils.isEmpty(events) && CollectionUtils.isEmpty(modifiedLocalEvents)) {
        throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.CALENDAR_NO_EVENTS_FOR_SYNC_ERROR));
    }
    if (events != null) {
        for (VEvent item : events) {
            modifiedRemoteEvents.put(item.getUid().getValue(), item);
        }
    }
    for (ICalendarEvent item : modifiedLocalEvents) {
        VEvent source = createVEvent(item);
        VEvent target = modifiedRemoteEvents.get(source.getUid().getValue());
        // If uid is empty, the event is new
        if (StringUtils.isBlank(item.getUid())) {
            item.setUid(source.getUid().getValue());
            Calendar cal = newCalendar();
            cal.getComponents().add(source);
            collection.addCalendar(cal);
            allRemoteUids.add(item.getUid());
        } else // else it has been modified
        {
            // if target is null, then it hasn't been modified or it has been deleted
            if (target == null) {
                target = source;
            } else {
                updateEvent(source, target, keepRemote);
            // modifiedRemoteEvents.remove(target.getUid().getValue());
            }
            updatedEvents.add(target);
        }
    }
    // corresponding ICalendarEvent
    for (Map.Entry<String, VEvent> entry : modifiedRemoteEvents.entrySet()) {
        findOrCreateEvent(entry.getValue(), calendar);
    }
    // update remote events
    for (VEvent item : updatedEvents) {
        Calendar cal = newCalendar();
        cal.getComponents().add(item);
        // collection.updateCalendar(cal);
        try {
            collection.addCalendar(cal);
        } catch (Exception e) {
            TraceBackService.trace(e);
        }
    }
    // remove deleted remote events
    removeDeletedEventsInRange(allRemoteUids, calendar, startDate, endDate);
    return calendar;
}
Also used : VEvent(net.fortuna.ical4j.model.component.VEvent) ICalendarEvent(com.axelor.apps.base.db.ICalendarEvent) AxelorException(com.axelor.exception.AxelorException) HashMap(java.util.HashMap) Instant(java.time.Instant) Calendar(net.fortuna.ical4j.model.Calendar) ICalendar(com.axelor.apps.base.db.ICalendar) FailedOperationException(net.fortuna.ical4j.connector.FailedOperationException) URISyntaxException(java.net.URISyntaxException) ObjectStoreException(net.fortuna.ical4j.connector.ObjectStoreException) ParseException(java.text.ParseException) ParserException(net.fortuna.ical4j.data.ParserException) ValidationException(net.fortuna.ical4j.validate.ValidationException) SocketException(java.net.SocketException) AxelorException(com.axelor.exception.AxelorException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) DavException(org.apache.jackrabbit.webdav.DavException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) ConstraintViolationException(net.fortuna.ical4j.model.ConstraintViolationException) Map(java.util.Map) HashMap(java.util.HashMap) HashSet(java.util.HashSet) Transactional(com.google.inject.persist.Transactional)

Example 4 with ICalendar

use of com.axelor.apps.base.db.ICalendar in project axelor-open-suite by axelor.

the class ICalendarController method exportCalendar.

public void exportCalendar(ActionRequest request, ActionResponse response) throws IOException, ParseException {
    ICalendar cal = request.getContext().asType(ICalendar.class);
    Path tempPath = MetaFiles.createTempFile(cal.getName(), ".ics");
    Beans.get(ICalendarService.class).export(cal, tempPath.toFile());
    Beans.get(MetaFiles.class).attach(new FileInputStream(tempPath.toFile()), cal.getName() + ".ics", cal);
    response.setReload(true);
}
Also used : Path(java.nio.file.Path) MetaFiles(com.axelor.meta.MetaFiles) ICalendar(com.axelor.apps.base.db.ICalendar) ICalendarService(com.axelor.apps.base.ical.ICalendarService) FileInputStream(java.io.FileInputStream)

Example 5 with ICalendar

use of com.axelor.apps.base.db.ICalendar in project axelor-open-suite by axelor.

the class ICalendarController method importCalendarFile.

public void importCalendarFile(ActionRequest request, ActionResponse response) throws IOException, ParserException {
    ImportConfiguration imp = request.getContext().asType(ImportConfiguration.class);
    Object object = request.getContext().get("_id");
    ICalendar cal = null;
    if (object != null) {
        Long id = Long.valueOf(object.toString());
        cal = Beans.get(ICalendarRepository.class).find(id);
    }
    if (cal == null) {
        cal = new ICalendar();
    }
    File data = MetaFiles.getPath(imp.getDataMetaFile()).toFile();
    Beans.get(ICalendarService.class).load(cal, data);
    response.setCanClose(true);
    response.setReload(true);
}
Also used : ICalendar(com.axelor.apps.base.db.ICalendar) ImportConfiguration(com.axelor.apps.base.db.ImportConfiguration) File(java.io.File) ICalendarService(com.axelor.apps.base.ical.ICalendarService)

Aggregations

ICalendar (com.axelor.apps.base.db.ICalendar)11 ICalendarService (com.axelor.apps.base.ical.ICalendarService)5 ICalendarEvent (com.axelor.apps.base.db.ICalendarEvent)3 IOException (java.io.IOException)3 MalformedURLException (java.net.MalformedURLException)3 ParseException (java.text.ParseException)3 ParserException (net.fortuna.ical4j.data.ParserException)3 Calendar (net.fortuna.ical4j.model.Calendar)3 VEvent (net.fortuna.ical4j.model.component.VEvent)3 AxelorException (com.axelor.exception.AxelorException)2 Transactional (com.google.inject.persist.Transactional)2 SocketException (java.net.SocketException)2 URISyntaxException (java.net.URISyntaxException)2 HashMap (java.util.HashMap)2 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)2 FailedOperationException (net.fortuna.ical4j.connector.FailedOperationException)2 ObjectStoreException (net.fortuna.ical4j.connector.ObjectStoreException)2 ConstraintViolationException (net.fortuna.ical4j.model.ConstraintViolationException)2 ValidationException (net.fortuna.ical4j.validate.ValidationException)2 DavException (org.apache.jackrabbit.webdav.DavException)2