PRPersistence.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: PRPersistence.java 18176 2014-07-11 15:45:13Z johann_p $
13  *
14  */
15 package gate.util.persistence;
16 
17 import gate.Factory;
18 import gate.FeatureMap;
19 import gate.Gate;
20 import gate.ProcessingResource;
21 import gate.Resource;
22 import gate.creole.Parameter;
23 import gate.creole.ParameterList;
24 import gate.creole.ResourceData;
25 import gate.creole.ResourceInstantiationException;
26 import gate.persist.PersistenceException;
27 
28 import java.util.Iterator;
29 import java.util.List;
30 
31 
32 public class PRPersistence extends ResourcePersistence {
33   /**
34    * Populates this Persistence with the data that needs to be stored from the
35    * original source object.
36    */
37   @Override
38   public void extractDataFromSource(Object source)throws PersistenceException{
39     if((source instanceof ProcessingResource)){
40       throw new UnsupportedOperationException(
41                 getClass().getName() " can only be used for " +
42                 ProcessingResource.class.getName() +
43                 " objects!\n" + source.getClass().getName() +
44                 " is not a " + ProcessingResource.class.getName());
45     }
46 
47     super.extractDataFromSource(source);
48     Resource res = (Resource)source;
49 
50     ResourceData rData = Gate.getCreoleRegister().get(res.getClass().getName());
51     if(rData == nullthrow new PersistenceException(
52                                 "Could not find CREOLE data for " +
53                                 res.getClass().getName());
54 
55     //now get the runtime params
56     ParameterList params = rData.getParameterList();
57     try{
58       //get the values for the init time parameters
59       runtimeParams = Factory.newFeatureMap();
60       //this is a list of lists
61       Iterator<List<Parameter>> parDisjIter = params.getRuntimeParameters().iterator();
62       while(parDisjIter.hasNext()){
63         Iterator<Parameter> parIter = parDisjIter.next().iterator();
64         while(parIter.hasNext()){
65           Parameter parameter = parIter.next();
66           String parName = parameter.getName();
67           Object parValue = res.getParameterValue(parName);
68           ((FeatureMap)runtimeParams).put(parName,parValue);
69         }
70       }
71       runtimeParams = PersistenceManager.
72                       getPersistentRepresentation(runtimeParams);
73     }catch(ResourceInstantiationException rie){
74       throw new PersistenceException(rie);
75     }
76   }
77 
78   /**
79    * Creates a new object from the data contained. This new object is supposed
80    * to be a copy for the original object used as source for data extraction.
81    */
82   @Override
83   public Object createObject()throws PersistenceException,
84                                      ResourceInstantiationException{
85     Object res = super.createObject();
86     //now add the runtime parameters
87     if(runtimeParams != null){
88       runtimeParams = PersistenceManager.
89                       getTransientRepresentation(
90               runtimeParams,containingControllerName,initParamOverrides);
91       ((Resource)res).setParameterValues((FeatureMap)runtimeParams);
92     }
93     return res;
94   }
95 
96   protected Object runtimeParams;
97   static final long serialVersionUID = 2031381604712340552L;
98 }