ObjectId: Add method to read an ObjectId from a ByteBuffer

Some storages return data in a convenient ByteBuffer wrapper, but
there is no straigh-forward method to read ObjectIds from it.

Add ObjectId#fromRaw(ByteBuffer) to read object ids from byte buffers.

Change-Id: Ia3b244005e4d9a613294f5ad9dab3b8e7bc3d7df
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
index 21032c3..d6f0b03 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ObjectIdTest.java
@@ -16,6 +16,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.nio.ByteBuffer;
 import java.util.Locale;
 
 import org.eclipse.jgit.errors.InvalidObjectIdException;
@@ -153,4 +154,16 @@ public void testSetByte() {
 			assertEquals(ObjectId.fromRaw(exp).name(), id.name());
 		}
 	}
+
+	@Test
+	public void test_toFromByteBuffer_raw() {
+		ObjectId oid = ObjectId
+				.fromString("ff00eedd003713bb1bb26b808ec9312548e73946");
+		ByteBuffer anObject = ByteBuffer.allocate(Constants.OBJECT_ID_LENGTH);
+		oid.copyRawTo(anObject);
+		anObject.flip();
+
+		ObjectId actual = ObjectId.fromRaw(anObject);
+		assertEquals(oid.name(), actual.name());
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
index 1c31263..1b455b9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectId.java
@@ -15,6 +15,7 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.nio.ByteBuffer;
 
 import org.eclipse.jgit.annotations.Nullable;
 import org.eclipse.jgit.errors.InvalidObjectIdException;
@@ -152,6 +153,22 @@ public static final ObjectId fromRaw(byte[] bs, int p) {
 	}
 
 	/**
+	 * Convert an ObjectId from raw binary representation
+	 *
+	 * @param bb
+	 *            a bytebuffer with the objectid encoded as 5 consecutive ints.
+	 *            This is the reverse of {@link ObjectId#copyRawTo(ByteBuffer)}
+	 *
+	 * @return the converted object id.
+	 *
+	 * @since 7.0
+	 */
+	public static final ObjectId fromRaw(ByteBuffer bb) {
+		return new ObjectId(bb.getInt(), bb.getInt(), bb.getInt(), bb.getInt(),
+				bb.getInt());
+	}
+
+	/**
 	 * Convert an ObjectId from raw binary representation.
 	 *
 	 * @param is