# -*- coding: iso-8859-1 -*-
#
#-------------------------------------------------------------------------------
#                    Code_Saturne version 1.3
#                    ------------------------
#
#
#     This file is part of the Code_Saturne User Interface, element of the
#     Code_Saturne CFD tool.
#
#     Copyright (C) 1998-2007 EDF S.A., France
#
#     contact: saturne-support@edf.fr
#
#     The Code_Saturne User Interface 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 2 of
#     the License, or (at your option) any later version.
#
#     The Code_Saturne User Interface 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 the Code_Saturne Kernel; if not, write to the
#     Free Software Foundation, Inc.,
#     51 Franklin St, Fifth Floor,
#     Boston, MA  02110-1301  USA
#
#-------------------------------------------------------------------------------


"""
This module defines the 'Start/Restart' page.

This module defines the following classes:
- StartRestartModel
- HistoFilesDialog
- AdvancedOptionsDialog
- StartRestartView
- PageText
- StartRestartTestCase
"""


#-------------------------------------------------------------------------------
# Library modules import
#-------------------------------------------------------------------------------


import os, sys, string, types
import Tix
from Tkconstants import *
import tkFileDialog, tkMessageBox
import unittest

#-------------------------------------------------------------------------------
# Application modules import
#-------------------------------------------------------------------------------


from Base.Common import *
import Base.Toolbox as Tool
import Base.Dialog as Dialog
import Base.TkPage as TkPage


#-------------------------------------------------------------------------------
# Start-Restart model class
#-------------------------------------------------------------------------------


class StartRestartModel:
    """
    Manage the input/output markups in the xml doc about Start and Restart
    """
    def __init__(self, case):

        """
        Constuctor.
        """
        self.case = case

        self.node_magt = self.case.xmlInitNode('calcul_management')
        self.node_start = self.node_magt.xmlInitNode('start_restart')
        self.node_restart = self.node_start.xmlInitNode('restart', 'status')


    def defaultStartRestartValues(self):
        """
        Return in a dictionnary which contains default values
        """
        default = {}
        default['restart']                = "off"
        default['restart_with_auxiliary'] = "on"
        default['main_restart']           = "binary"
        default['auxiliary_restart']      = "binary"
        default['restart_rescue']         = 0
        default['frozen_field']           = "off"

        return default


    def mUpdateHistoryRestartFiles(self, dir):
        """
        """
        previous = self.node_start.xmlGetString('current_restart')

        if previous:
            self.node_start.xmlSetData('restart_history', previous)
            self.node_start.xmlRemoveChild('current_restart')

        self.node_start.xmlSetData('current_restart', os.path.basename(dir))


    def mGetCurRest(self, event=None):
        return self.node_start.xmlGetStringList('current_restart')


    def mGetString(self, key):
        return self.node_start.xmlGetStringList(key)


    def mSetStartRestart(self, var):
        self.node_restart['status'] = var


    def mSetRestartKey(self, key, var):
        self.node_start.xmlSetData(key, var)


    def removeCurrentRestart(self):
        self.node_start.xmlRemoveChild('current_restart')


    def mGetRestart(self):
        """
        Return if this calcul is restarting with a restart file
        """
        restart = self.node_restart['status']

        if restart not in ("on", "off"):
#            print self.defaultStartRestartValues['restart']
            restart = self.defaultStartRestartValues()['restart']
            self.mSetRestart(restart)

        return restart


    def mSetRestart(self, v):
        """
        Set if the velocity and the pressure are solved
        """
