eu.hydrologis.jgrass.ui.actions.h_adige.AdigeEditor.java Source code

Java tutorial

Introduction

Here is the source code for eu.hydrologis.jgrass.ui.actions.h_adige.AdigeEditor.java

Source

/*
 * JGrass - Free Open Source Java GIS http://www.jgrass.org 
 * (C) HydroloGIS - www.hydrologis.com 
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package eu.hydrologis.jgrass.ui.actions.h_adige;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;

import net.refractions.udig.ui.PlatformGIS;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.IMessageManager;
import org.eclipse.ui.forms.ManagedForm;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.part.EditorPart;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;

import eu.hydrologis.jgrass.database.DatabasePlugin;
import eu.hydrologis.jgrass.database.interfaces.IDatabaseConnection;
import eu.hydrologis.jgrass.ui.UiPlugin;
import eu.hydrologis.jgrass.ui.actions.h_utils.Checker;
import eu.hydrologis.jgrass.ui.actions.messages.Messages;
import eu.hydrologis.jgrass.ui.actions.persistence.SimulationData;
import eu.hydrologis.jgrass.ui.actions.persistence.SimulationDescription;
import eu.hydrologis.jgrass.ui.console.ConsoleCommandExecutor;
import eu.hydrologis.jgrass.ui.utilities.MultiInputDialog;

/**
 * The adige model execution form. 
 * 
 * @author Andrea Antonello (www.hydrologis.com)
 * @author Silvia Franceschi (www.hydrologis.com)
 */
public class AdigeEditor extends EditorPart implements SelectionListener {

    private static final String DOTDOTDOT = "..."; //$NON-NLS-1$
    public static final String ID = "eu.hydrologis.jgrass.ui.actions.h_adige.AdigeEditor"; //$NON-NLS-1$
    private FormToolkit toolkit;
    private ScrolledForm scrolledForm;

    private SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //$NON-NLS-1$

    private HashMap<String, String> textsStringsMap = new HashMap<String, String>();
    private HashMap<String, Text> textsMap = new HashMap<String, Text>();
    private IMessageManager mesgManager;
    private IPreferenceStore preferenceStore;

    // vars
    private String startDateStr;
    private String endDateStr;
    private String timeStepStr;
    private String outputPath;
    private String vegetation;
    private String netnumattr;
    private String pfafattr;
    private String baricenterattr;
    private String startelevattr;
    private String endelevattr;
    private String idmonpointattr;
    private String avgsup10;
    private String avgsup30;
    private String avgsup60;
    private String varsup10;
    private String varsup30;
    private String varsup60;
    private String avgsub;
    private String varsub;
    private String vsup;
    private String vsub;
    private String dopenman;
    private String outpfafids;
    private String startqperarea;
    private String startsupqfract;
    private String startsubqfract;
    private String ks;
    private String mstexp;
    private String specyield;
    private String porosity;
    private String etrate;
    private String satconst;
    private String glaciersup;
    private String glaciersub;
    private String iflayerhfeatures;
    private String iflayerdfeatures;
    private String iflayertfeatures;
    private String iflayerofeatures;
    private String iflayernetpfaf;
    private String iflayerhillslope;
    private String itscalarddata;
    private String itscalarhdata;
    private String itscalartdata;
    private String itscalarodata;
    private String itscalarrain;
    private String iscalarvegetation;
    private String boundaryin;
    private String boundaryout;
    private String logging;

