package open.dolphin.relay; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.SwingWorker; import open.dolphin.client.ChartEventHandler; import open.dolphin.util.KanaToAscii; import open.dolphin.infomodel.ChartEventModel; import open.dolphin.infomodel.ModelUtils; import open.dolphin.infomodel.PatientVisitModel; import open.dolphin.project.Project; /** * * @author Kazushi Minagawa. */ public class PVTRelay implements PropertyChangeListener { private static final String DATE_FORMAT = "yyyyMMddHHmmss"; private static final String CSV_EXT = ".csv"; private static final String TEMP_EXT = ".inp"; private static final boolean DEBUG = false; @Override public void propertyChange(PropertyChangeEvent pce) { if (!pce.getPropertyName().equals(ChartEventHandler.CHART_EVENT_PROP)) { return; } ChartEventModel evt = (ChartEventModel)pce.getNewValue(); if (evt.getEventType()!=ChartEventModel.PVT_ADD) { return; } final PatientVisitModel model = evt.getPatientVisitModel(); if (model==null) { return; } SwingWorker worker = new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { doRelay(model); return null; } }; worker.execute(); } // PatientVisitModel リレー private void doRelay(PatientVisitModel model) { try { // shared path String sharePath = Project.getString(Project.PVT_RELAY_DIRECTORY); if (!sharePath.endsWith(File.separator)) { sharePath = sharePath + File.separator; } // csv data StringBuilder sb = new StringBuilder(); sb.append(model.getPatientModel().getPatientId()).append(","); // pid, sb.append(model.getPatientModel().getFullName()).append(","); // name, sb.append(","); // , KanaToAscii kanaToAscii = new KanaToAscii(); String rm = kanaToAscii.CHGKanatoASCII(model.getPatientModel().getKanaName(), ""); sb.append(rm).append(","); // roman, String g = model.getPatientModel().getGender(); sb.append(ModelUtils.getGenderMFDesc(g)).append(","); // F | M, String birth = model.getPatientModel().getBirthday(); birth = birth.replaceAll("-", ""); sb.append(birth); // yyyyMMdd String line = sb.toString(); if (DEBUG) { System.err.println(line); } // CSV temp file name sb = new StringBuilder(); sb.append(new SimpleDateFormat(DATE_FORMAT).format(new Date())); String fileNameWithoutExt = sb.toString(); sb.append(TEMP_EXT); String tempName = sb.toString(); Path destPath = Paths.get(sharePath, tempName); Files.write(destPath, line.getBytes(Project.getString(Project.PVT_RELAY_ENCODING))); // rename sb = new StringBuilder(); sb.append(fileNameWithoutExt); sb.append(CSV_EXT); String fileName = sb.toString(); Files.move(destPath, destPath.resolveSibling(fileName)); } catch (Exception e) { e.printStackTrace(System.err); } } }