/** * @throws IOException * @throws WrongImportFileException * @throws TypeNotAllowedForParentException * @throws TypeNotAllowedAsChildException * @throws MetadataTypeNotAllowedException * @throws WriteException */ protected void Parsen(BufferedReader reader, Prozess inProzess) throws IOException, WrongImportFileException, TypeNotAllowedForParentException, TypeNotAllowedAsChildException, MetadataTypeNotAllowedException, WriteException { myLogger.debug("ParsenZentralblatt() - Start"); this.myPrefs = inProzess.getRegelsatz().getPreferences(); String prozessID = String.valueOf(inProzess.getId().intValue()); String line; this.Trennzeichen = ":"; boolean istAbsatz = false; boolean istErsterTitel = true; LinkedList<DocStruct> listArtikel = new LinkedList<DocStruct>(); /* * -------------------------------- Vorbereitung der Dokumentenstruktur -------------------------------- */ DigitalDocument dd = new DigitalDocument(); DocStructType dst = this.myPrefs.getDocStrctTypeByName("Periodical"); DocStruct dsPeriodical = dd.createDocStruct(dst); dst = this.myPrefs.getDocStrctTypeByName("PeriodicalVolume"); DocStruct dsPeriodicalVolume = dd.createDocStruct(dst); dsPeriodical.addChild(dsPeriodicalVolume); /* * -------------------------------- alle Zeilen durchlaufen -------------------------------- */ while ((line = reader.readLine()) != null) { // myLogger.debug(line); /* * -------------------------------- wenn die Zeile leer ist, ist es das Ende eines Absatzes -------------------------------- */ if (line.length() == 0) { istAbsatz = false; /* wenn die Zeile nicht leer ist, den Inhalt prüfen */ } else { /* prüfen ob der String korrekte xml-Zeichen enthält */ String xmlTauglich = xmlTauglichkeitPruefen(line); if (xmlTauglich.length() > 0) { throw new WrongImportFileException( "Parsingfehler (nicht druckbares Zeichen) der Importdatei in der Zeile <br/>" + xmlTauglich); } /* wenn es gerade ein neuer Absatz ist, diesen als neuen Artikel in die Liste übernehmen */ if (!istAbsatz) { DocStructType dstLocal = this.myPrefs.getDocStrctTypeByName("Article"); DocStruct ds = dd.createDocStruct(dstLocal); listArtikel.add(ds); // myLogger.debug("--------------- neuer Artikel ----------------"); istAbsatz = true; istErsterTitel = true; } /* Position des Trennzeichens ermitteln */ int posTrennzeichen = line.indexOf(this.Trennzeichen); /* wenn kein Trennzeichen vorhanden, Parsingfehler */ if (posTrennzeichen == -1) { myLogger.error( "Import() - Parsingfehler (kein Doppelpunkt) der Importdatei in der Zeile <br/>" + HtmlTagsMaskieren(line)); throw new WrongImportFileException( "Parsingfehler (kein Doppelpunkt) der Importdatei in der Zeile <br/>" + HtmlTagsMaskieren(line)); } else { String myLeft = line.substring(0, posTrennzeichen).trim(); String myRight = line.substring(posTrennzeichen + 1, line.length()).trim(); ParsenArtikel(listArtikel.getLast(), myLeft, myRight, istErsterTitel); /* wenn es ein Titel war, ist der nächste nicht mehr der erste Titel */ if (myLeft.equals("TI")) { istErsterTitel = false; } /* wenn es gerade der Zeitschriftenname ist, die Zeitschrift benennen */ if (myLeft.equals("J")) { ParsenAllgemein(dsPeriodical, myLeft, myRight); } /* wenn es gerade eine Jahresangabe ist, dann für den aktuellen Band */ if (myLeft.equals("Y")) { ParsenAllgemein(dsPeriodicalVolume, myLeft, myRight); } /* wenn es gerade eine Jahresangabe ist, dann für den aktuellen Band */ if (myLeft.equals("V")) { ParsenAllgemein(dsPeriodicalVolume, myLeft, myRight); } /* * wenn es gerade die Heftnummer ist, dann jetzt dem richtigen Heft zuordnen und dieses ggf. noch vorher anlegen */ if (myLeft.equals("I")) { DocStruct dsPeriodicalIssue = ParsenHeftzuordnung(dsPeriodicalVolume, myRight, dd); dsPeriodicalIssue.addChild(listArtikel.getLast()); } } } } /* * -------------------------------- physischer Baum (Seiten) -------------------------------- */ dst = this.myPrefs.getDocStrctTypeByName("BoundBook"); DocStruct dsBoundBook = dd.createDocStruct(dst); /* * -------------------------------- jetzt die Gesamtstruktur bauen und in xml schreiben -------------------------------- */ // DigitalDocument dd = new DigitalDocument(); dd.setLogicalDocStruct(dsPeriodical); dd.setPhysicalDocStruct(dsBoundBook); try { Fileformat gdzfile = new XStream(this.myPrefs); gdzfile.setDigitalDocument(dd); /* * -------------------------------- Datei am richtigen Ort speichern -------------------------------- */ gdzfile.write(this.help.getGoobiDataDirectory() + prozessID + File.separator + "meta.xml"); } catch (PreferencesException e) { Helper.setFehlerMeldung("Import aborted: ", e.getMessage()); myLogger.error(e); } myLogger.debug("ParsenZentralblatt() - Ende"); }
/** * ExportDmsTask constructor. Creates a ExportDmsTask. * * @param exportDms ExportDMS configuration * @param process the process to export * @param userHome home directory of the user who started the export */ public ExportDmsTask(ExportDms exportDms, Prozess process, String userHome) { super(process.getTitel()); this.exportDms = exportDms; this.process = process; this.userHome = userHome; }