JMadModelDefinitionExporter.java

// @formatter:off
/*******************************************************************************
*
* This file is part of JMad.
* 
* Copyright (c) 2008-2011, CERN. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* 
******************************************************************************/
// @formatter:on

/**
 * 
 */
package cern.accsoft.steering.jmad.modeldefs.io;

import static cern.accsoft.steering.jmad.modeldefs.io.JMadModelDefinitionExportRequest.allFrom;

import java.io.File;

import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;

/**
 * This is the interface of a class that can export jmad model-definitions to
 * flat files or zip files.
 * 
 * @author Kajetan Fuchsberger (kajetan.fuchsberger at cern.ch)
 */
public interface JMadModelDefinitionExporter {

	/**
	 * exports the model definition to the given path. If the path is a directory
	 * then it is exported as separated local files, If is a filename then it is
	 * exported as a jmd.zip file.
	 * 
	 * only the optics, sequences and ranges according to the export request are
	 * actually exported.
	 * 
	 * @param exportRequest
	 *            the export request to select the scope of the export
	 * @param exportPath
	 *            the destination path
	 * @return either the xml file to which the model definition was written if the
	 *         export was to separate files or the zip file to which the whole model
	 *         definition and files were written.
	 */
	File export(JMadModelDefinitionExportRequest exportRequest, File exportPath);

	/**
	 * exports the model definition to separate files within the destination
	 * directory
	 * 
	 * only the optics, sequences and ranges according to the export request are
	 * actually exported.
	 * 
	 * @param destDir
	 *            the destination directory
	 * @return the xml file to which the model definition was written to
	 */
	File exportAsFiles(JMadModelDefinitionExportRequest exportSpecification, File destDir);

	/**
	 * exports the model definition to a zip file containing all the required files.
	 * 
	 * only the optics, sequences and ranges according to the export request are
	 * actually exported.
	 * 
	 * @param zipFile
	 *            the zip file which shall finally contain the model definitioin
	 * @return the zip file to which the data was written (can be different since
	 *         the default extension might have been added)
	 */
	File exportAsZip(JMadModelDefinitionExportRequest exportSpecification, File zipFile);

	/* -- default methods below for backwards compatibility & convenience -- */

	/**
	 * exports the model definition to the given path. If the path is a directory
	 * then it is exported as separated local files, If is a filename then it is
	 * exported as a jmd.zip file.
	 * 
	 * @param modelDefinition
	 *            the model definition to export.
	 * @param exportPath
	 *            the destination path
	 * @return either the xml file to which the model definition was written if the
	 *         export was to separate files or the zip file to which the whole model
	 *         definition and files were written.
	 */
	default File export(JMadModelDefinition modelDefinition, File exportPath) {
		return export(allFrom(modelDefinition), exportPath);
	}

	/**
	 * exports the model definition to separate files within the destination
	 * directory
	 * 
	 * @param modelDefinition
	 *            the modelDefinition to export
	 * @param destDir
	 *            the destination directory
	 * @return the xml file to which the model definition was written to
	 */
	default File exportAsFiles(JMadModelDefinition modelDefinition, File destDir) {
		return exportAsFiles(allFrom(modelDefinition), destDir);
	}

	/**
	 * exports the model definition to a zip file containing all the required files.
	 * 
	 * @param modelDefinition
	 *            the {@link JMadModelDefinition} to export
	 * @param zipFile
	 *            the zip file which shall finally contain the model definitioin
	 * @return the zip file to which the data was written (can be different since
	 *         the default extension might have been added)
	 */
	default File exportAsZip(JMadModelDefinition modelDefinition, File zipFile) {
		return exportAsZip(allFrom(modelDefinition), zipFile);
	}
}