/**
 * Copyright (c) 2016 committers of YAKINDU and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * Contributors:
 * 	committers of YAKINDU - initial API and implementation
 * 
 */
package org.yakindu.sct.examples.wizard.preferences;

import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.yakindu.sct.examples.wizard.ExampleActivator;

/**
 * @author andreas muelder - Initial contribution and API
 * 
 */
public class ExamplesPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

	protected static class StorageLocationFieldEditor extends DirectoryFieldEditor {

		public StorageLocationFieldEditor(String name, String labelText, Composite parent) {
			super(name, labelText, parent);
			setEmptyStringAllowed(false);
			setErrorMessage("Storage location must not be empty.");
		}

		/**
		 * Checks only if the input text is not empty, but not if the directory
		 * exists as in that case it will be created by the example wizard.
		 */
		@Override
		protected boolean doCheckState() {
			String fileName = getTextControl().getText();
			fileName = fileName.trim();
			if (fileName.length() == 0 && !isEmptyStringAllowed()) {
				return false;
			}
			return true;
		}

	};

	public ExamplesPreferencePage() {
		super(GRID);
		setDescription("Examples Preference Page");
	}

	@Override
	protected void createFieldEditors() {
		Composite parent = getFieldEditorParent();
		addFields(parent);
	}

	protected void addFields(Composite main) {
		addField(new StorageLocationFieldEditor(ExamplesPreferenceConstants.STORAGE_LOCATION, "Storage Location:",
				main));
		separator();
		StringFieldEditor remoteLocationEditor = new StringFieldEditor(ExamplesPreferenceConstants.REMOTE_LOCATION,
				"Remote Location", main);
		remoteLocationEditor.getTextControl(main).setEditable(false);
		addField(remoteLocationEditor);
		separator();
		StringFieldEditor remoteBranchEditor = new StringFieldEditor(ExamplesPreferenceConstants.REMOTE_BRANCH,
				"Remote Branch:", main);
		addField(remoteBranchEditor);
	}

	private void separator() {
		Label label = new Label(getFieldEditorParent(), SWT.NONE);
		label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
	}

	public void init(IWorkbench workbench) {
		new ExamplesPreferenceInitializer().initializeDefaultPreferences();
	}

	@Override
	protected IPreferenceStore doGetPreferenceStore() {
		return ExampleActivator.getDefault().getPreferenceStore();
	}
}
