/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CATS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.service.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import org.apache.commons.lang.IllegalClassException; import org.apache.log4j.Logger; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.representer.Representer; /** * Provides a util to handle YAML files. * * @author skurup00c * */ public class YAMLUtils { private static Logger logger = Logger.getLogger( YAMLUtils.class ); @SuppressWarnings( "unchecked" ) public static synchronized < T > T loadFromYAML( String filePath, T resultObject, Constructor constructor ) throws IllegalClassException, IOException { Yaml yaml; FileInputStream fileIS = null; if ( constructor != null ) { yaml = new Yaml( constructor ); } else { yaml = new Yaml(); } try { fileIS = new FileInputStream( filePath ); resultObject = ( T ) yaml.load( fileIS ); } catch ( FileNotFoundException exception ) { File file = new File( filePath ); file.createNewFile(); // create file if one does not exist. fileIS = new FileInputStream( filePath ); resultObject = ( T ) yaml.load( fileIS ); } catch ( ClassCastException e ) { logger.warn( "YAML content found at " + filePath + " does not conform to passed object " + e.getMessage() ); throw new IllegalClassException( "YAML content found at " + filePath + " does not conform to passed object " + e.getMessage() ); } finally{ if(fileIS != null) { fileIS.close(); } } return resultObject; } public static synchronized < T > void saveAsYAML( String filePath, T objectToSave, Representer representer ) throws FileNotFoundException { if ( objectToSave != null ) { Yaml yaml; FileWriter fw = null; if ( representer == null ) { yaml = new Yaml(); } else { yaml = new Yaml( representer ); } try { File file = new File( filePath ); file.createNewFile(); // create file if one does not exist. fw = new FileWriter( filePath ); yaml.dump( objectToSave, fw ); } catch ( Exception e ) { e.printStackTrace(); } finally{ if(fw != null) { try { fw.close(); } catch ( IOException e ) { e.printStackTrace(); } } } } } }