package com.esir.sr.sweetsnake.view; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedList; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.esir.sr.sweetsnake.component.RequestsList; import com.esir.sr.sweetsnake.dto.GameRequestDTO; /** * * @author Herminaƫl Rougier * @author Damien Jouanno * */ @Component public class RequestsView extends AbstractView { /********************************************************************************************** * [BLOCK] STATIC FIELDS **********************************************************************************************/ /** The serial version UID */ private static final long serialVersionUID = -1976866058273480264L; /** The logger */ private static final Logger log = LoggerFactory.getLogger(RequestsView.class); /********************************************************************************************** * [BLOCK] FIELDS **********************************************************************************************/ /** The title label */ private JLabel titleLB; /** The center panel */ private JPanel centerPL; /** The requests list */ private RequestsList requestsLST; /** The bottom panel */ private JPanel bottomPL; /** The remove button */ private JButton removeBTN; /********************************************************************************************** * [BLOCK] CONSTRUCTOR **********************************************************************************************/ /** * */ public RequestsView() { super(); log.info("Initializing the Requests View"); } /* * (non-Javadoc) * * @see com.esir.sr.sweetsnake.view.AbstractView#buildImpl() */ @Override protected void buildImpl() { setLayout(new BorderLayout()); initTitleLB(); add(titleLB, BorderLayout.NORTH); initCenterPL(); add(centerPL, BorderLayout.CENTER); initRequestsLST(); centerPL.add(new JScrollPane(requestsLST), BorderLayout.CENTER); initBottomPL(); add(bottomPL, BorderLayout.SOUTH); initRemoveBTN(); final GridBagConstraints gbc = new GridBagConstraints(); gbc.gridwidth = 1; gbc.gridheight = 1; gbc.anchor = GridBagConstraints.EAST; gbc.fill = GridBagConstraints.VERTICAL; gbc.weightx = 1; gbc.weighty = 1; bottomPL.add(removeBTN, gbc); } /********************************************************************************************** * [BLOCK] PUBLIC METHODS **********************************************************************************************/ /** * * @param _requests */ public void refreshRequests(final List<GameRequestDTO> _requests) { requestsLST.removeAllElements(); final List<GameRequestDTO> requests = new LinkedList<GameRequestDTO>(_requests); if (requests.isEmpty()) { requestsLST.disableSelection(); requestsLST.addElement(new GameRequestDTO("No available request for the moment", null, null, null)); } else { requestsLST.enableSelection(); for (final GameRequestDTO request : requests) { requestsLST.addElement(request); } } titleLB.setText("Pending requests (" + requests.size() + ")"); } /********************************************************************************************** * [BLOCK] PRIVATE METHODS **********************************************************************************************/ /** * */ private void initTitleLB() { titleLB = new JLabel("Pending requests (0)"); titleLB.setFont(new Font("sans-serif", Font.BOLD, 14)); } /** * */ private void initCenterPL() { centerPL = new JPanel(new BorderLayout()); centerPL.setBorder(new EmptyBorder(10, 0, 10, 0)); } /** * */ private void initBottomPL() { bottomPL = new JPanel(new GridBagLayout()); } /** * */ private void initRemoveBTN() { removeBTN = new JButton("remove request"); removeBTN.addActionListener(new RemoveListener()); } /** * */ private void initRequestsLST() { requestsLST = new RequestsList(); } /********************************************************************************************** * [BLOCK] INTERNAL LISTENERS **********************************************************************************************/ /** * * @author Herminaƫl Rougier * @author Damien Jouanno * */ private class RemoveListener implements ActionListener { /* * (non-Javadoc) * * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(final ActionEvent e) { final GameRequestDTO request = requestsLST.getSelectedValue(); if (request != null) { server.removeRequest(request); } } } }