package net.sourceforge.phpeclipse;

import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil;
import net.sourceforge.phpeclipse.preferences.PHPPreferencesMessages;

import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FileFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

public class PHPEclipseBasePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

  StringFieldEditor phpParserExtensionsSFE;
  
  StringFieldEditor apacheStartSFE;

  StringFieldEditor apacheStopSFE;

  StringFieldEditor apacheRestartSFE;

  StringFieldEditor mySQLCommandSFE;

  FileFieldEditor apacheRunFFE;

  FileFieldEditor mysqlRunFFE;

  FileFieldEditor phpRunFFE;

  BooleanFieldEditor apacheStartBFE;

  BooleanFieldEditor apacheStopBFE;

  BooleanFieldEditor apacheRestartBFE;

  BooleanFieldEditor mysqlStartBFE;

  public PHPEclipseBasePreferencePage() {
    super();
    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
    setDescription(PHPPreferencesMessages.getString("PHPBasePreferencePage.description")); //$NON-NLS-1$
  }

  public void init(IWorkbench workbench) {
  }

  protected void performDefaults() {
    phpParserExtensionsSFE.loadDefault();
    apacheStartSFE.loadDefault();
    apacheStopSFE.loadDefault();
    apacheRestartSFE.loadDefault();
    mySQLCommandSFE.loadDefault();
    phpRunFFE.loadDefault();
    apacheRunFFE.loadDefault();
    mysqlRunFFE.loadDefault();
    apacheStartBFE.loadDefault();
    apacheStopBFE.loadDefault();
    apacheRestartBFE.loadDefault();
    mysqlStartBFE.loadDefault();
    super.performDefaults();
  }

  public boolean performOk() {
    PHPFileUtil.setExtensins(null); 
    phpParserExtensionsSFE.store();
    apacheStartSFE.store();
    apacheStopSFE.store();
    apacheRestartSFE.store();
    mySQLCommandSFE.store();
    phpRunFFE.store();
    apacheRunFFE.store();
    mysqlRunFFE.store();

    apacheStartBFE.store();
    apacheStopBFE.store();
    apacheRestartBFE.store();
    mysqlStartBFE.store();
    return super.performOk();
  }

  protected Control createContents(Composite parent) {
    initializeDialogUnits(parent);
    final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
    Composite composite = new Composite(parent, SWT.LEFT);
    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    composite.setLayout(new GridLayout());

    // allowed PHP file extensions for parsing
    Composite phpParserExtensionsComposite = new Composite(composite, SWT.NULL);
    phpParserExtensionsComposite.setLayout(new GridLayout());
    phpParserExtensionsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
    phpParserExtensionsSFE = new StringFieldEditor(IPreferenceConstants.PHP_EXTENSION_PREFS, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.phpExtensionPrefs"), phpParserExtensionsComposite);
    phpParserExtensionsSFE.setPreferencePage(this);
    phpParserExtensionsSFE.setPreferenceStore(getPreferenceStore());
    phpParserExtensionsSFE.load();
    
    //Create apache
    Composite apacheSettingsComposite = new Composite(composite, SWT.NULL);
    apacheSettingsComposite.setLayout(new GridLayout());
    apacheSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    Group apacheSettingsGroup = new Group(apacheSettingsComposite, SWT.NONE);
    apacheSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.apacheGroup"));
    apacheSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    apacheSettingsGroup.setLayout(new GridLayout());

    apacheStartBFE = new BooleanFieldEditor(PHPeclipsePlugin.APACHE_START_BACKGROUND, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.start_background"), apacheSettingsGroup);
    apacheStartBFE.setPreferencePage(this);
    apacheStartBFE.setPreferenceStore(getPreferenceStore());
    apacheStartBFE.load();

    new Label(apacheSettingsGroup, SWT.NONE);
    new Label(apacheSettingsGroup, SWT.NONE);
    apacheStartSFE = new StringFieldEditor(IPreferenceConstants.APACHE_START_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.start"), apacheSettingsGroup);
    apacheStartSFE.setPreferencePage(this);
    apacheStartSFE.setPreferenceStore(getPreferenceStore());
    apacheStartSFE.load();
    new Label(apacheSettingsGroup, SWT.NONE);

    apacheStopBFE = new BooleanFieldEditor(PHPeclipsePlugin.APACHE_STOP_BACKGROUND, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.stop_background"), apacheSettingsGroup);
    apacheStopBFE.setPreferencePage(this);
    apacheStopBFE.setPreferenceStore(getPreferenceStore());
    apacheStopBFE.load();
    new Label(apacheSettingsGroup, SWT.NONE);
    new Label(apacheSettingsGroup, SWT.NONE);
    apacheStopSFE = new StringFieldEditor(IPreferenceConstants.APACHE_STOP_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.stop"), apacheSettingsGroup);
    apacheStopSFE.setPreferencePage(this);
    apacheStopSFE.setPreferenceStore(getPreferenceStore());
    apacheStopSFE.load();
    new Label(apacheSettingsGroup, SWT.NONE);

    apacheRestartBFE = new BooleanFieldEditor(PHPeclipsePlugin.APACHE_RESTART_BACKGROUND, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.restart_background"), apacheSettingsGroup);
    apacheRestartBFE.setPreferencePage(this);
    apacheRestartBFE.setPreferenceStore(getPreferenceStore());
    apacheRestartBFE.load();
    new Label(apacheSettingsGroup, SWT.NONE);
    new Label(apacheSettingsGroup, SWT.NONE);
    apacheRestartSFE = new StringFieldEditor(IPreferenceConstants.APACHE_RESTART_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.restart"), apacheSettingsGroup);
    apacheRestartSFE.setPreferencePage(this);
    apacheRestartSFE.setPreferenceStore(getPreferenceStore());
    apacheRestartSFE.load();
    new Label(apacheSettingsGroup, SWT.NONE);

    apacheRunFFE = new FileFieldEditor(IPreferenceConstants.APACHE_RUN_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.apacheGroup.run"), apacheSettingsGroup);
    apacheRunFFE.setPreferencePage(this);
    apacheRunFFE.setPreferenceStore(getPreferenceStore());
    apacheRunFFE.load();

    phpRunFFE = new FileFieldEditor(IPreferenceConstants.PHP_RUN_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.console.php"), apacheSettingsGroup);
    phpRunFFE.setPreferencePage(this);
    phpRunFFE.setPreferenceStore(getPreferenceStore());
    phpRunFFE.load();

    //Create mySQL
    Composite mySQLSettingsComposite = new Composite(composite, SWT.NULL);
    mySQLSettingsComposite.setLayout(new GridLayout());
    mySQLSettingsComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    Group mySQLSettingsGroup = new Group(mySQLSettingsComposite, SWT.NONE);
    mySQLSettingsGroup.setText(PHPPreferencesMessages.getString("PHPBasePreferencePage.mySQLGroup"));
    mySQLSettingsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    mySQLSettingsGroup.setLayout(new GridLayout());

    mysqlStartBFE = new BooleanFieldEditor(PHPeclipsePlugin.MYSQL_START_BACKGROUND, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.mySQLGroup.start_background"), mySQLSettingsGroup);
    mysqlStartBFE.setPreferencePage(this);
    mysqlStartBFE.setPreferenceStore(getPreferenceStore());
    mysqlStartBFE.load();
    new Label(mySQLSettingsGroup, SWT.NONE);
    new Label(mySQLSettingsGroup, SWT.NONE);

    mySQLCommandSFE = new StringFieldEditor(IPreferenceConstants.MYSQL_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.mySQLGroup.command"), mySQLSettingsGroup);
    mySQLCommandSFE.setPreferencePage(this);
    mySQLCommandSFE.setPreferenceStore(getPreferenceStore());
    mySQLCommandSFE.load();
    new Label(mySQLSettingsGroup, SWT.NONE);

    mysqlRunFFE = new FileFieldEditor(IPreferenceConstants.MYSQL_RUN_PREF, PHPPreferencesMessages
        .getString("PHPBasePreferencePage.mySQLGroup.run"), mySQLSettingsGroup);
    mysqlRunFFE.setPreferencePage(this);
    mysqlRunFFE.setPreferenceStore(getPreferenceStore());
    mysqlRunFFE.load();

    return composite;
  }
}