/*******************************************************************************
 * Copyright (c) 2001, 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 API and implementation
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/
package org.eclipse.wst.xml.ui.internal.dialogs;

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;


public class SelectFileOrXMLCatalogIdDialog extends Dialog {
	protected int catalogEntryType;
	protected String[] extensions;
	protected IFile file;
	protected String id;
	protected Button okButton;
	protected SelectFileOrXMLCatalogIdPanel panel;

	public SelectFileOrXMLCatalogIdDialog(Shell parentShell, String[] extensions) {
		this(parentShell, extensions, 0);
	}

	public SelectFileOrXMLCatalogIdDialog(Shell parentShell, String[] extensions, int catalogEntryType) {
		super(parentShell);
		setShellStyle(getShellStyle() | SWT.RESIZE);
		this.extensions = extensions;
		this.catalogEntryType = catalogEntryType;
	}


	protected void buttonPressed(int buttonId) {
		if (buttonId == IDialogConstants.OK_ID) {
			file = panel.getFile();
			id = panel.getXMLCatalogId();
		}
		super.buttonPressed(buttonId);
	}

	protected void createButtonsForButtonBar(Composite parent) {
		okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
		okButton.setEnabled(false);
		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
	}

	protected Control createDialogArea(Composite parent) {
		Composite dialogArea = (Composite) super.createDialogArea(parent);

		panel = new SelectFileOrXMLCatalogIdPanel(dialogArea);
		panel.setCatalogEntryType(catalogEntryType);
		panel.setFilterExtensions(extensions);
		panel.setVisibleHelper(true);
		SelectFileOrXMLCatalogIdPanel.Listener listener = new SelectFileOrXMLCatalogIdPanel.Listener() {
			public void completionStateChanged() {
				updateButtonState();
			}
		};
		panel.setListener(listener);

		return dialogArea;
	}

	public IFile getFile() {
		return file;
	}

	public String getId() {
		return id;
	}

	protected void updateButtonState() {
		okButton.setEnabled((panel.getFile() != null) || (panel.getXMLCatalogId() != null));
	}
}
