/*
* Created by JFormDesigner on Fri Jun 26 15:31:19 CEST 2015
*/
package op.settings.subpanels;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import entity.files.SYSFilesTools;
import entity.info.ICD;
import gui.GUITools;
import gui.interfaces.DefaultPanel;
import op.OPDE;
import op.settings.ClaMLImporter;
import op.settings.ICDImporter;
import op.threads.DisplayMessage;
import op.tools.SYSConst;
import op.tools.SYSTools;
import org.apache.commons.io.FileUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.*;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.awt.event.ActionEvent;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
/**
* @author Torsten Löhr
*/
public class PnlICD extends DefaultPanel {
private DefaultListModel<File> dlmICDFiles;
private ArrayList<ICD> listICDs;
public PnlICD() {
super("opde.settings.icd");
initComponents();
dlmICDFiles = new DefaultListModel<>();
lstIcdFiles.setModel(dlmICDFiles);
listICDs = new ArrayList<>();
btnImportICD.setText(SYSTools.xx("opde.settings.icd"));
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
btnEmptyList.setToolTipText(SYSTools.xx("opde.settings.icd.btnEmptyList"));
pnlICD.add(GUITools.getDropPanel(files -> {
for (File file : files) {
if (file.isDirectory()) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage("misc.msg.nodirectories"));
return;
}
}
boolean attached = false;
for (File file : files) {
if (!dlmICDFiles.contains(file)) {
dlmICDFiles.addElement(file);
attached = true;
}
}
if (attached) {
SwingUtilities.invokeLater(() -> {
lstIcdFiles.revalidate();
lstIcdFiles.repaint();
});
}
if (dlmICDFiles.size() == 1) {
File opdeicd = dlmICDFiles.elementAt(0).exists() ? dlmICDFiles.elementAt(0) : null;
if (!SYSFilesTools.filenameExtension(opdeicd.getPath()).equalsIgnoreCase("xml")) {
// OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.icd.wrongfile", DisplayMessage.WARNING));
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
} else {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
ICDImporter icdImporter = new ICDImporter();
saxParser.parse(opdeicd, icdImporter);
listICDs.clear();
listICDs.addAll(icdImporter.getICDs());
btnImportICD.setIcon(SYSConst.icon22ledGreenOn);
} catch (Exception e) {
OPDE.debug(e.getMessage());
e.printStackTrace();
OPDE.getDisplayManager().addSubMessage("opde.settings.icd.noICDFile");
listICDs.clear();
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
}
}
} else if (dlmICDFiles.size() == 2) {
File dimdixml = null, dimdidtd = null;
File file1 = dlmICDFiles.elementAt(0).exists() ? dlmICDFiles.elementAt(0) : null;
File file2 = dlmICDFiles.elementAt(1).exists() ? dlmICDFiles.elementAt(1) : null;
if (SYSFilesTools.filenameExtension(file1.getPath()).equalsIgnoreCase("xml")) {
dimdixml = file1;
}
if (SYSFilesTools.filenameExtension(file2.getPath()).equalsIgnoreCase("xml")) {
dimdixml = file2;
}
if (SYSFilesTools.filenameExtension(file1.getPath()).equalsIgnoreCase("dtd")) {
dimdidtd = file1;
}
if (SYSFilesTools.filenameExtension(file2.getPath()).equalsIgnoreCase("dtd")) {
dimdidtd = file2;
}
if (dimdidtd != null && dimdixml != null) {
try {
Path tempDir = Files.createTempDirectory("icdimport");
FileUtils.copyFileToDirectory(dimdidtd, tempDir.toFile(), false);
FileUtils.copyFileToDirectory(dimdixml, tempDir.toFile(), false);
File claML = new File(tempDir.toString() + SYSConst.sep + dimdixml.getName());
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
ClaMLImporter cl = new ClaMLImporter();
saxParser.parse(claML, cl);
listICDs.clear();
listICDs.addAll(cl.getICDs());
btnImportICD.setIcon(SYSConst.icon22ledGreenOn);
} catch (Exception e) {
listICDs.clear();
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(e.getMessage(), DisplayMessage.WARNING));
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
}
//
} else {
OPDE.getDisplayManager().addSubMessage("opde.settings.icd.noICDFile");
listICDs.clear();
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
}
} else {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.icd.only1or2files", DisplayMessage.WARNING));
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
listICDs.clear();
}
}, SYSTools.xx("opde.settings.icd.dropICDHere")), CC.xyw(1, 1, 2));
}
@Override
public void cleanup() {
super.cleanup();
dlmICDFiles.clear();
listICDs.clear();
}
private void btnEmptyListActionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(() -> {
dlmICDFiles.clear();
listICDs.clear();
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
lstIcdFiles.revalidate();
lstIcdFiles.repaint();
});
}
private void btnImportICDActionPerformed(ActionEvent e) {
if (listICDs.isEmpty()) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage("opde.settings.icd.noICDFile", DisplayMessage.WARNING));
return;
}
OPDE.getMainframe().setBlocked(true);
OPDE.getDisplayManager().setProgressBarMessage(new DisplayMessage(SYSTools.xx("misc.msg.wait"), -1, listICDs.size()));
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
EntityManager em = OPDE.createEM();
try {
int progress = 0;
em.getTransaction().begin();
Query query = em.createQuery("DELETE FROM ICD icd");
query.executeUpdate();
for (ICD icd : listICDs) {
progress++;
OPDE.getDisplayManager().setProgressBarMessage(new DisplayMessage(SYSTools.xx("misc.msg.wait"), progress, listICDs.size()));
em.merge(icd);
}
OPDE.getDisplayManager().setProgressBarMessage(new DisplayMessage(SYSTools.xx("misc.msg.wait.for.db") + " " + listICDs.size() + " ICDs.", progress, -1));
em.getTransaction().commit();
} catch (Exception ex) {
em.getTransaction().rollback();
OPDE.fatal(ex);
} finally {
em.close();
}
return null;
}
@Override
protected void done() {
listICDs.clear();
dlmICDFiles.clear();
lstIcdFiles.revalidate();
lstIcdFiles.repaint();
btnImportICD.setIcon(SYSConst.icon22ledRedOn);
OPDE.getDisplayManager().setProgressBarMessage(null);
OPDE.getMainframe().setBlocked(false);
}
};
worker.execute();
}
@Override
public String getHelpKey() {
return SYSTools.xx("opde.settings.icd.helpurl");
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
pnlICD = new JPanel();
scrollPane1 = new JScrollPane();
lstIcdFiles = new JList();
btnEmptyList = new JButton();
btnImportICD = new JButton();
//======== this ========
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
//======== pnlICD ========
{
pnlICD.setLayout(new FormLayout(
"default:grow, default",
"fill:default:grow, $lgap, pref, $lgap, default"));
//======== scrollPane1 ========
{
scrollPane1.setViewportView(lstIcdFiles);
}
pnlICD.add(scrollPane1, CC.xy(1, 3));
//---- btnEmptyList ----
btnEmptyList.setText(null);
btnEmptyList.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/deleteall.png")));
btnEmptyList.addActionListener(e -> btnEmptyListActionPerformed(e));
pnlICD.add(btnEmptyList, CC.xy(2, 3, CC.DEFAULT, CC.FILL));
//---- btnImportICD ----
btnImportICD.setText("importICD");
btnImportICD.addActionListener(e -> btnImportICDActionPerformed(e));
pnlICD.add(btnImportICD, CC.xy(1, 5, CC.LEFT, CC.DEFAULT));
}
add(pnlICD);
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JPanel pnlICD;
private JScrollPane scrollPane1;
private JList lstIcdFiles;
private JButton btnEmptyList;
private JButton btnImportICD;
// JFormDesigner - End of variables declaration //GEN-END:variables
}