package com.esir.sr.sweetsnake.view;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.annotation.PostConstruct;
import javax.swing.JButton;
import javax.swing.JLabel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.esir.sr.sweetsnake.component.ImagePanel;
import com.esir.sr.sweetsnake.constants.ClientGuiConstants;
/**
*
* @author Herminaƫl Rougier
* @author Damien Jouanno
*
*/
@Component
public class UnreachableServerView extends AbstractView
{
/**********************************************************************************************
* [BLOCK] STATIC FIELDS
**********************************************************************************************/
/** The serial version UID */
private static final long serialVersionUID = -4955989460436322020L;
/** The logger */
private static final Logger log = LoggerFactory.getLogger(UnreachableServerView.class);
/**********************************************************************************************
* [BLOCK] FIELDS
**********************************************************************************************/
/** The logo panel */
private ImagePanel logoPL;
/** The error label */
private JLabel errorLB;
/** The retry button */
private JButton retryBTN;
/**********************************************************************************************
* [BLOCK] CONSTRUCTOR & INIT
**********************************************************************************************/
/**
*
*/
protected UnreachableServerView() {
super();
}
/*
* (non-Javadoc)
*
* @see com.esir.sr.sweetsnake.view.SweetSnakeAbstractView#init()
*/
@PostConstruct
@Override
protected void init() {
super.init();
log.info("Initializing the Unreachable Server View");
}
/**********************************************************************************************
* [BLOCK] PUBLIC METHODS
**********************************************************************************************/
/*
* (non-Javadoc)
*
* @see com.esir.sr.sweetsnake.view.SweetSnakeAbstractView#buildImpl()
*/
@Override
public void buildImpl() {
setLayout(new GridBagLayout());
final GridBagConstraints gbc = new GridBagConstraints();
initLogoPL();
initErrorLB();
initRetryBTN();
// logo
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(0, 0, 30, 0);
add(logoPL, gbc);
// label
gbc.gridy = 1;
gbc.insets = new Insets(0, 0, 10, 0);
add(errorLB, gbc);
// button
gbc.gridy = 2;
gbc.gridwidth = 1;
add(retryBTN, gbc);
}
/**********************************************************************************************
* [BLOCK] PRIVATE METHODS
**********************************************************************************************/
/**
*
*/
private void initLogoPL() {
logoPL = new ImagePanel(ClientGuiConstants.LOGO_PATH);
}
/**
*
*/
private void initErrorLB() {
errorLB = new JLabel("Server is not reachable");
errorLB.setForeground(Color.white);
errorLB.setFont(new Font("sans-serif", Font.BOLD, 16));
}
/**
*
*/
private void initRetryBTN() {
retryBTN = new JButton("retry");
retryBTN.addActionListener(new RetryListener());
}
/**********************************************************************************************
* [BLOCK] INTERNAL LISTENERS
**********************************************************************************************/
/**
*
* @author Herminaƫl Rougier
* @author Damien Jouanno
*
*/
private class RetryListener implements ActionListener
{
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(final ActionEvent e) {
client.reachServer();
}
}
}