/* * Created by JFormDesigner on Thu Jun 21 14:49:00 CEST 2012 */ package op.care.sysfiles; import com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import entity.files.SYSFiles; import entity.files.SYSFilesTools; import entity.info.ResInfo; import entity.nursingprocess.NursingProcess; import entity.prescription.Prescription; import entity.qms.Qms; import entity.qms.Qmsplan; import entity.reports.NReport; import entity.staff.Training; import entity.staff.Training2Users; import entity.system.Users; import entity.values.ResValue; import op.OPDE; import op.system.FileDrop; import op.threads.DisplayMessage; import op.tools.MyJDialog; import op.tools.SYSConst; import op.tools.SYSTools; import org.apache.commons.collections.Closure; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collections; /** * @author Torsten Löhr */ public class DlgFiles extends MyJDialog { private Object attachable; private boolean filesAttached = false; private Closure afterAttachAction; private JList list; /** * Creates a generic file attachment dialog to show existing files and add new ones. * * @param attachable object to add the files to * @param afterAttachAction what to do, after files have been attached. if this is <code>null</code>, file drops are not possible. */ public DlgFiles(Object attachable, Closure afterAttachAction) { super(false); this.attachable = attachable; this.afterAttachAction = afterAttachAction; initComponents(); initDialog(); } private void initDialog() { if (afterAttachAction == null) { contentPanel.add(getFileListPanel(), CC.xywh(1, 1, 3, 1)); } else { contentPanel.add(getFileDropPanel(), CC.xy(1, 1)); contentPanel.add(getFileListPanel(), CC.xy(3, 1)); } } private JPanel getFileDropPanel() { JPanel dropPanel = new JPanel(); dropPanel.setLayout(new BorderLayout()); JLabel dropLabel = new JLabel(SYSTools.xx("nursingrecords.files.drophere"), SYSConst.icon48kgetdock, SwingConstants.CENTER); dropLabel.setFont(SYSConst.ARIAL20); dropLabel.setHorizontalTextPosition(SwingConstants.CENTER); dropLabel.setVerticalTextPosition(SwingConstants.BOTTOM); dropPanel.add(BorderLayout.CENTER, dropLabel); dropPanel.setPreferredSize(new Dimension(180, 180)); dropPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED)); new FileDrop(dropPanel, files -> { java.util.List<SYSFiles> successful = SYSFilesTools.putFiles(files, attachable); if (!successful.isEmpty()) { list.setModel(SYSTools.list2dlm(getAttachedFilesList(attachable))); OPDE.getDisplayManager().addSubMessage(new DisplayMessage(successful.size() + " " + SYSTools.xx("misc.msg.Files") + " " + SYSTools.xx("misc.msg.added"))); filesAttached = true; } }); return dropPanel; } @Override public void dispose() { if (filesAttached) { afterAttachAction.execute(null); } super.dispose(); } private JPanel getFileListPanel() { list = new JList(); final JPanel pnlFilesList = new JPanel(); pnlFilesList.setLayout(new BoxLayout(pnlFilesList, BoxLayout.LINE_AXIS)); ArrayList<SYSFiles> files = getAttachedFilesList(attachable); if (files.isEmpty()) { list.setModel(new DefaultListModel()); } else { list.setModel(SYSTools.list2dlm(files)); } list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setCellRenderer(SYSFilesTools.getSYSFilesRenderer()); list.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent mouseEvent) { if (SwingUtilities.isLeftMouseButton(mouseEvent) && mouseEvent.getClickCount() == 2) { SYSFilesTools.handleFile((SYSFiles) list.getSelectedValue(), Desktop.Action.OPEN); } //todo: this is much more complicated than it looks. maybe i need some sort of interface attachable // else if (SwingUtilities.isRightMouseButton(mouseEvent)) { // JidePopupMenu jMenu = new JidePopupMenu(); // // JMenuItem miDetachFile = new JMenuItem(SYSTools.xx("nursingrecords.files.detach")); // // jMenu.add(miDetachFile); // // miDetachFile.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // // EntityManager em = OPDE.getEMF().createEntityManager(); // SYSFiles attachedFile = em.merge((SYSFiles) list.getSelectedValue()); // // // // // em.close(); // // // } // }); // // jMenu.show(pnlFilesList, 0, pnlFilesList.getPreferredSize().height); // } } }); pnlFilesList.setBorder(new EmptyBorder(10, 10, 10, 10)); pnlFilesList.add(new JScrollPane(list)); return pnlFilesList; } private ArrayList<SYSFiles> getAttachedFilesList(Object attachable) { ArrayList<SYSFiles> files = null; EntityManager em = OPDE.createEM(); if (attachable instanceof NReport) { Query query = em.createQuery(" SELECT s " + " FROM SYSFiles s " + " JOIN s.nrAssignCollection sf " + " WHERE sf.nReport = :nReport "); query.setParameter("nReport", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Prescription) { Query query = em.createQuery(" SELECT s " + " FROM SYSFiles s " + " JOIN s.preAssignCollection sf " + " WHERE sf.prescription = :verordnung "); query.setParameter("verordnung", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof ResInfo) { Query query = em.createQuery(" SELECT s " + " FROM SYSFiles s " + " JOIN s.bwiAssignCollection sf " + " WHERE sf.bwinfo = :bwinfo "); query.setParameter("bwinfo", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof ResValue) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.valAssignCollection sf WHERE sf.value = :resval "); query.setParameter("resval", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof NursingProcess) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.npAssignCollection sf WHERE sf.nursingProcess = :np "); query.setParameter("np", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Training) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.trAssignCollection sf WHERE sf.training = :training "); query.setParameter("training", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Users) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.usersAssignCollection uf WHERE uf.user = :user "); query.setParameter("user", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Qmsplan) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.qmsplanAssignCollection ac WHERE ac.qmsplan = :qmsplan "); query.setParameter("qmsplan", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Training) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.trainingAssignCollection tac WHERE tac.training = :training "); query.setParameter("training", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Qms) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.qmsAssignCollection ac WHERE ac.qms = :qms "); query.setParameter("qms", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } else if (attachable instanceof Training2Users) { Query query = em.createQuery("SELECT s FROM SYSFiles s JOIN s.trainAttendeeAssignCollection tac WHERE tac.training2Users = :training2users "); query.setParameter("training2users", attachable); files = new ArrayList<SYSFiles>(query.getResultList()); } Collections.sort(files); em.close(); return files; } private void btnCancelActionPerformed(ActionEvent e) { dispose(); } private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents dialogPane = new JPanel(); contentPanel = new JPanel(); btnCancel = new JButton(); //======== this ======== Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); //======== dialogPane ======== { dialogPane.setBorder(new EmptyBorder(12, 12, 12, 12)); dialogPane.setLayout(new BoxLayout(dialogPane, BoxLayout.X_AXIS)); //======== contentPanel ======== { contentPanel.setLayout(new FormLayout( "default:grow, $lcgap, default:grow", "fill:default:grow, $lgap, default")); //---- btnCancel ---- btnCancel.setText(null); btnCancel.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_eject.png"))); btnCancel.addActionListener(e -> btnCancelActionPerformed(e)); contentPanel.add(btnCancel, CC.xy(3, 3, CC.RIGHT, CC.DEFAULT)); } dialogPane.add(contentPanel); } contentPane.add(dialogPane, BorderLayout.CENTER); setSize(640, 415); setLocationRelativeTo(getOwner()); // JFormDesigner - End of component initialization //GEN-END:initComponents } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JPanel dialogPane; private JPanel contentPanel; private JButton btnCancel; // JFormDesigner - End of variables declaration //GEN-END:variables }