package org.wyona.yarep.examples;
import org.wyona.yarep.core.Node;
import org.wyona.yarep.core.NodeType;
import org.wyona.yarep.core.Path;
import org.wyona.yarep.core.Repository;
import org.wyona.yarep.core.RepositoryException;
import org.wyona.yarep.core.RepositoryFactory;
import java.io.BufferedReader;
import java.io.File;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import org.apache.log4j.Category;
/**
*
*/
public class HelloWorld {
private static Category log = Category.getInstance(HelloWorld.class);
/**
*
*/
public static void main(String[] args) {
/* NOTE: When removing these comments, then also switch the configuration within src/test/java/yarep.properties
testRepoNewVFSFulltextSearch();
testRepoNewVFSPropertySearch();
if (true) return;
*/
RepositoryFactory repoFactory = getRepositoryFactory();
System.out.println(repoFactory);
Repository repoORM;
Repository repoA;
Repository repoC;
Repository repoB;
Repository repoD;
Repository repoJCR;
Repository repoNewFS;
try {
repoORM = repoFactory.newRepository("example2");
repoA = repoFactory.newRepository("example1");
repoC = repoFactory.newRepository("hugo");
repoJCR = repoFactory.newRepository("jcr");
repoNewFS = repoFactory.newRepository("fs");
//repoNewFS = repoFactory.newRepository("new-vfs");
// Add more repositories to repository factory
repoB = repoFactory.newRepository("vanya", new File("orm-example/repository-config.xml"));
repoD = repoFactory.newRepository("vfs-example", new File("vfs-example/repository.xml"));
} catch (Exception e) {
System.err.println(e);
return;
}
System.out.println(repoFactory);
// Test YarepUtil ...
Path path;
try {
path = new Path("/example2/hello.txt");
org.wyona.yarep.util.RepoPath rp = new org.wyona.yarep.util.YarepUtil().getRepositoryPath(path, repoFactory);
System.out.println("YarepUtil: " + rp.getRepo() + " " + rp.getPath());
path = new Path("/pele/hello/");
rp = new org.wyona.yarep.util.YarepUtil().getRepositoryPath(path, repoFactory);
System.out.println("YarepUtil: " + rp.getRepo() + " " + rp.getPath());
} catch (RepositoryException e) {
System.err.println(e);
return;
}
Path worldPath = new Path("/hello/world.txt");
// Write content to repository
try {
System.out.println("\nWrite content to repository " + repoA.getName() + " (repoA) ...");
Writer writerA = repoA.getWriter(worldPath);
writerA.write("Hello World!\n...");
writerA.close();
repoA.addSymbolicLink(worldPath, new Path("/hello-world-link.txt"));
String jcrNodePathExample = "/profiles/michael-wechner.rdf";
//String jcrNodePathExample = "/";
if (!repoJCR.existsNode(jcrNodePathExample)) {
System.out.println("Node does not exist: " + jcrNodePathExample);
repoJCR.getRootNode().addNode("profiles", NodeType.COLLECTION).addNode("michael-wechner.rdf", NodeType.RESOURCE);
System.out.println("Node has been created: " + jcrNodePathExample);
}
System.out.println("\nUSECASE: Read and Write content (Path: " + jcrNodePathExample + ") from/to repository '" + repoJCR.getName() + " (" + repoJCR.getConfigFile() + ")':");
repoJCR.getNode(jcrNodePathExample).setProperty("my-message", "Hello Hugo!");
System.out.println(repoJCR.getNode(jcrNodePathExample).getProperty("my-message"));
repoJCR.getNode(jcrNodePathExample).setMimeType("text/xml");
Writer writerJCR = repoJCR.getWriter(new Path(jcrNodePathExample));
writerJCR.write("<test>Hello (hello) JCR</test>");
writerJCR.close();
if (repoJCR.existsNode(jcrNodePathExample)) {
Reader readerJCR = repoJCR.getReader(new Path(jcrNodePathExample));
BufferedReader brJCR = new BufferedReader(readerJCR);
System.out.println("Very first line of JCR node content: " + brJCR.readLine());
brJCR.close();
} else {
System.err.println("No such node: " + jcrNodePathExample);
}
String query = "Hello";
System.out.println("\nUSECASE: Search for '" + query + "' within fulltext of repository '" + repoJCR.getName() + " (" + repoJCR.getConfigFile() + ")'");
Node[] result = repoJCR.search(query);
if (result.length == 0) {
System.out.println("Your search \"" + query + "\" did not match any node!");
} else {
System.out.println(result.length + " results have been found:");
}
for (int i = 0; i < result.length ; i++) {
System.out.println("Result " + (i + 1) + ": " + result[i].getPath());
}
System.out.println("\nORM repository: " + repoB.getName() + " (repoB) ...");
System.out.println("\nORM repository: " + repoORM.getName() + " (repoORM) ...");
org.apache.commons.dbcp.BasicDataSource bds = ((org.wyona.yarep.impl.repo.orm.ORMRepositoryImpl) repoORM).getBasicDataSource();
System.out.println("\nORM repository connection url: " + bds.getUrl());
// TODO: See TODO.txt re VFS implementation
/*
System.out.println("\nWrite content to repository " + repoD.getName() + "...");
Writer writerD = repoD.getWriter(new Path("/hello/vfs-example.txt"));
writerD.write("Hello VFS example!\n...");
writerD.close();
*/
} catch (Exception e) {
log.error(e, e);
}
try {
repoJCR.close();
} catch (Exception e) {
System.err.println(e);
}
// DEBUG ...
//if(true) return;
// Read content from repository
System.out.println("\nRead content from repository " + repoA.getName() + " (repoA) ...");
try {
Reader readerA = repoA.getReader(worldPath);
BufferedReader br = new BufferedReader(readerA);
String line = br.readLine();
StringWriter strWriter = new StringWriter();
while (line != null) {
strWriter.write(line + "\n");
//System.out.println(line);
line = br.readLine();
}
System.out.println(strWriter.toString());
strWriter.close();
br.close();
readerA.close();
Path vfsSamplePath = new Path("/hello/vfs-example.txt");
System.out.println("\nRead content from repository " + repoD.getName() + " (repoD, path: " + vfsSamplePath + ") ...");
Reader readerD = repoD.getReader(vfsSamplePath);
br = new BufferedReader(readerD);
System.out.println("Very first line: " + br.readLine());
readerD.close();
// Read directory!
readerD = repoD.getReader(new Path(vfsSamplePath.getParent().toString()));
br = new BufferedReader(readerD);
System.out.println("Very first line: " + br.readLine());
readerD.close();
readerD = repoD.getReader(new Path("/"));
br = new BufferedReader(readerD);
System.out.println("Very first line: " + br.readLine());
readerD.close();
Path pathWithoutUUID = new Path("/no/uid/example.txt");
System.out.println("\nUSECASE: Read content from node without a UID \"" + pathWithoutUUID + "\" from repository \"" + repoA.getName() + " (" + repoA.getID() + ")\" ...");
if (repoA.existsNode(pathWithoutUUID.toString())) {
readerA = repoA.getReader(pathWithoutUUID);
br = new BufferedReader(readerA);
System.out.println("Very first line: " + br.readLine());
readerA.close();
} else {
System.err.println("No such node without UUID: " + pathWithoutUUID);
}
} catch (Exception e) {
System.err.println(e);
}
try {
// List children
Path helloPath = new Path("/hello");
System.out.println("\nUSECASE: List children of path \"" + helloPath + "\" from repository \"" + repoNewFS.getName() + " (" + repoNewFS.getID() + ")\" ...");
//System.out.println("\nUSECASE: List children of path \"" + helloPath + "\" from repository \"" + repoA.getName() + " (" + repoA.getID() + ")\" ...");
Path[] children = repoNewFS.getChildren(helloPath);
//Path[] children = repoA.getChildren(helloPath);
for (int i = 0; i < children.length; i++) {
System.out.println("Child: " + children[i]);
}
//if (true) return;
// Delete collection with deprecated method
System.out.println("\nUSECASE: Try to delete \"" + helloPath + "\" from repository \"" + repoA.getName() + " (" + repoA.getID() + ")\" with deprecated method Repository.delete(Path, boolean) ...");
if (repoA.delete(helloPath, false)) {
System.out.println("Node '" + helloPath + "' has been deleted.");
} else {
System.err.println("Node '" + helloPath + "' could not be deleted!");
}
// Delete resource
System.out.println("\nUSECASE: Try to delete \"" + worldPath + "\" from repository \"" + repoA.getName() + " (" + repoA.getID() + ")\" with deprecated method Repository.delete(Path) ...");
if (repoA.delete(worldPath)) {
System.out.println("Node '" + worldPath + "' has been deleted.");
} else {
System.err.println("Node '" + worldPath + "' could not be deleted!");
}
// Delete collection
System.out.println("\nUSECASE: Try to delete \"" + helloPath + "\" from repository \"" + repoA.getName() + " (" + repoA.getID() + ")\" ...");
Node helloNode = repoA.getNode(helloPath.toString());
try {
helloNode.delete();
} catch(Exception e) {
System.err.println(e);
}
if (!repoA.existsNode(helloPath.toString())) {
System.out.println("Node '" + helloPath + "' has been deleted.");
} else {
System.err.println("Node '" + helloPath + "' could not be deleted!");
}
} catch (Exception e) {
System.err.println(e);
}
try {
String sampleNodePathToIndex = "/another-directory/index.html";
if (!repoNewFS.existsNode(sampleNodePathToIndex)) {
log.warn("Node will be created: " + repoNewFS.getRootNode().addNode("another-directory", NodeType.COLLECTION).addNode("index.html", NodeType.RESOURCE).getPath());
}
Node node = repoNewFS.getNode(sampleNodePathToIndex);
node.setMimeType("application/xhtml+xml");
Writer writer = repoNewFS.getWriter(new Path(sampleNodePathToIndex));
//OutputStream out = repoNewFS.getNode(sampleNodePathToIndex).getOutputStream();
writer.write("Hello Yarep!");
writer.close();
String query = "yarep";
System.out.println("\nUSECASE: Search for \"" + query + "\" within fulltext of repository '" + repoNewFS.getName() + " (" + repoNewFS.getConfigFile() + ")'");
Node[] result = repoNewFS.search(query);
if (result == null || result.length == 0) {
System.out.println("Your search \"" + query + "\" did not match any node!");
} else {
System.out.println(result.length + " results have been found for '" + query + "' within fulltext:");
for (int i = 0; i < result.length ; i++) {
System.out.println("Result " + (i + 1) + ": " + result[i].getPath());
}
}
String property = "title";
node.setProperty(property, "Ingwer");
query = "Ingwer";
System.out.println("\nUSECASE: Search for \"" + query + "\" within properties of repository '" + repoNewFS.getName() + " (" + repoNewFS.getConfigFile() + ")'");
result = repoNewFS.searchProperty("title", query, "/");
if (result == null || result.length == 0) {
System.out.println("Your search \"" + query + "\" did not match any node!");
} else {
System.out.println(result.length + " results have been found for '" + query + "' within property '" + property + "':");
for (int i = 0; i < result.length ; i++) {
System.out.println("Result " + (i + 1) + ": " + result[i].getPath());
}
}
} catch (Exception e) {
System.err.println(e.getMessage());
log.error(e, e);
}
}
/**
*
*/
public static void testRepoNewVFSPropertySearch() {
try {
Repository repo = getRepositoryFactory().newRepository("new-vfs");
String propertyName = "title";
String propertyValue = "Ingwer";
repo.getNode("/hello-world.txt").setProperty(propertyName, propertyValue);
String query = propertyValue;
System.out.println("\nUSECASE: Search for \"" + query + "\" within properties of repository '" + repo.getName() + " (" + repo.getConfigFile() + ")'");
Node[] result = repo.searchProperty(propertyName, query, "/");
if (result == null || result.length == 0) {
System.out.println("Your search for \"" + query + "\" (Property: '" + propertyName + "') within repository '" + repo.getName() + "' did not match any node!");
} else {
System.out.println(result.length + " results have been found for '" + query + "' within property '" + propertyName + "':");
for (int i = 0; i < result.length ; i++) {
System.out.println("Result " + (i + 1) + ": " + result[i].getPath());
}
}
repo.close();
} catch (Exception e) {
System.err.println(e.getMessage());
log.error(e, e);
}
}
/**
*
*/
public static void testRepoNewVFSFulltextSearch() {
try {
Repository repo = getRepositoryFactory().newRepository("new-vfs");
String nodeName = "hello-ezra.txt";
String nodePath = "/" + nodeName;
if (!repo.existsNode(nodePath)) {
log.warn("Node will be created: " + repo.getRootNode().addNode(nodeName, NodeType.RESOURCE).getPath());
}
Node node = repo.getNode(nodePath);
//node.setMimeType("text/html");
//node.setMimeType("text/plain");
//node.setMimeType("application/xml");
node.setMimeType("application/xhtml+xml");
Writer writer = repo.getWriter(new Path(nodePath));
//OutputStream out = repo.getNode(nodeName).getOutputStream();
//writer.write("Hello Ezra, brother of Levi and Vanya!");
writer.write("<html><body>Hello Ezra, brother of Levi and Vanya!</body></html>");
writer.close();
String query = "Ezra";
System.out.println("\nUSECASE: Search for \"" + query + "\" within fulltext of repository '" + repo.getName() + " (" + repo.getConfigFile() + ")'");
Node[] result = repo.search(query);
if (result == null || result.length == 0) {
System.out.println("Your search for \"" + query + "\" within repository '" + repo.getName() + "' did not match any node!");
} else {
System.out.println(result.length + " results have been found for '" + query + "' within fulltext:");
for (int i = 0; i < result.length ; i++) {
System.out.println("Result " + (i + 1) + ": " + result[i].getPath());
}
}
repo.close();
} catch (Exception e) {
System.err.println(e.getMessage());
log.error(e, e);
}
}
/**
*
*/
public static RepositoryFactory getRepositoryFactory() {
try {
return new RepositoryFactory();
// return RepositoryFactory("my-yarep.properties");
} catch (Exception e) {
System.err.println(e);
log.error(e, e);
return null;
}
}
}