RepositoryProvider.java
3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.jcr.Repository
* javax.jcr.RepositoryException
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.day.jcr.vault.util;
import com.day.jcr.vault.fs.api.RepositoryAddress;
import com.day.jcr.vault.fs.api.RepositoryFactory;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.imageio.spi.ServiceRegistry;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RepositoryProvider {
protected static Logger log = LoggerFactory.getLogger(RepositoryProvider.class);
private Map<RepositoryAddress, Repository> repos = new HashMap<RepositoryAddress, Repository>();
public Repository getRepository(RepositoryAddress address) throws RepositoryException {
Repository rep = this.repos.get(address);
if (rep == null) {
rep = this.createRepository(address);
this.repos.put(address, rep);
}
return rep;
}
private Repository createRepository(RepositoryAddress address) throws RepositoryException {
Iterator<RepositoryFactory> iter = ServiceRegistry.lookupProviders(RepositoryFactory.class);
HashSet<String> supported = new HashSet<String>();
while (iter.hasNext()) {
Repository wrapped;
RepositoryFactory fac = iter.next();
supported.addAll(fac.getSupportedSchemes());
Repository rep = fac.createRepository(address);
if (rep == null) continue;
if ((Boolean.getBoolean("jcrlog.sysout") || System.getProperty("jcrlog.file") != null) && (wrapped = this.wrapLogger(rep, address)) != null) {
log.info("Enabling JCR Logger.");
rep = wrapped;
}
return rep;
}
StringBuffer msg = new StringBuffer("URL scheme ");
msg.append(address.getURI().getScheme());
msg.append(" not supported. only");
for (String s : supported) {
msg.append(" ").append(s);
}
throw new RepositoryException(msg.toString());
}
private Repository wrapLogger(Repository base, RepositoryAddress address) {
try {
Class clazz = this.getClass().getClassLoader().loadClass("org.apache.jackrabbit.jcrlog.RepositoryLogger");
Properties props = new Properties();
for (Object o : System.getProperties().keySet()) {
String name = o.toString();
if (!name.startsWith("jcrlog.")) continue;
props.put(name.substring("jcrlog.".length()), System.getProperty(name));
}
Constructor c = clazz.getConstructor(Repository.class, Properties.class, String.class);
return (Repository)c.newInstance(new Object[]{base, props, address.toString()});
}
catch (Exception e) {
log.error("Unable to initialize JCR logger: {}", (Object)e.toString());
return null;
}
}
}