ModelDefinitionWriter.java

package cern.accsoft.steering.jmad.tools.modeldefs.creating;

import static java.util.Objects.requireNonNull;

import java.io.File;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;
import cern.accsoft.steering.jmad.modeldefs.io.ModelDefinitionPersistenceService;
import cern.accsoft.steering.jmad.modeldefs.io.impl.ModelDefinitionUtil;
import cern.accsoft.steering.jmad.modeldefs.io.impl.XmlModelDefinitionPersistenceService;
import cern.accsoft.steering.jmad.util.xml.PersistenceServiceException;

public class ModelDefinitionWriter {

    private static final Logger LOGGER = LoggerFactory.getLogger(ModelDefinitionWriter.class);

    private static final String DEFAULT_DESTINATION_PATH = "src/java/cern/accsoft/steering/jmad/modeldefs/defs";

    private final String destPath;
    private final ModelDefinitionPersistenceService service = new XmlModelDefinitionPersistenceService();

    public ModelDefinitionWriter(String destPath) {
        this.destPath = requireNonNull(destPath);
    }

    public static ModelDefinitionWriter create() {
        return toDestination(DEFAULT_DESTINATION_PATH);
    }

    public static ModelDefinitionWriter toDestination(String destPath) {
        return new ModelDefinitionWriter(destPath);
    }

    public void write(Iterable<JMadModelDefinition> modelDefinitions) {
        for (JMadModelDefinition modelDefinition : modelDefinitions) {
            File file = getFile(modelDefinition);
            LOGGER.info("Writing model definition '{}' to file {}.", modelDefinition, file);
            writeToXml(modelDefinition, file);
        }
    }

    private File getFile(JMadModelDefinition modelDefinition) {
        String fileName;
        fileName = ModelDefinitionUtil.getProposedXmlFileName(modelDefinition);
        String filePath;
        if (destPath != null) {
            filePath = destPath + File.separator + fileName;
        } else {
            filePath = fileName;
        }
        File file = new File(filePath);
        System.out.println("Writing file '" + file.getAbsolutePath() + "'.");
        return file;
    }

    private void writeToXml(JMadModelDefinition modelDefinition, File file) {
        try {
            service.save(modelDefinition, file);
        } catch (PersistenceServiceException e) {
            System.out.println("Could not save model definition to file '" + file.getAbsolutePath());
            e.printStackTrace();
        }
    }

    // public final static void main(String[] args) {
    //
    // ModelDefinitionWriter creator = null;
    // if (args.length > 0) {
    // creator = new ModelDefinitionWriter(args[0]);
    // } else {
    // creator = new ModelDefinitionWriter(DEFAULT_DESTINATION_PATH);
    // }
    //
    // creator.createThem();
    //
    // }

}