#        node = self.node_start.xmlInitNode('restart', 'status')
        self.node_restart['status'] = v


    def mGetFrozenField(self):
        """
        Return if the velocity and the pressure are solved
        """
        node = self.node_start.xmlGetNode('frozen_field', 'status')

        if not node or node['status'] not in ("on", "off"):
            v = self.defaultStartRestartValues()['frozen_field']
            self.setFrozenField(v)
            node = self.node_start.xmlGetNode('frozen_field')

        return node['status']


    def mSetFrozenField(self, v):
        """
        """
        node = self.node_start.xmlInitNode('frozen_field', 'status')
        node['status'] = v


    def mGetRestartOptions(self, default):
        """
        Set if the velocity and the pressure are solved
        """
        v = self.node_restart['status']
        if v: default['restart'] = v

        node1 = self.node_start.xmlInitNode('restart_with_auxiliary', 'status')
        v = node1['status']
        if v: default['restart_with_auxiliary'] = v

        v = self.node_start.xmlGetInt('restart_rescue')
        if not v or v == 0: 
            default['restart_rescue'] = 0
            default['period_rescue'] = "4 output"
        else: 
            if v == -1:
                default['restart_rescue'] = -1
                default['period_rescue'] = "At the end"
            else: 
                default['restart_rescue'] = v
                default['period_rescue'] = "Frequency"

        node2 = self.node_start.xmlInitNode('main_restart', 'format')
        v = node2['format']
        if v: default['main_restart'] = v

        node3 = self.node_start.xmlInitNode('auxiliary_restart', 'format')
        v = node3['format']
        if v: default['auxiliary_restart'] = v


    def mSetRestartOptions(self, select):
        """
        """
        node1 = self.node_start.xmlInitNode('restart_with_auxiliary', 'status')
        node2 = self.node_start.xmlInitNode('main_restart', 'format')
        node3 = self.node_start.xmlInitNode('auxiliary_restart', 'format')

        node1['status'] = select['restart_with_auxiliary']
        node2['format'] = select['main_restart']
        node3['format'] = select['auxiliary_restart']

        self.node_start.xmlSetData('restart_rescue', select['restart_rescue'])


#-------------------------------------------------------------------------------
# Popup Window : restart files history
#-------------------------------------------------------------------------------


class HistoFilesDialog(Dialog.Dialog):
    """
    Building of popup window for list of restart files.
    """
    def body(self, master):
        """
        Creation of popup window's widgets for one list of files
        """
        t = PageText()

        # Variables declaration and initialization

        # Window for listing

        wlist = Tix.LabelFrame(master, label=t.HISTO, bd=2)
        wlist.label.config(font=fT)
        wlist.pack(side=TOP, expand=YES, padx=10, pady=20)

        self.l = Tix.ScrolledListBox(wlist.frame,
                                     scrollbar='auto',
                                     width=150, height=200)
        self.l.pack(side=TOP, expand=YES, padx=10, pady=10)
        if self.default:
            for dir in self.default:
                self.l.listbox.insert(END, dir)


    def buttonbox(self):
        """
        Override standard button box.
        """
        t = PageText()

        #Separator
        Tix.Frame(self, height=2, bd=2, relief=SUNKEN).pack(side=TOP, fill =X)

        #Quit button

        box = Tix.Frame(self, relief=FLAT)
        box.pack()

        b = Tix.Button(box, text=t.CLOSE, underline=0, width=10,
                        command=self.cancel, default=ACTIVE)
        b.pack(side=TOP, padx=10, pady=10)


#--------------------------------------------------------------------------------
# Popup Window : Advanced options
#--------------------------------------------------------------------------------