    public AdigeEditor() {
        if (preferenceStore == null)
            preferenceStore = UiPlugin.getDefault().getPreferenceStore();

        startDateStr = preferenceStore.getString(ID + Messages.START_DATE_YYYY_MM_DD_HH_MM);
        endDateStr = preferenceStore.getString(ID + Messages.END_DATE_YYYY_MM_DD_HH_MM);
        timeStepStr = preferenceStore.getString(ID + Messages.TIMESTEP_IN_MINUTES);

        outputPath = preferenceStore.getString(ID + Messages.AdigeMessages_OUTPUT_PATH);

        vegetation = preferenceStore.getString(ID + Messages.AdigeMessages_VEGETATION_FIELD);
        netnumattr = preferenceStore.getString(ID + Messages.NETNUM_FIELD);
        pfafattr = preferenceStore.getString(ID + Messages.AdigeMessages_PFAFSTETTER_FIELD);
        baricenterattr = preferenceStore.getString(ID + Messages.AdigeMessages_BARICENTER_FIELD);
        startelevattr = preferenceStore.getString(ID + Messages.AdigeMessages_STARTELEVATION_FIELD);
        endelevattr = preferenceStore.getString(ID + Messages.AdigeMessages_ENDELEVATION_FIELD);
        idmonpointattr = preferenceStore.getString(ID + Messages.MONITORINGPOINT_ID_FIELD);
        avgsup10 = preferenceStore.getString(ID + Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_20);
        avgsup30 = preferenceStore.getString(ID + Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_50);
        avgsup60 = preferenceStore.getString(ID + Messages.AdigeMessages_SUP_DISTANCE_FIELD_SAT_50);
        varsup10 = preferenceStore.getString(ID + Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_20);
        varsup30 = preferenceStore.getString(ID + Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_50);
        varsup60 = preferenceStore.getString(ID + Messages.AdigeMessages_DISTANCE_FIELD_SAT_50);
        avgsub = preferenceStore.getString(ID + Messages.AdigeMessages_AVERAGE_SUB_DISTANCE_FIELD);
        varsub = preferenceStore.getString(ID + Messages.AdigeMessages_VARIANCE_SUB_DISTANCE_FIELD);

        vsup = preferenceStore.getString(ID + Messages.AdigeMessages_SUPERFICIAL_VELOCITY);
        vsub = preferenceStore.getString(ID + Messages.AdigeMessages_SUBSUPERFICIAL_VELOCITY);
        dopenman = preferenceStore.getString(ID + Messages.AdigeMessages_DO_PENMAN_EVAPOTRANSPIRATION);
        outpfafids = preferenceStore.getString(ID + Messages.AdigeMessages_OUTPUT_PFAFSTETTER_IDS);
        startqperarea = preferenceStore
                .getString(ID + Messages.AdigeMessages_INITIAL_DISCHARGE_PER_AREA_COEFFICIENT);
        startsupqfract = preferenceStore.getString(ID + Messages.AdigeMessages_INITIAL_FRACTION_OF_SUP_DISCHARGE);
        startsubqfract = preferenceStore.getString(ID + Messages.AdigeMessages_INITIAL_FRACTION_OF_SUB_DISCHARGE);
        ks = preferenceStore.getString(ID + Messages.AdigeMessages_GAUKLER_STRICKLER_COEFFICIENT);
        mstexp = preferenceStore.getString(ID + Messages.AdigeMessages_MSTEXP_COEFFICIENT);
        specyield = preferenceStore.getString(ID + Messages.AdigeMessages_SPECYIELD_COEFFICIENT);
        porosity = preferenceStore.getString(ID + Messages.AdigeMessages_SOIL_POROSITY);
        etrate = preferenceStore.getString(ID + Messages.AdigeMessages_CONSTANT_VALUE_OF_EVAPOTRANSPIRATION);
        satconst = preferenceStore.getString(ID + Messages.AdigeMessages_SATURATION_CONSTANT);
        glaciersup = preferenceStore.getString(ID + Messages.AdigeMessages_FRACTION_OF_SUP_DISCHARGE_FROM_GLACIERS);
        glaciersub = preferenceStore.getString(ID + Messages.AdigeMessages_FRACTION_OF_SUB_DISCHARGE_FROM_GLACIERS);

        iflayerhfeatures = preferenceStore.getString(ID + Messages.AdigeMessages_HYDROMETERS_LAYER);
        iflayerdfeatures = preferenceStore.getString(ID + Messages.AdigeMessages_DAMS_LAYER);
        iflayertfeatures = preferenceStore.getString(ID + Messages.AdigeMessages_TRIBUTARIES_LAYER);
        iflayerofeatures = preferenceStore.getString(ID + Messages.AdigeMessages_OFFTAKES_LAYER);
        iflayernetpfaf = preferenceStore.getString(ID + Messages.AdigeMessages_NETWORK_LAYER);
        iflayerhillslope = preferenceStore.getString(ID + Messages.BASINS_LAYER);

        itscalarddata = preferenceStore.getString(ID + Messages.AdigeMessages_DAMS_DATA);
        itscalarhdata = preferenceStore.getString(ID + Messages.AdigeMessages_HYDROMETERS_DATA);
        itscalartdata = preferenceStore.getString(ID + Messages.AdigeMessages_TRIBUTARIES_DATA);
        itscalarodata = preferenceStore.getString(ID + Messages.AdigeMessages_OFFTAKES_DATA);
        itscalarrain = preferenceStore.getString(ID + Messages.AdigeMessages_RAIN_DATA);
        iscalarvegetation = preferenceStore.getString(ID + Messages.AdigeMessages_VEGETATION_DATA);

        boundaryin = preferenceStore.getString(ID + Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_USE);
        boundaryout = preferenceStore.getString(ID + Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_SAVE);

        logging = preferenceStore.getString(ID + Messages.AdigeMessages_LOGGING);

    }

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        setSite(site);
        setInput(input);
    }

    public void createPartControl(Composite parent) {
        toolkit = new FormToolkit(parent.getDisplay());
        scrolledForm = toolkit.createScrolledForm(parent);
        scrolledForm.setText(""); //$NON-NLS-1$
        Form form = scrolledForm.getForm();
        toolkit.decorateFormHeading(form);
        // form.addMessageHyperlinkListener(this);
        form.addMessageHyperlinkListener(new HyperlinkAdapter()); // NEW LINE
        // form.setMessage("This is an error message", IMessageProvider.ERROR);

        mesgManager = new ManagedForm(toolkit, scrolledForm).getMessageManager();

        // the layout
        TableWrapLayout layout = new TableWrapLayout();
        // GridLayout layout = new GridLayout();
        scrolledForm.getBody().setLayout(layout);
        layout.numColumns = 2;

        // main output panel
        createMainPanel();

        // execution panel
        createExecutionPanel();

        // shapefile fileds variables
        createShapefileFieldsVars();

        // model parameters
        createModelParametersVars();

        // input feature layers
        createInputFeatureLayers();

        // input scalarsets
        createInputScalarsets();

        // boundary conditions
        createBoundaryConditions();

        // logging
        createLogging();

    }

    private void createMainPanel() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.MAIN_PANEL);
        section.setDescription(Messages.MAIN_PANEL_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        td.rowspan = 2;
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(3, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelText(mainSectionComposite, startDateStr, Messages.START_DATE_YYYY_MM_DD_HH_MM);
        toolkit.createLabel(mainSectionComposite, ""); //$NON-NLS-1$
        makeLabelText(mainSectionComposite, endDateStr, Messages.END_DATE_YYYY_MM_DD_HH_MM);
        toolkit.createLabel(mainSectionComposite, ""); //$NON-NLS-1$
        makeLabelText(mainSectionComposite, timeStepStr, Messages.TIMESTEP_IN_MINUTES);
        toolkit.createLabel(mainSectionComposite, ""); //$NON-NLS-1$
        makeLabelTextButton(mainSectionComposite, outputPath, Messages.AdigeMessages_OUTPUT_PATH, SWT.SAVE);

    }

    private void createExecutionPanel() {
        Section sectionExecution = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        sectionExecution.setText(Messages.EXECUTION_PANEL);
        sectionExecution.setDescription(Messages.EXECUTION_PANEL_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        sectionExecution.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(sectionExecution);
        GridLayout layout = new GridLayout(1, false);
        mainSectionComposite.setLayout(layout);
        sectionExecution.setClient(mainSectionComposite);

        Button executionButton = toolkit.createButton(mainSectionComposite, Messages.AdigeMessages_EXECUTION,
                SWT.PUSH);
        executionButton.addSelectionListener(this);

        Section sectionImportExport = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        sectionImportExport.setText(Messages.IMPORTEXPORT_PANEL);
        sectionImportExport.setDescription(Messages.IMPORTEXPORT_PANEL_DESCR);
        td = new TableWrapData(TableWrapData.FILL_GRAB);
        sectionImportExport.setLayoutData(td);

        mainSectionComposite = toolkit.createComposite(sectionImportExport);
        layout = new GridLayout(1, true);
        mainSectionComposite.setLayout(layout);
        sectionImportExport.setClient(mainSectionComposite);

        final Button exportButton = toolkit.createButton(mainSectionComposite, Messages.EXPORT_SETTINGS, SWT.PUSH);
        exportButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                FileDialog fileDialog = new FileDialog(exportButton.getShell(), SWT.SAVE);
                String path = fileDialog.open();

                if (path == null || path.length() < 1)
                    return;

                try {
                    BufferedWriter bW = new BufferedWriter(new FileWriter(path));
                    Set<String> keySet = textsStringsMap.keySet();
                    for (String key : keySet) {
                        bW.write(key);
                        bW.write("="); //$NON-NLS-1$
                        bW.write(textsStringsMap.get(key));
                        bW.write("\n"); //$NON-NLS-1$
                    }
                    bW.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }

            }
        });

        final Button importButton = toolkit.createButton(mainSectionComposite, Messages.IMPORT_SETTINGS, SWT.PUSH);
        importButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                FileDialog fileDialog = new FileDialog(exportButton.getShell(), SWT.OPEN);
                String path = fileDialog.open();

                if (path == null || path.length() < 1)
                    return;

                try {
                    BufferedReader bR = new BufferedReader(new FileReader(path));
                    String line = null;
                    while ((line = bR.readLine()) != null) {
                        String[] lineSplit = line.split("="); //$NON-NLS-1$
                        if (lineSplit.length != 2) {
                            continue;
                        }

                        Text text = textsMap.get(lineSplit[0]);
                        if (text != null) {
                            text.setText(lineSplit[1]);
                        }
                    }
                    bR.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        });

        final Button exportToRemoteDatabaseButton = toolkit.createButton(mainSectionComposite,
                Messages.EXPORT_RESULTS_TO_DATABASE, SWT.PUSH);
        exportToRemoteDatabaseButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                try {

                    String userLabel = Messages.USER;
                    String titleLabel = Messages.TITLE;
                    String descrLabel = Messages.DESCRIPTION;
                    String refmodelLabel = Messages.AdigeEditor_ID_OF_USED_H_ENERGYBALANCE_MODEL;
                    MultiInputDialog dialog = new MultiInputDialog(exportToRemoteDatabaseButton.getShell(),
                            Messages.INFORMATION, Messages.SUPPLY_INFO_FOR_THE_SIMULATION, titleLabel, descrLabel,
                            userLabel, refmodelLabel);
                    dialog.setBlockOnOpen(true);
                    int res = dialog.open();

                    if (res != IDialogConstants.OK_ID) {
                        return;
                    }

                    String title = dialog.getStringByLable(titleLabel);
                    String descr = dialog.getStringByLable(descrLabel);
                    String user = dialog.getStringByLable(userLabel);
                    String idEnergybalance = dialog.getStringByLable(refmodelLabel);

                    IDatabaseConnection activeDatabaseConnection = DatabasePlugin.getDefault()
                            .getActiveDatabaseConnection();
                    SessionFactory sF = activeDatabaseConnection.getSessionFactory();
                    Session session = sF.openSession();
                    Transaction transaction = session.beginTransaction();

                    /*
                     * create simulation description
                     */
                    SimulationDescription simDescr = new SimulationDescription();
                    simDescr.setModel("h.adige"); //$NON-NLS-1$
                    simDescr.setTitle(title);
                    simDescr.setDescription(descr);
                    simDescr.setUser(user);
                    try {
                        long parseLong = Long.parseLong(idEnergybalance);
                        simDescr.setReferenceModel(parseLong);
                    } catch (Exception ex) {
                        // if user inserts wrong, for now just don't link
                    }

                    Timestamp ts0 = new Timestamp(new Date().getTime());
                    simDescr.setInsertDate(ts0);

                    String startDateStr = textsStringsMap.get(Messages.START_DATE_YYYY_MM_DD_HH_MM);
                    String endDateStr = textsStringsMap.get(Messages.END_DATE_YYYY_MM_DD_HH_MM);
                    Date startDate = dateFormatter.parse(startDateStr);
                    Date endDate = dateFormatter.parse(endDateStr);
                    Timestamp ts1 = new Timestamp(startDate.getTime());
                    Timestamp ts2 = new Timestamp(endDate.getTime());
                    simDescr.setStartDate(ts1);
                    simDescr.setEndDate(ts2);

                    /*
                     * create simulation data
                     */
                    SimulationData simData = new SimulationData();

                    String outPath = textsStringsMap.get(Messages.AdigeMessages_OUTPUT_PATH);
                    File outFile = new File(outPath);
                    BufferedReader bR = new BufferedReader(new FileReader(outFile));
                    String line = null;
                    StringBuilder sB = new StringBuilder();
                    while ((line = bR.readLine()) != null) {
                        sB.append(line).append("\n"); //$NON-NLS-1$
                    }
                    simData.setSimulationResult(sB.toString());

                    Set<String> keySet = textsStringsMap.keySet();
                    StringBuilder parameters = new StringBuilder();
                    for (String key : keySet) {
                        parameters.append(key).append("=").append(textsStringsMap.get(key)).append( //$NON-NLS-1$
                                "\n"); //$NON-NLS-1$
                    }
                    simData.setModelParameters(parameters.toString());

                    simData.setSimulationDescription(simDescr);

                    session.save(simDescr);
                    session.save(simData);

                    transaction.commit();
                    session.close();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }

            }
        });

    }

    private void createShapefileFieldsVars() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_SHAPEFILE_FIELDS);
        section.setDescription(Messages.AdigeMessages_SHAPEFILE_FIELDS_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(2, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        String label = Messages.AdigeMessages_VEGETATION_FIELD;
        makeLabelText(mainSectionComposite, vegetation, label);
        label = Messages.NETNUM_FIELD;
        makeLabelText(mainSectionComposite, netnumattr, label);
        label = Messages.AdigeMessages_BARICENTER_FIELD;
        makeLabelText(mainSectionComposite, baricenterattr, label);
        label = Messages.AdigeMessages_PFAFSTETTER_FIELD;
        makeLabelText(mainSectionComposite, pfafattr, label);
        label = Messages.AdigeMessages_STARTELEVATION_FIELD;
        makeLabelText(mainSectionComposite, startelevattr, label);
        label = Messages.AdigeMessages_ENDELEVATION_FIELD;
        makeLabelText(mainSectionComposite, endelevattr, label);
        label = Messages.MONITORINGPOINT_ID_FIELD;
        makeLabelText(mainSectionComposite, idmonpointattr, label);
        label = Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_20;
        makeLabelText(mainSectionComposite, avgsup10, label);
        label = Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_50;
        makeLabelText(mainSectionComposite, avgsup30, label);
        label = Messages.AdigeMessages_SUP_DISTANCE_FIELD_SAT_50;
        makeLabelText(mainSectionComposite, avgsup60, label);
        label = Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_20;
        makeLabelText(mainSectionComposite, varsup10, label);
        label = Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_50;
        makeLabelText(mainSectionComposite, varsup30, label);
        label = Messages.AdigeMessages_DISTANCE_FIELD_SAT_50;
        makeLabelText(mainSectionComposite, varsup60, label);
        label = Messages.AdigeMessages_AVERAGE_SUB_DISTANCE_FIELD;
        makeLabelText(mainSectionComposite, avgsub, label);
        label = Messages.AdigeMessages_VARIANCE_SUB_DISTANCE_FIELD;
        makeLabelText(mainSectionComposite, varsub, label);
    }

    private void createModelParametersVars() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_MODEL_PARAMETERS);
        section.setDescription(Messages.AdigeMessages_MODEL_PARAMETERS_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(2, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelText(mainSectionComposite, vsup, Messages.AdigeMessages_SUPERFICIAL_VELOCITY);
        makeLabelText(mainSectionComposite, vsub, Messages.AdigeMessages_SUBSUPERFICIAL_VELOCITY);
        makeLabelText(mainSectionComposite, dopenman, Messages.AdigeMessages_DO_PENMAN_EVAPOTRANSPIRATION);
        makeLabelText(mainSectionComposite, outpfafids, Messages.AdigeMessages_OUTPUT_PFAFSTETTER_IDS);
        makeLabelText(mainSectionComposite, startqperarea,
                Messages.AdigeMessages_INITIAL_DISCHARGE_PER_AREA_COEFFICIENT);
        makeLabelText(mainSectionComposite, startsupqfract,
                Messages.AdigeMessages_INITIAL_FRACTION_OF_SUP_DISCHARGE);
        makeLabelText(mainSectionComposite, startsubqfract,
                Messages.AdigeMessages_INITIAL_FRACTION_OF_SUB_DISCHARGE);
        makeLabelText(mainSectionComposite, ks, Messages.AdigeMessages_GAUKLER_STRICKLER_COEFFICIENT);
        makeLabelText(mainSectionComposite, mstexp, Messages.AdigeMessages_MSTEXP_COEFFICIENT);
        makeLabelText(mainSectionComposite, specyield, Messages.AdigeMessages_SPECYIELD_COEFFICIENT);
        makeLabelText(mainSectionComposite, porosity, Messages.AdigeMessages_SOIL_POROSITY);
        makeLabelText(mainSectionComposite, etrate, Messages.AdigeMessages_CONSTANT_VALUE_OF_EVAPOTRANSPIRATION);
        makeLabelText(mainSectionComposite, satconst, Messages.AdigeMessages_SATURATION_CONSTANT);
        makeLabelText(mainSectionComposite, glaciersup,
                Messages.AdigeMessages_FRACTION_OF_SUP_DISCHARGE_FROM_GLACIERS);
        makeLabelText(mainSectionComposite, glaciersub,
                Messages.AdigeMessages_FRACTION_OF_SUB_DISCHARGE_FROM_GLACIERS);
    }

    private void createInputFeatureLayers() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_INPUT_FEATURE_LAYERS);
        section.setDescription(Messages.AdigeMessages_INPUT_FEATURE_LAYERS_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(2, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelText(mainSectionComposite, iflayerhfeatures, Messages.AdigeMessages_HYDROMETERS_LAYER);
        makeLabelText(mainSectionComposite, iflayerdfeatures, Messages.AdigeMessages_DAMS_LAYER);
        makeLabelText(mainSectionComposite, iflayertfeatures, Messages.AdigeMessages_TRIBUTARIES_LAYER);
        makeLabelText(mainSectionComposite, iflayerofeatures, Messages.AdigeMessages_OFFTAKES_LAYER);
        makeLabelText(mainSectionComposite, iflayernetpfaf, Messages.AdigeMessages_NETWORK_LAYER);
        makeLabelText(mainSectionComposite, iflayerhillslope, Messages.BASINS_LAYER);
    }

    private void createInputScalarsets() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_INPUT_SCALARSETS);
        section.setDescription(Messages.AdigeMessages_INPUT_SCALARSETS_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(3, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelTextButton(mainSectionComposite, itscalarddata, Messages.AdigeMessages_DAMS_DATA, SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, itscalarhdata, Messages.AdigeMessages_HYDROMETERS_DATA, SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, itscalartdata, Messages.AdigeMessages_TRIBUTARIES_DATA, SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, itscalarodata, Messages.AdigeMessages_OFFTAKES_DATA, SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, itscalarrain, Messages.AdigeMessages_RAIN_DATA, SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, iscalarvegetation, Messages.AdigeMessages_VEGETATION_DATA,
                SWT.OPEN);

    }

    private void createBoundaryConditions() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_BOUNDARY_CONDITIONS);
        section.setDescription(Messages.AdigeMessages_BOUNDARY_CONDITIONS_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(3, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelTextButton(mainSectionComposite, boundaryin, Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_USE,
                SWT.OPEN);
        makeLabelTextButton(mainSectionComposite, boundaryout, Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_SAVE,
                SWT.SAVE);

    }

    private void createLogging() {
        Section section = toolkit.createSection(scrolledForm.getBody(),
                Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText(Messages.AdigeMessages_LOGGING);
        section.setDescription(Messages.AdigeMessages_LOGGING_DESCR);
        TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
        section.setLayoutData(td);

        Composite mainSectionComposite = toolkit.createComposite(section);
        GridLayout layout = new GridLayout(2, false);
        mainSectionComposite.setLayout(layout);
        section.setClient(mainSectionComposite);

        makeLabelText(mainSectionComposite, logging, Messages.AdigeMessages_DO_LOGGING);
    }

    private void makeLabelText(Composite theComposite, String defaultText, String labelString) {
        Label theLabel = toolkit.createLabel(theComposite, labelString, SWT.WRAP);
        GridData theLabelGD = new GridData(SWT.BEGINNING, SWT.FILL, false, false);
        theLabel.setLayoutData(theLabelGD);
        final Text theText = toolkit.createText(theComposite, defaultText, SWT.BORDER);
        GridData theTextGD = new GridData(SWT.FILL, SWT.FILL, true, false);
        theTextGD.horizontalIndent = 5;
        theTextGD.widthHint = 55;
        theText.setLayoutData(theTextGD);
        theText.setData(labelString);
        theText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                String key = (String) theText.getData();
                textsStringsMap.put(key, theText.getText());
            }
        });
        if (textsStringsMap.get(labelString) == null) {
            textsStringsMap.put(labelString, theText.getText());
        }
        textsMap.put(labelString, theText);

    }

    private void makeLabelTextButton(Composite theComposite, String defaultText, String labelString,
            final int type) {
        Label theLabel = toolkit.createLabel(theComposite, labelString, SWT.WRAP);
        GridData theLabelGD = new GridData(SWT.BEGINNING, SWT.FILL, false, false);
        theLabel.setLayoutData(theLabelGD);
        final Text theText = toolkit.createText(theComposite, defaultText, SWT.BORDER);
        GridData theTextGD = new GridData(SWT.FILL, SWT.FILL, true, false);
        theTextGD.horizontalIndent = 5;
        theTextGD.widthHint = 55;
        theText.setLayoutData(theTextGD);
        theText.setData(labelString);
        theText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                String key = (String) theText.getData();
                String str = theText.getText();
                textsStringsMap.put(key, str);
            }
        });
        if (textsStringsMap.get(labelString) == null) {
            textsStringsMap.put(labelString, theText.getText());
        }
        textsMap.put(labelString, theText);

        Button theButton = toolkit.createButton(theComposite, DOTDOTDOT, SWT.PUSH);
        GridData theButtonGD = new GridData(SWT.CENTER, SWT.FILL, false, false);
        theButton.setLayoutData(theButtonGD);
        theButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                FileDialog fileDialog = new FileDialog(theText.getShell(), type);
                String path = fileDialog.open();
                if (path == null || path.length() < 1) {
                    theText.setText(""); //$NON-NLS-1$
                } else {
                    theText.setText(path);
                }
            }
        });
    }

    public void dispose() {
        doSave(null);

        super.dispose();
    }

    public void doSave(IProgressMonitor monitor) {

        Set<String> keySet = textsStringsMap.keySet();
        for (String key : keySet) {
            preferenceStore.setValue(ID + key, textsStringsMap.get(key));
        }

        UiPlugin.getDefault().savePluginPreferences();
    }

    public void doSaveAs() {
    }

    public boolean isDirty() {
        return false;
    }

    public boolean isSaveAsAllowed() {
        return false;
    }

    public void setFocus() {
    }

    public void widgetDefaultSelected(SelectionEvent e) {
    }

    public void widgetSelected(SelectionEvent e) {
        mesgManager.removeAllMessages();

        boolean isError = false;

        Checker ck = new Checker(mesgManager, textsStringsMap, textsMap, dateFormatter);
        /*
         * check the models parameter for time execution
         */
        if (!ck.checkIsDate(Messages.START_DATE_YYYY_MM_DD_HH_MM,
                Messages.THE_DATES_HAVE_TO_BE_IN_THE_FORMAT_YYYY_MM_DD_HH_MM, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDate(Messages.END_DATE_YYYY_MM_DD_HH_MM,
                Messages.THE_DATES_HAVE_TO_BE_IN_THE_FORMAT_YYYY_MM_DD_HH_MM, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsInteger(Messages.TIMESTEP_IN_MINUTES,
                Messages.THE_TIMESTEP_HAS_TO_BE_SUPPLIED_AS_INTEGER_IN_MINUTES, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkFileWritable(Messages.AdigeMessages_OUTPUT_PATH,
                Messages.THERE_IS_NO_OUTPUT_FILE_OR_THE_FILE_YOU_PROVIDED_IS_NOT_VALID, IMessageProvider.WARNING)) {
        }

        /*
         * check on provided shapefile fields
         */
        if (!ck.checkString(Messages.AdigeMessages_VEGETATION_FIELD,
                Messages.AdigeEditor_THE_VEGETATION_FIELD_IS_MANDATORY, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.NETNUM_FIELD, Messages.THE_NETNUM_FIELD_IS_MANDATORY,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_BARICENTER_FIELD,
                Messages.AdigeEditor_THE_BARICENTER_ELEVATION_FIELD_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_PFAFSTETTER_FIELD,
                Messages.AdigeEditor_THE_FIELD_WITH_PFAFSTETTER_ENUMERATION_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_STARTELEVATION_FIELD,
                Messages.AdigeEditor_THE_ELEVATION_OF_THE_STARTING_NETWORK_POINT_FIELD_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_ENDELEVATION_FIELD,
                Messages.AdigeEditor_THE_ELEVATION_OF_THE_LAST_NETWORK_POINT_FIELD_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.MONITORINGPOINT_ID_FIELD, Messages.THE_MONITORING_POINT_ID_FIELD_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_20,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_AVERAGE_VALUE_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_LESS_THAN_20_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_50,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_AVERAGE_VALUE_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_BETWEEN_20_AND_50_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_SUP_DISTANCE_FIELD_SAT_50,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_AVERAGE_VALUE_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_HIGHER_THAN_50_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_20,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_STANDARD_DEVIATION_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_LESS_THAN_20_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_50,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_STANDARD_DEVIATION_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_BETWEEN_20_AND_50_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_DISTANCE_FIELD_SAT_50,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_STANDARD_DEVIATION_OF_THE_SUPERFICIAL_WIDTH_FUNCTION_FOR_A_SATURATION_HIGHER_THAN_50_OF_THE_BASIN_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_AVERAGE_SUB_DISTANCE_FIELD,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_AVERAGE_VALUE_OF_THE_SUBSUPERFICIAL_WIDTH_FUNCTION_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_VARIANCE_SUB_DISTANCE_FIELD,
                Messages.AdigeEditor_THE_FIELD_IN_THE_INPUT_BASIN_LAYER_WITH_THE_STANDARD_DEVIATION_OF_THE_SUBSUPERFICIAL_WIDTH_FUNCTION_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }

        /*
         * check on input scalar sets
         */
        if (!ck.checkFileExists(Messages.AdigeMessages_HYDROMETERS_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkFileExists(Messages.AdigeMessages_DAMS_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkFileExists(Messages.AdigeMessages_TRIBUTARIES_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkFileExists(Messages.AdigeMessages_OFFTAKES_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.WARNING)) {
        }
        if (!ck.checkFileExists(Messages.AdigeMessages_RAIN_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkFileExists(Messages.AdigeMessages_VEGETATION_DATA,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }

        /*
         * check on input features layers
         */
        if (!ck.checkString(Messages.AdigeMessages_HYDROMETERS_LAYER,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_DAMS_LAYER,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_TRIBUTARIES_LAYER,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        // if (!ck.checkString(Messages.AdigeMessages_OFFTAKES_LAYER,
        // Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE,
        // IMessageProvider.ERROR)) {
        // isError = true;
        // }
        if (!ck.checkString(Messages.AdigeMessages_NETWORK_LAYER,
                Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.BASINS_LAYER, Messages.THE_SUPPLIED_PARAMETER_IS_NOT_AN_EXISTING_FILE,
                IMessageProvider.ERROR)) {
            isError = true;
        }

        /*
         * check on boundary conditions
         */
        if (!ck.checkFileExists(Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_USE,
                Messages.AdigeEditor_THERE_ARE_NO_INPUT_BOUNDARY_CONDITIONS_OR_THE_FILE_PROVIDED_IS_NOT_VALID_USING_THE_DEFAULT_VALUES,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkFileWritable(Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_SAVE,
                Messages.AdigeEditor_THE_FILE_WHERE_TO_SAVE_THE_FINAL_CONDITIONS_IS_NOT_PROVIDED_OR_THE_PROVIDED_PATH_IS_NOT_VALID_FINAL_CONDITIONS_WILL_NOT_BE_SAVED,
                IMessageProvider.WARNING)) {
        }

        /*
         * check on model parameters
         */
        if (!ck.checkIsDouble(Messages.AdigeMessages_SUPERFICIAL_VELOCITY,
                Messages.AdigeEditor_THE_AVERAGE_SUPERFICIAL_VELOCITY_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_SUBSUPERFICIAL_VELOCITY,
                Messages.AdigeEditor_THE_AVERAGE_SUBSUPERFICIAL_VELOCITY_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkString(Messages.AdigeMessages_DO_PENMAN_EVAPOTRANSPIRATION,
                Messages.AdigeEditor_THE_EVAPOTRANSPIRATION_WILL_BE_CALCULATED_WITH_A_SIMPLIFIED_METHOD_WRITE_TRUE_FOR_PENMAN_MONTEITH_EVAPOTRASPIRATION,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkString(Messages.AdigeMessages_OUTPUT_PFAFSTETTER_IDS,
                Messages.AdigeEditor_THE_OUTPUT_VALUES_WILL_BE_REFERRED_ONLY_TO_THE_OUTLET_SECTION,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_INITIAL_DISCHARGE_PER_AREA_COEFFICIENT,
                Messages.AdigeEditor_THE_INITIAL_DISCHARGE_WILL_BE_CALCULATED_USING_THE_DEFAULT_VALUE_OF_DISCHARGE_PER_UNIT_ARE_IN_SQUARE_KM_0_01,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_INITIAL_FRACTION_OF_SUP_DISCHARGE,
                Messages.AdigeEditor_THE_INITIAL_FRACTION_OF_SUPERFICIAL_DISCHARGE_IS_NOT_PROVIDED_USING_THE_DEFAULT_VALUE_OF_0_3_OF_THE_TOTAL_INITIAL_DISCHARGE,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_INITIAL_FRACTION_OF_SUB_DISCHARGE,
                Messages.AdigeEditor_THE_INITIAL_FRACTION_OF_SUBSUPERFICIAL_DISCHARGE_IS_NOT_PROVIDED_USING_THE_DEFAULT_VALUE_OF_0_7_OF_THE_TOTAL_INITIAL_DISCHARGE,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_GAUKLER_STRICKLER_COEFFICIENT,
                Messages.AdigeEditor_THE_SATURATED_HYDRAULIC_CONDUCTIVITY_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_MSTEXP_COEFFICIENT,
                Messages.AdigeEditor_THE_MSTEXP_COEFFICIENT_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_SPECYIELD_COEFFICIENT,
                Messages.AdigeEditor_THE_SPECYIELD_COEFFICIENT_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_SOIL_POROSITY,
                Messages.AdigeEditor_THE_SOIL_POROSITY_COEFFICIENT_IS_REQUIRED, IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_CONSTANT_VALUE_OF_EVAPOTRANSPIRATION,
                Messages.AdigeEditor_THE_EVAPORATION_COEFFICIENT_IS_REQUIRED_ONLY_FOR_THE_SIMPLIFIED_METHOD,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_SATURATION_CONSTANT,
                Messages.AdigeEditor_THE_PARAMETER_THAT_CORRELATE_THE_SATURATED_VOLUME_TO_THE_SATURATED_AREA_IS_REQUIRED,
                IMessageProvider.ERROR)) {
            isError = true;
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_FRACTION_OF_SUP_DISCHARGE_FROM_GLACIERS,
                Messages.AdigeEditor_THE_FRACTION_OF_THE_GLACIER_DISCHARGE_THAT_IS_CONSIDERD_AS_SUPERFICIAL_FLOW_IS_NOT_PROVIDED_USING_THE_DEFAULT_VALUE_OF_0_7,
                IMessageProvider.WARNING)) {
        }
        if (!ck.checkIsDouble(Messages.AdigeMessages_FRACTION_OF_SUB_DISCHARGE_FROM_GLACIERS,
                Messages.AdigeEditor_THE_FRACTION_OF_THE_GLACIER_DISCHARGE_THAT_IS_CONSIDERD_AS_SUBSUPERFICIAL_FLOW_IS_NOT_PROVIDED_USING_THE_DEFAULT_VALUE_OF_0_3,
                IMessageProvider.WARNING)) {
        }

        /*
         * check if logging
         */
        if (!ck.checkString(Messages.AdigeMessages_DO_LOGGING,
                Messages.AdigeEditor_LOGGING_DATA_WILL_NOT_BE_DISPLAYED_ON_J_GRASS_CONSOLE,
                IMessageProvider.WARNING)) {
        }

        if (isError) {
            return;
        }

        /*
         * if verything went well, the command has to be constructed and
         * launched.
         */

        final String command = createCommand();

        IRunnableWithProgress operation = new IRunnableWithProgress() {

            public void run(IProgressMonitor pm) throws InvocationTargetException, InterruptedException {

                pm.beginTask("h.adige", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
                ConsoleCommandExecutor cCE = new ConsoleCommandExecutor();
                cCE.execute("h.adige", command, null, null, //$NON-NLS-1$
                        ConsoleCommandExecutor.OUTPUTTYPE_BTCONSOLE, null, null);
                pm.done();
            }
        };
        PlatformGIS.runInProgressDialog("h.adige", true, operation, true); //$NON-NLS-1$

    }

    @SuppressWarnings("nls")
    private String createCommand() {
        StringBuilder sB = new StringBuilder();
        sB.append("# MAPSET= ").append("asd").append("\n");
        sB.append("# GISBASE = ").append("asd").append("\n");
        String str = textsStringsMap.get(Messages.START_DATE_YYYY_MM_DD_HH_MM);
        sB.append("# STARTDATE = ").append(str).append("\n");
        str = textsStringsMap.get(Messages.END_DATE_YYYY_MM_DD_HH_MM);
        sB.append("# ENDDATE = ").append(str).append("\n");
        str = textsStringsMap.get(Messages.TIMESTEP_IN_MINUTES);
        sB.append("# DELTAT= ").append(str).append("\n");
        sB.append("\n");
        sB.append("jgrass {").append("\n");
        sB.append("h.adige").append("\n");

        str = textsStringsMap.get(Messages.NETNUM_FIELD);
        if (str.length() > 0)
            sB.append("--netnumattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_PFAFSTETTER_FIELD);
        if (str.length() > 0)
            sB.append("--pfafattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_BARICENTER_FIELD);
        if (str.length() > 0)
            sB.append("--baricenterattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_STARTELEVATION_FIELD);
        if (str.length() > 0)
            sB.append("--startelevattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_ENDELEVATION_FIELD);
        if (str.length() > 0)
            sB.append("--endelevattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.MONITORINGPOINT_ID_FIELD);
        if (str.length() > 0)
            sB.append("--idmonpointattr").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_20);
        if (str.length() > 0)
            sB.append("--avgsup10").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_AVERAGE_SUP_DISTANCE_FIELD_SAT_50);
        if (str.length() > 0)
            sB.append("--avgsup30").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SUP_DISTANCE_FIELD_SAT_50);
        if (str.length() > 0)
            sB.append("--avgsup60").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_20);
        if (str.length() > 0)
            sB.append("--varsup10").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_VARIANCE_SUP_DISTANCE_FIELD_SAT_50);
        if (str.length() > 0)
            sB.append("--varsup30").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_DISTANCE_FIELD_SAT_50);
        if (str.length() > 0)
            sB.append("--varsup60").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_AVERAGE_SUB_DISTANCE_FIELD);
        if (str.length() > 0)
            sB.append("--avgsub").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_VARIANCE_SUB_DISTANCE_FIELD);
        if (str.length() > 0)
            sB.append("--varsub").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SUPERFICIAL_VELOCITY);
        if (str.length() > 0)
            sB.append("--vsup").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SUBSUPERFICIAL_VELOCITY);
        if (str.length() > 0)
            sB.append("--vsub").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_VEGETATION_FIELD);
        if (str.length() > 0)
            sB.append("--vegetation").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_DO_PENMAN_EVAPOTRANSPIRATION);
        if (str.length() > 0)
            sB.append("--dopenman").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_OUTPUT_PFAFSTETTER_IDS);
        if (str.length() > 0)
            sB.append("--outpfafids").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_INITIAL_DISCHARGE_PER_AREA_COEFFICIENT);
        if (str.length() > 0)
            sB.append("--startqperarea").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_INITIAL_FRACTION_OF_SUP_DISCHARGE);
        if (str.length() > 0)
            sB.append("--startsupqfract").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_INITIAL_FRACTION_OF_SUB_DISCHARGE);
        if (str.length() > 0)
            sB.append("--startsubqfract").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_GAUKLER_STRICKLER_COEFFICIENT);
        if (str.length() > 0)
            sB.append("--ks").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_MSTEXP_COEFFICIENT);
        if (str.length() > 0)
            sB.append("--mstexp").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SPECYIELD_COEFFICIENT);
        if (str.length() > 0)
            sB.append("--specyield").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SOIL_POROSITY);
        if (str.length() > 0)
            sB.append("--porosity").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_CONSTANT_VALUE_OF_EVAPOTRANSPIRATION);
        if (str.length() > 0)
            sB.append("--etrate").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_SATURATION_CONSTANT);
        if (str.length() > 0)
            sB.append("--satconst").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_FRACTION_OF_SUP_DISCHARGE_FROM_GLACIERS);
        if (str.length() > 0)
            sB.append("--glaciersup").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_FRACTION_OF_SUB_DISCHARGE_FROM_GLACIERS);
        if (str.length() > 0)
            sB.append("--glaciersub").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_HYDROMETERS_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-hfeatures").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_HYDROMETERS_DATA);
        if (str.length() > 0)
            sB.append("--itscalar-hdata").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_DAMS_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-dfeatures").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_DAMS_DATA);
        if (str.length() > 0)
            sB.append("--itscalar-ddata").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_TRIBUTARIES_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-tfeatures").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_TRIBUTARIES_DATA);
        if (str.length() > 0)
            sB.append("--itscalar-tdata").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_OFFTAKES_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-ofeatures").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_OFFTAKES_DATA);
        if (str.length() > 0)
            sB.append("--itscalar-odata").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_NETWORK_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-netpfaf").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.BASINS_LAYER);
        if (str.length() > 0)
            sB.append("--iflayer-hillslope").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_RAIN_DATA);
        if (str.length() > 0)
            sB.append("--itscalar-rain").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_VEGETATION_DATA);
        if (str.length() > 0)
            sB.append("--iscalar-vegetation").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_USE);
        if (str.length() > 0)
            sB.append("--boundaryin").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_BOUNDARY_CONDITIONS_TO_SAVE);
        if (str.length() > 0)
            sB.append("--boundaryout").append(" \"").append(str).append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_DO_LOGGING);
        if (str.length() > 0)
            sB.append("--log").append(" \"").append(str).append("\"\n");
        sB.append("--ochart-discharge").append(" \"")
                .append("TIMELINE#Basin_response#date#discharge#PassirioCalc#sup#sub#PassirioMeas#meassup#meassub")
                .append("\"\n");

        String pfaffsForOut = outpfafids.replaceAll(",", "#");
        sB.append("--ochart-s1").append(" \"").append("TIMELINE#S1#date#nonsaturatedwc#").append(pfaffsForOut)
                .append("\"\n");
        sB.append("--ochart-s2").append(" \"").append("TIMELINE#S2#date#saturatedwc#").append(pfaffsForOut)
                .append("\"\n");
        sB.append("--ochart-s3").append(" \"").append("TIMELINE#satsurf#date#satsurface#").append(pfaffsForOut)
                .append("\"\n");
        sB.append("--ochart-brain").append(" \"").append("TIMELINE#basinrain#date#rain#").append(pfaffsForOut)
                .append("\"\n");
        str = textsStringsMap.get(Messages.AdigeMessages_OUTPUT_PATH);
        if (str.length() > 0)
            sB.append("--duffylogpath").append(" \"").append(str).append("\"\n");
        sB.append("}");

        return sB.toString();
    }

}