Added some more CLTs: AVMRm, removes nodes, AVMSnapshot, takes a snapshot of a store,

AVMCopyIn, copies a file or a directory recursively local filesystem to a store, AVMMkDir,
creates a directory.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4478 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-11-30 21:03:19 +00:00
parent f87f1508a1
commit bbd8db7b69
5 changed files with 365 additions and 0 deletions

View File

@@ -75,6 +75,10 @@ public abstract class AVMCltBase
int pos = 0; int pos = 0;
while (pos < args.length) while (pos < args.length)
{ {
if (args[pos].equals("-h"))
{
usage(usageMessage);
}
// If the argument is one of the accepted flags then it's // If the argument is one of the accepted flags then it's
// a flag. // a flag.
if (flagArgs.containsKey(args[pos])) if (flagArgs.containsKey(args[pos]))
@@ -123,5 +127,40 @@ public abstract class AVMCltBase
System.exit(1); System.exit(1);
} }
/**
* Utility to split an AVM path into a parent path and a
* base name.
* @param path The path to split.
* @return An array of 1 or 2 Strings representing the parent path
* and the base name, or just the path if the path given is a root path.
*/
protected String[] splitPath(String path)
{
if (path.endsWith(":/"))
{
String [] ret = { path };
return ret;
}
int lastSlash = path.lastIndexOf("/");
if (lastSlash == -1)
{
System.err.println("Malformed path: " + path);
fContext.close();
System.exit(1);
}
String name = path.substring(lastSlash + 1);
String parent = path.substring(0, lastSlash);
if (parent.endsWith(":"))
{
parent = parent + "/";
}
while (parent.endsWith("/") && !parent.endsWith(":/"))
{
parent = parent.substring(0, parent.length() - 1);
}
String [] ret = { parent, name };
return ret;
}
protected abstract void run(Map<String, List<String>> flags, List<String> args); protected abstract void run(Map<String, List<String>> flags, List<String> args);
} }

View File

@@ -0,0 +1,182 @@
/**
*
*/
package org.alfresco.repo.avm.clt;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import org.alfresco.repo.avm.AVMRemoteOutputStream;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
/**
* Like cp from a local filesystem to AVM.
* @author britt
*/
public class AVMCopyIn extends AVMCltBase
{
private static Object [] flagDefs = { "-r", 0, "-v", 0 };
private static String USAGE = "usage: [-r] sourcepath nodepath";
private boolean fVerbose;
/* (non-Javadoc)
* @see org.alfresco.repo.avm.clt.AVMCltBase#run(java.util.Map, java.util.List)
*/
@Override
protected void run(Map<String, List<String>> flags, List<String> args)
{
if (flags.containsKey("-v"))
{
fVerbose = true;
}
else
{
fVerbose = false;
}
if (flags.containsKey("-r"))
{
recursiveCopy(args.get(0), args.get(1));
return;
}
File file = new File(args.get(0));
if (!file.isFile())
{
System.err.println(args.get(0) + " not found, or not a file.");
fContext.close();
System.exit(1);
}
AVMNodeDescriptor desc = fAVMRemote.lookup(-1, args.get(1));
if (desc == null)
{
try
{
String [] pathBase = splitPath(args.get(1));
if (pathBase.length == 1)
{
System.err.println(args.get(1) + " is a root path.");
fContext.close();
System.exit(1);
}
if (fVerbose)
{
System.out.println(file.getName() + " -> " + pathBase[0]);
}
InputStream in =
new FileInputStream(file);
OutputStream out =
new AVMRemoteOutputStream(fAVMRemote.createFile(pathBase[0], pathBase[1]),
fAVMRemote);
copyStream(in, out);
}
catch (IOException e)
{
e.printStackTrace();
fContext.close();
System.exit(1);
}
}
else
{
if (!desc.isDirectory())
{
System.err.println("Target must be a directory.");
fContext.close();
System.exit(1);
}
try
{
if (fVerbose)
{
System.out.println(file.getName() + " -> " + args.get(1));
}
InputStream in =
new FileInputStream(file);
OutputStream out =
new AVMRemoteOutputStream(fAVMRemote.createFile(args.get(1),
file.getName()), fAVMRemote);
copyStream(in, out);
}
catch (IOException e)
{
e.printStackTrace();
fContext.close();
System.exit(1);
}
}
}
private void copyStream(InputStream in, OutputStream out)
{
try
{
byte [] buff = new byte[8192];
int read = 0;
while ((read = in.read(buff)) != -1)
{
out.write(buff, 0, read);
}
in.close();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
fContext.close();
System.exit(1);
}
}
private void recursiveCopy(String sourcePath, String dest)
{
File file = new File(sourcePath);
if (fVerbose)
{
System.out.println(sourcePath + " -> " + dest);
}
if (file.isDirectory())
{
fAVMRemote.createDirectory(dest, file.getName());
String newDest = dest + '/' + file.getName();
String [] names = file.list();
for (String name : names)
{
recursiveCopy(sourcePath + File.separatorChar + name,
newDest);
}
}
else
{
try
{
InputStream in =
new FileInputStream(file);
OutputStream out =
new AVMRemoteOutputStream(fAVMRemote.createFile(dest, file.getName()),
fAVMRemote);
copyStream(in, out);
}
catch (IOException e)
{
e.printStackTrace();
fContext.close();
System.exit(1);
}
}
}
/**
* @param args
*/
public static void main(String[] args)
{
AVMCopyIn me = new AVMCopyIn();
me.exec(args, flagDefs, 2, USAGE);
}
}

