public FileBasedRepositoryStorage(XRepository repository, File storageDir, ConfigurationPropertyProvider propProvider) { super(repository); if (storageDir == null) throw MESSAGES.illegalArgumentNull("storageDir"); if (propProvider == null) throw MESSAGES.illegalArgumentNull("propProvider"); this.storageDir = storageDir; String filename = propProvider.getProperty(XRepository.PROPERTY_REPOSITORY_STORAGE_FILE, REPOSITORY_XML_NAME); repoFile = new File(storageDir.getAbsolutePath() + File.separator + filename).getAbsoluteFile(); // Initialize repository content if (repoFile.exists()) { RepositoryReader reader; try { reader = RepositoryXMLReader.create(new FileInputStream(repoFile)); } catch (IOException ex) { throw MESSAGES.cannotInitializeRepositoryReader(ex); } String incatt = reader.getRepositoryAttributes().get(Attribute.INCREMENT.getLocalName()); Long increment = new Long(incatt != null ? incatt : "0"); XResource res = reader.nextResource(); while(res != null) { addResourceInternal(res, false); res = reader.nextResource(); } long delta = increment - getResourceIndex().get(); getResourceIndex().addAndGet(delta); reader.close(); } }
private void writeRepositoryXML() { RepositoryWriter writer; try { repoFile.getParentFile().mkdirs(); writer = RepositoryXMLWriter.create(new FileOutputStream(repoFile)); } catch (IOException ex) { throw MESSAGES.cannotInitializeRepositoryWriter(ex); } Map<String, String> attributes = new HashMap<String, String>(); attributes.put(Attribute.NAME.getLocalName(), getRepository().getName()); attributes.put(Attribute.INCREMENT.getLocalName(), new Long(getResourceIndex().get()).toString()); writer.writeRepositoryElement(attributes); RepositoryReader reader = getRepositoryReader(); XResource resource = reader.nextResource(); while(resource != null) { writer.writeResource(resource); resource = reader.nextResource(); } writer.close(); }