//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.importing.xml.wizards;

import java.io.File;

import org.eclipse.epf.importing.ImportResources;
import org.eclipse.epf.importing.xml.ImportXMLPlugin;
import org.eclipse.epf.importing.xml.ImportXMLResources;
import org.eclipse.epf.importing.xml.preferences.ImportXMLPreferences;
import org.eclipse.epf.library.LibraryService;
import org.eclipse.epf.library.ui.LibraryUIResources;
import org.eclipse.epf.ui.wizards.BaseWizardPage;
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.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.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

/**
 * A wizard page that prompts the user to select a XML file to import.
 * 
 * @author Jinhua Xi
 * @author Kelvin Low
 * @since 1.0
 */
public class SelectXMLFilePage extends BaseWizardPage {

	public static final String PAGE_NAME = SelectXMLFilePage.class.getName();

	private Text pathText;

	private String path;

	private boolean mergeOption = true;
	
	private int mergeLevel = 0;	//0: undetermined, 1: default merge, 2: fine grade merge
	
	private boolean checkBasePlugins = true;

	/**
	 * Creates a new instance.
	 */
	public SelectXMLFilePage() {
		super(PAGE_NAME);
		setTitle(ImportXMLResources.selectXMLFilePage_title);
		setDescription(ImportXMLResources.selectXMLFilePage_desc);
		setImageDescriptor(ImportXMLPlugin.getDefault().getImageDescriptor(
				"full/wizban/imp_xml_wizban.gif")); //$NON-NLS-1$
	}

	/**
	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite)
	 */
	public void createControl(Composite parent) {
		Composite composite = new Composite(parent, SWT.NONE);
		composite.setLayout(new GridLayout(3, false));
		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

		Label fileLabel = new Label(composite, SWT.NONE);
		fileLabel.setText(ImportXMLResources.fileLabel_text); 

		pathText = new Text(composite, SWT.BORDER);
		pathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		pathText.setText(ImportXMLPreferences.getXMLFile());		
		pathText.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				if (isValidPath(pathText.getText().trim())) {
					setPageComplete(true);
					setErrorMessage(null);
				} else {
					setPageComplete(false);
					setErrorMessage(ImportXMLResources.invalidXMLFile_error);
				}
			}
		});

		Button browseButton = new Button(composite, SWT.PUSH);
		browseButton.setLayoutData(new GridData(GridData.END));
		browseButton.setText(ImportXMLResources.browseButton_text);
		browseButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				FileDialog fd = new FileDialog(Display.getCurrent()
						.getActiveShell(), SWT.OPEN);
				fd.setFilterExtensions(new String[] { "*.xml", "*.*" }); //$NON-NLS-1$ //$NON-NLS-2$
				String path = fd.open();
				boolean ok = false;
				if (path != null) {
					pathText.setText(path);
					ok = isValidPath(path);
				}
				setPageComplete(ok);
			}
		});
		
		Group optionGroup = new Group(composite, SWT.NONE);
		optionGroup.setLayout(new GridLayout(1, false));
		GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
		gridData.horizontalSpan = 3;
		optionGroup.setLayoutData(gridData);
		optionGroup.setText(ImportXMLResources.optionGroup_text);

		mergeOption = ImportXMLPreferences.getMergeOption();
		mergeLevel = ImportXMLPreferences.getMergeLevel();
		
		final Button overwriteRadioButton = createRadioButton(optionGroup,
				ImportXMLResources.overwriteRadioButton_text, 1, !mergeOption);
		overwriteRadioButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!overwriteRadioButton.getSelection()) {
					return;
				}
				mergeLevel = 0;
				mergeOption = false;
			}
		});
		
		final Button mergeRadioButton = createRadioButton(optionGroup,
				ImportXMLResources.mergeRadioButton_text, 1, mergeOption && mergeLevel != 2);
		mergeRadioButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!mergeRadioButton.getSelection()) {
					return;
				}
				mergeLevel = 1;
				mergeOption = true;
			}
		});
		
		final Button mergeRadioButton2 = createRadioButton(optionGroup,
				ImportXMLResources.mergeRadioButton2_text, 1, mergeOption
						&& mergeLevel == 2);
		mergeRadioButton2.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!mergeRadioButton2.getSelection()) {
					return;
				}
				mergeOption = true;
				mergeLevel = 2;
			}
		});
					
		Group optionGroup1 = new Group(composite, SWT.NONE);
		optionGroup1.setLayout(new GridLayout(1, false));
		GridData gridData1 = new GridData(GridData.FILL_HORIZONTAL);
		gridData1.horizontalSpan = 3;
		optionGroup1.setLayoutData(gridData1);
		optionGroup1.setText(ImportXMLResources.optionGroup1_text);
		checkBasePlugins = ImportXMLPreferences.getCheckBasePluginsOption();
			
		Button checkBaseRadioButton = createRadioButton(optionGroup1,
				ImportResources.checkBaseRadioButton_text, 1, checkBasePlugins);	
		checkBaseRadioButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				checkBasePlugins = true;
			}
		});
		
		Button ignoreRemoveRadioButton = createRadioButton(optionGroup1,
				ImportResources.ignoreRemoveRadioButton_text, 1, !checkBasePlugins);
		ignoreRemoveRadioButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				checkBasePlugins = false;
			}
		});

		setControl(composite);

		setPageComplete(isValidPath(pathText.getText().trim()));
	}

	/**
	 * Checks whether the user specific path is valid.
	 * 
	 * @param path
	 *            the user specific path
	 * @return <code>true</code> if the user specified path is valid.
	 */
	private boolean isValidPath(String path) {
		File file = new File(path);
		if (file.exists() && file.isFile()) {
			this.path = path;
			return true;
		}
		return false;
	}

	/**
	 * Gets the user specified XML file.
	 * 
	 * @return an absolute path to the XML file
	 */
	public String getPath() {
		return path;
	}

	/**
	 * Gets the user specified import option.
	 * 
	 * @return <code>true</code> if the user selected the merge option,
	 *         <code>false</code> if the user selected the overwrite option
	 */
	public boolean getMergeOption() {
		return mergeOption;
	}

	/**
	 * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
	 */
	public boolean isPageComplete() {
		if (LibraryService.getInstance().getCurrentMethodLibrary() == null) {
			setErrorMessage(LibraryUIResources.noOpenLibraryWarning_msg);
			return false;
		}

		return super.isPageComplete();
	}	
	
	/**
	 * Gets the user specified check base plugin option.
	 * 
	 * @return <code>true</code> if the user selected the check base plugin option,
	 *         <code>false</code> if the user selected the ignore check base plugin option
	 */
	public boolean getCheckBasePlugins() {
		return checkBasePlugins;
	}

	public int getMergerLevel() {
		return mergeLevel;
	}
	
}
