import cz.orcz.orfmodel.CKonstrKusHlavWsImp; import cz.orcz.orfmodel.CPolozka; import cz.orcz.orfmodel.CKonstrKusKompImp; import cz.orcz.orfmodel.Axz; import cz.orcz.mskws.ws.KonstrKusImport; import javax.xml.bind.*; import javax.xml.bind.annotation.*; import javax.xml.transform.stream.StreamSource; import java.io.File; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cz.ortex.util.o0.O0Session; import javax.swing.JOptionPane; import org.hibernate.Session; import org.hibernate.Transaction; import static cz.ortex.implutil.o0.HibernateUtil.getSessionFactory; import java.io.FileOutputStream; import java.io.PrintStream; import cz.ortex.implutil.o0.O0CfgSrv; import cz.ortex.implutil.o0.O0CfgSrvPar; import cz.ortex.impldao.o0.admin.O0logDaoImpl; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import cz.ortex.impllogic.o0.task.O0taskDemonUtil; import cz.ortex.impllogic.o0.task.OxSpustDavTaskRun; protected static void autoImport(String urlCesta, O0Session o0Session, Axz axz) { CKonstrKusKompImp lastKusKompImp; int lastLevel; try { //Adresář protokolu obecný String adrProtokol = O0CfgSrv.get(O0CfgSrvPar.ADR_PROTOKOLY); // Zadejte cestu k souboru, kam chcete přesměrovat výstup String soubor = adrProtokol + "axz_"+axz.axzId+".log"; axz.axzHlaseni = soubor; // Vytvořte nový výstupní proud pro soubor FileOutputStream fileOutputStream = new FileOutputStream(soubor); // Vytvořte PrintStream pro nový výstupní proud PrintStream printStream = new PrintStream(fileOutputStream); // Uložte stávající System.out do záložního PrintStreamu PrintStream systemOutBackup = System.out; // Nastavte nový PrintStream jako System.out System.setOut(printStream); // Nyní vše, co je vypsáno na System.out, bude přesměrováno do souboru // Vytvoření JAXB kontextu pro CKonstrKusHlavWsImp a CKonstrKusKompImp třídy JAXBContext context = JAXBContext.newInstance(CKonstrKusHlavWsImp.class, CKonstrKusKompImp.class,SearchResults.class,SearchObject.class); // Vytvoření unmarshalleru Unmarshaller unmarshaller = context.createUnmarshaller(); // Nastavení validace XML (volitelné) unmarshaller.setSchema(null); // null znamená, že se validace neprovádí // Načtení XML ze souboru File xmlFile = new File(urlCesta); JAXBElement<SearchResults> rootElement = unmarshaller.unmarshal(new StreamSource(xmlFile), SearchResults.class); // Získání načtených dat SearchResults searchResults = rootElement.getValue(); List<SearchObject> objects = searchResults.getObjects(); // Vytvoření seznamu CKonstrKusHlavWsImp objektů List<CKonstrKusHlavWsImp> kusHlavImpList = new ArrayList<>(); //JOptionPane.showMessageDialog(null, "CKonstrKusHlavWsImp: zacatek"); // Mapa pro uchování předchozích úrovní Map<Integer, CKonstrKusHlavWsImp> previousLevels = new HashMap<>(); Session s2 = getSessionFactory().getCurrentSession();//udelam novou String autor = o0Session.getLoginName(); // Procházení načtených objektů for (SearchObject searchObject : objects) { List<String> attributes = searchObject.getAttributes(); int level = Integer.parseInt(attributes.get(0)); if (level == 0) { CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(attributes.get(2)); kusHlavImp.setIdCSyst(String.valueOf(level)); kusHlavImp.setVykres(attributes.get(2)); kusHlavImp.setNazev(attributes.get(3)); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { kusHlavImp.setTypPol((short) 0); } kusHlavImpList.add(kusHlavImp); // Přidání CKonstrKusHlavWsImp do mapy předchozích úrovní previousLevels.put(level, kusHlavImp); } else { CKonstrKusHlavWsImp parentHlavImp = previousLevels.get(level - 1); if (parentHlavImp == null) { CKonstrKusHlavWsImp kusHlavImp = new CKonstrKusHlavWsImp(); kusHlavImp.setIdentPol(lastKusKompImp.getIdentPol()); kusHlavImp.setVykres(lastKusKompImp.getIdentPol()); kusHlavImp.setNazev(lastKusKompImp.getNazev()); previousLevels.put(level - 1, kusHlavImp); kusHlavImp.setIdCSyst(String.valueOf(level - 1)); kusHlavImpList.add(kusHlavImp); kusHlavImp.setStatus((short) 200); kusHlavImp.setEdat(new Date()); kusHlavImp.setEname(autor); kusHlavImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusHlavImp.getIdentPol()); if (cPolozka != null){ kusHlavImp.setTypPol(cPolozka.getBs()); } else { kusHlavImp.setTypPol((short) 0); } parentHlavImp = previousLevels.get(level - 1); } if (parentHlavImp != null) { CKonstrKusKompImp kusKompImp = new CKonstrKusKompImp(); kusKompImp.setIdentPol(attributes.get(2)); kusKompImp.setIdCSyst(attributes.get(2)); kusKompImp.setVykres(attributes.get(2)); kusKompImp.setNazev(attributes.get(3)); kusKompImp.setMnoz(new BigDecimal(attributes.get(1))); kusKompImp.setcKonstrKusHlavImp(parentHlavImp); parentHlavImp.getcKonstrKusKompImps().add(kusKompImp); if (lastLevel > level){ previousLevels.remove(level); } kusKompImp.setRevize("00"); CPolozka cPolozka=s2.get(CPolozka.class,kusKompImp.getIdentPol()); if (cPolozka != null){ kusKompImp.setTypPol(cPolozka.getBs()); } else { kusKompImp.setTypPol((short) 0); } kusKompImp.setEdat(new Date()); kusKompImp.setEname(autor); lastKusKompImp=kusKompImp; lastLevel=level; } else{ } } } // Výpis naimportovaných dat for (CKonstrKusHlavWsImp kusHlavImp : kusHlavImpList) { System.out.println("CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); for (CKonstrKusKompImp kusKompImp : kusHlavImp.getcKonstrKusKompImps()) { System.out.println(" CKonstrKusKompImp: identPol=" + kusKompImp.getIdentPol() + ", mnozstvi=" + kusKompImp.getMnoz()); } //JOptionPane.showMessageDialog(null, "CKonstrKusHlavWsImp: identPol=" + kusHlavImp.getIdentPol() + "level "+kusHlavImp.getIdCSyst()); Session s = getSessionFactory().openSession();//udelam novou Transaction tx = s.getTransaction(); tx.begin(); s.save(kusHlavImp); s.update(axz); tx.commit(); KonstrKusImport i = new KonstrKusImport(o0Session); i.transformuj(kusHlavImp); } // Obnovte původní System.out System.setOut(systemOutBackup); // Zavřete souborový výstup printStream.close(); String obsahLogu = new String(Files.readAllBytes(Paths.get(axz.axzHlaseni))); O0logDaoImpl o0logDaoImpl; o0logDaoImpl = new O0logDaoImpl(); o0logDaoImpl.setOrsoftSession(o0Session); Character v='V'; Character g='G'; try { o0logDaoImpl.zapisLog("WINDCHILL axz:"+axz.axzId, obsahLogu, null, null, null, null, null, null, null, v,g); } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } try { if (O0taskDemonUtil.getOrsoftSessionRun() != null) { OxSpustDavTaskRun.zapisVysledek(obsahLogu); } } catch (Exception e){ //JOptionPane.showMessageDialog(null, e.getMessage()); System.out.println(" vyjimka " + e.getMessage()); } } catch (JAXBException e) { e.printStackTrace(); } } @XmlRootElement(name = "SearchResults") @XmlAccessorType(XmlAccessType.FIELD) public class SearchResults { @XmlElement(name = "Object") private List<SearchObject> objects; // Gettery a settery pro objects public List<SearchObject> getObjects() { return objects; } public void setObjects(List<SearchObject> objects) { this.objects = objects; } } @XmlAccessorType(XmlAccessType.FIELD) public class SearchObject { @XmlElement(name = "Attribute") private List<String> attributes; // Gettery a settery pro attributes public List<String> getAttributes() { return attributes; } public void setAttributes(List<String> attributes) { this.attributes = attributes; } }