View Javadoc

1   /*
2    * Copyright James Leigh (c) 2007.
3    *
4    * Licensed under the Aduna BSD-style license.
5    */
6   package org.openrdf.repository.loader;
7   
8   import info.aduna.platform.Platform;
9   import info.aduna.platform.PlatformFactory;
10  
11  import java.io.File;
12  import java.net.URL;
13  
14  import org.openrdf.repository.Repository;
15  import org.openrdf.repository.RepositoryException;
16  import org.openrdf.repository.config.RepositoryConfig;
17  import org.openrdf.repository.config.RepositoryConfigException;
18  import org.openrdf.repository.config.RepositoryConfigUtil;
19  import org.openrdf.repository.manager.LocalRepositoryManager;
20  import org.openrdf.repository.manager.RemoteRepositoryManager;
21  import org.openrdf.repository.manager.RepositoryManager;
22  import org.openrdf.repository.sail.config.SailRepositoryConfig;
23  import org.openrdf.sail.memory.config.MemoryStoreConfig;
24  
25  /**
26   * Provides a facade factory class to create repositories from sesame
27   * configurations.
28   * 
29   * @author James Leigh
30   */
31  public class LoaderRepositoryFactory {
32  	private File baseDir;
33  	private URL server;
34  
35  	public LoaderRepositoryFactory(File baseDir) {
36  		assert baseDir != null;
37  		this.baseDir = baseDir;
38  	}
39  
40  	public LoaderRepositoryFactory(String appId) {
41  		assert appId != null;
42  		Platform platform = PlatformFactory.getPlatform();
43  		File baseDir = platform.getApplicationDataDir(appId);
44  		this.baseDir = baseDir;
45  	}
46  
47  	public LoaderRepositoryFactory(URL server) {
48  		assert server != null;
49  		this.server = server;
50  	}
51  
52  	public File getBaseDir() {
53  		return baseDir;
54  	}
55  
56  	public URL getServer() {
57  		return server;
58  	}
59  
60  	public LoaderRepository createRepository(String id)
61  			throws RepositoryConfigException, RepositoryException {
62  		synchronized (LoaderRepository.class) {
63  			RepositoryManager manager = createManager();
64  			manager.initialize();
65  			Repository repository = manager.getRepository(id);
66  			if (repository == null) {
67  				MemoryStoreConfig memConfig = new MemoryStoreConfig();
68  				memConfig.setPersist(true);
69  				SailRepositoryConfig sailConfig;
70  				sailConfig = new SailRepositoryConfig(memConfig);
71  				RepositoryConfig config = new RepositoryConfig(id, sailConfig);
72  				Repository system = manager.getSystemRepository();
73  				RepositoryConfigUtil.updateRepositoryConfigs(system, config);
74  				repository = manager.getRepository(id);
75  			}
76  			manager.getSystemRepository().shutDown();
77  			return new LoaderRepository(repository);
78  		}
79  	}
80  
81  	private RepositoryManager createManager() {
82  		if (server == null)
83  			return new LocalRepositoryManager(baseDir);
84  		return new RemoteRepositoryManager(server.toExternalForm());
85  	}
86  }