Skip to content
Snippets Groups Projects
SubjectDao.java 2.27 KiB
Newer Older
package smash.appointment.parse;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

public class SubjectDao {
	Logger								logger	 = Logger.getLogger(SubjectDao.class);
	private List<Subject>	subjects = new ArrayList<>();

	public void addSubject(Subject subject, String errorPrefix) {
		if (subject.getNdNumber() != null && !Utils.simplifyString(subject.getNdNumber()).isEmpty()) {
			Subject existing = getByNdNumber(subject.getNdNumber());
			if (existing != null) {
				if (!existing.getScreeningNumber().equals(subject.getScreeningNumber())) {
					logger.error(errorPrefix + " Nd number taken by subject: " + existing.getScreeningNumber());
					return;
				}
			}
		}
		Subject existing = getByScreeningNumber(subject.getScreeningNumber());
		if (existing != null) {
			existing.update(subject, errorPrefix);
		} else {
			subjects.add(subject);
		}
	}
	private Subject getByScreeningNumber(String screeningNumber) {
		for (Subject s : subjects) {
			if (screeningNumber.equals(s.getScreeningNumber())) {
				return s;
			}
		}
		return null;
	}

	public void readFile(String filename) throws IOException {
		try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
			String line;
			int lineCount = 1;
			while ((line = br.readLine()) != null) {
				String tmp[] = line.split("\t");
				addSubject(new Subject(tmp[0], tmp[1], tmp[2], tmp[3]), "[" + filename + ":" + lineCount + "]");
				lineCount++;
			}
		}
	}

	/**
	 * @return the subjects
	 * @see #subjects
	 */
	public List<Subject> getSubjects() {
		return subjects;
	}

	/**
	 * @param subjects
	 *          the subjects to set
	 * @see #subjects
	 */
	public void setSubjects(List<Subject> subjects) {
		this.subjects = subjects;
	}

	public Subject getByNdNumber(String ndNumber) {
		ndNumber = Utils.simplifyString(ndNumber);
		for (Subject s : subjects) {
			if (ndNumber.equalsIgnoreCase(s.getNdNumber())) {
				return s;
			}
		}
		return null;
	}

	public void addSubjects(List<Subject> processPrcSubjects, String errorPrefix) {
		for (Subject subject : processPrcSubjects) {
			addSubject(subject, errorPrefix);