package com.openkm.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Hashtable;
import javax.jcr.ImportUUIDBehavior;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Workspace;
import javax.jcr.version.Version;
import javax.jcr.version.VersionIterator;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.core.jndi.RegistryHelper;
public class ExportImportTest {
public static void main(String[] args) throws Exception {
removeRepository("repo_old");
removeRepository("repo_new");
Session seOld = getSession("repo_old");
Node okmRootOld = createRoot(seOld);
System.out.println("okmRootNew: "+okmRootOld.getUUID());
// Add a new node
Node fileOld = okmRootOld.addNode("prueba", "nt:file");
fileOld.addMixin("mix:referenceable");
fileOld.addMixin("mix:lockable");
fileOld.addMixin("mix:versionable");
Node contentOld = fileOld.addNode("jcr:content", "nt:resource");
contentOld.setProperty("jcr:mimeType", "text/plain");
contentOld.setProperty("jcr:data", "En un lugar de La Mancha...");
contentOld.setProperty("jcr:lastModified", Calendar.getInstance());
okmRootOld.save();
System.out.println("fileOld: "+fileOld.getUUID());
System.out.println("contentOld: "+contentOld.getUUID());
System.out.println("isCheckedOut: "+fileOld.isCheckedOut());
fileOld.checkin();
System.out.println("isCheckedOut: "+fileOld.isCheckedOut());
System.out.println("\n ---- VERSIONS ---- ");
for (VersionIterator vi = fileOld.getVersionHistory().getAllVersions(); vi.hasNext();) {
Version v = vi.nextVersion();
System.out.println("Version Path: "+v.getPath());
System.out.println("Version Name: "+v.getName());
}
System.out.println(" --------------------- \n");
// Export system view
seOld.exportSystemView("/okm:root", new FileOutputStream("okmRootSysView.xml"), false, false);
seOld.exportSystemView("/jcr:system/jcr:versionStorage", new FileOutputStream("versionStorageSysView.xml"), false, false);
// Create new repo and import system view
Session seNew = getSession("repo_new");
seNew.getWorkspace().importXML("/", new FileInputStream("okmRootSysView.xml"), ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
seNew.getWorkspace().importXML("/jcr:system", new FileInputStream("versionStorageSysView.xml"), ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
Node okmRootNew = seNew.getRootNode().getNode("okm:root");
System.out.println("okmRootNew: "+okmRootNew.getUUID());
Node fileNew = okmRootNew.getNode("prueba");
System.out.println("fileNew: "+fileNew.getUUID());
Node contentNew = fileNew.getNode("jcr:content");
System.out.println("contentNew: "+contentNew.getUUID());
System.out.println("isCheckedOut: "+fileNew.isCheckedOut());
System.out.println("\n ---- VERSIONS ---- ");
for (VersionIterator vi = fileNew.getVersionHistory().getAllVersions(); vi.hasNext();) {
Version v = vi.nextVersion();
System.out.println("Version Path: "+v.getPath());
System.out.println("Version Name: "+v.getName());
}
}
/**
*
*/
public static void removeRepository(String repHomeDir) {
// Remove previous repo
try {
FileUtils.deleteDirectory(new File(repHomeDir));
} catch (IOException e) {
System.err.println("No previous repo");
}
}
/**
*
*/
public static Session getSession(String repHomeDir) throws Exception {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
env.put(Context.PROVIDER_URL, "localhost");
InitialContext ctx = new InitialContext(env);
// Repository config
String configFile = "repositoryImpExp.xml";
RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
// Obtain the repository through a JNDI lookup
Repository r = (Repository) ctx.lookup("repo");
// Create a new repository session, after authenticating
Session session = r.login(new SimpleCredentials("paco", "".toCharArray()), null);
System.out.println("Session: "+session);
return session;
}
/**
*
*/
public static Node createRoot(Session session) throws Exception {
// Namespace registration
Workspace ws = session.getWorkspace();
ws.getNamespaceRegistry().registerNamespace("okm", "http://www.pepito.org/1.0");
// Node creation
Node root = session.getRootNode();
Node okmRoot = root.addNode("okm:root", "nt:folder");
okmRoot.addMixin("mix:referenceable");
session.save();
System.out.println("okm:root created.");
return okmRoot;
}
}