X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fconfig%2Fconfig-persister-directory-autodetect-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fpersist%2Fstorage%2Fdirectory%2Fautodetect%2FFileType.java;fp=opendaylight%2Fconfig%2Fconfig-persister-directory-autodetect-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fpersist%2Fstorage%2Fdirectory%2Fautodetect%2FFileType.java;h=03654ebcb223209c01b26738ccadfe4accec97a9;hb=dea24d658123f9059a3fbb3a650c2dbfdb480fcf;hp=0000000000000000000000000000000000000000;hpb=a59d844ae2a4482c052399f5cb2cadd2b9581402;p=controller.git diff --git a/opendaylight/config/config-persister-directory-autodetect-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/autodetect/FileType.java b/opendaylight/config/config-persister-directory-autodetect-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/autodetect/FileType.java new file mode 100644 index 0000000000..03654ebcb2 --- /dev/null +++ b/opendaylight/config/config-persister-directory-autodetect-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/autodetect/FileType.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.config.persist.storage.directory.autodetect; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import org.apache.commons.lang3.StringUtils; +import org.opendaylight.controller.config.persist.storage.directory.DirectoryPersister; +import org.opendaylight.controller.config.persist.storage.file.xml.model.ConfigSnapshot; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; + +enum FileType { + + plaintext, xml; + + public static final String XML_STORAGE_FIRST_LINE = "<" + ConfigSnapshot.SNAPSHOT_ROOT_ELEMENT_NAME + ">"; + + static FileType getFileType(File file) { + String firstLine = readFirstLine(file); + if(isPlaintextStorage(firstLine)) { + return plaintext; + } else if(isXmlStorage(firstLine)) + return xml; + + throw new IllegalArgumentException("File " + file + " is not of permitted storage type: " + Arrays.toString(FileType.values())); + } + + private static boolean isXmlStorage(String firstLine) { + return firstLine.startsWith(XML_STORAGE_FIRST_LINE); + } + + private static boolean isPlaintextStorage(String firstLine) { + return firstLine.startsWith(DirectoryPersister.MODULES_START); + + } + + @VisibleForTesting + static String readFirstLine(File file) { + FirstLineReadingProcessor callback = new FirstLineReadingProcessor(); + try { + return Files.readLines(file, Charsets.UTF_8, callback); + } catch (IOException e) { + throw new IllegalArgumentException("Unable to detect file type of file " + file, e); + } + } + + + private static class FirstLineReadingProcessor implements com.google.common.io.LineProcessor { + private String firstNonBlankLine; + + @Override + public boolean processLine(String line) throws IOException { + if(isEmptyLine(line)) { + return true; + } else { + firstNonBlankLine = line.trim(); + return false; + } + } + + private boolean isEmptyLine(String line) { + return StringUtils.isBlank(line); + } + + @Override + public String getResult() { + return firstNonBlankLine; + } + } +}