class AdvancedOptionsDialog(Dialog.Dialog):
    """
    Building of popup window for advanced options.
    """

    def getFreq(self, event=None):
        """
        Creation of popup window's widgets
        """
        self.stbar.busy()

        period = self.freq.get()

        if period == "At the end":
            nsuit = -1
            self.result['restart_rescue'] = nsuit
            self.nsuit.set(nsuit)
            self.frre.config(state=DISABLED, bg='grey')

        if period == "4 output":
            nsuit = 0
            self.result['restart_rescue'] = nsuit
            self.nsuit.set(nsuit)
            self.frre.config(state=DISABLED, bg='grey')

        if period == "Frequency":
            self.frre.config(state=NORMAL, bg='white')
            if self.result['restart_rescue'] <= 0:
                nsuit = 1
                self.nsuit.set(nsuit)
            if self.check2.isSPositive(self.frre, self.nsuit):
                self.result['restart_rescue'] = self.nsuit.get()

        self.stbar.idle()


    def body(self, master):
        """
        Creation of popup window's widgets
        """
        t = PageText()

        # Variables declaration and initialization

        self.readauxfile = Tix.StringVar()
        self.freq        = Tix.StringVar()
        self.nsuit       = Tix.IntVar()
        self.mnformat    = Tix.StringVar()
        self.auxformat   = Tix.StringVar()

        self.result=self.default.copy()

        fw       = [0]*2
        l        = [0]*2
        self.mff = [0]*2

        # Read of auxiliary file if analysis start is asked

        if self.default['restart'] == "on":

            self.pw1 = Tix.Frame(master, width=150, relief=GROOVE, bd=2)
            self.pw1.pack(side=TOP, fill=X, padx=20, pady=15)

            rafl = Tix.Label(self.pw1, text=t.READ_AUX_FILE, font=fT, justify=LEFT)
            rafl.grid(row=0, column=0, padx=5, pady=10, sticky=W)
            self.balloon.bind_widget(rafl, balloonmsg=t.KEYWORD+"ILEAUX")

            self.rafb = Tix.Checkbutton(self.pw1, onvalue='on', offvalue='off',
                                        variable=self.readauxfile)
            self.rafb.grid(row=0, column=1, padx=5)
            self.balloon.bind_widget(self.rafb, balloonmsg=t.KEYWORD+"ILEAUX")

            if self.default['restart_with_auxiliary'] == 'on':
                self.rafb.select()
            else :
                self.rafb.deselect()

        # Frequency of rescue of restart file               

        pw3 = Tix.LabelFrame(master, width=150,
                    label=t.FREQ_RESC_RFILE,  relief=FLAT, bd=2)
        pw3.label.config(font=fT, justify=LEFT)
        pw3.pack(side=TOP, fill=X, padx=20, pady=10)

        fpw3 = Tix.Frame(pw3.frame)
        fpw3.pack(side=TOP, fill=X, pady=5)

        self.frrb = Tix.OptionMenu(fpw3)
        self.frrb.menubutton.config(width=25, bd=2, relief=RAISED)
        self.frrb.grid(row=0, column=0, padx=5, pady=10, sticky=W)

        self.frrb.add_command('At the end', label=t.ATHEND)
        self.frrb.add_command('4 output', label=t.FOUROUT)
        self.frrb.add_command('Frequency', label=t.FREQ)
        self.frrb.config(variable=self.freq, command=self.getFreq)
        self.balloon.bind_widget(self.frrb, balloonmsg=t.KEYWORD+'NSUIT')

        self.frre = Tix.Entry(fpw3, width=6, textvariable=self.nsuit)
        self.frre.grid(row=0, column=1, padx=5, pady=10, sticky=E)
        self.frre.event_add("<<Event>>", "<Return>", "<Leave>", "<FocusOut>")
        self.frre.bind("<<Event>>", self.getFreq)

        self.nsuit.set(self.default['restart_rescue'])
        self.balloon.bind_widget(self.frre, balloonmsg=t.KEYWORD+'NSUIT')

        if self.default['restart_rescue'] == -1:
            self.nsuit.set(-1)
            self.frre.config(state=DISABLED, bg='grey')
            self.frrb.config(value='At the end')

        elif self.default['restart_rescue'] == 0:
            self.nsuit.set(0)
            self.frre.config(state=DISABLED, bg='grey')
            self.frrb.config(value='4 output')
        else:
            self.frrb.config(value='Frequency')
            self.frre.config(state=NORMAL,bg='white')
            self.nsuit.set(self.default['restart_rescue'])

        # Written format of files at the end of the calculation

        pw2 = Tix.LabelFrame(master, width=150,
                             label=t.FORMAT, relief=FLAT, bd=2)
        pw2.label.config(font=fT, justify=LEFT)
        pw2.pack(side=TOP, fill=X, padx=20, pady=10)

        for n, lab, bout, var, kw in \
                [ (0, t.MAIN_FILE, 'main_restart',      self.mnformat,  "IFOAVA"),
                  (1, t.AUX_FILE,  'auxiliary_restart', self.auxformat, "IFOAVX") ]:

            fw[n] = Tix.Frame(pw2.frame)
            fw[n].pack(side=TOP, fill=X, padx=15, pady=5)

            self.mff[n] = Tix.Select(fw[n],
                                     label=lab, labelside=LEFT,
                                     allowzero=0, radio=1)
            self.mff[n].label.config(width=20)
            self.mff[n].add('binary', text=t.BINARY, width=6)
            self.mff[n].add('ascii',  text=t.ASCII,  width=6)
            self.mff[n].pack(side=LEFT, padx=5, pady=5)
            self.balloon.bind_widget(self.mff[n].label, balloonmsg=t.KEYWORD+kw)

            # value by default
            #
            if self.default[bout] == 'ascii':
                self.mff[n].ascii.invoke()
                var.set('ascii')
            else:
                self.mff[n].binary.invoke()
                var.set('binary')

            self.mff[n].config(variable=var)


    def apply(self):
        """
        What to do when user clicks on 'OK'.
        """
        if self.default['restart'] == 'on':
            self.result['restart_with_auxiliary'] = self.readauxfile.get()

        self.result['restart_rescue'] = self.nsuit.get()
        self.result['period_rescue'] = self.freq.get()

        if self.mnformat.get() == "('binary',)" or self.mnformat.get() == "binary":
            string = "binary"
        else:
            string = "ascii"
        self.result['main_restart'] = string

        if self.auxformat.get() == "('binary',)" or self.auxformat.get() == "binary":
            string = "binary"
        else:
            string = "ascii"
        self.result['auxiliary_restart'] = string

        #self.result['main_restart'] = self.mnformat.get()
        #self.result['auxiliary_restart'] = self.auxformat.get()

