void put(final URI uri, ArtifactData data) throws Exception { reporter.trace("put %s %s", uri, data); File tmp = createTempFile(repoDir, "mtp", ".whatever"); tmp.deleteOnExit(); try { copy(uri.toURL(), tmp); byte[] sha = SHA1.digest(tmp).digest(); reporter.trace("SHA %s %s", uri, Hex.toHexString(sha)); ArtifactData existing = get(sha); if (existing != null) { reporter.trace("existing"); xcopy(existing, data); return; } File meta = new File(repoDir, Hex.toHexString(sha) + ".json"); File file = new File(repoDir, Hex.toHexString(sha)); rename(tmp, file); reporter.trace("file %s", file); data.file = file.getAbsolutePath(); data.sha = sha; data.busy = false; CommandData cmddata = parseCommandData(data); if (cmddata.bsn != null) { data.name = cmddata.bsn + "-" + cmddata.version; } else data.name = Strings.display(cmddata.title, cmddata.bsn, cmddata.name, uri); codec.enc().to(meta).put(data); reporter.trace("TD = " + data); } finally { tmp.delete(); reporter.trace("puted %s %s", uri, data); } }
public Object get() throws Exception { try { return codec.decode(null, this); } finally { if (!keepOpen) close(); } }
@SuppressWarnings("unchecked") public <T> T get(Class<T> clazz) throws Exception { try { return (T) codec.decode(clazz, this); } finally { if (!keepOpen) close(); } }
@SuppressWarnings("unchecked") public <T> T get(TypeReference<T> ref) throws Exception { try { return (T) codec.decode(ref.getType(), this); } finally { if (!keepOpen) close(); } }
/** * @param clazz * @param dataFile * @return * @throws Exception */ private <T> T getData(Class<T> clazz, File dataFile) throws Exception { try { return codec.dec().from(dataFile).get(clazz); } catch (Exception e) { // e.printStackTrace(); // System.out.println("Cannot read data file "+dataFile+": " + // IO.collect(dataFile)); return null; } }
public ArtifactData get(byte[] sha) throws Exception { String name = Hex.toHexString(sha); File data = IO.getFile(repoDir, name + ".json"); reporter.trace("artifact data file %s", data); if (data.isFile()) { // Bin + metadata ArtifactData artifact = codec.dec().from(data).get(ArtifactData.class); artifact.file = IO.getFile(repoDir, name).getAbsolutePath(); return artifact; } File bin = IO.getFile(repoDir, name); if (bin.exists()) { // Only bin ArtifactData artifact = new ArtifactData(); artifact.file = bin.getAbsolutePath(); artifact.sha = sha; return artifact; } return null; }
private void storeData(File dataFile, Object o) throws Exception { codec.enc().to(dataFile).put(o); }