📄 daftranscriptionstore.java
字号:
Element locElement = dafFactory.newLocale(l); annotDocument.appendChild(locElement); } if (this.fileToWriteXMLinto != null) { // This piece of code will be used for SaveAs.... // But: where is the mediafile going? System.out.println(fileToWriteXMLinto.getAbsolutePath() + " <----XML output SAVE AS!\n"); PrintWriter printWriter1 = addPrintln(this.fileToWriteXMLinto); if (printWriter1 == null) { String txt = "Sorry: unable to save this file."; JOptionPane.showMessageDialog(null, txt, txt, JOptionPane.ERROR_MESSAGE); } else { printWriter1.println(dafFactory.getDocumentElement()); } } else { // store XML in the file it came from System.out.println(attisTr.getPathName() + " <----XML output!\n"); try { // test for errors if (("" + dafFactory.getDocumentElement()).length() == 0) { String txt = "Sorry: unable to save this file (zero length)."; JOptionPane.showMessageDialog(null, txt, txt, JOptionPane.ERROR_MESSAGE); return; } String filecontentToBeWritten = "" + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE ANNOTATION_DOCUMENT>" + dafFactory.getDocumentElement(); IoUtil.writeEncodedFile("UTF-8", attisTr.getPathName(), dafFactory.getDocumentElement()); JOptionPane.showMessageDialog(null, "Your file has been written to " + attisTr.getPathName()); } catch (Exception eee) { String txt = "Sorry: unable to save this file. (" + eee.getMessage() + ")"; JOptionPane.showMessageDialog(null, txt, txt, JOptionPane.ERROR_MESSAGE); } } } /** * DOCUMENT ME! * * @param theTranscription DOCUMENT ME! */ public void loadTranscription(Transcription theTranscription) { // System.out.println("DAFTranscriptionStore.loadTranscription called"); // ASSUME THAT theTranscription IS A DobesTranscription TranscriptionImpl attisTr = (TranscriptionImpl) theTranscription; // set media transcription's media file String mediaFileName = DAFParser.Instance().getMediaFile(attisTr.getPathName()); //debug System.out.println("mediaFileName == " + mediaFileName); /* author: Markus problem: if the String starts with "file:", then it cannot be used later. solution (not done): find the place where "file:" is created solution (not done): find the place where "file:" creates a problem. workaround: remove "file:" */ if (mediaFileName.startsWith("file:")) { mediaFileName = mediaFileName.substring(5); } attisTr.setMainMediaFile(mediaFileName); // set author String author = DAFParser.Instance().getAuthor(attisTr.getPathName()); if (attisTr.getAuthor().equals("")) { attisTr.setAuthor(author); } // make linguistic types available in transcription Vector linguisticTypes = DAFParser.Instance().getLinguisticTypes(attisTr.getPathName()); attisTr.setLinguisticTypes(linguisticTypes); TimeOrder timeOrder = attisTr.getTimeOrder(); // populate TimeOrder with TimeSlots Vector order = DAFParser.Instance().getTimeOrder(attisTr.getPathName()); Hashtable slots = DAFParser.Instance().getTimeSlots(attisTr.getPathName()); Hashtable timeSlothash = new Hashtable(); // temporarily stores map from id to TimeSlot object Iterator orderedIter = order.iterator(); while (orderedIter.hasNext()) { TimeSlot ts = null; String key = (String) orderedIter.next(); long time = Long.parseLong((String) slots.get(key)); if (time != TimeSlot.TIME_UNALIGNED) { ts = new TimeSlotImpl(time, timeOrder); } else { ts = new TimeSlotImpl(timeOrder); } timeOrder.insertTimeSlot(ts); timeSlothash.put(key, ts); } Hashtable parentHash = new Hashtable(); if (!attisTr.isLoaded()) { Iterator iter = DAFParser.Instance() .getTierNames(attisTr.getPathName()) .iterator(); while (iter.hasNext()) { String tierName = (String) iter.next(); TierImpl tier = new TierImpl(null, tierName, null, attisTr, null); // set tier's metadata String participant = DAFParser.Instance().getParticipantOf(tierName, attisTr.getPathName()); LinguisticType linguisticType = DAFParser.Instance() .getLinguisticTypeOf(tierName, attisTr.getPathName()); Locale defaultLanguage = DAFParser.Instance() .getDefaultLanguageOf(tierName, attisTr.getPathName()); tier.setMetadata("PARTICIPANT", participant); tier.setLinguisticType(linguisticType); tier.setMetadata("DEFAULT_LOCALE", defaultLanguage); // potentially, set tier's parent String parentId = DAFParser.Instance().getParentNameOf(tierName, attisTr.getPathName()); if (parentId != null) { // store tier-parent_id pair until all Tiers instantiated parentHash.put(tier, parentId); } attisTr.addTier(tier); } } // all Tiers are created. Now set all parent tiers Iterator parentIter = parentHash.keySet().iterator(); while (parentIter.hasNext()) { TierImpl t = (TierImpl) parentIter.next(); t.setParentTier(attisTr.getTierWithId((String) parentHash.get(t))); } attisTr.setLoaded(true); // else endless recursion !!!!! Vector tiers = attisTr.getTiers(); // create Annotations. Algorithm: // 1. loop over annotationRecords Vector. Instantiate right Annotations. Store // references to annotations in intermediate data structures // 2. loop over intermediate structure. Realize references to Annotations by object // references, iso using annotation_id's Hashtable idToAnnotation = new Hashtable(); Hashtable references = new Hashtable(); Hashtable referenceChains = new Hashtable(); // HB, 2-1-02: temporarily store annotations, before adding them to tiers. // Reason: object reference have to be in place to add annotations in correct order. Hashtable tempAnnotationsForTiers = new Hashtable(); // create Annotations, either AlignableAnnotations or RefAnnotations Iterator tierIter = tiers.iterator(); while (tierIter.hasNext()) { Tier tier = (Tier) tierIter.next(); Vector annotationRecords = DAFParser.Instance().getAnnotationsOf(tier.getName(), attisTr.getPathName()); // HB, 2-1-02 Vector tempAnnotations = new Vector(); Iterator it1 = annotationRecords.iterator(); while (it1.hasNext()) { Annotation annotation = null; Vector annotationRecord = (Vector) it1.next(); // annotationRecord has the following format. Either: // id, "alignable", time_slot_id1, time_slot_id2, value, or // id, "reference", annotation_ref_id, previous_annotation, value Iterator it2 = annotationRecord.iterator(); int index = 0; String id = null; String annotType = null; String timeSlotId1 = null; String timeSlotId2 = null; String annotRefId = null; String annotValue = null; String prevRefId = null; while (it2.hasNext()) { if (index == 0) { // first element annotation id id = (String) it2.next(); } else if (index == 1) { // second flag indicating type of annotation annotType = (String) it2.next(); } else if (index == 2) { if (annotType.equals("alignable")) { timeSlotId1 = (String) it2.next(); } else if (annotType.equals("reference")) { annotRefId = (String) it2.next(); } } else if (index == 3) { if (annotType.equals("alignable")) { timeSlotId2 = (String) it2.next(); } else if (annotType.equals("reference")) { prevRefId = (String) it2.next(); } } else if (index == 4) { if (annotType.equals("alignable")) { annotValue = (String) it2.next(); } else if (annotType.equals("reference")) { annotValue = (String) it2.next(); } } index++; } if (annotType.equals("alignable")) { annotation = new AlignableAnnotation((TimeSlot) timeSlothash.get( timeSlotId1), (TimeSlot) timeSlothash.get(timeSlotId2), tier); } else if (annotType.equals("reference")) { annotation = new RefAnnotation(null, tier); references.put(id, annotRefId); if (!prevRefId.equals("")) { referenceChains.put(id, prevRefId); } } if (annotValue != null) { annotation.setValue(annotValue); } idToAnnotation.put(id, annotation); // tier.addAnnotation(annotation); // HB, 2-1-02 tempAnnotations.add(annotation); } // end of loop over annotation records // HB, 2-1-02 tempAnnotationsForTiers.put(tier, tempAnnotations); } // end of loop over tierIter // realize object references Iterator refIter = references.keySet().iterator(); while (refIter.hasNext()) { String key = (String) refIter.next(); Annotation referedAnnotation = (Annotation) idToAnnotation.get(references.get( key)); RefAnnotation refAnnotation = (RefAnnotation) idToAnnotation.get(key); refAnnotation.addReference(referedAnnotation); } // realize reference chains (== within tiers) Iterator rIter = referenceChains.keySet().iterator(); while (rIter.hasNext()) { String key = (String) rIter.next(); RefAnnotation previous = (RefAnnotation) idToAnnotation.get(referenceChains.get( key)); RefAnnotation a = (RefAnnotation) idToAnnotation.get(key); if (previous != null) { previous.setNext(a); } } // HB, 2-1-01: with object references in place, add annotations to the correct tiers. // This is now done in the correct order (RefAnnotation.compareTo delegates comparison // to it's parent annotation. Iterator tIter = tempAnnotationsForTiers.keySet().iterator(); while (tIter.hasNext()) { TierImpl t = (TierImpl) tIter.next(); Vector annots = (Vector) tempAnnotationsForTiers.get(t); Iterator aIter = annots.iterator(); while (aIter.hasNext()) { // HB, 14 aug 02, changed from addAnnotation t.insertAnnotation((Annotation) aIter.next()); } } // HB, 4-7-02: with all annotations on the proper tiers, register implicit // parent-child relations between alignable annotations explicitly Iterator tierIter2 = tiers.iterator(); while (tierIter2.hasNext()) { TierImpl t = (TierImpl) tierIter2.next(); if (t.isTimeAlignable() && t.hasParentTier()) { Iterator alannIter = t.getAnnotations().iterator(); while (alannIter.hasNext()) { Annotation a = (Annotation) alannIter.next(); if (a instanceof AlignableAnnotation) { ((AlignableAnnotation) a).registerWithParent(); } } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -