package org.openlca.app.devtools.ipc;

import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.FormDialog;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.openlca.app.M;
import org.openlca.app.db.Database;
import org.openlca.app.util.MsgBox;
import org.openlca.app.util.UI;

public class IpcDialog extends FormDialog {

	private Text portText;

	public static int show() {
		if (Database.get() == null) {
			MsgBox.error(M.NoDatabaseOpened, M.NeedOpenDatabase);
			return Window.CANCEL;
		}
		return new IpcDialog().open();
	}

	public IpcDialog() {
		super(UI.shell());
		setBlockOnOpen(true);
	}

	@Override
	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		newShell.setText(M.StartIPCServer);
	}

	@Override
	protected void createFormContent(IManagedForm mForm) {
		FormToolkit tk = mForm.getToolkit();
		Composite body = UI.formBody(mForm.getForm(), tk);
		Composite comp = UI.formComposite(body, tk);
		UI.gridData(comp, true, false);
		portText = UI.formText(comp, tk, M.Port);
		portText.setText("8080");
	}

	@Override
	protected void okPressed() {
		String portStr = portText.getText();
		try {
			int port = Integer.parseInt(portStr);
			Database.startIpcOn(port);
			// TODO: need a UI for managing the server
			super.okPressed();
		} catch (Exception e) {
			MsgBox.error("Failed to start IPC server",
					e.getMessage());
		}
	}
}