/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.login; import com.eas.client.settings.ConnectionSettings; import java.awt.Color; import java.awt.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JList; import javax.swing.ListCellRenderer; import javax.swing.UIManager; /** * * @author pk, mg refactoring */ public class ConnectionsListModel extends AbstractListModel { private final List<ConnectionSettings> elements = new ArrayList<>(); private final DbConnectionRenderer connectionRenderer = new DbConnectionRenderer(); public ConnectionsListModel() throws Exception { fillElements(); } @Override public Object getElementAt(int index) { return elements.get(index); } public void putElementAt(int index, ConnectionSettings element) { if (index == elements.size()) { elements.add(element); } else { elements.add(index, element); } fireIntervalAdded(this, index, index); } @Override public int getSize() { return elements.size(); } public ListCellRenderer getCellRenderer() { return connectionRenderer; } public void removeElementAt(int index) { elements.remove(index); fireIntervalRemoved(this, index, index); } public void fireContentsChanged(int index) { super.fireContentsChanged(this, index, index); } private void fillElements() throws Exception { ConnectionsSelector.reset(); ConnectionSettings[] settings = ConnectionsSelector.getSettings(); if (settings != null) { elements.addAll(Arrays.asList(settings)); } } private static final Color textInactiveTextcolor = UIManager.getColor("Label.disabledForeground") != null ? UIManager.getColor("Label.disabledForeground") : Color.gray; private class DbConnectionRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { DefaultListCellRenderer r = (DefaultListCellRenderer) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); ConnectionSettings settings = (ConnectionSettings) value; String displayName = settings.getName(); if (displayName == null || displayName.isEmpty()) { displayName = settings.getUrl(); } if (!settings.isEditable()) { displayName = displayName + " [" + ConnectionsSelector.bundle.getString("systemConnectionPrefix") + "]"; r.setForeground(textInactiveTextcolor); } r.setText(displayName); return r; } } }