Author: ecki
Date: Fri Jan  9 15:13:29 2015
New Revision: 1650554

URL: http://svn.apache.org/r1650554
Log:
[example] VFS Shell: implement 'info' command and print version.

Modified:
    
commons/proper/vfs/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
    commons/proper/vfs/trunk/src/changes/changes.xml

Modified: 
commons/proper/vfs/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java?rev=1650554&r1=1650553&r2=1650554&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
 (original)
+++ 
commons/proper/vfs/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
 Fri Jan  9 15:13:29 2015
@@ -17,14 +17,18 @@
 package org.apache.commons.vfs2.example;
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.nio.charset.Charset;
 import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 import java.util.StringTokenizer;
 
+import org.apache.commons.vfs2.Capability;
 import org.apache.commons.vfs2.FileContent;
 import org.apache.commons.vfs2.FileObject;
 import org.apache.commons.vfs2.FileSystemException;
@@ -33,9 +37,14 @@ import org.apache.commons.vfs2.FileType;
 import org.apache.commons.vfs2.FileUtil;
 import org.apache.commons.vfs2.Selectors;
 import org.apache.commons.vfs2.VFS;
+import org.apache.commons.vfs2.operations.FileOperationProvider;
 
 /**
  * A simple command-line shell for performing file operations.
+ * <p>
+ * See
+ * <a href="https://wiki.apache.org/commons/VfsExampleShell";>Commons VFS Shell 
Examples</a>
+ * in Apache Commons Wiki.
  */
 public final class Shell
 {
@@ -43,10 +52,10 @@ public final class Shell
     private FileObject cwd;
     private final BufferedReader reader;
 
-    private Shell() throws FileSystemException
+    private Shell() throws IOException
     {
         mgr = VFS.getManager();
-        cwd = mgr.resolveFile(System.getProperty("user.dir"));
+        cwd = mgr.toFileObject(new File(System.getProperty("user.dir")));
         reader = new BufferedReader(new InputStreamReader(System.in, 
Charset.defaultCharset()));
     }
 
@@ -66,7 +75,7 @@ public final class Shell
 
     private void go() throws Exception
     {
-        System.out.println("VFS Shell");
+        System.out.println("VFS Shell " + getVersion(Shell.class));
         while (true)
         {
             final String[] cmd = nextCommand();
@@ -113,7 +122,7 @@ public final class Shell
         {
             cp(cmd);
         }
-        else if (cmdName.equalsIgnoreCase("help"))
+        else if (cmdName.equalsIgnoreCase("help") || cmdName.equals("?"))
         {
             help();
         }
@@ -133,12 +142,68 @@ public final class Shell
         {
             touch(cmd);
         }
+        else if (cmdName.equalsIgnoreCase("info"))
+        {
+            info(cmd);
+        }
         else
         {
-            System.err.println("Unknown command \"" + cmdName + "\".");
+            System.err.println("Unknown command \"" + cmdName + "\" (Try 
'help').");
         }
     }
 
+    private void info(String[] cmd) throws Exception
+    {
+        if (cmd.length > 1)
+        {
+            info(cmd[1]);
+        }
+        else
+        {
+            System.out.println("Default manager: \"" + 
mgr.getClass().getName() + "\" version " + getVersion(mgr.getClass()));
+            String[] schemes = mgr.getSchemes();
+            List<String> virtual = new ArrayList<String>();
+            List<String> physical = new ArrayList<String>();
+            for(int i=0; i<schemes.length; i++)
+            {
+                Collection<Capability> caps = 
mgr.getProviderCapabilities(schemes[i]);
+                if (caps != null)
+                {
+                    if (caps.contains(Capability.VIRTUAL))
+                    {
+                        virtual.add(schemes[i]);
+                    } else {
+                        physical.add(schemes[i]);
+                    }
+                }
+            }
+            if (!physical.isEmpty())
+            {
+                System.out.println("  Provider Schemes: " + physical);
+            }
+            if (!virtual.isEmpty())
+            {
+                System.out.println("   Virtual Schemes: " + virtual);
+            }
+         }
+    }
+
+    private void info(String scheme) throws Exception
+    {
+         System.out.println("Provider Info for scheme \""+ scheme +"\":");
+         Collection<Capability> caps;
+         caps = mgr.getProviderCapabilities(scheme);
+         if (caps != null && !caps.isEmpty())
+         {
+             System.out.println("  capabilities: " + caps);
+         }
+         FileOperationProvider[] ops = mgr.getOperationProviders(scheme);
+         if (ops != null && ops.length > 0)
+         {
+             System.out.println("  operations: " + ops);
+         }
+    }
+
     /**
      * Does a 'help' command.
      */
@@ -149,12 +214,12 @@ public final class Shell
         System.out.println("cd [folder]        Changes current folder.");
         System.out.println("cp <src> <dest>    Copies a file or folder.");
         System.out.println("help               Shows this message.");
+        System.out.println("info [scheme]      Displays information about 
providers.");
         System.out.println("ls [-R] [path]     Lists contents of a file or 
folder.");
         System.out.println("pwd                Displays current folder.");
         System.out.println("rm <path>          Deletes a file or folder.");
         System.out.println("touch <path>       Sets the last-modified time of 
a file.");
-        System.out.println("exit       Exits this program.");
-        System.out.println("quit       Exits this program.");
+        System.out.println("exit, quit         Exits this program.");
     }
 
     /**
@@ -355,4 +420,16 @@ public final class Shell
         }
         return cmd.toArray(new String[cmd.size()]);
     }
+
+    private static String getVersion(Class<?> cls)
+    {
+        try
+        {
+            return cls.getPackage().getImplementationVersion();
+        }
+        catch (Exception ignored)
+        {
+            return "N/A";
+        }
+    }
 }

Modified: commons/proper/vfs/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1650554&r1=1650553&r2=1650554&view=diff
==============================================================================
--- commons/proper/vfs/trunk/src/changes/changes.xml (original)
+++ commons/proper/vfs/trunk/src/changes/changes.xml Fri Jan  9 15:13:29 2015
@@ -26,6 +26,9 @@
 <!--       <action issue="VFS-443" dev="ggregory" type="update" 
due-to="nickallen"> -->
 <!--        [Local] Need an easy way to convert from a FileObject to a File. 
-->
 <!--       </action> -->
+      <action dev="ecki" type="add">
+       [example] make VFS Shell print version and implement new 'info' command.
+      </action>
       <action issue="VFS-552" dev="ecki" type="fix">
        [sandbox] include vfs-providers.xml in JAR for dynamic registration of 
mime and smb providers.
       </action>


Reply via email to