package ch.x42.terye; import java.util.HashMap; import java.util.Map; import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.NoSuchWorkspaceException; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RepositoryImpl implements Repository { private static final String DEFAULT_WORKSPACE = "default"; private final Logger logger = LoggerFactory.getLogger(getClass()); private Map<String, WorkspaceContext> wsContexts = new HashMap<String, WorkspaceContext>(); private void createWorkspaceContext(String name) throws RepositoryException { WorkspaceContext wsContext = new WorkspaceContext(name); wsContexts.put(name, wsContext); } private WorkspaceContext getWorkspaceContext(String name) { return wsContexts.get(name); } @Override public String[] getDescriptorKeys() { return null; } @Override public boolean isStandardDescriptor(String key) { // TODO Auto-generated method stub return false; } @Override public boolean isSingleValueDescriptor(String key) { // TODO Auto-generated method stub return false; } @Override public Value getDescriptorValue(String key) { // TODO Auto-generated method stub return null; } @Override public Value[] getDescriptorValues(String key) { // TODO Auto-generated method stub return null; } @Override public String getDescriptor(String key) { if (key.equals(Repository.OPTION_OBSERVATION_SUPPORTED)) { return "true"; } return "false"; } @Override public Session login(Credentials credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { if (workspaceName == null) { workspaceName = RepositoryImpl.DEFAULT_WORKSPACE; } WorkspaceContext wsContext; synchronized (wsContexts) { if (!wsContexts.containsKey(workspaceName)) { createWorkspaceContext(workspaceName); } wsContext = getWorkspaceContext(workspaceName); } logger.debug("login({})", workspaceName); return new SessionImpl(this, wsContext); } @Override public Session login(Credentials credentials) throws LoginException, RepositoryException { return login(null, null); } @Override public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { return login(null, null); } @Override public Session login() throws LoginException, RepositoryException { return login(null, null); } public void dispose() throws Exception { synchronized (wsContexts) { for (WorkspaceContext wsContext : wsContexts.values()) { wsContext.getPersistenceManager().dispose(); } } } }