X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2FHeadState.java;h=dd8703c1fc689e0ed0bbfc1968e6730913d74750;hp=c20d8e878a4eec04ebaa26ab892efa1790aea431;hb=d42dba7176089fe102b0693337708c7c8304b86e;hpb=463c2a8dd4b9ca623872e6520906c19c03a1c4cb diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/HeadState.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/HeadState.java index c20d8e878..dd8703c1f 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/HeadState.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/HeadState.java @@ -1,7 +1,6 @@ package org.simantics.acorn; import java.io.ByteArrayInputStream; -import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; @@ -11,6 +10,7 @@ import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; +import org.simantics.acorn.exception.InvalidHeadStateException; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.mutable.MutableVariant; import org.simantics.databoard.serialization.Serializer; @@ -18,6 +18,9 @@ import org.simantics.databoard.util.binary.BinaryMemory; public class HeadState { + public static final String HEAD_STATE = "head.state"; + public static final String SHA_1 = "SHA-1"; + public int headChangeSetId = 0; public long transactionId = 1; public long reservedIds = 3; @@ -29,11 +32,11 @@ public class HeadState { // public ArrayList ccs = new ArrayList(); public static HeadState load(Path directory) throws InvalidHeadStateException { - Path f = directory.resolve("head.state"); + Path f = directory.resolve(HEAD_STATE); try { byte[] bytes = Files.readAllBytes(f); - MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + MessageDigest sha1 = MessageDigest.getInstance(SHA_1); int digestLength = sha1.getDigestLength(); sha1.update(bytes, digestLength, bytes.length - digestLength); @@ -43,10 +46,10 @@ public class HeadState { "Checksum " + Arrays.toString(newChecksum) + " does not match excpected " + Arrays.toString(Arrays.copyOfRange(bytes, 0, digestLength)) + " for " + f.toAbsolutePath()); } - - HeadState object = (HeadState) org.simantics.databoard.Files.readFile(new ByteArrayInputStream(bytes, digestLength, bytes.length - digestLength), Bindings.getBindingUnchecked(HeadState.class)); - return object; - + try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes, digestLength, bytes.length - digestLength)) { + HeadState object = (HeadState) org.simantics.databoard.Files.readFile(bais, Bindings.getBindingUnchecked(HeadState.class)); + return object; + } } catch (IOException i) { return new HeadState(); // throw new InvalidHeadStateException(i); @@ -58,7 +61,7 @@ public class HeadState { } public void save(Path directory) throws IOException { - Path f = directory.resolve("head.state"); + Path f = directory.resolve(HEAD_STATE); try { BinaryMemory rf = new BinaryMemory(4096); try { @@ -71,7 +74,7 @@ public class HeadState { byte[] bytes = rf.toByteBuffer().array(); - MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + MessageDigest sha1 = MessageDigest.getInstance(SHA_1); sha1.update(bytes); byte[] checksum = sha1.digest(); @@ -88,7 +91,7 @@ public class HeadState { public static void validateHeadStateIntegrity(Path headState) throws InvalidHeadStateException, IOException { try { byte[] bytes = Files.readAllBytes(headState); - MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + MessageDigest sha1 = MessageDigest.getInstance(SHA_1); int digestLength = sha1.getDigestLength(); sha1.update(bytes, digestLength, bytes.length - digestLength); byte[] newChecksum = sha1.digest();