//-----------------------------------------------------------------------
//
// Copyright (c) 2011 Deltares. All rights reserved.
//
// B.S.T. The
// tom.the@deltares.nl
// 20-12-2011
// Load and save state for DikeFlow calculation
//-----------------------------------------------------------------------
using System.IO;
using Deltares.Standard.IO;
namespace Deltares.Dam.Data
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class DupuitStateFilerException : ApplicationException
{
public DupuitStateFilerException(string message)
: base(message)
{
}
}
public class DupuitStateFiler
{
public const string initialStateExtension = ".C000";
public const string endStateExtension = ".CEND";
static private void ThrowIfPathNotExists(string path)
{
if (!Directory.Exists(path))
{
throw new DupuitStateFilerException(String.Format("Path '{0}' not found", path));
}
}
static private void CreateDirectoryIfNotExists(string pathName)
{
if (!Directory.Exists(pathName))
{
Directory.CreateDirectory(pathName);
}
}
static public void SaveState(string sourcePath, string destinationPath, string extension)
{
ThrowIfPathNotExists(sourcePath);
CreateDirectoryIfNotExists(destinationPath);
CopyFiles(sourcePath, destinationPath, extension, endStateExtension);
}
private static void CopyFiles(string sourcePath, string destinationPath, string sourceExtension, string destinationExtension)
{
string[] fileEntries = Directory.GetFiles(sourcePath, "*" + sourceExtension);
foreach (string fileEntry in fileEntries)
{
string sourceFilename = Path.GetFileName(fileEntry);
string destinationFilename = Path.Combine(destinationPath, Path.ChangeExtension(sourceFilename, destinationExtension));
if (File.Exists(destinationFilename))
{
File.Delete(destinationFilename);
}
File.Copy(fileEntry, destinationFilename);
}
}
static public void LoadState(string sourcePath, string destinationPath, string stateExtension)
{
ThrowIfPathNotExists(sourcePath);
CreateDirectoryIfNotExists(destinationPath);
CopyFiles(sourcePath, destinationPath, stateExtension, initialStateExtension);
}
///
/// Gets the last state extension; this is the extension with the highest number
///
/// The source path.
/// The extension mask.
///
static public string GetLastStateExtension(string sourcePath, string fileStateMask)
{
string[] fileEntries = Directory.GetFiles(sourcePath, fileStateMask);
List fileEntriesList = fileEntries.ToList();
fileEntriesList.Sort();
string extension = Path.GetExtension(fileEntriesList.Last());
return extension;
}
}
}