1
14 package gate.util.persistence;
15
16 import java.util.*;
17
18 import gate.creole.ResourceInstantiationException;
19 import gate.persist.PersistenceException;
20 import gate.util.Err;
21
22
23 public class CollectionPersistence implements Persistence {
24
25
29 public void extractDataFromSource(Object source)throws PersistenceException{
30 if(! (source instanceof Collection)){
31 throw new UnsupportedOperationException(
32 getClass().getName() + " can only be used for " +
33 Collection.class.getName() +
34 " objects!\n" + source.getClass().getName() +
35 " is not a " + Collection.class.getName());
36 }
37 collectionType = source.getClass();
38
39 Collection coll = (Collection)source;
40
41 localList = new ArrayList(coll.size());
43 Iterator elemIter = coll.iterator();
44 while(elemIter.hasNext()){
45 localList.add(PersistenceManager.
46 getPersistentRepresentation(elemIter.next()));
47 }
48 }
49
50
54 public Object createObject()throws PersistenceException,
55 ResourceInstantiationException{
56 Collection result = null;
58 try{
59 result = (Collection)collectionType.newInstance();
60 }catch(Exception e){
61 }
62 if(result == null) result = new ArrayList(localList.size());
63
64 Iterator elemIter = localList.iterator();
66 while(elemIter.hasNext()){
67 try{
68 result.add(PersistenceManager.
69 getTransientRepresentation(elemIter.next()));
70 }catch(PersistenceException pe){
71 PersistenceManager.exceptionOccured = true;
72 pe.printStackTrace(Err.getPrintWriter());
73 }catch(ResourceInstantiationException rie){
74 PersistenceManager.exceptionOccured = true;
75 rie.printStackTrace(Err.getPrintWriter());
76 }
77 }
78
79 return result;
80
81
82 }
83
84
85 protected List localList;
86 protected Class collectionType;
87 static final long serialVersionUID = 7908364068699089834L;
88 }