public static HashMap<String, Object> bucketsByNameToManifestEntries(HashMap<String,Object> bucketsByName) { HashMap<String,Object> manifestEntries = new HashMap<String,Object>(); for(Map.Entry<String,Object> entry: bucketsByName.entrySet()) { String name = entry.getKey(); Object o = entry.getValue(); if(o instanceof ManifestElement) { manifestEntries.put(name, o); } else if(o instanceof Bucket) { RandomAccessBucket data = (RandomAccessBucket) o; manifestEntries.put(name, new ManifestElement(name, data, null, data.size())); } else if(o instanceof HashMap) { manifestEntries.put(name, bucketsByNameToManifestEntries(Metadata.forceMap(o))); } else throw new IllegalArgumentException(String.valueOf(o)); } return manifestEntries; }
@Override public FreenetURI insertManifest(FreenetURI insertURI, HashMap<String, Object> bucketsByName, String defaultName, short priorityClass, byte[] forceCryptoKey) throws InsertException { PutWaiter pw = new PutWaiter(this); DefaultManifestPutter putter; try { putter = new DefaultManifestPutter(pw, BaseManifestPutter.bucketsByNameToManifestEntries(bucketsByName), priorityClass, insertURI, defaultName, getInsertContext(true), false, forceCryptoKey, core.clientContext); } catch (TooManyFilesInsertException e1) { throw new InsertException(InsertExceptionMode.TOO_MANY_FILES); } try { core.clientContext.start(putter); } catch (PersistenceDisabledException e) { // Impossible } return pw.waitForCompletion(); }