Skip to content

Instantly share code, notes, and snippets.

@elefevre
Created January 27, 2012 10:48
Show Gist options
  • Save elefevre/1688248 to your computer and use it in GitHub Desktop.
Save elefevre/1688248 to your computer and use it in GitHub Desktop.
A basic connector
package com.polyspot.connector.filesystem;
import java.util.List;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import com.google.common.collect.Lists;
import com.polyspot.connector.framework.Connector;
import com.polyspot.connector.framework.ConnectorConfig;
import com.polyspot.connector.framework.node.Node;
import com.polyspot.connector.framework.node.NodeFinder;
import com.polyspot.connector.framework.node.NodeKey;
import com.polyspot.connector.framework.node.transformer.NodeTransformer;
import com.polyspot.connector.framework.node.transformer.NodeTransformers;
import com.polyspot.connector.framework.orchestrator.Orchestrator;
import com.polyspot.connector.framework.orchestrator.Orchestrators;
import com.polyspot.connector.framework.pusher.DocumentOutput;
import com.polyspot.connector.framework.utils.DefaultToStringEqualsHashCode;
public class FileSystemConnector {
public static class FileSystemNode extends Node {
private final FileSystemManager manager;
public FileSystemNode(FileSystemNode parent, String name, FileSystemManager manager) {
super(parent, "vfs", name);
this.manager = manager;
}
@Override
public Iterable<Node> enumerate() throws Exception {
FileObject folder = manager.resolveFile(this.getKey().getName());
List<Node> children = Lists.newArrayList();
for (FileObject fileObject : folder.getChildren()) {
Node child = new FileSystemNode(node, fileObject.getName().getURI(), manager);
children.add(child);
}
return children;
}
}
private final DocumentOutput documentOutput;
private final FileSystemManager manager;
public FileSystemConnector(FileSystemManager manager, DocumentOutput documentOutput) {
this.manager = manager;
this.documentOutput = documentOutput;
}
public void synchronize(String root) {
Orchestrator orchestrator = Orchestrators.createSynchronousOrchestrator(documentOutput);
String rootKey = NodeKey.create("vfs", root).asString();
Node rootNode = new FileSystemNode(null, rootKey.getName(), manager);
Connector connector = new Connector(new ConnectorConfig().withRootNode(rootNode), orchestrator);
connector.synchronize();
}
}
package com.polyspot.connector.filesystem;
import java.util.List;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import com.google.common.collect.Lists;
import com.polyspot.connector.framework.Connector;
import com.polyspot.connector.framework.ConnectorConfig;
import com.polyspot.connector.framework.node.Node;
import com.polyspot.connector.framework.node.NodeFinder;
import com.polyspot.connector.framework.node.NodeKey;
import com.polyspot.connector.framework.node.transformer.NodeTransformer;
import com.polyspot.connector.framework.node.transformer.NodeTransformers;
import com.polyspot.connector.framework.orchestrator.Orchestrator;
import com.polyspot.connector.framework.orchestrator.Orchestrators;
import com.polyspot.connector.framework.pusher.DocumentOutput;
import com.polyspot.connector.framework.utils.DefaultToStringEqualsHashCode;
public class FileSystemConnector {
public static class FileSystemNodeFinder implements NodeFinder {
private final FileSystemManager manager;
public FileSystemNodeFinder(FileSystemManager manager) {
this.manager = manager;
}
@Override
public Iterable<Node> enumerate(Node node) throws Exception {
FileObject folder = manager.resolveFile(node.getKey().getName());
List<Node> children = Lists.newArrayList();
for (FileObject fileObject : folder.getChildren()) {
Node child = Node.create(node, "vfs", fileObject.getName().getURI()).withNodeFinder(this);
children.add(child);
}
return children;
}
}
private final DocumentOutput documentOutput;
private final FileSystemManager manager;
public FileSystemConnector(FileSystemManager manager, DocumentOutput documentOutput) {
this.manager = manager;
this.documentOutput = documentOutput;
}
public void synchronize(String root) {
Orchestrator orchestrator = Orchestrators.createSynchronousOrchestrator(documentOutput);
NodeTransformer rootBuilder = NodeTransformers.withFinder(new FileSystemNodeFinder(manager));
String rootKey = NodeKey.create("vfs", root).asString();
Connector connector = new Connector(new ConnectorConfig().withRootKey(rootKey), orchestrator, rootBuilder);
connector.synchronize();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment