X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-persister-directory-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fpersist%2Fstorage%2Fdirectory%2FDirectoryPersister.java;h=eb8ef8cddf46c98511db67e0423b23db38893f3f;hp=cf4ef98bdc95ecc95700d18191135191660052c1;hb=dea24d658123f9059a3fbb3a650c2dbfdb480fcf;hpb=d1ca10654c2535c3c2129523d520979821f8b3fd diff --git a/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java b/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java index cf4ef98bdc..eb8ef8cddf 100644 --- a/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java +++ b/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java @@ -8,10 +8,10 @@ package org.opendaylight.controller.config.persist.storage.directory; import com.google.common.base.Charsets; -import com.google.common.base.Optional; import com.google.common.io.Files; import org.apache.commons.io.IOUtils; import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder; +import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolderImpl; import org.opendaylight.controller.config.persist.api.Persister; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,21 +33,23 @@ public class DirectoryPersister implements Persister { private static final Logger logger = LoggerFactory.getLogger(DirectoryPersister.class); private static final Charset ENCODING = Charsets.UTF_8; - static final String MODULES_START = "//MODULES START"; + public static final String MODULES_START = "//MODULES START"; static final String SERVICES_START = "//SERVICES START"; static final String CAPABILITIES_START = "//CAPABILITIES START"; private final File storage; - private final String header, middle, footer; + private static final String header, middle, footer; - public DirectoryPersister(File storage) { - checkArgument(storage.exists() && storage.isDirectory(), "Storage directory does not exist: " + storage); - this.storage = storage; + static { header = readResource("header.txt"); middle = readResource("middle.txt"); footer = readResource("footer.txt"); + } + public DirectoryPersister(File storage) { + checkArgument(storage.exists() && storage.isDirectory(), "Storage directory does not exist: " + storage); + this.storage = storage; } private static String readResource(String resource) { @@ -64,30 +66,30 @@ public class DirectoryPersister implements Persister { } @Override - public Optional loadLastConfig() throws IOException { + public List loadLastConfigs() throws IOException { File[] filesArray = storage.listFiles(); - if (filesArray.length == 0) { - return Optional.absent(); + if (filesArray == null || filesArray.length == 0) { + return Collections.emptyList(); } List sortedFiles = new ArrayList<>(Arrays.asList(filesArray)); Collections.sort(sortedFiles); // combine all found files + logger.debug("Reading files in following order: {}", sortedFiles); - SortedSet combinedCapabilities = new TreeSet<>(); - StringBuilder modulesBuilder = new StringBuilder(), servicesBuilder = new StringBuilder(); + List result = new ArrayList<>(); for (File file : sortedFiles) { logger.trace("Adding file '{}' to combined result", file); - final MyLineProcessor lineProcessor = new MyLineProcessor(); - Files.readLines(file, ENCODING, lineProcessor); - - modulesBuilder.append(lineProcessor.getModules()); - servicesBuilder.append(lineProcessor.getServices()); - combinedCapabilities.addAll(lineProcessor.getCapabilities()); + ConfigSnapshotHolder configSnapshotHolder = loadLastConfig(file); + result.add(configSnapshotHolder); } - String combinedSnapshot = header + modulesBuilder.toString() + middle + servicesBuilder.toString() + footer; - ConfigSnapshotHolder result = new ConfigSnapshotHolderImpl(combinedSnapshot, combinedCapabilities); - return Optional.of(result); + return result; + } + + public static ConfigSnapshotHolder loadLastConfig(File file) throws IOException { + final MyLineProcessor lineProcessor = new MyLineProcessor(file.getAbsolutePath()); + Files.readLines(file, ENCODING, lineProcessor); + return lineProcessor.getConfigSnapshotHolder(header, middle, footer); } @@ -103,11 +105,16 @@ public class DirectoryPersister implements Persister { } class MyLineProcessor implements com.google.common.io.LineProcessor { + private final String fileNameForReporting; private boolean inModules, inServices, inCapabilities; private final StringBuffer modulesBuffer = new StringBuffer(), servicesBuilder = new StringBuffer(); private final SortedSet caps = new TreeSet<>(); + MyLineProcessor(String fileNameForReporting) { + this.fileNameForReporting = fileNameForReporting; + } + @Override public String getResult() { return null; @@ -138,40 +145,33 @@ class MyLineProcessor implements com.google.common.io.LineProcessor { return true; } + private void checkFileConsistency(){ + checkState(inCapabilities, "File %s is missing delimiters in this order: %s", fileNameForReporting, + Arrays.asList(DirectoryPersister.MODULES_START, + DirectoryPersister.SERVICES_START, + DirectoryPersister.CAPABILITIES_START)); + } + String getModules() { - checkState(inCapabilities); + checkFileConsistency(); return modulesBuffer.toString(); } String getServices() { - checkState(inCapabilities); + checkFileConsistency(); return servicesBuilder.toString(); } SortedSet getCapabilities() { - checkState(inCapabilities); + checkFileConsistency(); return caps; } -} - -class ConfigSnapshotHolderImpl implements ConfigSnapshotHolder { - - private final String snapshot; - private final SortedSet caps; - - public ConfigSnapshotHolderImpl(String configSnapshot, SortedSet capabilities) { - this.snapshot = configSnapshot; - this.caps = capabilities; - } - - @Override - public String getConfigSnapshot() { - return snapshot; + ConfigSnapshotHolder getConfigSnapshotHolder(String header, String middle, String footer) { + String combinedSnapshot = header + getModules() + middle + getServices() + footer; + ConfigSnapshotHolder result = new ConfigSnapshotHolderImpl(combinedSnapshot, getCapabilities(), fileNameForReporting); + return result; } - @Override - public SortedSet getCapabilities() { - return caps; - } } +