/*******************************************************************************
 * 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.nsedit;

import org.eclipse.core.runtime.IPath;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceInfo;
import org.eclipse.wst.xml.ui.internal.XMLUIMessages;

/*
 * This class is an extension of CommonEditNamespacesDialog. This class adds
 * the target namespaces dialog field.
 */
public class CommonEditNamespacesTargetFieldDialog extends CommonEditNamespacesDialog {

	class TargetNamespaceModifyListener implements ModifyListener {
		public void modifyText(ModifyEvent e) {
			String oldTargetNamespace = targetNamespace;
			targetNamespace = targetNamespaceField.getText();
			updateTargetNamespaceAndNamespaceInfo(oldTargetNamespace, targetNamespace);
		}
	}

	protected String targetNamespace;
	protected Text targetNamespaceField;

	public CommonEditNamespacesTargetFieldDialog(Composite parent, IPath resourceLocation1) {
		super(parent, resourceLocation1, XMLUIMessages._UI_NAMESPACE_DECLARATIONS);

		Composite targetComp = getTopComposite();
		targetComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

		GridData gd = new GridData(GridData.FILL_BOTH);
		Label targetNamespaceLabel = new Label(targetComp, SWT.NONE);
		targetNamespaceLabel.setLayoutData(gd);
		targetNamespaceLabel.setText(XMLUIMessages._UI_TARGET_NAMESPACE);

		targetNamespaceField = new Text(targetComp, SWT.BORDER);
		targetNamespaceField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		targetNamespaceField.addModifyListener(new TargetNamespaceModifyListener());

		// createControlArea();
	}

	public String getTargetNamespace() {
		return targetNamespace;
	}

	public void performEdit() {
		Object selection = getSelection(tableViewer.getSelection());
		if (selection != null) {
			boolean editTargetNamespace = false;
			NamespaceInfo nsInfo = (NamespaceInfo) selection;
			if (getTargetNamespace().equals(nsInfo.uri)) {
				editTargetNamespace = true;
			}

			invokeDialog(XMLUIMessages._UI_LABEL_NEW_NAMESPACE_INFORMATION, nsInfo);
			updateErrorMessage(namespaceInfoList);
			performDelayedUpdate();

			if (editTargetNamespace) {
				targetNamespaceField.setText(nsInfo.uri);
			}
		}
	}

	public void setTargetNamespace(String theTargetNamespace) {
		targetNamespace = theTargetNamespace != null ? theTargetNamespace : ""; //$NON-NLS-1$
		targetNamespaceField.setText(targetNamespace);
		// updateTargetNamespaceAndNamespaceInfo(targetNamespace);
	}

	void updateTargetNamespaceAndNamespaceInfo(String oldTargetNamespace, String newTargetNamespace) {
		NamespaceInfo info = getNamespaceInfo(newTargetNamespace);
		if (info == null) {
			info = getNamespaceInfo(oldTargetNamespace);
			if (info == null) {
				info = new NamespaceInfo(newTargetNamespace, "tns", null); //$NON-NLS-1$
				namespaceInfoList.add(info);
			}
			else {
				info.uri = targetNamespace;
			}
		}
		tableViewer.refresh();
	}
}
