Search
Vytvořte kód pro načtení, validaci a zpracování zpráv ve formátu datového standardu DASTA.
Následující části úlohy jsou povinné!
Následující úkoly začněte vypracovávat na cvičení, dopracujte doma a odevzdejte do příští neděle 22. 5. 2016 (bodována bude až kompletní práce):
public class Main { public static void main(String[] args) throws JAXBException { /* * Vytvoreni factory pro jednotlive balicky */ mzcr.cz.ns.dasta.ds4.ds_dasta.ObjectFactory factoryDasta = new mzcr.cz.ns.dasta.ds4.ds_dasta.ObjectFactory(); mzcr.cz.ns.dasta.ds4.ds_type.ObjectFactory factoryDsType = new mzcr.cz.ns.dasta.ds4.ds_type.ObjectFactory(); mzcr.cz.ns.dasta.ds4.ds_ip.ObjectFactory factoryDsIp = new mzcr.cz.ns.dasta.ds4.ds_ip.ObjectFactory(); /** * Zakladni hlavicka */ Dasta dasta = factoryDasta.createDasta(); dasta.setVerzeDs("04.06.08"); dasta.setIdSoubor("MEDICALC_KK11115_2005-12-12T14:46:25"); dasta.setBinPriloha("T"); dasta.setUr("T"); dasta.setTypOdesm("KK"); /** * Informace o programu, ktery generoval zpravu */ ZdrojIsType zdrojIsType = factoryDasta.createZdrojIsType(); zdrojIsType.setKodFirmy("MEDICALC"); zdrojIsType.setKodProg("WMEXP"); zdrojIsType.setVerzeProg("2.2.3.8"); /** * Poskytovatel dat */ PmType pm = factoryDasta.createPmType(); AsType as1 = factoryDasta.createAsType(); as1.setTyp("I"); as1.setVnitrni("999"); pm.setAs(as1); /** * Informace o garantovi dat */ GarantDatType garantDat = factoryDsType.createGarantDatType(); garantDat.setIdGarant("450124145"); garantDat.setOdbornost("801"); garantDat.setValue("MUDr. Jmeno Prijmeni"); /** * Informace o zdravotnickem zarizeni */ IsType is = factoryDasta.createIsType(); is.setIco("12345678"); is.setIcz("44101000"); is.setIcp("44101882"); AsType as2 = factoryDasta.createAsType(); as2.setVnitrni("801"); is.setAs(as2); /** * Pacientska cast */ Ip ip = factoryDsIp.createIp(); ip.setIdPac("7601019998"); ip.setRodcis("7601019998"); ip.setJmeno("Jmeno"); ip.setPrijmeni("Prijmeni"); DatXxType datDn = new DatXxType(); datDn.setFormat("D"); datDn.setValue("1976-01-01"); ip.setDatDn(datDn); ip.setSex(SexType.M); KuZType kuZType = factoryDsIp.createKuZType(); kuZType.setTypku("AMBUL"); kuZType.setFazespec("ZF"); kuZType.setIdku("MEDICALC.FNPL.1234567890"); DatXxType datProv = new DatXxType(); DatXxType datVydani = new DatXxType(); datProv.setValue("2006-12-03T11:00:00"); datVydani.setValue("2006-11-03T11:00:00"); kuZType.setDatProv(datProv); kuZType.setDatVydani(datVydani); /* * Definice pracoviste, kde probehlo osetreni */ PracovisteType pPracoviste = factoryDsIp.createPracovisteType(); pPracoviste.setIcz("44101000"); pPracoviste.setIcp("44101882"); pPracoviste.setOdb("501"); pPracoviste.setNazev("Chirurgická ambulance"); kuZType.setPPracoviste(pPracoviste); TextType textType = factoryDsIp.createTextType(); Ptext pText = factoryDsIp.createPtext(); pText.setSpace("preserve"); pText.setValue("Při fotbale si podvrkl pravé koleno. O koleno s náplní, " + "čéška nebolestivá, bolestivá flexe kolena koleno špatně " + "vyšetřitelné, zásuvka negativní RTG bez traumatu Dg.Distorsio geni l.dx" + "Th provedena punkce kolenního kloubu.vypunktováno 60 ml krve " + "bez tukových kapének, naložena ortesa Dop klidový režim kontrola zde za 2 dny dop"); textType.setPtext(pText); kuZType.setText(textType); //Definice diagnozy DgzType dgzType = factoryDsIp.createDgzType(); Diag diag = new Diag(); diag.setValue("I158"); diag.setPoradi(1); dgzType.setDiag(diag); dgzType.setTypDg("P"); dgzType.setIndOpravSd("N"); List<DgzType> dgzTypes = kuZType.getDgVys(); dgzTypes.add(dgzType); AuzkuType auzkuType = factoryDsIp.createAuzkuType(); auzkuType.setIndikace("I"); auzkuType.setTyppolVz("V"); auzkuType.setDiag("I158"); DatDuType datDu = factoryDsType.createDatDuType(); datDu.setValue("2006-12-03T11:00:00"); datDu.setTyp(LVTZDCUN.A); auzkuType.setDatDu(datDu); List<AuzkuType> auzkuTypes = kuZType.getAuzku(); auzkuTypes.add(auzkuType); /** * Nyni je potreba navazat jednotlive bloky na hlavni tag dasta */ dasta.setZdrojIs(zdrojIsType); // pridani zdroje dasta.setPm(pm); // pridani prijmoveho mista dasta.setGarantDat(garantDat); // pridani garanta /** * Blok ku muze obsahovat vetsi pocet klinickych udalosti * (reprezentovnych kuZType), proto je potreba tento blok definovat v * poli (rep. ArrayListu) */ ArrayList<IsType> isTypes = new ArrayList<IsType>(); Ip.Ku ipKu = factoryDsIp.createIpKu(); // trida Ku je soucasti tridy Ip List<KuZType> kuZTypes = ipKu.getKuZ(); // Je vyvoren seznam klinickych udalosti, ktery je soucasti Ip.Ku kuZTypes.add(kuZType); // prida se vytvorena klinicka udalost ip.setKu(ipKu); // klinicke udalosti se pridaji jako blok k bloku pacienta is.setIp(ip); // krok pridani bloku pacienta do bloku odesilatele isTypes.add(is); // Pro pripad, ze by zprava obsahovale vice udalosti je halvni blok is zarazen do seznamu dasta.setIs(isTypes); // prirazeni cele zpravy do obalu bloku datsa /** * Vytvori xml z hlavniho objektu dasta */ JAXBContext context = JAXBContext.newInstance(Dasta.class); JAXBElement<Dasta> element = factoryDasta.createExpenseReport(dasta); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); /** * Namapuje elementy jednotlivych namespace na nami pozadovane nazvy */ marshaller.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", new NamespacePrefixMapper() { @Override public String[] getPreDeclaredNamespaceUris() { return null; //new String[]{WellKnownNamespace.XML_SCHEMA_INSTANCE}; } @Override public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { if (namespaceUri.equals("urn:cz-mzcr:ns:dasta:ds4:ds_dasta")) { return "ds"; } if (namespaceUri.equals("urn:cz-mzcr:ns:dasta:ds4:ds_ip")) { return "dsip"; } return suggestion; } }); /** * Vypis xml zpavy */ marshaller.marshal(element, System.out); } }
xsd soubor
<?xmlversion="1.0"encoding="utf-8"?> <xs:schemaid="CATALOG"xmlns=""xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:elementname="CATALOG"msdata:IsDataSet="true"msdata:Locale="en-US"> <xs:complexType> <xs:choiceminOccurs="0"maxOccurs="unbounded"> <xs:elementname="CD"> <xs:complexType> <xs:sequence> <xs:elementname="TITLE"type="xs:string"minOccurs="0"/> <xs:elementname="ARTIST"type="xs:string"minOccurs="0"/> <xs:elementname="COUNTRY"type="xs:string"minOccurs="0"/> <xs:elementname="COMPANY"type="xs:string"minOccurs="0"/> <xs:elementname="PRICE"type="xs:string"minOccurs="0"/> <xs:elementname="YEAR"type="xs:string"minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; usingSystem.Xml.Serialization; namespace ConsoleApplication1 { class Program { staticvoid Main(string[] args) { StreamReader str =new StreamReader("cd_catalog.xml"); XmlSerializer xSerializer =new XmlSerializer(typeof(CATALOG)); CATALOG myCdCatalogue =(CATALOG)xSerializer.Deserialize(str); foreach(CATALOG.CDRow cd in myCdCatalogue.CD) { Console.WriteLine(cd.TITLE); Console.WriteLine(cd.ARTIST); Console.WriteLine(cd.COUNTRY); Console.WriteLine(cd.COMPANY); Console.WriteLine(cd.PRICE); Console.WriteLine(cd.YEAR); Console.WriteLine(); } str.Close(); } } }
Důležité: Před odevzdáním si ověřte, zda práce splňuje jednotlivé body zadání PŘESNĚ. Pokud si nejste jisti, co některá část zadání znamená, včas se ptejte. Při nedodržení specifikace neočekávejte body z milosti.
body z milosti
Odevzdává se prostřednictvím UploadSystemu.