DSPersistence.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: DSPersistence.java 18176 2014-07-11 15:45:13Z johann_p $
13  *
14  */
15 package gate.util.persistence;
16 
17 import java.net.MalformedURLException;
18 import java.util.Iterator;
19 
20 import gate.*;
21 import gate.creole.ResourceInstantiationException;
22 import gate.persist.PersistenceException;
23 import java.net.URL;
24 
25 public class DSPersistence extends AbstractPersistence{
26 
27 
28   /**
29    * Populates this Persistence with the data that needs to be stored from the
30    * original source object.
31    */
32   @Override
33   public void extractDataFromSource(Object source)throws PersistenceException{
34     //check input
35     if((source instanceof DataStore)){
36       throw new UnsupportedOperationException(
37                 getClass().getName() " can only be used for " +
38                 DataStore.class.getName() +
39                 " objects!\n" + source.getClass().getName() +
40                 " is not a " + DataStore.class.getName());
41     }
42 
43     DataStore ds = (DataStore)source;
44     className = ds.getClass().getName();
45     storageUrlString = ds.getStorageUrl();
46     try {
47       storageUrl = PersistenceManager.getPersistentRepresentation(
48         new URL(storageUrlString));
49     catch(MalformedURLException e) {
50       // ignore and just stay with storageUrlString
51     }
52   }
53 
54   /**
55    * Creates a new object from the data contained. This new object is supposed
56    * to be a copy for the original object used as source for data extraction.
57    */
58   @Override
59   public Object createObject()throws PersistenceException,
60                                      ResourceInstantiationException{
61     if(storageUrl != null) {
62       storageUrlString =
63         ((URL)PersistenceManager.getTransientRepresentation(storageUrl))
64           .toExternalForm();
65     }
66 
67     //check if the same datastore is not already open
68     Iterator<DataStore> dsIter = Gate.getDataStoreRegister().iterator();
69     while(dsIter.hasNext()){
70       DataStore aDS = dsIter.next();
71       if(aDS.getStorageUrl().equals(storageUrlString)) {
72         return aDS;
73       }
74     }
75     //if we got this far, then it's a new datastore that needs opening
76     return Factory.openDataStore(className, storageUrlString);
77   }
78  
79   protected String className;
80   protected String storageUrlString;
81   protected Object storageUrl;
82   static final long serialVersionUID = 5952924943977701708L;
83 }