/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.configuration.internal; import java.io.File; import java.io.IOException; import de.rcenvironment.core.configuration.ConfigurationException; import de.rcenvironment.core.configuration.ConfigurationSegment; /** * Internal service for handling hierarchical configuration data. Data is read as a single snapshot. To change the configuration, modify the * snapshot and pass it to the update() method. * * @author Robert Mischke */ public interface ConfigurationStore { /** * Retrieves a snapshot of the current configuration. * * @return the snapshot * @throws IOException on I/O errors (file reading or parsing) */ ConfigurationSegment getSnapshotOfRootSegment() throws IOException; /** * Creates an empty configuration segment, typically as a placeholder for a broken configuration file. * * @return the empty {@link ConfigurationSegment} */ ConfigurationSegment createEmptyPlaceholder(); /** * Updates the current configuration with a complete snapshot or a sub-segment of one. * * @param configuration the part of a previously loaded snapshot to merge and write * @throws ConfigurationException on errors in the configuration data * @throws IOException on I/O errors (general disk error or write conflict) */ void update(ConfigurationSegment configuration) throws ConfigurationException, IOException; /** * Writes/exports the given {@link ConfigurationSegment} to a separate file. * * @param configurationSegment the segment to write * @param destination the file to write to * @throws IOException on general I/O errors */ void exportToFile(ConfigurationSegment configurationSegment, File destination) throws IOException; }