| 1 | /* |
| 2 | * To change this template, choose Tools | Templates |
| 3 | * and open the template in the editor. |
| 4 | */ |
| 5 | package org.ufcspa.simdecs.bn.ui; |
| 6 | |
| 7 | import java.io.*; |
| 8 | import java.util.ArrayList; |
| 9 | import java.util.logging.Level; |
| 10 | import java.util.logging.Logger; |
| 11 | import javax.annotation.Resource; |
| 12 | import javax.faces.application.FacesMessage; |
| 13 | import javax.faces.bean.ApplicationScoped; |
| 14 | import javax.faces.bean.ManagedBean; |
| 15 | import javax.faces.context.FacesContext; |
| 16 | import javax.persistence.EntityManager; |
| 17 | import javax.persistence.EntityManagerFactory; |
| 18 | import javax.persistence.PersistenceUnit; |
| 19 | import javax.transaction.UserTransaction; |
| 20 | import javax.xml.bind.JAXBException; |
| 21 | import org.primefaces.event.FileUploadEvent; |
| 22 | import org.primefaces.model.UploadedFile; |
| 23 | import org.ufcspa.simdecs.bn.entity.BayesianNetwork; |
| 24 | import org.ufcspa.simdecs.bn.entity.Node; |
| 25 | import unbbayes.io.exception.LoadException; |
| 26 | import unbbayes.io.xmlbif.version6.XMLBIFIO; |
| 27 | import unbbayes.prs.bn.ProbabilisticNetwork; |
| 28 | |
| 29 | /** |
| 30 | * |
| 31 | * @author mchelem |
| 32 | */ |
| 33 | @ManagedBean(name = "fileUploadController") |
| 34 | @ApplicationScoped |
| 35 | public class FileUploadController implements Serializable { |
| 36 | @Resource |
| 37 | private UserTransaction utx = null; |
| 38 | @PersistenceUnit(unitName = "simdecsEclipseLinkPU") |
| 39 | private EntityManagerFactory emf = null; |
| 40 | EntityManager em = null; |
| 41 | |
| 42 | private static final Logger logger = Logger.getLogger("" + FileUploadController.class); |
| 43 | |
| 44 | private File saveUploadedFile(UploadedFile uploadedFile) throws IOException{ |
| 45 | InputStream in = new BufferedInputStream(uploadedFile.getInputstream()); |
| 46 | File file = new File(uploadedFile.getFileName()); |
| 47 | FileOutputStream fout = new FileOutputStream(file); |
| 48 | while(in.available() != 0){ |
| 49 | fout.write(in.read()); |
| 50 | } |
| 51 | logger.log(Level.INFO, "Uploaded file saved in: {0}", file.getAbsolutePath()); |
| 52 | return file; |
| 53 | } |
| 54 | |
| 55 | private void persist(BayesianNetwork bayesianNetwork){ |
| 56 | em = emf.createEntityManager(); |
| 57 | try { |
| 58 | utx.begin(); |
| 59 | em.persist(bayesianNetwork); |
| 60 | utx.commit(); |
| 61 | } catch (Exception e) { |
| 62 | try { |
| 63 | utx.rollback(); |
| 64 | } catch (Exception ex) { |
| 65 | Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex); |
| 66 | } |
| 67 | Logger.getLogger(FileUploadController.class.getName()).log(Level.INFO, null, e); |
| 68 | } |
| 69 | logger.log(Level.INFO, "Bayesian Network {0} persisted.", bayesianNetwork.getName()); |
| 70 | |
| 71 | } |
| 72 | |
| 73 | |
| 74 | public void handleFileUpload(FileUploadEvent event) { |
| 75 | try { |
| 76 | File file = this.saveUploadedFile(event.getFile()); |
| 77 | // required to run unbbayes gui classes on server |
| 78 | System.setProperty("java.awt.headless", "false"); |
| 79 | |
| 80 | ProbabilisticNetwork bn = new ProbabilisticNetwork(null); |
| 81 | XMLBIFIO.loadXML(new File(file.getAbsolutePath()), bn); |
| 82 | BayesianNetwork bayesianNetwork = new BayesianNetwork(); |
| 83 | bayesianNetwork.setName(bn.getName()); |
| 84 | |
| 85 | ArrayList<Node> nodes = new ArrayList<Node>(); |
| 86 | for (unbbayes.prs.Node prs_node: bn.getNodes()){ |
| 87 | Node node = new Node(); |
| 88 | node.setName(prs_node.getName()); |
| 89 | node.setBayesianNetwork(bayesianNetwork); |
| 90 | nodes.add(node); |
| 91 | } |
| 92 | bayesianNetwork.setNodes(nodes); |
| 93 | persist(bayesianNetwork); |
| 94 | |
| 95 | FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); |
| 96 | FacesContext.getCurrentInstance().addMessage(null, msg); |
| 97 | } catch (LoadException ex) { |
| 98 | Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex); |
| 99 | } catch (IOException ex) { |
| 100 | Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex); |
| 101 | } catch (JAXBException ex) { |
| 102 | Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex); |
| 103 | } |
| 104 | } |
| 105 | } |
| 106 | |