CorpusPersistence.java
01 /*
02  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
03  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
04  *
05  *  This file is part of GATE (see http://gate.ac.uk/), and is free
06  *  software, licenced under the GNU Library General Public License,
07  *  Version 2, June 1991 (in the distribution as file licence.html,
08  *  and also available at http://gate.ac.uk/gate/licence.html).
09  *
10  *  Valentin Tablan 26/10/2001
11  *
12  *  $Id: CorpusPersistence.java 18176 2014-07-11 15:45:13Z johann_p $
13  *
14  */
15 
16 package gate.util.persistence;
17 
18 
19 import gate.Corpus;
20 import gate.Document;
21 import gate.creole.ResourceInstantiationException;
22 import gate.persist.PersistenceException;
23 
24 import java.io.Serializable;
25 import java.util.ArrayList;
26 import java.util.Iterator;
27 import java.util.List;
28 
29 
30 public class CorpusPersistence extends LRPersistence {
31   /**
32    * Populates this Persistence with the data that needs to be stored from the
33    * original source object.
34    */
35   @Override
36   public void extractDataFromSource(Object source)throws PersistenceException{
37     //check input
38     if((source instanceof Corpus)){
39       throw new UnsupportedOperationException(
40                 getClass().getName() " can only be used for " +
41                 Corpus.class.getName() +
42                 " objects!\n" + source.getClass().getName() +
43                 " is not a " + Corpus.class.getName());
44     }
45 
46     Corpus corpus = (Corpus)source;
47     super.extractDataFromSource(source);
48     if(dsData == null){
49       //transient corpus; we still need to save the docs
50       docList = new ArrayList<Serializable>();
51       Iterator<Document> docIter = corpus.iterator();
52       while(docIter.hasNext()){
53         docList.add(PersistenceManager.
54                     getPersistentRepresentation(docIter.next()));
55       }
56     }else{
57       //persistent corpus; it takes care of documents by itself
58       //nothing to do :)
59       docList = null;
60     }
61   }
62 
63 
64   /**
65    * Creates a new object from the data contained. This new object is supposed
66    * to be a copy for the original object used as source for data extraction.
67    */
68   @Override
69   public Object createObject()throws PersistenceException,
70                                      ResourceInstantiationException{
71     Corpus corpus = (Corpus)super.createObject();
72     if(docList != null){
73       //transient corpus; we need to recreate the docs
74       if(!docList.isEmpty() && corpus.isEmpty()){
75         Iterator<Serializable> docIter = docList.iterator();
76         while(docIter.hasNext()){
77           corpus.add((DocumentPersistenceManager.getTransientRepresentation(
78                   docIter.next(),containingControllerName,initParamOverrides));
79         }
80 
81       }
82     }
83     return corpus;
84   }
85 
86 
87   protected List<Serializable> docList;
88   static final long serialVersionUID = 6181534551802883626L;
89 }