#-------------------------------------------------------------------------------
# Main class
#-------------------------------------------------------------------------------


class StartRestartView(TkPage.Page):
    """
    This page is devoted to the start/restart control.
    """
    def _tkControlVariables(self):
        """
        Tkinter variables declaration.
        """
        self.case_path      = Tix.StringVar()
        self.yes_no         = Tix.StringVar()
        self.results_format = Tix.StringVar()
        self.restart_format = Tix.StringVar()
        self.frozenfield    = Tix.StringVar()


    def _pageControl(self):
        """
        Xml node declaration and supplementary default value settings.
        """
        self.model = StartRestartModel(self.case)


    def getCurrent(self, lfile, dir_name, event=None):
        """
        Xml up to date between current and previous restart_history.
        """
        t = PageText()
        self.stbar.busy()

        exist_name = os.readlink(lfile)

        if dir_name != exist_name :
            ans = Dialog.askyesno(self.master, title=t.WARNING,
                                  image='question.gif',
                                  text=t.AVERT + exist_name +'\n\n' + t.ERASE1 +'\n\n'+t.ERASE2)
            if ans == 'yes':
                os.unlink(lfile)
                os.symlink(os.path.abspath(dir_name),lfile)
                self.model.mUpdateHistoryRestartFiles(dir_name)

        self.stbar.idle()


    def searchDir(self, event=None):
        """
        Search restart file (directory) in list of directories
        """
        t = PageText()
        self.stbar.busy()

        dir_name = Dialog.dirselect(self.master,
                                    stbar=self.stbar,
                                    title=t.SEARCH_TITLE,
                                    default=self.case['case_path']+'/RESU')

        if dir_name:
            rpath  = os.path.split(os.path.abspath(dir_name))[0]
            rpath2 = os.path.split(rpath)[0]
            #lfile  = os.path.split(rpath2)[0]+'/DATA/SUITE'
            lfile  = self.case['case_path']+'/DATA/SUITE'

            try:
                os.symlink(os.path.abspath(dir_name), lfile)
                self.model.mUpdateHistoryRestartFiles(dir_name)
            except:
                self.getCurrent(lfile, dir_name)
        try:
            name = os.path.basename(dir_name)
            if name:
                self.model.mSetRestartKey('current_restart', name)
                self.nameDir2.config(text=name, font=fB)
                self.nameDir1.grid(row=1, column = 1)
                self.nameDir2.grid(row=1, column = 2, columnspan=5)
        except: 
            pass

        self.stbar.idle()


    def getHisto(self, event=None):
        """
        List of restart files
        """
        self.stbar.busy()

        t=PageText()

        default = []

        cur_rst  = self.model.mGetCurRest()
        prev_rst = self.model.mGetRestHist()
        if cur_rst and cur_rst[0]:
            default.append(cur_rst[0])
        if prev_rst:
            for dir in prev_rst:
                default.append(dir)

        dialog = HistoFilesDialog(self.master, title=t.HIS,
                                  stbar=self.stbar,
                                  default=default)

        self.stbar.idle()


    def getRestart(self, event=None):
        """
        Input ISUITE Code_Saturne keyword.
        """
        self.stbar.busy()
        self.model.mSetStartRestart(self.yes_no.get())
        self.s1.pack_forget()
        self.w2.pack_forget()
        self.s2.pack_forget()
        self.w3.pack_forget()
        self.nameDir1.grid_forget()
        self.nameDir2.grid_forget()

        if self.yes_no.get() == "off":
            self.fil.configure(state=DISABLED)
            #self.his.configure(state=DISABLED)
            self.s2.pack(side=TOP, fill=X)
            self.w3.pack(side=TOP, fill = X, padx=10)
            self.model.mSetFrozenField("off")
            self.frozenfield.set("off")
            self.r[1].select()
        else:
            self.fil.configure(state=NORMAL)
            #self.his.configure(state=NORMAL)
            self.s1.pack(side=TOP, fill=X)
            self.w2.pack(side=TOP, fill = X, padx=10, pady=10)
            self.s2.pack(side=TOP, fill=X)
            self.w3.pack(side=TOP, fill = X, padx=10)
            self.r[0].select()

            name = self.model.mGetString('current_restart')
            if name:
                self.nameDir1.grid(row=1, column = 1)
                self.nameDir2.grid(row=1, column = 2, columnspan=5)

        self.stbar.idle()


    def getFrozenField(self, event=None):
        """
        Input if calculation on frozen velocity and pressure fields or not
        """
        self.stbar.busy()
        self.model.mSetFrozenField(self.frozenfield.get())
        self.stbar.idle()


    def getAdvancedOptions(self, event=None):
        """
        Ask one popup for advanced specifications
        """
        t=PageText()
        self.stbar.busy()

        default                           = {}
        default['restart']                = "off"
        default['restart_with_auxiliary'] = "on"
        default['period_rescue']          = "4 output"
        default['restart_rescue']         = 0
        default['main_restart']           = "binary"
        default['auxiliary_restart']      = "binary"

        self.model.mGetRestartOptions(default)

        dialog = AdvancedOptionsDialog(self.master, title=t.OPTIONS,
                                        stbar=self.stbar, default=default)
        select = dialog.result
        self.model.mSetRestartOptions(select)

        self.stbar.idle()


    def _createWidgets(self):
        """
        Make widgets and the layout for restart management.
        """
        t = PageText()

        lf1 = Tix.LabelFrame(self.myPage, bd=2, label=t.RESTART_TITLE, relief=FLAT)
        lf1.label.config(font=fT)
        lf1.pack(side=TOP, fill=X, padx=10, pady=10)

        w1 = Tix.Frame(lf1.frame,relief=FLAT)
        w1.pack(side=TOP)

        l = Tix.Label(w1, text=t.RESTART)
        self.balloon.bind_widget(l, balloonmsg=t.KEYWORD+"ISUITE")
        l.grid(row=0, column=0, padx=5, pady=10, sticky=W)
        
        self.r = [0]*2
        for (i, tx1, tx2) in [(0, t.YES, "on"),
                              (1, t.NO,  "off")]:
            self.r[i] = Tix.Radiobutton(w1, text=tx1, value=tx2,
                                        variable=self.yes_no,
                                        command=self.getRestart)
            self.r[i].grid(row=0, column=i+1)
            self.balloon.bind_widget(self.r[i], balloonmsg=t.KEYWORD+"ISUITE")

        # name of restart directory
        #
        self.nameDir1 = Tix.Label(w1, text='SUITE: ', font=fB)
        self.nameDir2 = Tix.Label(w1)
        # research of restart file in list of files
        #
        self.img = Tix.PhotoImage(file=PIC_PATH+'search1.gif')
        self.fil = Tix.Button(w1, image=self.img, command=self.searchDir)
        self.fil.grid(row=0, column=5, sticky=E, padx=10, pady=5)
        self.balloon.bind_widget(self.fil, balloonmsg=t.MSG_SEARCH)

        #self.iml = Tix.PhotoImage(file=PIC_PATH+'file_cab.gif')
        #self.his = Tix.Button(w1, image=self.iml,command=self.getHisto)
        #self.his.grid(row=0, column=6, sticky=E, padx=10, pady=5)
        #self.balloon.bind_widget(self.his, balloonmsg=t.MSG_HIS)

        # Separator
        #            
        self.s1 = Tix.Frame(lf1.frame, height=2, bd=2, relief=SUNKEN)
        self.s1.pack(side=TOP, fill=X)

        # Analysis on frozen velocity and pressure fields
        #
        self.w2 = Tix.Frame(lf1.frame, relief=FLAT)
        self.w2.pack(side=TOP, fill = X, padx=10, pady=10)

        labfrf = Tix.Label(self.w2, text=t.FROZEN_FIELDS)
        labfrf.grid(row=0, column=0, padx=5, pady=10, sticky=W)
        self.balloon.bind_widget(labfrf, balloonmsg=t.KEYWORD+"ICCVFG")

        self.frf = Tix.Checkbutton(self.w2, onvalue='on', offvalue='off',
                                   variable=self.frozenfield,
                                   command=self.getFrozenField)
        self.frf.grid(row=0, column=1, padx=5, sticky=E)

        # Separator
        #
        self.s2 = Tix.Frame(lf1.frame, height=2, bd=2, relief=SUNKEN)
        self.s2.pack(side=TOP, fill=X)

        # Advanced options
        #
        self.w3 = Tix.Frame(lf1.frame, relief=FLAT)
        self.w3.pack(side=TOP, fill = X, padx=10)

        self.lop = Tix.Label(self.w3,  text=t.OPTIONS)
        self.lop.grid(row=0, column=0, padx=5, pady=5, sticky=W)

        self.imsop = Tix.PhotoImage(file=PIC_PATH+'graduate.gif')
        sop = Tix.Button(self.w3, image=self.imsop,
                            command=self.getAdvancedOptions)
        sop.grid(row=0, column=1, padx=5, pady=5, sticky=E)
        #self.balloon.bind_widget(sop, balloonmsg=t.POPUP)


    def _initializeWidgets(self):
        """
        Extract resquested informations from XML document.
        This informations are used to initialize the widgets.
        """
        name = self.case['currentPage']
        if self.case[name]['num_entry'] == 1:

            fil_cur = self.model.mGetString('current_restart')
            data = self.case['case_path'] +'/DATA'
            if 'SUITE' in os.listdir(data):
                try:
                    dir = os.readlink(data +'/SUITE')
                except:
                    dir = data +'/SUITE'
                    if not os.path.isdir(dir):
                        Dialog.Warning(self.master, title=t.WARNING, text=t.MSG_NOT_DIR)

