package com.openkm.test;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
import javax.jcr.ItemExistsException;
import javax.jcr.LoginException;
import javax.jcr.NamespaceException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Workspace;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.version.VersionException;
import javax.naming.NamingException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.config.RepositoryConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DummyEncoding {
private static Logger log = LoggerFactory.getLogger(DummyEncoding.class);
private static String repHomeDir = "repotest2";
private static Session systemSession = null;
private static Repository repository = null;
private static String nodoPruebaName = "nodoPrueba γλώσσα ñañeñó";
public static void main(String[] args) throws NamingException,
RepositoryException, IOException {
write();
read();
}
/**
* Write repository data
*/
private static void write() throws NamespaceException,
UnsupportedRepositoryOperationException, AccessDeniedException,
ItemExistsException, PathNotFoundException,
NoSuchNodeTypeException, LockException, VersionException,
ConstraintViolationException, InvalidItemStateException,
RepositoryException, NamingException, UnsupportedEncodingException {
log.info("*** DESTROY REPOSITORY ***");
removeRepository();
log.info("*** CREATE REPOSITORY ***");
createRepository();
log.info("*** USER LOGIN ***");
Session userSession = login("paco", "pepe");
log.info("*** GET MY ROOT NODE ***");
Node rootNode = userSession.getRootNode();
Node myRoot = rootNode.getNode("my:root");
log.info("*** ADD A TEST NODE ***");
Node nodoPrueba = myRoot.addNode(nodoPruebaName);
nodoPrueba.setProperty("nombre", nodoPruebaName);
myRoot.save();
log.info("*** ADD A DOCUMENT NODE ***");
Node fileNode = myRoot.addNode("ñañó", "nt:file");
Node contentNode = fileNode.addNode("jcr:content", "nt:resource");
contentNode.setProperty("jcr:data", new ByteArrayInputStream(nodoPruebaName.getBytes("UTF-8")));
contentNode.setProperty("jcr:mimeType", "text/plain");
contentNode.setProperty("jcr:encoding", "UTF-8");
contentNode.setProperty("jcr:lastModified", Calendar.getInstance());
myRoot.save();
log.info("*** SAY BYE ***");
userSession.logout();
getSystemSession().logout();
}
/**
* Read repository data
*/
private static void read() throws LoginException, NoSuchWorkspaceException,
NamingException, RepositoryException, IOException {
log.info("*** USER LOGIN ***");
Session userSession = login("paco", "pepe");
log.info("*** GET MY ROOT NODE ***");
Node rootNode = userSession.getRootNode();
Node myRoot = rootNode.getNode("my:root");
log.info("*** VIEW TEST NODE PROPERTIES ***");
Node nodoPrueba = myRoot.getNode(nodoPruebaName);
log.info("** NOMBRE: "+nodoPrueba.getProperty("nombre").getString());
log.info("*** VIEW DOCUMENT NODE PROPERTIES ***");
Node fileNode = myRoot.getNode("ñañó");
Node contentNode = fileNode.getNode("jcr:content");
InputStream is = contentNode.getProperty("jcr:data").getStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
log.info("** DATA: "+new String(IOUtils.toByteArray(isr)));
isr.close();
is.close();
log.info("*** SAY BYE ***");
userSession.logout();
getSystemSession().logout();
}
/**
*
*/
private static void removeRepository() {
try {
FileUtils.deleteDirectory(new File(repHomeDir));
} catch (IOException e) {
System.err.println("No previous repo");
}
}
/**
* @return
* @throws NamingException
* @throws RepositoryException
* @throws LoginException
* @throws NoSuchWorkspaceException
*/
public static Session login(String user, String pass)
throws NamingException, RepositoryException, LoginException,
NoSuchWorkspaceException {
Repository repository = getRepository();
Session session = repository.login(new SimpleCredentials(user, pass
.toCharArray()), null);
log.debug("Session: " + session);
return session;
}
/**
* @return
* @throws RepositoryException
*/
public static Repository getRepository() throws RepositoryException {
if (repository == null) {
// Repository config
String repositoryConfig = "repository2.xml";
String repositoryHome = "repotest2";
RepositoryConfig config = RepositoryConfig.create(repositoryConfig,
repositoryHome);
repository = RepositoryImpl.create(config);
log.debug("*** System repository created " + repository);
}
return repository;
}
/**
* @return
* @throws LoginException
* @throws NoSuchWorkspaceException
* @throws RepositoryException
*/
public static Session getSystemSession() throws LoginException,
NoSuchWorkspaceException, RepositoryException {
if (systemSession == null) {
// System User Session
systemSession = repository.login(new SimpleCredentials("system", ""
.toCharArray()), null);
log.debug("*** System user created " + systemSession.getUserID());
}
return systemSession;
}
/**
* @param session
* @return
* @throws NamespaceException
* @throws UnsupportedRepositoryOperationException
* @throws AccessDeniedException
* @throws RepositoryException
* @throws ItemExistsException
* @throws PathNotFoundException
* @throws NoSuchNodeTypeException
* @throws LockException
* @throws VersionException
* @throws ConstraintViolationException
* @throws InvalidItemStateException
*/
public static Node createRepository() throws NamespaceException,
UnsupportedRepositoryOperationException, AccessDeniedException,
RepositoryException, ItemExistsException, PathNotFoundException,
NoSuchNodeTypeException, LockException, VersionException,
ConstraintViolationException, InvalidItemStateException {
// Initialize repository
getRepository();
Session systemSession = getSystemSession();
// Namespace registration
Workspace ws = systemSession.getWorkspace();
ws.getNamespaceRegistry().registerNamespace("my", "http://www.guia-ubuntu.org/1.0");
// Node creation
Node root = systemSession.getRootNode();
Node okmRoot = root.addNode("my:root");
okmRoot.addMixin("mix:referenceable");
systemSession.save();
log.info("****** Repository created *******");
return okmRoot;
}
}