X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-persister-file-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fpersist%2Fstorage%2Ffile%2FFileStorageAdapter.java;h=3ec8713b476514349c001f1854a4b9c05cc00ccf;hp=775fb1f88192cb697b38e712716851c3a246e974;hb=28ef055f38762a2f9679eb765fa44528b56791a8;hpb=caee336f062eba4909ba53cbaccdde0714236134 diff --git a/opendaylight/config/config-persister-file-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/file/FileStorageAdapter.java b/opendaylight/config/config-persister-file-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/file/FileStorageAdapter.java index 775fb1f881..3ec8713b47 100644 --- a/opendaylight/config/config-persister-file-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/file/FileStorageAdapter.java +++ b/opendaylight/config/config-persister-file-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/file/FileStorageAdapter.java @@ -12,34 +12,39 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; import com.google.common.io.Files; import org.apache.commons.lang3.StringUtils; -import org.opendaylight.controller.config.persist.api.storage.StorageAdapter; -import org.osgi.framework.BundleContext; +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.opendaylight.controller.config.persist.api.PropertiesProvider; +import org.opendaylight.controller.config.persist.api.StorageAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; /** * StorageAdapter that stores configuration in a plan file. */ -public class FileStorageAdapter implements StorageAdapter { +public class FileStorageAdapter implements StorageAdapter, Persister { private static final Logger logger = LoggerFactory.getLogger(FileStorageAdapter.class); - // TODO prefix properties private static final Charset ENCODING = Charsets.UTF_8; public static final String FILE_STORAGE_PROP = "fileStorage"; public static final String NUMBER_OF_BACKUPS = "numberOfBackups"; + private static final String SEPARATOR_E_PURE = "//END OF CONFIG"; private static final String SEPARATOR_E = newLine(SEPARATOR_E_PURE); @@ -55,8 +60,8 @@ public class FileStorageAdapter implements StorageAdapter { private File storage; @Override - public void setProperties(BundleContext bundleContext) { - File storage = extractStorageFileFromProperties(bundleContext); + public Persister instantiate(PropertiesProvider propertiesProvider) { + File storage = extractStorageFileFromProperties(propertiesProvider); logger.debug("Using file {}", storage.getAbsolutePath()); // Create file if it does not exist File parentFile = storage.getAbsoluteFile().getParentFile(); @@ -79,7 +84,7 @@ public class FileStorageAdapter implements StorageAdapter { + " property should be either set to positive value, or ommited. Can not be set to 0."); } setFileStorage(storage); - + return this; } @VisibleForTesting @@ -92,18 +97,17 @@ public class FileStorageAdapter implements StorageAdapter { numberOfStoredBackups = numberOfBackups; } - private static File extractStorageFileFromProperties(BundleContext bundleContext) { - String fileStorageProperty = bundleContext.getProperty(FILE_STORAGE_PROP); - Preconditions.checkNotNull(fileStorageProperty, "Unable to find " + FILE_STORAGE_PROP - + " in received context :" + bundleContext); + private static File extractStorageFileFromProperties(PropertiesProvider propertiesProvider) { + String fileStorageProperty = propertiesProvider.getProperty(FILE_STORAGE_PROP); + Preconditions.checkNotNull(fileStorageProperty, "Unable to find " + propertiesProvider.getFullKeyForReporting(FILE_STORAGE_PROP)); File result = new File(fileStorageProperty); - String numberOfBAckupsAsString = bundleContext.getProperty(NUMBER_OF_BACKUPS); + String numberOfBAckupsAsString = propertiesProvider.getProperty(NUMBER_OF_BACKUPS); if (numberOfBAckupsAsString != null) { numberOfStoredBackups = Integer.valueOf(numberOfBAckupsAsString); } else { numberOfStoredBackups = Integer.MAX_VALUE; } - + logger.trace("Property {} set to {}", NUMBER_OF_BACKUPS, numberOfStoredBackups); return result; } @@ -162,34 +166,30 @@ public class FileStorageAdapter implements StorageAdapter { } @Override - public Optional loadLastConfig() throws IOException { + public List loadLastConfigs() throws IOException { Preconditions.checkNotNull(storage, "Storage file is null"); if (!storage.exists()) { - return Optional.absent(); + return Collections.emptyList(); } final LineProcessor lineProcessor = new LineProcessor(); - String result = Files.readLines(storage, ENCODING, lineProcessor); - - try { - if (lineProcessor.getConfigSnapshot().isPresent() == false) { - return Optional.absent(); - } else { - return Optional. of(new PersistedConfigImpl(lineProcessor.getConfigSnapshot(), - lineProcessor.getCapabilities())); - } + Files.readLines(storage, ENCODING, lineProcessor); - } catch (ParserConfigurationException | SAXException e) { - throw new IOException("Unable to load last config ", e); + if (lineProcessor.getConfigSnapshot().isPresent() == false) { + return Collections.emptyList(); + } else { + return Arrays.asList(new ConfigSnapshotHolderImpl(lineProcessor.getConfigSnapshot().get(), + lineProcessor.getCapabilities(), storage.getAbsolutePath())); } + } private static final class LineProcessor implements com.google.common.io.LineProcessor { private boolean inLastConfig, inLastSnapshot; private final StringBuffer snapshotBuffer = new StringBuffer(); - private final Set caps = Sets.newHashSet(); + private final SortedSet caps = new TreeSet<>(); @Override public String getResult() { @@ -225,22 +225,23 @@ public class FileStorageAdapter implements StorageAdapter { return true; } - Optional getConfigSnapshot() throws IOException, SAXException, ParserConfigurationException { + Optional getConfigSnapshot() { final String xmlContent = snapshotBuffer.toString(); - if (xmlContent == null || xmlContent.equals("")) { + if (xmlContent.equals("")) { return Optional.absent(); - } else + } else { return Optional.of(xmlContent); + } } - Set getCapabilities() throws IOException, SAXException, ParserConfigurationException { + SortedSet getCapabilities() { return caps; } } @Override - public void close() throws IOException { + public void close() { } @@ -249,25 +250,4 @@ public class FileStorageAdapter implements StorageAdapter { return "FileStorageAdapter [storage=" + storage + "]"; } - private class PersistedConfigImpl implements ConfigSnapshotHolder { - - private final String snapshot; - private final Set caps; - - public PersistedConfigImpl(Optional configSnapshot, Set capabilities) { - this.snapshot = configSnapshot.get(); - this.caps = capabilities; - } - - @Override - public String getConfigSnapshot() { - return snapshot; - } - - @Override - public Set getCapabilities() { - return caps; - } - } - }