#                self.model.mSetRestartKey('current_restart', 
#							os.path.basename(dir))
#
# ne fonctionne pas pour l'instant
#		if fil_cur and fil_cur != dir:
#		    self.model.mSetRestartKey('restart_history', fil_cur)

            else:
                if fil_cur:
                    self.model.removeCurrentRestart()
                    self.model.mSetRestartKey('restart_history', fil_cur)

        name = self.model.mGetString('current_restart')
        if name: self.nameDir2.config(text=name[0], font=fB)

        if self.model.mGetRestart() == "on":
            self.r[0].select()
            if name: 
                self.nameDir1.grid(row=1, column = 1)
                self.nameDir2.grid(row=1, column = 2, columnspan=5)
        else:
            self.r[1].select()
            self.getRestart()
            if name: 
                self.nameDir1.grid_forget()
                self.nameDir2.grid_forget()

        self.frozenfield.set(self.model.mGetFrozenField())


#-------------------------------------------------------------------------------
# Text and messages for this page
#-------------------------------------------------------------------------------


class PageText:
    """
    Storage of all texts and messages for this page.
    """
    def __init__(self):
        
        # 1) Texts
        #
        if Tool.GuiParam.lang == 'fr':
            self.ASCII          = "Ascii"
            self.ATHEND         = "Sauvegarde à la fin du calcul"
            self.BINARY         = "Binaire"
            self.CLOSE          = "Quitter"
            self.KEYWORD        = "Mot clé Code_Saturne : "
            self.NO             = "non"
            self.FOUROUT        = "4 sauvegardes"
            self.FREQ           = "Fréquence de sauvegarde :"
            self.FREQ_RESC_RFILE= "Période de sauvegarde du fichier suite"
            self.FROZEN_FIELDS  = "Calcul sur champs de vitesse et de pression figés"
            self.RESTART        = "Suite de calcul : "
            self.RESTART_FORMAT = "Format du fichier suite : "
            self.RESTART_TITLE  = "Gestion des suites"
            self.RESU_FORMAT    = "Format du fichier résultats :"
            self.YES            = "oui"
            self.OPTIONS        = "Options avancées"
            self.READ_AUX_FILE  = "Lecture du fichier suite auxilliaire\nen début de calcul"
            self.FORMAT         = "Format d'écriture des fichiers\nsuite en fin de calcul"
            self.MAIN_FILE      = "Fichiers principaux"
            self.AUX_FILE       = "Fichiers auxiliaires"
            self.HIS            = "Répertoires SUITE"
            self.HISTO          = "Historique des répertoires\nSUITE utilisés"
            self.SEARCH_TITLE   = "Sélection du répertoire suite"
            self.WARNING        = "ATTENTION"
        else:
            self.ASCII          = "Ascii"
            self.ATHEND         = "Save at the end of calculation"
            self.BINARY         = "Binary"
            self.CLOSE          = "Quit"
            self.KEYWORD        = "Code_Saturne key word: "
            self.NO             = "off"
            self.FOUROUT        = "4 rescue files"
            self.FREQ           = "Save at frequency :"
            self.FREQ_RESC_RFILE= "Frequency of rescue restart file"
            self.FROZEN_FIELDS  = "Calculation on frozen velocity and pressure fields"
            self.RESTART        = "Analysis restart:"
            self.RESTART_FORMAT = "Restart file format: "
            self.RESTART_TITLE  = "Start/Restart"
            self.RESU_FORMAT    = "Results file format:"
            self.YES            = "on"
            self.OPTIONS        = "Advanced options"
            self.READ_AUX_FILE  = "Read the auxiliary restart file\nat the begin of the analysis"
            self.FORMAT         = "Output restart files format\nat the end of the anaylsis"
            self.MAIN_FILE      = "Main files"
            self.AUX_FILE       = "Auxiliary files"
            self.HIS            = "SUITE directories"
            self.HISTO          = "Restart SUITE directories's\nhistory"
            self.SEARCH_TITLE   = "Selection of the restart directory SUITE"
            self.WARNING        = "WARNING"

        # 2) Messages
        #
        if Tool.GuiParam.lang == 'fr':
            self.AVERT          = "Le lien symbolique suivant existe déjà dans le "\
                                  "répertoire DATA :\n\n"
            self.ERASE1         = "Ce lien sera détruit au profit du nouveau "\
                                  "lien que vous venez de demander."
            self.ERASE2  	= "Voulez vous vraiment détruire le lien existant ?"
            self.MSG_FREQ       = "Attention : ce nombre n'est pas cohérent avec ce que vous avez demandé"                  
            self.MSG_HIS        = "Historique des répertoires suite sélectionnés"
            self.MSG_SEARCH     = "Sélection du répertoire suite et création d'un\n"\
                                      "lien symbolique dans le répertoire DATA"
            self.MSG_NOT_DIR    = "Le répertoire SUITE n'exite pas !"
        else:
            self.AVERT          = "The following symbolic link is already in DATA "\
                                  "repertory:\n\n"
            self.ERASE1         = "This link will be replaced by the asked new link. " 
            self.ERASE2         = "Do you want really erase the existing link ?"
            self.MSG_FREQ       = "Warning : this number isn't coherent with what you asked"                  
            self.MSG_HIS        = "History of selected restart directories"
            self.MSG_SEARCH     = "Selection of the restart directory and\n"\
                                  "creation of the symbolic link in the DATA "\
                                  "directory"
            self.MSG_NOT_DIR    = "The directory 'SUITE' does not exist!"


