/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License");  you may not use this file except in 
 * compliance with the License.  You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 *
 * The Original Code is Protege-2000.
 *
 * The Initial Developer of the Original Code is Stanford University. Portions
 * created by Stanford University are Copyright (C) 2007.  All Rights Reserved.
 *
 * Protege was developed by Stanford Medical Informatics
 * (http://www.smi.stanford.edu) at the Stanford University School of Medicine
 * with support from the National Library of Medicine, the National Science
 * Foundation, and the Defense Advanced Research Projects Agency.  Current
 * information about Protege can be obtained at http://protege.stanford.edu.
 *
 */

package edu.stanford.smi.protege.server.admin;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.ConnectException;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;

import edu.stanford.smi.protege.server.RemoteServer;
import edu.stanford.smi.protege.server.RemoteSession;
import edu.stanford.smi.protege.server.framestore.ServerSessionLost;
import edu.stanford.smi.protege.util.Log;
import edu.stanford.smi.protege.util.ModalDialog;

public abstract class AbstractRefreshableServerPanel extends JPanel {
	
	private static final long serialVersionUID = 1545066175980799819L;
	
	private RemoteServer server;
	private RemoteSession session;
	private JComponent centerComponent;
	private JComponent footerComponent;

	public AbstractRefreshableServerPanel(RemoteServer server, RemoteSession session) {
		this.server = server;
		this.session = session;
		init();
	}

	protected void init() {
		setLayout(new BorderLayout());

		add(centerComponent = createCenterComponent(), BorderLayout.CENTER);
		add(footerComponent = createFooterComponent(), BorderLayout.SOUTH);

		addRefreshButton();
	}


	protected JComponent createFooterComponent() {
		return new JPanel();
	}

	protected JComponent createCenterComponent() {
		return new JPanel();
	}

	protected void addRefreshButton() {
		JButton refreshButton = new JButton("Refresh");
		refreshButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				refresh();
			}
		});
		footerComponent.add(refreshButton);
	}

	protected boolean treatPossibleConnectionLostException(Throwable t) {		
		do{
			  if (t instanceof ServerSessionLost || t instanceof ConnectException) {
                Log.getLogger().warning("Session disconnected from the server");
                ModalDialog.showMessageDialog(this, "Server connection lost.",
              		  "No server connection");
                return true;
            }
        } while ((t = t.getCause()) != null);
		return false;
	}
	
	public void refresh() {}

	public RemoteServer getServer() {
		return server;
	}
	
	public RemoteSession getSession() {
		return session;
	}

	public JComponent getCenterComponent() {
		return centerComponent;
	}

	public JComponent getFooterComponent() {
		return footerComponent;
	}
	
}
