/*
* Copyright 2003,2004 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package hermes.browser.model;
import hermes.Domain;
import hermes.config.DestinationConfig;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import org.apache.log4j.Logger;
/**
* @author colincrist@hermesjms.com
* @version $Id: DestinationConfigTableModel.java,v 1.1 2004/07/21 19:46:13
* colincrist Exp $
*/
public class DestinationConfigTableModel extends DefaultTableModel
{
/**
*
*/
private static final long serialVersionUID = 7156548642269559562L;
private static final Logger log = Logger.getLogger(DestinationConfigTableModel.class);
private Vector rows = new Vector();
private Map queues = new HashMap();
private Map topics = new HashMap();
public DestinationConfigTableModel(List dList)
{
addColumn("Name");
addColumn("ShortName");
addColumn("Domain");
for (Iterator iter = dList.iterator(); iter.hasNext();)
{
final DestinationConfig dConfig = (DestinationConfig) iter.next();
addItem(dConfig);
}
}
public DestinationConfig getConfig(String name, Domain domain)
{
if (domain == Domain.QUEUE)
{
return (DestinationConfig) queues.get(name);
}
else
{
return (DestinationConfig) topics.get(name);
}
}
public boolean hasConfig(String name)
{
return queues.containsKey(name) || topics.containsKey(name);
}
public Collection getRows()
{
return rows;
}
/*
* (non-Javadoc)
*
* @see javax.swing.table.TableModel#getColumnCount()
*/
public int getColumnCount()
{
return 3;
}
/*
* (non-Javadoc)
*
* @see javax.swing.table.TableModel#getRowCount()
*/
public int getRowCount()
{
if (rows != null)
{
return rows.size();
}
else
{
return 0;
}
}
/*
* (non-Javadoc)
*
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
public Object getValueAt(int y, int x)
{
DestinationConfig dConfig = (DestinationConfig) rows.elementAt(y);
switch (x)
{
case 0:
return dConfig.getName();
case 1:
return dConfig.getShortName();
case 2:
if (dConfig.getDomain() == Domain.QUEUE.getId())
{
return "QUEUE";
}
else
{
return "TOPIC";
}
default:
return null;
}
}
public boolean isCellEditable(int y, int x)
{
return false;
}
public void setValueAt(Object value, int y, int x)
{
// NOP
}
public void removeRow(int y)
{
DestinationConfig dConfig = (DestinationConfig) rows.elementAt(y);
rows.remove(dConfig);
if (dConfig.getDomain() == (Domain.QUEUE.getId()))
{
queues.remove(dConfig);
}
else
{
topics.remove(dConfig);
}
fireTableDataChanged();
}
public DestinationConfig getRowConfig(int row)
{
return (DestinationConfig) rows.elementAt(row);
}
public void addItem(DestinationConfig dConfig)
{
if (dConfig != null && dConfig.getName() != null && !dConfig.getName().equals(""))
{
Map configs = dConfig.getDomain() == (Domain.QUEUE.getId()) ? queues : topics;
if (configs.containsKey(dConfig.getName()))
{
configs.put(dConfig.getName(), dConfig);
for (Iterator iter = rows.iterator(); iter.hasNext();)
{
DestinationConfig row = (DestinationConfig) iter.next();
if (row.getName().equals(dConfig.getName()))
{
iter.remove();
}
}
rows.add(dConfig);
}
else
{
rows.add(dConfig);
configs.put(dConfig.getName(), dConfig);
}
fireTableRowsInserted(rows.size(), rows.size()) ;
}
}
public Collection getDestinations()
{
return rows;
}
public void refresh()
{
fireTableDataChanged() ;
}
}