#-------------------------------------------------------------------------------
# StartRestartModel test case
#-------------------------------------------------------------------------------


class StartRestartTestCase(unittest.TestCase):
    """
    """
    def setUp(self):
        """
        This method is executed before all "check" methods.
        """
        from Base.XMLengine import Case, XMLDocument
        from Base.XMLinitialize import XMLinit
        Tool.GuiParam.lang = 'en'
        self.case = Case()
        XMLinit(self.case)
        self.doc = XMLDocument()


    def tearDown(self):
        """
        This method is executed after all "check" methods.
        """
        del self.case
        del self.doc


    def checkStartRestartInstantiation(self):
        """
        Check whether the StartRestartModel class could be instantiated
        """
        model = None
        model = StartRestartModel(self.case)
        assert model != None, 'Could not instantiate StartRestartModel'


    def checkUpdateHistoryRestartFiles(self):
        """
        Check whether the updateHistoryRestartFiles method could be set
        """
        model = StartRestartModel(self.case)
        truc = model.node_start.toString()
        doc= '<start_restart>'\
               '<restart status=""/>'\
             '</start_restart>'
        assert truc == doc, 'Could not uddate the history of restart files'


    def checkSetRestart(self):
        """
        Check whether the restart method could be set
        """
        model = StartRestartModel(self.case)
        model.mSetRestartKey('current_restart', 'file')
        truc = model.node_start.toString()
        doc= '<start_restart>'\
               '<restart status=""/>'\
               '<current_restart>file</current_restart>'\
             '</start_restart>'
        assert truc == doc, 'Could not set restart'


    def checkSetFrozenStatus(self):
        """
        Check whether the Frozen status method could be set
        """
        model = StartRestartModel(self.case)
        model.mSetFrozenField('on')
        truc = model.node_start.toString()
        doc= '<start_restart>'\
             '<restart status=""/>'\
             '<frozen_field status="on"/>'\
             '</start_restart>'
        assert truc == doc, 'Could not set frozen status'


    def checkSetStartRestartStatus(self):
        """
        Check whether the startRestart method could be set
        """
        model = StartRestartModel(self.case)
        model.mSetStartRestart('off')
        truc = model.node_start.toString()
        doc= '<start_restart>'\
             '<restart status="off"/>'\
             '</start_restart>'
        assert truc == doc, 'Could not set Start/Restart status'


    def checkSetAuxiliaryRestartStatus(self):
        """
        Check whether the Auxiliary Restart Status method could be set
        """
        model = StartRestartModel(self.case)
        default                           = {}
        default['restart_with_auxiliary'] = "on"
        default['restart_rescue']         = "0"
        default['main_restart']           = "binary"
        default['auxiliary_restart']      = "binary"

        model.mSetRestartOptions(default)
        truc = model.node_start.toString()
        doc= '<start_restart>'\
             '<restart status=""/>'\
             '<restart_with_auxiliary status="on"/>'\
             '<main_restart format="binary"/>'\
             '<auxiliary_restart format="binary"/>'\
             '<restart_rescue>0</restart_rescue>'\
             '</start_restart>'
        assert truc == doc, 'Could not set auxiliary restart status'


def suite():
    testSuite = unittest.makeSuite(StartRestartTestCase, "check")
    return testSuite

    
def runTest():
    print "StartRestartTestCase"
    runner = unittest.TextTestRunner()
    runner.run(suite())


#-------------------------------------------------------------------------------
# End
#-------------------------------------------------------------------------------


syntax highlighted by Code2HTML, v. 0.9.1