at.medevit.elexis.inbox.model.impl.InboxElementService.java Source code

Java tutorial

Introduction

Here is the source code for at.medevit.elexis.inbox.model.impl.InboxElementService.java

Source

/*******************************************************************************
 * Copyright (c) 2014 MEDEVIT.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     T. Huster - initial API and implementation
 *******************************************************************************/
package at.medevit.elexis.inbox.model.impl;

import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.slf4j.LoggerFactory;

import at.medevit.elexis.inbox.model.IInboxElementService;
import at.medevit.elexis.inbox.model.IInboxUpdateListener;
import at.medevit.elexis.inbox.model.InboxElement;
import at.medevit.elexis.inbox.model.InboxElementType;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.data.Kontakt;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;

@Component(immediate = true)
public class InboxElementService implements IInboxElementService {

    HashSet<IInboxUpdateListener> listeners = new HashSet<IInboxUpdateListener>();

    @Override
    public void createInboxElement(Patient patient, Kontakt mandant, PersistentObject object) {
        InboxElement element = new InboxElement(patient, mandant, object);
        fireUpdate(element);
    }

    @Override
    public void removeUpdateListener(IInboxUpdateListener listener) {
        synchronized (listeners) {
            listeners.remove(listener);
        }
    }

    @Override
    public void addUpdateListener(IInboxUpdateListener listener) {
        synchronized (listeners) {
            listeners.add(listener);
        }
    }

    @Override
    public List<InboxElement> getInboxElements(Mandant mandant, Patient patient, State state) {
        Query<InboxElement> qie = new Query<InboxElement>(InboxElement.class);
        if (mandant != null) {
            qie.add(InboxElement.FLD_MANDANT, "=", mandant.getId());
        }
        if (patient != null) {
            qie.add(InboxElement.FLD_PATIENT, "=", patient.getId());
        }
        if (state != null) {
            qie.add(InboxElement.FLD_STATE, "=", Integer.toString(state.ordinal()));
        }
        return qie.execute();
    }

    @Override
    public void changeInboxElementState(InboxElement element, State state) {
        element.set(InboxElement.FLD_STATE, Integer.toString(state.ordinal()));
        fireUpdate(element);
    }

    private void fireUpdate(InboxElement element) {
        synchronized (listeners) {
            for (IInboxUpdateListener listener : listeners) {
                listener.update(element);
            }
        }
    }

    @Activate
    public void activate() {
        activateProviders();
    }

    @Deactivate
    public void deactivate() {
        deactivateProviders();
    }

    @Override
    public void createInboxElement(Patient patient, Kontakt mandant, String file, boolean copyFile) {
        String path = file;
        if (path != null) {
            File src = new File(path);
            if (src.exists()) {
                if (copyFile) {
                    try {
                        StringBuilder pathBuilder = new StringBuilder();
                        pathBuilder.append("inbox");
                        pathBuilder.append(File.separator);
                        pathBuilder.append(patient.getPatCode());
                        pathBuilder.append("_");
                        pathBuilder.append(System.currentTimeMillis());
                        pathBuilder.append("_");
                        pathBuilder.append(src.getName());
                        File dest = new File(CoreHub.getWritableUserDir(), pathBuilder.toString());
                        FileUtils.copyFile(src, dest);
                        path = dest.getAbsolutePath();
                    } catch (IOException e) {
                        LoggerFactory.getLogger(InboxElementService.class).error("file copy error", e);
                        return;
                    }
                }
                InboxElement element = new InboxElement(patient, mandant, InboxElementType.FILE.getPrefix() + path);
                fireUpdate(element);
            }
        }
    }

    @Override
    public void deactivateProviders() {
        LoggerFactory.getLogger(getClass()).info("Deactivating all ElementProviders");
        ElementsProviderExtension.deactivateAll();
    }

    @Override
    public void activateProviders() {
        LoggerFactory.getLogger(getClass()).info("Activating all ElementProviders");
        ElementsProviderExtension.activateAll();
    }
}