es.usc.citius.servando.calendula.persistence.Medicine.java Source code

Java tutorial

Introduction

Here is the source code for es.usc.citius.servando.calendula.persistence.Medicine.java

Source

/*
 *    Calendula - An assistant for personal medication management.
 *    Copyright (C) 2016 CITIUS - USC
 *
 *    Calendula is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this software.  If not, see <http://www.gnu.org/licenses/>.
 */

package es.usc.citius.servando.calendula.persistence;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

import org.joda.time.LocalDate;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import es.usc.citius.servando.calendula.database.DB;

import static java.util.Collections.sort;

/**
 * Created by joseangel.pineiro
 */
@DatabaseTable(tableName = "Medicines")
public class Medicine implements Comparable<Medicine> {

    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NAME = "Name";
    public static final String COLUMN_PRESENTATION = "Presentation";
    public static final String COLUMN_CN = "cn";
    public static final String COLUMN_HG = "hg";
    public static final String COLUMN_PATIENT = "Patient";

    @DatabaseField(columnName = COLUMN_ID, generatedId = true)
    private Long id;

    @DatabaseField(columnName = COLUMN_NAME)
    private String name;

    @DatabaseField(columnName = COLUMN_PRESENTATION)
    private Presentation presentation;

    @DatabaseField(columnName = COLUMN_CN)
    private String cn;

    @DatabaseField(columnName = COLUMN_HG)
    private Long homogeneousGroup;

    @DatabaseField(columnName = COLUMN_PATIENT, foreign = true, foreignAutoRefresh = true)
    private Patient patient;

    public Medicine() {
    }

    public Medicine(String name) {
        this.name = name;
    }

    public Medicine(String name, Presentation presentation) {
        this.name = name;
        this.presentation = presentation;
    }

    public String cn() {
        return cn;
    }

    public void setCn(String cn) {
        this.cn = cn;
    }

    public Long homogeneousGroup() {
        return homogeneousGroup;
    }

    public void setHomogeneousGroup(Long homogeneousGroup) {
        this.homogeneousGroup = homogeneousGroup;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String name() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Presentation presentation() {
        return presentation;
    }

    public void setPresentation(Presentation presentation) {
        this.presentation = presentation;
    }

    public Collection<PickupInfo> pickups() {
        return DB.pickups().findByMedicine(this);
    }

    public Patient patient() {
        return patient;
    }

    public void setPatient(Patient patient) {
        this.patient = patient;
    }

    @Override
    public int compareTo(Medicine another) {
        return name.compareTo(another.name);
    }

    // *************************************
    // DB queries
    // *************************************

    public static List<Medicine> findAll() {
        return DB.medicines().findAll();
    }

    public static Medicine findById(long id) {
        return DB.medicines().findById(id);
    }

    public static Medicine findByName(String name) {
        return DB.medicines().findOneBy(COLUMN_NAME, name);
    }

    public void deleteCascade() {
        DB.medicines().deleteCascade(this, false);
    }

    public void save() {
        DB.medicines().save(this);
    }

    public static Medicine fromPrescription(Prescription p) {
        Medicine m = new Medicine();
        m.setCn(p.cn);
        m.setName(p.shortName());
        Presentation pre = p.expectedPresentation();
        m.setPresentation(pre != null ? pre : Presentation.PILLS);
        return m;
    }

    public LocalDate nextPickupDate() {

        List<PickupInfo> pickupList = new ArrayList<>();
        for (PickupInfo pickupInfo : pickups()) {
            if (!pickupInfo.taken())
                pickupList.add(pickupInfo);
        }

        if (!pickupList.isEmpty()) {
            sort(pickupList, new PickupInfo.PickupComparator());
            return pickupList.get(0).from();
        }

        return null;
    }

    public String nextPickup() {
        LocalDate np = nextPickupDate();
        return np != null ? np.toString("dd MMMM") : null;
    }
}