package org.chartsy.chatsy.chat.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.TimerTask;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.muc.HostedRoom;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.chartsy.chatsy.chat.ChatsyManager;
import org.chartsy.chatsy.chat.component.tabbedPane.AbstractTab;
import org.chartsy.chatsy.chat.util.TaskEngine;
/**
*
* @author Viorel
*/
public class ConferenceList extends AbstractTab
{
private List<String> hostedRooms = new ArrayList<String>();
private JPanel listPanel;
private JScrollPane hostedRoomsListScrollPane;
private TimerTask refeshTask;
public ConferenceList()
{
setName("Conferences");
}
@Override
protected void buildContent()
{
listPanel = new JPanel();
listPanel.setLayout(new LayoutManager()
{
public void addLayoutComponent(String name, Component comp)
{
}
public void removeLayoutComponent(Component comp)
{
}
public Dimension preferredLayoutSize(Container parent)
{
return new Dimension(0, 0);
}
public Dimension minimumLayoutSize(Container parent)
{
return new Dimension(0, 0);
}
public void layoutContainer(Container parent)
{
Insets insets = parent.getInsets();
int w = parent.getWidth() - insets.left - insets.right;
int h = parent.getHeight() - insets.top - insets.bottom;
int x = insets.left;
int y = insets.top;
for (Component component : parent.getComponents())
{
component.setBounds(x, y, w, 42);
y += 42;
}
}
});
listPanel.setOpaque(true);
listPanel.setBackground(Color.WHITE);
hostedRoomsListScrollPane = new JScrollPane(listPanel);
hostedRoomsListScrollPane.getViewport().setOpaque(true);
hostedRoomsListScrollPane.getViewport().setBackground(Color.WHITE);
hostedRoomsListScrollPane.setAutoscrolls(true);
hostedRoomsListScrollPane.setBorder(BorderFactory.createEmptyBorder());
hostedRoomsListScrollPane.getVerticalScrollBar().setBlockIncrement(50);
hostedRoomsListScrollPane.getVerticalScrollBar().setUnitIncrement(20);
add(hostedRoomsListScrollPane, BorderLayout.CENTER);
try
{
Collection<HostedRoom> rooms = MultiUserChat.getHostedRooms(ChatsyManager.getConnection(), "conference.chat.mrswing.com");
Iterator<HostedRoom> iterator = rooms.iterator();
while (iterator.hasNext())
{
HostedRoom hostedRoom = iterator.next();
if (!hostedRooms.contains(hostedRoom.getJid()) && !hostedRoom.getJid().startsWith("symbol_conference"))
{
hostedRooms.add(hostedRoom.getJid());
ConferenceItem conferenceItem = new ConferenceItem(hostedRoom.getName(), hostedRoom.getJid());
listPanel.add(conferenceItem);
}
}
}
catch (XMPPException ex)
{
}
refeshTask = new TimerTask()
{
@Override public void run()
{
try
{
Collection<HostedRoom> rooms = MultiUserChat.getHostedRooms(ChatsyManager.getConnection(), "conference.chat.mrswing.com");
Iterator<HostedRoom> iterator = rooms.iterator();
while (iterator.hasNext())
{
HostedRoom hostedRoom = iterator.next();
if (!hostedRooms.contains(hostedRoom.getJid()) && !hostedRoom.getJid().startsWith("symbol_conference"))
{
hostedRooms.add(hostedRoom.getJid());
ConferenceItem conferenceItem = new ConferenceItem(hostedRoom.getName(), hostedRoom.getJid());
listPanel.add(conferenceItem);
}
}
}
catch (XMPPException ex)
{
}
listPanel.validate();
listPanel.repaint();
}
};
TaskEngine.getInstance().scheduleAtFixedRate(refeshTask, 2000, 2000);
}
}