View File

@@ -0,0 +1,68 @@
/**
*
*/
package org.alfresco.repo.avm.clt;
import java.util.List;
import java.util.Map;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
/**
* Make a directory.
* @author britt
*/
public class AVMMkDir extends AVMCltBase
{
private static Object [] flagDefs = { "-p", 0 };
private static String USAGE = "usage: AVMMkDir [-p] nodepath";
/* (non-Javadoc)
* @see org.alfresco.repo.avm.clt.AVMCltBase#run(java.util.Map, java.util.List)
*/
@Override
protected void run(Map<String, List<String>> flags, List<String> args)
{
if (flags.containsKey("-p"))
{
mkdirp(args.get(0));
return;
}
String [] parentBase = splitPath(args.get(0));
if (parentBase.length == 1)
{
System.err.println(args.get(0) + " is a root path.");
fContext.close();
System.exit(1);
}
fAVMRemote.createDirectory(parentBase[0], parentBase[1]);
}
private void mkdirp(String path)
{
AVMNodeDescriptor desc = fAVMRemote.lookup(-1, path);
if (desc != null)
{
return;
}
String [] parentBase = splitPath(path);
if (parentBase.length == 1)
{
System.err.println(path + " does not exist.");
fContext.close();
System.exit(1);
}
mkdirp(parentBase[0]);
fAVMRemote.createDirectory(parentBase[0], parentBase[1]);
}
/**
* @param args
*/
public static void main(String[] args)
{
AVMMkDir me = new AVMMkDir();
me.exec(args, flagDefs, 1, USAGE);
}
}

View File

@@ -0,0 +1,40 @@
/**
*
*/
package org.alfresco.repo.avm.clt;
import java.util.List;
import java.util.Map;
/**
* Remove an AVM Node.
* @author britt
*/
public class AVMRm extends AVMCltBase
{
private static Object [] flagDefs = { };
private static String USAGE = "usage: AVMRm nodepath";
/* (non-Javadoc)
* @see org.alfresco.repo.avm.clt.AVMCltBase#run(java.util.Map, java.util.List)
*/
@Override
protected void run(Map<String, List<String>> flags, List<String> args)
{
String [] pathBase = splitPath(args.get(0));
if (pathBase.length == 1)
{
System.err.println("One cannot remove a root node.");
fContext.close();
System.exit(1);
}
fAVMRemote.removeNode(pathBase[0], pathBase[1]);
}
public static void main(String[] args)
{
AVMRm me = new AVMRm();
me.exec(args, flagDefs, 1, USAGE);
}
}

View File

@@ -0,0 +1,36 @@
/**
*
*/
package org.alfresco.repo.avm.clt;
import java.util.List;
import java.util.Map;
/**
* Snapshot a store.
* @author britt
*/
public class AVMSnapshot extends AVMCltBase
{
private static Object [] flagDefs = { };
private static String USAGE = "usage: AVMSnapshot storename";
/* (non-Javadoc)
* @see org.alfresco.repo.avm.clt.AVMCltBase#run(java.util.Map, java.util.List)
*/
@Override
protected void run(Map<String, List<String>> flags, List<String> args)
{
fAVMRemote.createSnapshot(args.get(0));
}
/**
* @param args
*/
public static void main(String[] args)
{
AVMSnapshot me = new AVMSnapshot();
me.exec(args, flagDefs, 1, USAGE);
}
}