📄 daftranscriptionstore.java
字号:
/* * File: DAFTranscriptionStore.java * Project: MPI Linguistic Application * Date: 02 May 2007 * * Copyright (C) 2001-2007 Max Planck Institute for Psycholinguistics * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package mpi.eudico.server.corpora.clomimpl.dobes;import mpi.eudico.server.corpora.clom.Annotation;import mpi.eudico.server.corpora.clom.EncoderInfo;import mpi.eudico.server.corpora.clom.Tier;import mpi.eudico.server.corpora.clom.TimeOrder;import mpi.eudico.server.corpora.clom.TimeSlot;import mpi.eudico.server.corpora.clom.Transcription;import mpi.eudico.server.corpora.clom.TranscriptionStore;import mpi.eudico.server.corpora.clomimpl.abstr.AlignableAnnotation;import mpi.eudico.server.corpora.clomimpl.abstr.RefAnnotation;import mpi.eudico.server.corpora.clomimpl.abstr.TierImpl;import mpi.eudico.server.corpora.clomimpl.abstr.TimeSlotImpl;import mpi.eudico.server.corpora.clomimpl.abstr.TranscriptionImpl;import mpi.eudico.server.corpora.clomimpl.type.LinguisticType;import mpi.eudico.server.util.IoUtil;import org.w3c.dom.Element;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Enumeration;import java.util.Hashtable;import java.util.Iterator;import java.util.Locale;import java.util.Vector;import javax.swing.JOptionPane;/** * DOCUMENT ME! $Id: DAFTranscriptionStore.java,v 1.1.1.1 2004/03/25 16:23:20 * wouthuij Exp $ * * @author $Author: hasloe $ * @version $Revision: 1.11 $ * @version Aug 2005 Identity removed */public class DAFTranscriptionStore implements TranscriptionStore { // we want the XML to be saved to a file /** Holds value of property DOCUMENT ME! */ private final java.io.File fileToWriteXMLinto = null; //currently final (not used) /** * Creates a new DAFTranscriptionStore instance */ public DAFTranscriptionStore() { super(); } // File lacks println: here we add it. // TO DO: put this somewhere in mpi.alt public PrintWriter addPrintln(File f) { try { java.io.FileWriter fileWriter1 = new java.io.FileWriter(f); return new PrintWriter(fileWriter1, true); } catch (IOException ioe) { // return null is all we say. } return null; } /** * DOCUMENT ME! * * @param theTranscription DOCUMENT ME! * @param encoderInfo DOCUMENT ME! * @param tierOrder DOCUMENT ME! * @param pathName DOCUMENT ME! * @param format DOCUMENT ME! */ public void storeTranscription(Transcription theTranscription, EncoderInfo encoderInfo, Vector tierOrder, String pathName, int format) { // added to stay compatible with ACM22. } /** * Writes to original file if this.fileToWriteXMLinto is null * * @param theTranscription MUST NOT BE NULL * @param tierOrder DOCUMENT ME! */ public void storeTranscription(Transcription theTranscription, EncoderInfo encoderInfo, Vector tierOrder, int format) { // System.out.println("DAFTranscriptionStore.storeTranscription called"); // System.out.println("theTranscription == " + theTranscription.getName()); Hashtable tierElements = new Hashtable(); // for temporary storage of created tier Elements Hashtable timeSlotIds = new Hashtable(); // for temporary storage of generated tsIds Hashtable annotationIds = new Hashtable(); // for temporary storage of generated annIds Vector usedLocales = new Vector(); // for storage of used locales TranscriptionImpl attisTr = (TranscriptionImpl) theTranscription; if (attisTr == null) { System.out.println( "[[ASSERTION FAILED]] DAFTranscriptionStore/storeTranscription: theTranscription is null"); } ; if (attisTr.getMediaObject() == null) { System.out.println( "[[ASSERTION FAILED]] DAFTranscriptionStore/storeTranscription: theTranscription.getMediaObject() is null"); } ; DAF dafFactory = null; try { dafFactory = new DAF(); } catch (Exception ex) { ex.printStackTrace(); } // ANNOTATION_DOCUMENT SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy.MM.dd HH:mm z"); String dateString = dateFmt.format(Calendar.getInstance().getTime()); String author = attisTr.getAuthor(); if (author == null) { author = "unspecified"; } String version = "1.0"; // version of DTD/format, not of file. That is handled by 'date' Element annotDocument = dafFactory.newAnnotationDocument(dateString, author, version); dafFactory.appendChild(annotDocument); // HEADER Element header = dafFactory.newHeader(attisTr.getMediaObject() .getMediaURL().toString()); annotDocument.appendChild(header); // TIME_ORDER TimeOrder timeOrder = attisTr.getTimeOrder(); // HB, July 19, 2001: cleanup unused TimeSlots first timeOrder.pruneTimeSlots(); Element timeOrderElement = dafFactory.newTimeOrder(); annotDocument.appendChild(timeOrderElement); int index = 1; Enumeration tsElements = timeOrder.elements(); while (tsElements.hasMoreElements()) { TimeSlot ts = (TimeSlot) tsElements.nextElement(); Element tsElement = null; String tsId = "ts" + index; // store ts with it's id temporarily timeSlotIds.put(ts, tsId); if (ts.getTime() != TimeSlot.TIME_UNALIGNED) { tsElement = dafFactory.newTimeSlot(tsId, ts.getTime()); } else { tsElement = dafFactory.newTimeSlot(tsId); } timeOrderElement.appendChild(tsElement); index++; } // TIERS Vector tiers = attisTr.getTiers(); Vector storeOrder = new Vector(tierOrder); // start with tiers in specified order Iterator tIter = tiers.iterator(); while (tIter.hasNext()) { // add other tiers in document order Tier t = (Tier) tIter.next(); if (!storeOrder.contains(t)) { storeOrder.add(t); } } int annIndex = 1; // used to create annotation id values Iterator tierIter = storeOrder.iterator(); while (tierIter.hasNext()) { TierImpl t = (TierImpl) tierIter.next(); String id = t.getName(); String participant = (String) t.getMetadataValue("PARTICIPANT"); String lingType = t.getLinguisticType().getLinguisticTypeName(); if (lingType == null) { lingType = "not specified"; } Locale lang = (Locale) t.getMetadataValue("DEFAULT_LOCALE"); if (lang == null) { lang = new Locale("not specified", "", ""); } // check is quick solution, TreeSet would do this but compareTo causes ClassCastException if (!usedLocales.contains(lang)) { usedLocales.add(lang); } String parentName = null; if (t.getParentTier() != null) { parentName = t.getParentTier().getName(); } Element tierElement = dafFactory.newTier(id, participant, lingType, lang, parentName); annotDocument.appendChild(tierElement); tierElements.put(t.getName(), tierElement); // store for later use Vector annotations = t.getAnnotations(); Iterator annotIter = annotations.iterator(); while (annotIter.hasNext()) { Annotation ann = (Annotation) annotIter.next(); annotationIds.put(ann, "a" + annIndex); annIndex++; } } // ANNOTATIONS // second pass. Actually creates and adds Annotation Elements Iterator tierIter2 = storeOrder.iterator(); while (tierIter2.hasNext()) { TierImpl t = (TierImpl) tierIter2.next(); Vector annotations = t.getAnnotations(); Iterator annotIter2 = annotations.iterator(); while (annotIter2.hasNext()) { Annotation ann = (Annotation) annotIter2.next(); Element annElement = dafFactory.newAnnotation(); ((Element) tierElements.get(t.getName())).appendChild(annElement); Element annSubElement = null; String annId = (String) annotationIds.get(ann); if (ann instanceof AlignableAnnotation) { String beginTsId = (String) timeSlotIds.get(((AlignableAnnotation) ann).getBegin()); String endTsId = (String) timeSlotIds.get(((AlignableAnnotation) ann).getEnd()); annSubElement = dafFactory.newAlignableAnnotation(annId, beginTsId, endTsId); } else if (ann instanceof RefAnnotation) { String refId = null; Vector refs = ((RefAnnotation) ann).getReferences(); // for the moment, take the first, if it exists if (refs.size() > 0) { refId = (String) annotationIds.get((Annotation) refs.firstElement()); } annSubElement = dafFactory.newRefAnnotation(annId, refId); } annElement.appendChild(annSubElement); // ANNOTATION_VALUE Element valueElement = dafFactory.newAnnotationValue(ann.getValue()); annSubElement.appendChild(valueElement); } } // LINGUISTIC_TYPES Vector lTypes = attisTr.getLinguisticTypes(); if (lTypes != null) { Iterator typeIter = lTypes.iterator(); while (typeIter.hasNext()) { // HB, april 24, 2002: for the moment, just store lt name // String lt = (String) typeIter.next(); LinguisticType lt = (LinguisticType) typeIter.next(); // Element typeElement = dafFactory.newLinguisticType(lt); Element typeElement = dafFactory.newLinguisticType(lt.getLinguisticTypeName()); annotDocument.appendChild(typeElement); } } // LOCALES Iterator locIter = usedLocales.iterator(); while (locIter.hasNext()) { Locale l = (Locale) locIter.next();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -