corpus-services  1.0
RemoveEmptyEvents.java
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 package de.uni_hamburg.corpora.validation;
7 
14 import java.io.IOException;
15 import java.util.Collection;
16 import java.util.List;
17 import org.jdom.Document;
18 import org.jdom.Element;
19 import org.jdom.JDOMException;
20 import org.jdom.xpath.XPath;
21 import org.xml.sax.SAXException;
24 import java.net.URISyntaxException;
25 import java.security.NoSuchAlgorithmException;
26 import javax.xml.parsers.ParserConfigurationException;
27 import javax.xml.transform.TransformerException;
28 import javax.xml.xpath.XPathExpressionException;
29 import org.exmaralda.partitureditor.fsm.FSMException;
30 import org.exmaralda.partitureditor.jexmaralda.JexmaraldaException;
31 
36 public class RemoveEmptyEvents extends Checker implements CorpusFunction {
37 
38  Document doc = null;
39 
40  public RemoveEmptyEvents() {
41 
45  super(true);
46  }
47 
48  @Override
49  public Report function(CorpusData cd, Boolean fix) throws TransformerException, ParserConfigurationException, SAXException, IOException, XPathExpressionException {
50  try {
51  XMLData xml = (XMLData) cd;
52  List al = findAllEmptyEvents(xml);
53  //if there is no autosave, nothing needs to be done
54  if (al.isEmpty()) {
55  report.addCorrect(function, cd, "there are no empty events left");
56  } else {
57  if(fix){
58  for (Object o : al) {
59  Element e = (Element) o;
60  System.out.println(e);
61  //remove it
62  e.getParent().removeContent(e);
63  }
64  //then save file
65  //add a report message
66  xml.setJdom(doc);
67  cd = (CorpusData) xml;
68  cd.updateUnformattedString(TypeConverter.JdomDocument2String(doc));
69  CorpusIO cio = new CorpusIO();
70  cio.write(cd, cd.getURL());
71  report.addFix(function, cd, "removed empty event");
72  }else{
73  report.addCritical(function, cd, "empty events need to be removed");
74  exmaError.addError(function, cd.getURL().getFile(), "", "", false, "empty events need to be removed");
75  }}
76  } catch (JDOMException ex) {
77  report.addException(ex, function, cd, "Jdom Exception");
78  }
79  return report;
80  }
81 
82  @Override
83  public Collection<Class<? extends CorpusData>> getIsUsableFor() {
84  try {
85  Class cl = Class.forName("de.uni_hamburg.corpora.BasicTranscriptionData");
86  IsUsableFor.add(cl);
87  Class cl2 = Class.forName("de.uni_hamburg.corpora.SegmentedTranscriptionData");
88  IsUsableFor.add(cl2);
89 
90  } catch (ClassNotFoundException ex) {
91  report.addException(ex, "unknown class not found error");
92  }
93  return IsUsableFor;
94  }
95 
96  public List findAllEmptyEvents(XMLData xml) throws JDOMException {
97  doc = xml.getJdom();
98  //maybe pretty print too
99  XPath xp1;
100  //needs to be working for exs too
101  xp1 = XPath.newInstance("//event[not(text())]");
102  List allEmptyEvents = xp1.selectNodes(doc);
103  return allEmptyEvents;
104  }
105 
109  @Override
110  public String getDescription() {
111  String description = "This class removes empty events present in exb and"
112  + " exs files. ";
113  return description;
114  }
115 
116  @Override
117  public Report function(Corpus c, Boolean fix) throws SAXException, IOException, ParserConfigurationException, JexmaraldaException, TransformerException, XPathExpressionException, NoSuchAlgorithmException, ClassNotFoundException, FSMException, URISyntaxException, JDOMException {
118  Report stats = new Report();
119  for (CorpusData cdata : c.getBasicTranscriptionData()) {
120  stats.merge(function(cdata, fix));
121  }
122  for (CorpusData sdata : c.getSegmentedTranscriptionData()) {
123  stats.merge(function(sdata, fix));
124  }
125  return stats;
126  }
127 
128 }
void merge(Report sr)
Definition: Report.java:73
void addCritical(String description)
Definition: Report.java:104
void setJdom(Document jdom)
void addCorrect(String statId, String description)
Definition: Report.java:217
static String JdomDocument2String(org.jdom.Document jdomDocument)
void addException(Throwable e, String description)
Definition: Report.java:287
Collection< Class<?extends CorpusData > > getIsUsableFor()
void write(CorpusData cd, URL url)
Definition: CorpusIO.java:66
void addFix(String statId, CorpusData cd, String description)
Definition: Report.java:155