001/**
002 * Copyright (C) 2010-2015 The Roslin Institute <contact andy.law@roslin.ed.ac.uk>
003 *
004 * This file is part of JEnsembl: a Java API to Ensembl data sources developed by the
005 * Bioinformatics Group at The Roslin Institute, The Royal (Dick) School of
006 * Veterinary Studies, University of Edinburgh.
007 *
008 * Project hosted at: http://jensembl.sourceforge.net
009 *
010 * This is free software: you can redistribute it and/or modify
011 * it under the terms of the GNU General Public License (version 3) as published by
012 * the Free Software Foundation.
013 *
014 * This software is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 *
019 * You should have received a copy of the GNU General Public License
020 * in this software distribution. If not, see: http://opensource.org/licenses/gpl-3.0.html
021 */
022package uk.ac.roslin.ensembl.demo;
023
024import java.io.IOException;
025import java.nio.charset.Charset;
026import java.nio.file.Files;
027import java.nio.file.Paths;
028import java.util.Arrays;
029import java.util.Date;
030import java.util.List;
031import static org.junit.Assert.assertNotNull;
032import static org.junit.Assert.assertNull;
033import static org.junit.Assert.assertSame;
034import static org.junit.Assert.assertTrue;
035import static org.junit.Assert.fail;
036import uk.ac.roslin.ensembl.config.DBConnection;
037import uk.ac.roslin.ensembl.config.EnsemblDBType;
038import uk.ac.roslin.ensembl.config.SchemaVersion;
039import uk.ac.roslin.ensembl.dao.database.DBCollection;
040import uk.ac.roslin.ensembl.dao.database.DBDatabase;
041import uk.ac.roslin.ensembl.dao.database.DBRegistry;
042import uk.ac.roslin.ensembl.exception.ConfigurationException;
043import uk.ac.roslin.ensembl.exception.DAOException;
044import uk.ac.roslin.ensembl.exception.NonUniqueException;
045
046
047public class RegistryFactory {
048    
049    public RegistryFactory() {};
050    
051    public  static void main(String[] args) throws Exception { 
052        RegistryFactory fact = new RegistryFactory();
053        fact.testSchemaVersion();
054        fact.testEnsembl();
055        fact.testGenomes();
056        fact.testBacteria();
057    }
058    
059    
060        
061    public void testSchemaVersion() throws ConfigurationException {
062        
063             SchemaVersion s = new SchemaVersion();
064            
065             System.out.println("API CONFIGURATION: Current declared Ensembl Version: "+s.getCurrentEnsemblVersion());
066             System.out.println("API CONFIGURATION: Current declared EnsemblGenomes Version: "+s.getCurrentGenomesVersion());
067             System.out.println("API CONFIGURATION: List of Registered Ensembl Schema Versions: "+Arrays.toString(s.getRegisteredSchemas()));
068             System.out.println("API CONFIGURATION: List of Registered EnsemblGenomes Release Versions: "+Arrays.toString(s.getKnownGenomesReleases()));
069
070    }
071    
072    public void testEnsembl() throws ConfigurationException, DAOException, NonUniqueException, IOException {
073
074            SchemaVersion versionProps = new SchemaVersion();            
075            assertTrue(Integer.parseInt(versionProps.getCurrentGenomesVersion())>=21);
076            assertTrue(Integer.parseInt(versionProps.getCurrentEnsemblVersion())>=74);            
077                        
078            DBRegistry reg = DBRegistry.createEmptyRegistry();
079            assertNotNull(reg);
080            System.out.println(reg.getVersionReport());
081            System.out.println(reg.getBriefRegistryReport());
082            List<String> lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
083            for (String line:lines) {System.out.println(line);}
084 
085            reg=null;   
086            
087            reg = DBRegistry.createUninitializedRegistryForDataSource(DBConnection.DataSource.ENSEMBLDB);
088            assertNotNull(reg);
089            System.out.println(reg.getVersionReport());
090            System.out.println(reg.getBriefRegistryReport());
091            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
092            for (String line:lines) {System.out.println(line);}
093
094
095            // slow....
096            reg = DBRegistry.createRegistryForDataSource(DBConnection.DataSource.ENSEMBLDB);
097            assertNotNull(reg);
098            System.out.println(reg.getVersionReport());
099            System.out.println(reg.getBriefRegistryReport());
100            // slow....
101            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
102            for (String line:lines) {System.out.println(line);}
103            reg = null;
104            
105            reg = DBRegistry.createRegistryForDataSourceCurrentRelease(DBConnection.DataSource.ENSEMBLDB);
106            assertNotNull(reg);
107            System.out.println(reg.getVersionReport());
108            System.out.println(reg.getBriefRegistryReport());
109            // slow....
110            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
111            for (String line:lines) {System.out.println(line);}
112
113            reg = null;
114            try {
115                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLDB, null);
116                fail();
117            } catch (ConfigurationException configurationException) {
118            
119            } 
120            reg = null;
121            try {
122                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLDB, 40);
123                fail();
124            } catch (ConfigurationException configurationException) {
125            
126            } 
127            reg = null;
128            try {
129                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLDB, 100);
130                fail();
131            } catch (ConfigurationException configurationException) {
132            
133            } 
134            reg = null;
135            Date start= new Date();
136            reg =  DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLDB, 72);
137            StringBuilder sb= reg.getVersionReport();
138            Date stop= new Date();
139            System.out.println(sb.toString());
140            System.out.println("parsing took "+ (stop.getTime()-start.getTime()) + " msex");
141            
142            DBDatabase database1 = reg.getDatabase("human");
143            assertSame(database1,reg.getDatabase("human", null));
144            assertSame(database1,reg.getDatabase("human", "72"));
145            assertNull(reg.getDatabase("human", "70"));
146            assertNull(reg.getDatabase("human", "74"));
147         
148            assertSame(database1,reg.getDatabase("human", null, null));
149            assertSame(database1,reg.getDatabase("human", null, "72"));
150            assertNull(reg.getDatabase("human", null, "70"));
151            assertNull(reg.getDatabase("human", null, "74"));
152
153            assertSame(database1,reg.getDatabase("human", EnsemblDBType.core , null));
154            assertSame(database1,reg.getDatabase("human", EnsemblDBType.core , "72"));
155            assertNull(reg.getDatabase("human", EnsemblDBType.core , "70"));
156            assertNull(reg.getDatabase("human", EnsemblDBType.core , "74"));
157            
158            assertNull(reg.getDatabase("human", EnsemblDBType.collection_core , null));
159            assertNull(reg.getDatabase("human", EnsemblDBType.collection_core , "70"));
160            assertNull(reg.getDatabase("human", EnsemblDBType.collection_core , "72"));
161            assertNull(reg.getDatabase("human", EnsemblDBType.collection_core , "74"));
162            
163    }    
164    
165    public void testGenomes() throws ConfigurationException, DAOException, NonUniqueException, IOException {
166        
167            DBRegistry reg;           
168            
169            assertNotNull(DBRegistry.createEmptyRegistry());
170            
171            reg=null; 
172            
173            reg = DBRegistry.createUninitializedRegistryForDataSource(DBConnection.DataSource.ENSEMBLGENOMES);
174            assertNotNull(reg);
175            System.out.println(reg.getVersionReport());
176            System.out.println(reg.getBriefRegistryReport());
177            List<String> lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
178            for (String line:lines) {System.out.println(line);}
179            
180            reg = null;
181            
182            // very slow...
183            reg = DBRegistry.createRegistryForDataSource(DBConnection.DataSource.ENSEMBLGENOMES);
184            assertNotNull(reg);
185            System.out.println(reg.getVersionReport());
186            System.out.println(reg.getBriefRegistryReport());
187            // slow
188            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
189            for (String line:lines) {System.out.println(line);}
190            reg = null;
191            
192            try {
193                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLGENOMES, null);
194                fail();
195            } catch (ConfigurationException configurationException) {
196            
197            } 
198            try {
199                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLGENOMES, -1);
200                fail();
201            } catch (ConfigurationException configurationException) {
202            
203            } 
204            try {
205                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLGENOMES, 100);
206                fail();
207            } catch (ConfigurationException configurationException) {
208            
209            }         
210
211            Date start= new Date();   
212            
213            reg =  DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLGENOMES, 20);
214            StringBuilder sb= reg.getVersionReport();
215            Date stop= new Date();
216            System.out.println(sb.toString());
217            System.out.println("parsing took "+ (stop.getTime()-start.getTime()) + " msex");
218            
219            DBDatabase database1 = reg.getDatabase("grape");
220            assertSame(database1,reg.getDatabase("grape", null));
221            assertSame(database1,reg.getDatabase("grape", "20"));
222            assertNull(reg.getDatabase("grape", "19"));
223            assertNull(reg.getDatabase("grape", "21"));
224
225            assertSame(database1,reg.getDatabase("grape", null, null));
226            assertSame(database1,reg.getDatabase("grape", null, "20"));
227            assertNull(reg.getDatabase("grape", null, "19"));
228            assertNull(reg.getDatabase("grape", null, "21"));
229
230            assertSame(database1,reg.getDatabase("grape", EnsemblDBType.core , null));
231            assertSame(database1,reg.getDatabase("grape", EnsemblDBType.core , "20"));
232            assertNull(reg.getDatabase("grape", EnsemblDBType.core , "19"));
233            assertNull(reg.getDatabase("grape", EnsemblDBType.core , "21"));
234            
235            assertNull(reg.getDatabase("grape", EnsemblDBType.collection_core , null));
236            assertNull(reg.getDatabase("grape", EnsemblDBType.collection_core , "19"));
237            assertNull(reg.getDatabase("grape", EnsemblDBType.collection_core , "20"));
238            assertNull(reg.getDatabase("grape", EnsemblDBType.collection_core , "21"));
239            
240    }    
241    
242    public void testBacteria() throws ConfigurationException, DAOException, NonUniqueException, IOException {
243        
244            DBRegistry reg;           
245            
246            assertNotNull(DBRegistry.createEmptyRegistry());
247            
248            reg=null;   
249            reg = DBRegistry.createUninitializedRegistryForDataSource(DBConnection.DataSource.ENSEMBLBACTERIA);
250            assertNotNull(reg);
251            System.out.println(reg.getVersionReport());
252            System.out.println(reg.getBriefRegistryReport());
253            List<String> lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
254            for (String line:lines) {System.out.println(line);}
255            reg = null;
256            
257            
258//            // unacceptably slow
259//            reg = DBRegistry.createRegistryForDataSource(DBConnection.DataSource.ENSEMBLBACTERIA);
260//            assertNotNull(reg);
261//            System.out.println(reg.getVersionReport());
262//            System.out.println(reg.getBriefRegistryReport());
263//            //very slow
264//            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
265//            for (String line:lines) {System.out.println(line);}   
266//            reg=null;
267            
268            
269            reg = DBRegistry.createRegistryForDataSourceCurrentRelease(DBConnection.DataSource.ENSEMBLBACTERIA);
270            assertNotNull(reg);
271            System.out.println(reg.getVersionReport());
272            System.out.println(reg.getBriefRegistryReport());
273            lines = Files.readAllLines(Paths.get(reg.getRegistryReport().getCanonicalPath()), Charset.forName("UTF-8")); 
274            for (String line:lines) {System.out.println(line);}   
275            
276            try {
277                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLBACTERIA, null);
278                fail();
279            } catch (ConfigurationException configurationException) {
280            
281            } 
282            try {
283                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLBACTERIA, -1);
284                fail();
285            } catch (ConfigurationException configurationException) {
286            
287            } 
288            try {
289                reg = DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLBACTERIA, 100);
290                fail();
291            } catch (ConfigurationException configurationException) {
292            
293            }         
294
295            Date start= new Date();   
296            
297            reg =  DBRegistry.createRegistryForDataSourceAtReleaseVersion(DBConnection.DataSource.ENSEMBLBACTERIA, 20);
298            StringBuilder sb= reg.getVersionReport();
299            Date stop= new Date();
300            System.out.println(sb.toString());
301            System.out.println("parsing took "+ (stop.getTime()-start.getTime()) + " msex");
302        
303            DBCollection collection1 = reg.getCollection("bacteria_1",null);
304            assertSame(collection1,reg.getCollection("bacteria_1","20"));
305            assertNull(reg.getCollection("bacteria_1","19"));
306            assertNull(reg.getCollection("bacteria_1","21"));
307            
308    }    
309    
310}