Remove yang-test
[controller.git] / opendaylight / config / config-persister-directory-xml-adapter / src / main / java / org / opendaylight / controller / config / persist / storage / directory / xml / XmlDirectoryPersister.java
index 92bf080662b1bc0ecc89e6427b5a0ad1cb8f63ce..da4fbfbd2303b9749b186ae86d2fdf0529d1c454 100644 (file)
@@ -8,8 +8,10 @@
 package org.opendaylight.controller.config.persist.storage.directory.xml;
 
 import static com.google.common.base.Preconditions.checkArgument;
 package org.opendaylight.controller.config.persist.storage.directory.xml;
 
 import static com.google.common.base.Preconditions.checkArgument;
+
 import com.google.common.base.Optional;
 import com.google.common.io.Files;
 import com.google.common.base.Optional;
 import com.google.common.io.Files;
+
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -19,9 +21,15 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.stream.StreamSource;
+
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.config.persist.api.Persister;
 import org.opendaylight.controller.config.persist.storage.file.xml.model.ConfigSnapshot;
 import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
 import org.opendaylight.controller.config.persist.api.Persister;
 import org.opendaylight.controller.config.persist.storage.file.xml.model.ConfigSnapshot;
@@ -35,14 +43,14 @@ public class XmlDirectoryPersister implements Persister {
     private final Optional<FilenameFilter> extensionsFilter;
 
     /**
     private final Optional<FilenameFilter> extensionsFilter;
 
     /**
-     * Creates XmlDirectoryPersister that picks up all files in specified folder
+     * Creates XmlDirectoryPersister that picks up all files in specified folder.
      */
     public XmlDirectoryPersister(final File storage) {
         this(storage, Optional.<FilenameFilter>absent());
     }
 
     /**
      */
     public XmlDirectoryPersister(final File storage) {
         this(storage, Optional.<FilenameFilter>absent());
     }
 
     /**
-     * Creates XmlDirectoryPersister that picks up files only with specified file extension
+     * Creates XmlDirectoryPersister that picks up files only with specified file extension.
      */
     public XmlDirectoryPersister(final File storage, final Set<String> fileExtensions) {
         this(storage, Optional.of(getFilter(fileExtensions)));
      */
     public XmlDirectoryPersister(final File storage, final Set<String> fileExtensions) {
         this(storage, Optional.of(getFilter(fileExtensions)));
@@ -61,7 +69,8 @@ public class XmlDirectoryPersister implements Persister {
 
     @Override
     public List<ConfigSnapshotHolder> loadLastConfigs() throws IOException {
 
     @Override
     public List<ConfigSnapshotHolder> loadLastConfigs() throws IOException {
-        File[] filesArray = extensionsFilter.isPresent() ? storage.listFiles(extensionsFilter.get()) : storage.listFiles();
+        File[] filesArray =
+                extensionsFilter.isPresent() ? storage.listFiles(extensionsFilter.get()) : storage.listFiles();
         if (filesArray == null || filesArray.length == 0) {
             return Collections.emptyList();
         }
         if (filesArray == null || filesArray.length == 0) {
             return Collections.emptyList();
         }
@@ -73,13 +82,13 @@ public class XmlDirectoryPersister implements Persister {
         List<ConfigSnapshotHolder> result = new ArrayList<>();
         for (File file : sortedFiles) {
             LOG.trace("Adding file '{}' to combined result", file);
         List<ConfigSnapshotHolder> result = new ArrayList<>();
         for (File file : sortedFiles) {
             LOG.trace("Adding file '{}' to combined result", file);
-            Optional<ConfigSnapshotHolder> h = fromXmlSnapshot(file);
+            Optional<ConfigSnapshotHolder> configSnapshotHolderOptional = fromXmlSnapshot(file);
             // Ignore non valid snapshot
             // Ignore non valid snapshot
-            if(h.isPresent() == false) {
+            if (!configSnapshotHolderOptional.isPresent()) {
                 continue;
             }
 
                 continue;
             }
 
-            result.add(h.get());
+            result.add(configSnapshotHolderOptional.get());
         }
         return result;
     }
         }
         return result;
     }
@@ -87,13 +96,16 @@ public class XmlDirectoryPersister implements Persister {
     private Optional<ConfigSnapshotHolder> fromXmlSnapshot(final File file) {
         try {
             return Optional.of(loadLastConfig(file));
     private Optional<ConfigSnapshotHolder> fromXmlSnapshot(final File file) {
         try {
             return Optional.of(loadLastConfig(file));
-        } catch (JAXBException e) {
+        } catch (final JAXBException e) {
             // In case of parse error, issue a warning, ignore and continue
             LOG.warn(
             // In case of parse error, issue a warning, ignore and continue
             LOG.warn(
-                    "Unable to parse configuration snapshot from {}. Initial config from {} will be IGNORED in this run. " +
-                    "Note that subsequent config files may fail due to this problem. " +
+                    "Unable to parse configuration snapshot from {}. "
+                            + "Initial config from {} will be IGNORED in this run. ",
+                    file, file);
+            LOG.warn(
+                    "Note that subsequent config files may fail due to this problem. ",
                     "Xml markup in this file needs to be fixed, for detailed information see enclosed exception.",
                     "Xml markup in this file needs to be fixed, for detailed information see enclosed exception.",
-                    file, file, e);
+                    e);
         }
 
         return Optional.absent();
         }
 
         return Optional.absent();
@@ -102,8 +114,15 @@ public class XmlDirectoryPersister implements Persister {
     public static ConfigSnapshotHolder loadLastConfig(final File file) throws JAXBException {
         JAXBContext jaxbContext = JAXBContext.newInstance(ConfigSnapshot.class);
         Unmarshaller um = jaxbContext.createUnmarshaller();
     public static ConfigSnapshotHolder loadLastConfig(final File file) throws JAXBException {
         JAXBContext jaxbContext = JAXBContext.newInstance(ConfigSnapshot.class);
         Unmarshaller um = jaxbContext.createUnmarshaller();
-
-        return asHolder((ConfigSnapshot) um.unmarshal(file));
+        XMLInputFactory xif = XMLInputFactory.newFactory();
+        xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
+        xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
+        try {
+            XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(file));
+            return asHolder((ConfigSnapshot) um.unmarshal(xsr));
+        } catch (final XMLStreamException e) {
+            throw new JAXBException(e);
+        }
     }
 
     private static ConfigSnapshotHolder asHolder(final ConfigSnapshot unmarshalled) {
     }
 
     private static ConfigSnapshotHolder asHolder(final ConfigSnapshot unmarshalled) {
@@ -125,28 +144,21 @@ public class XmlDirectoryPersister implements Persister {
         };
     }
 
         };
     }
 
-    private static FilenameFilter getFilter(final Set<String>fileExtensions) {
-        checkArgument(fileExtensions.isEmpty() == false, "No file extension provided", fileExtensions);
+    private static FilenameFilter getFilter(final Set<String> fileExtensions) {
+        checkArgument(!fileExtensions.isEmpty(), "No file extension provided", fileExtensions);
 
 
-        return new FilenameFilter() {
-            @Override
-            public boolean accept(final File dir, final String name) {
-                String ext = Files.getFileExtension(name);
-                return fileExtensions.contains(ext);
-            }
+        return (dir, name) -> {
+            String ext = Files.getFileExtension(name);
+            return fileExtensions.contains(ext);
         };
     }
 
     @Override
     public void close() {
         };
     }
 
     @Override
     public void close() {
-
     }
 
     @Override
     public String toString() {
     }
 
     @Override
     public String toString() {
-        final StringBuffer sb = new StringBuffer("XmlDirectoryPersister{");
-        sb.append("storage=").append(storage);
-        sb.append('}');
-        return sb.toString();
+        return "XmlDirectoryPersister{storage=" + storage + "}";
     }
 }
\ No newline at end of file
     }
 }
\ No newline at end of file