/** * Funktion für das Ermitteln des richtigen Heftes für einen Artikel Liegt das Heft noch nicht in * dem Volume vor, wird es angelegt. Als Rückgabe kommt das Heft als DocStruct * * @param dsPeriodicalVolume * @param myRight * @return DocStruct of periodical * @throws TypeNotAllowedForParentException * @throws MetadataTypeNotAllowedException * @throws TypeNotAllowedAsChildException */ private DocStruct ParsenHeftzuordnung( DocStruct dsPeriodicalVolume, String myRight, DigitalDocument inDigitalDocument) throws TypeNotAllowedForParentException, MetadataTypeNotAllowedException, TypeNotAllowedAsChildException { DocStructType dst; MetadataType mdt = this.myPrefs.getMetadataTypeByName("CurrentNo"); DocStruct dsPeriodicalIssue = null; /* erstmal prüfen, ob das Heft schon existiert */ List<DocStruct> myList = dsPeriodicalVolume.getAllChildrenByTypeAndMetadataType("PeriodicalIssue", "CurrentNo"); if (myList != null && myList.size() != 0) { for (DocStruct dsIntern : myList) { // myLogger.debug(dsIntern.getAllMetadataByType(mdt).getFirst()); Metadata myMD1 = dsIntern.getAllMetadataByType(mdt).get(0); // myLogger.debug("und der Wert ist: " + myMD1.getValue()); if (myMD1.getValue().equals(myRight)) { dsPeriodicalIssue = dsIntern; } } } /* wenn das Heft nicht gefunden werden konnte, jetzt anlegen */ if (dsPeriodicalIssue == null) { dst = this.myPrefs.getDocStrctTypeByName("PeriodicalIssue"); dsPeriodicalIssue = inDigitalDocument.createDocStruct(dst); Metadata myMD = new Metadata(mdt); // myMD.setType(mdt); myMD.setValue(myRight); dsPeriodicalIssue.addMetadata(myMD); dsPeriodicalVolume.addChild(dsPeriodicalIssue); } return dsPeriodicalIssue; }
/** * @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"); }