[[[
    JavaHL: New Java classes exposing the Ra layer to java

    [ in subversion/bindings/javahl/src/org/tigris/subversion/javahl/ ]

    * JNIObject.java

    [ in subversion/bindings/javahl/src/org/tigris/subversion/javahl/ra ]

    * ISVNDirectory.java, ISVNEditor.java, ISVNFile.java, ISVNNode.java,
ISVNRa.java, ISVNRaConfig.java, RaContext.java,
SVNCommitEditorBuilder.java, SVNDirectory.java, SVNEditor.java,
SVNFile.java, SVNRa.java, SVNRaConfigDefault.java,  SVNRaFactory.java
]]]
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java
===================================================================
--- subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java  
(revision 0)
+++ subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java  
(working copy)
@@ -0,0 +1,16 @@
+package org.apache.subversion.javahl;
+
+public abstract class JNIObject
+{
+    /**
+     * slot for the address of the native peer. 
+     * The JNI code controls this field. If it is set to 0 then 
+     * underlying JNI object has been freed
+     */
+    protected long cppAddr;
+    
+    protected JNIObject(long cppAddr)
+    {
+       this.cppAddr = cppAddr;
+    }
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRa.java
===================================================================
--- subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRa.java  
(revision 0)
+++ subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRa.java  
(working copy)
@@ -0,0 +1,57 @@
+package org.apache.subversion.javahl.ra;
+
+import java.util.Map;
+
+import org.apache.subversion.javahl.callback.CommitCallback;
+import org.apache.subversion.javahl.callback.ProgressCallback;
+
+/**
+ * Represent an instance of RA session 
+ */
+public interface ISVNRa
+{
+       /**
+        * Release native resources use by this Ra session.
+        * Once called this object is no longer usable 
+        */
+       public void dispose();
+       
+       /**
+        * @return repository root path
+        */
+    public String getRoot();
+    
+    /**
+     * @return latest revision
+     */
+    public long getLatestRevision();
+    
+    /**
+     * @return repository UUID
+     */
+    public String getUUID();
+    
+    /**
+     * @return parent url for this session
+     */
+    public String getUrl();
+    
+    /**
+     * Set parent url for this session 
+     * @param url
+     */
+    public void reparent(String url);
+    
+    /**
+     * Retrieve commit editor the parent url 
+     * @param revProps
+     * @param commitCallback
+     * @param lockTokens
+     * @param keepLocks
+     * @return
+     */
+    public ISVNEditor getCommitEditor(Map<String, String> revProps, 
CommitCallback commitCallback, 
+               Map<String, String> lockTokens, boolean keepLocks);
+    
+    public void setProgressCallback(ProgressCallback listener);
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNDirectory.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNDirectory.java
   (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNDirectory.java
   (working copy)
@@ -0,0 +1,19 @@
+package org.apache.subversion.javahl.ra;
+
+public interface ISVNDirectory extends ISVNNode
+{
+       public void deleteEntry(String path, long baseRevision);
+
+       public ISVNDirectory addDirectory(String path, String parentPath, long 
copyFromRevision);
+       public ISVNDirectory addDirectory(String path);
+       
+       public ISVNDirectory openDirectory(String path, long baseRevision);
+       //public void absentDirectory(String path, long baseRevision);
+
+       public ISVNFile addFile(String path, String parentPath, long 
copyFromRevision);
+       public ISVNFile addFile(String path);
+       public ISVNFile openFile(String path, long baseRevision);
+       //public void absentFile(String path, long baseRevision);
+
+       public void close();
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNFile.java
===================================================================
--- subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNFile.java 
(revision 0)
+++ subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNFile.java 
(working copy)
@@ -0,0 +1,29 @@
+package org.apache.subversion.javahl.ra;
+
+import java.io.InputStream;
+
+import org.apache.subversion.javahl.JNIObject;
+
+
+public class SVNFile extends JNIObject implements ISVNFile
+{
+       public SVNFile(long cppAddr)
+       {
+               super(cppAddr);
+       }
+
+       @Override
+       public native void sendStream(InputStream targetStream, String 
baseMd5CheckSum);
+
+       @Override
+       public native void sendDeltaStream(InputStream sourceStream, 
InputStream targetStream, String baseMd5CheckSum);
+
+       @Override
+       public native void close(String md5HexChecksum);
+
+       @Override
+       public native void changeProperty(String propertyName, byte[] 
propertyValue);
+
+       @Override
+       public native void finalize() throws Throwable;
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/RaContext.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/RaContext.java   
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/RaContext.java   
    (working copy)
@@ -0,0 +1,8 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.CommonContext;
+
+public class RaContext extends CommonContext
+{
+
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNEditor.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNEditor.java   
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNEditor.java   
    (working copy)
@@ -0,0 +1,23 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.JNIObject;
+
+public class SVNEditor extends JNIObject implements ISVNEditor
+{
+       protected SVNEditor(long cppAddr)
+       {
+               super(cppAddr);
+       }
+       
+       @Override
+       public native ISVNDirectory openRoot(long baseRevision);
+
+       @Override
+       public native void closeEdit();
+
+       @Override
+       public native void abortEdit();
+
+       @Override
+       public native void finalize() throws Throwable;
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNFile.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNFile.java    
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNFile.java    
    (working copy)
@@ -0,0 +1,22 @@
+package org.apache.subversion.javahl.ra;
+
+import java.io.InputStream;
+
+public interface ISVNFile extends ISVNNode
+{
+       /**
+        * Set the file content to that of the dataStream
+        */
+       public void sendStream(InputStream targetStream, String 
baseMd5CheckSum);
+       
+       /**
+        * Set the file content to that of the dataStream
+        * by sending it as delta to the baseStream.
+        * @param sourceStream
+        * @param targetStream
+        */
+       public void sendDeltaStream(InputStream sourceStream, InputStream 
targetStream, String baseMd5CheckSum);
+       
+       public void close(String md5HexChecksum);
+
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaFactory.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaFactory.java
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaFactory.java
    (working copy)
@@ -0,0 +1,33 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.NativeResources;
+import org.apache.subversion.javahl.types.Version;
+
+
+public class SVNRaFactory
+{
+    /**
+     * Load the required native library.
+     */
+    static
+    {
+        NativeResources.loadNativeLibrary();
+        
+        //TODO: Remove below, once NativeResources version check catches up to 
Ra check
+        Version version = NativeResources.getVersion();
+        if (!version.isAtLeast(1, 7, 5))
+        {
+            throw new LinkageError("Native library version must be at least " +
+                                   "1.7.5, but is only " + version);
+        }
+    }
+
+       /**
+        * Crates RA session for a given url with provided context
+        * @param url to connect to
+        * @param uuid of the remote repository, can be null if uuid check is 
not desired
+        * @param config configuration to use for the session. 
+        * @return RA session
+        */
+       public static native ISVNRa createRaSession(String url, String uuid, 
ISVNRaConfig config);
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaConfigDefault.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaConfigDefault.java
      (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRaConfigDefault.java
      (working copy)
@@ -0,0 +1,56 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.callback.UserPasswordCallback;
+
+public class SVNRaConfigDefault implements ISVNRaConfig
+{
+       private String username;
+       private String password;
+       private UserPasswordCallback prompt;
+       private String configDirectory;
+
+       @Override
+       public String getUsername()
+       {
+               return username;
+       }
+       
+       public void setUsername(String username)
+       {
+               this.username = username;
+       }
+
+       @Override
+       public String getPassword()
+       {
+               return password;
+       }
+       
+       public void setPassword(String password)
+       {
+               this.password = password;
+       }
+
+       @Override
+       public UserPasswordCallback getPrompt()
+       {
+               return prompt;
+       }
+       
+
+       public void setPrompt(UserPasswordCallback prompt)
+       {
+               this.prompt = prompt;
+       }
+
+       @Override
+       public String getConfigDirectory()
+       {
+               return configDirectory;
+       }
+
+       public void setConfigDirectory(String configDirectory)
+       {
+               this.configDirectory = configDirectory;
+       }
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNNode.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNNode.java    
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNNode.java    
    (working copy)
@@ -0,0 +1,6 @@
+package org.apache.subversion.javahl.ra;
+
+public interface ISVNNode
+{
+       public void changeProperty(String propertyName, byte[] propertyValue);
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNEditor.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNEditor.java  
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNEditor.java  
    (working copy)
@@ -0,0 +1,21 @@
+package org.apache.subversion.javahl.ra;
+
+
+public interface ISVNEditor
+{
+       /**
+        * Open root directory of the RA session
+        * @param baseRevision - base revision that updates are against
+        */
+       public ISVNDirectory openRoot(long baseRevision);
+
+       /**
+        * Finish and complete edit 
+        */
+       public void closeEdit();
+       
+       /**
+        * Abort edit
+        */
+       public void abortEdit();
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRaConfig.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRaConfig.java
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/ISVNRaConfig.java
    (working copy)
@@ -0,0 +1,14 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.callback.UserPasswordCallback;
+
+/**
+ * Interface providing necessary configuration details for creation of ISVNRa 
instance
+ */
+public interface ISVNRaConfig
+{
+       public String getUsername();
+       public String getPassword();
+       public UserPasswordCallback getPrompt();
+       public String getConfigDirectory();
+}
Index: subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRa.java
===================================================================
--- subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRa.java   
(revision 0)
+++ subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNRa.java   
(working copy)
@@ -0,0 +1,57 @@
+package org.apache.subversion.javahl.ra;
+
+import java.util.Map;
+
+import org.apache.subversion.javahl.JNIObject;
+import org.apache.subversion.javahl.callback.CommitCallback;
+import org.apache.subversion.javahl.callback.ProgressCallback;
+
+public class SVNRa extends JNIObject implements ISVNRa
+{
+    @Override
+    public native String getRoot();
+    
+    @Override
+    public native long getLatestRevision();
+    
+    @Override
+    public native String getUUID();
+    
+    @Override
+    public native void reparent(String url);
+
+    @Override
+    public native String getUrl();
+    
+    @Override
+    public native ISVNEditor getCommitEditor(Map<String, String> revProps, 
CommitCallback commitCallback, 
+               Map<String, String> lockTokens, boolean keepLock);
+
+    
+       public void setProgressCallback(ProgressCallback listener)
+    {
+       sessionContext.setListener(listener);
+    }
+    
+       @Override
+       public native void finalize() throws Throwable;
+       
+       @Override
+       public native void dispose();
+
+
+       /*
+     * NOTE: This field is accessed from native code for callbacks.
+     */
+    private RaContext sessionContext = new RaContext();
+    
+    /**
+     * This constructor is called from JNI
+     * to get an instance call getRaSession method of ISVNClient
+     * @param cppAddr
+     */
+       protected SVNRa(long cppAddr)
+       {
+               super(cppAddr);
+       }
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNDirectory.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNDirectory.java
    (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNDirectory.java
    (working copy)
@@ -0,0 +1,51 @@
+package org.apache.subversion.javahl.ra;
+
+import org.apache.subversion.javahl.JNIObject;
+import org.apache.subversion.javahl.types.Revision;
+
+
+public class SVNDirectory extends JNIObject implements ISVNDirectory
+{
+       protected SVNDirectory(long cppAddr)
+       {
+               super(cppAddr);
+       }
+
+       @Override
+       public native void close();
+
+       @Override
+       public native void changeProperty(String propertyName, byte[] 
propertyValue);
+
+       @Override
+       public native void deleteEntry(String path, long baseRevision);
+
+       @Override
+       public native ISVNDirectory addDirectory(String path, String parentPath,
+                       long copyFromRevision);
+
+       @Override
+       public native ISVNDirectory openDirectory(String path, long 
baseRevision);
+
+       @Override
+       public native ISVNFile addFile(String path, String parentPath,
+                       long copyFromRevision);
+
+       @Override
+       public native ISVNFile openFile(String path, long baseRevision);
+
+       @Override
+       public ISVNDirectory addDirectory(String path)
+       {
+               return addDirectory(path, null, Revision.SVN_INVALID_REVNUM);
+       }
+
+       @Override
+       public ISVNFile addFile(String path)
+       {
+               return addFile(path, null, Revision.SVN_INVALID_REVNUM);
+       }
+
+       @Override
+       public native void finalize() throws Throwable;
+}
Index: 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNCommitEditorBuilder.java
===================================================================
--- 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNCommitEditorBuilder.java
  (revision 0)
+++ 
subversion/bindings/javahl/src/org/apache/subversion/javahl/ra/SVNCommitEditorBuilder.java
  (working copy)
@@ -0,0 +1,148 @@
+package org.apache.subversion.javahl.ra;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.subversion.javahl.callback.CommitCallback;
+import org.apache.subversion.javahl.types.Property;
+
+/**
+ * This is a builder class to assist with calling of getCommitEditor method on 
ISVNRa.
+ * 
+ * Example use to get editor with commit message "test"
+ * ISVNEditor editor = new 
SVNCommitEditorBuilder().setCommitMessage("test").create(ra);
+ */
+public class SVNCommitEditorBuilder
+{
+       private Map<String, String> revProps = new HashMap<String, String>();
+       private CommitCallback commitCallback;
+       private Map<String, String> lockTokens;
+       private boolean keepLocks;
+       
+       /**
+        * @param ra session to use
+        * @return Commit editor creating using the state of the builder
+        */
+       public ISVNEditor create(ISVNRa ra)
+       {
+               return ra.getCommitEditor(revProps, commitCallback, lockTokens, 
keepLocks);
+       }
+
+       /**
+        * Same as setKeepLocks(true)
+        */
+       public SVNCommitEditorBuilder keepLocks()
+       {
+               setKeepLocks(true);
+               return this;
+       }
+
+       /**
+        * @param keepLocks set to true to keep locks after edit and false 
otherwise
+        */
+       public SVNCommitEditorBuilder setKeepLocks(boolean keepLocks)
+       {
+               this.keepLocks = keepLocks;
+               return this;
+       }
+       
+       /**
+        * @param commitMessage to use when committing the edit  
+        */
+       public SVNCommitEditorBuilder setCommitMessage(String commitMessage)
+       {
+               revProps.put(Property.REV_LOG, commitMessage);
+               return this;
+       }
+       
+       public SVNCommitEditorBuilder setLockToken(String path, String token)
+       {
+               getLockTokensInternal().put(path, token);
+               return this;
+       }
+
+       public SVNCommitEditorBuilder setLockTokens(Map<String, String> 
tokenMap)
+       {
+               getLockTokensInternal().putAll(tokenMap);
+               return this;
+       }
+
+       public SVNCommitEditorBuilder deleteLockToken(String path)
+       {
+               getLockTokensInternal().remove(path);
+               return this;
+       }
+
+       public SVNCommitEditorBuilder clearLockTokens()
+       {
+               getLockTokensInternal().clear();
+               return this;
+       }
+
+       public SVNCommitEditorBuilder setRevProperty(String propertyName, 
String propertyValue)
+       {
+               revProps.put(propertyName, propertyValue);
+               return this;
+       }
+
+       public SVNCommitEditorBuilder setRevProperties(Map<String, String> 
propertyMap)
+       {
+               revProps.putAll(propertyMap);
+               return this;
+       }
+       
+       public SVNCommitEditorBuilder deleteRevProperty(String propertyName)
+       {
+               revProps.remove(propertyName);
+               return this;
+       }
+
+       public SVNCommitEditorBuilder clearRevProperties()
+       {
+               revProps.clear();
+               return this;
+       }
+
+       public SVNCommitEditorBuilder setCommitCallback(CommitCallback 
commitCallback)
+       {
+               this.commitCallback = commitCallback;
+               return this;
+       }
+
+       
+       public boolean isKeepLocks()
+       {
+               return keepLocks;
+       }
+
+       public CommitCallback getCommitCallback()
+       {
+               return commitCallback;
+       }
+
+       public Map<String, String> getRevProps()
+       {
+               return Collections.unmodifiableMap(revProps);
+       }
+
+       public Map<String, String> getLockTokens()
+       {
+               if(lockTokens == null)
+               {
+                       return Collections.emptyMap();
+               }
+               
+               return Collections.unmodifiableMap(lockTokens);
+       }
+       
+       private Map<String, String> getLockTokensInternal()
+       {
+               if(lockTokens == null)
+               {
+                       lockTokens = new HashMap<String, String>();
+               }
+               
+               return lockTokens;
+       }
+}

Reply via email to