/*******************************************************************************
 * 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 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/


package org.eclipse.wst.xml.ui.internal.dialogs;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
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;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.xml.core.internal.XMLCorePlugin;
import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalog;
import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalogEntry;
import org.eclipse.wst.xml.ui.internal.util.XMLCommonUIContextIds;



public class SelectXMLCatalogIdDialog extends Dialog {
	protected String[] extensions;
	protected Button okButton;
	protected SelectXMLCatalogIdPanel panel;
	protected String publicId;
	protected String systemId;

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


	protected void buttonPressed(int buttonId) {
		if (buttonId == IDialogConstants.OK_ID) {
			ISelection selection = panel.getTableViewer().getSelection();
			Object selectedObject = (selection instanceof IStructuredSelection) ? ((IStructuredSelection) selection).getFirstElement() : null;

			if (selectedObject instanceof ICatalogEntry) {
				ICatalogEntry mappingInfo = (ICatalogEntry) selectedObject;
				publicId = mappingInfo.getKey();
				systemId = computeDefaultSystemId(mappingInfo);
			}
		}
		super.buttonPressed(buttonId);
	}

	protected String computeDefaultSystemId(ICatalogEntry mappingInfo) {
		String result = mappingInfo.getAttributeValue(ICatalogEntry.ATTR_WEB_URL);
		if ((result == null) && (mappingInfo.getURI() != null)) {
			int index = mappingInfo.getURI().lastIndexOf("/"); //$NON-NLS-1$
			String lastSegment = index != -1 ? mappingInfo.getURI().substring(index + 1) : mappingInfo.getURI();
			result = lastSegment;
		}
		return result;
	}

	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);
		PlatformUI.getWorkbench().getHelpSystem().setHelp(dialogArea, XMLCommonUIContextIds.XCUI_CATALOG_DIALOG);

		ICatalog xmlCatalog = XMLCorePlugin.getDefault().getDefaultXMLCatalog();
		panel = new SelectXMLCatalogIdPanel(dialogArea, xmlCatalog);

		ISelectionChangedListener listener = new ISelectionChangedListener() {
			public void selectionChanged(SelectionChangedEvent event) {
				updateButtonState();
			}
		};
		panel.getTableViewer().setFilterExtensions(extensions);
		panel.getTableViewer().addSelectionChangedListener(listener);
		return dialogArea;
	}



	public String getId() {
		return publicId;
	}

	public String getSystemId() {
		return systemId;
	}

	protected void updateButtonState() {
		ISelection selection = panel.getTableViewer().getSelection();
		okButton.setEnabled(!selection.isEmpty());
	}
}
