/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2009 Sun Microsystems, Inc. */ package org.opends.guitools.controlpanel.datamodel; import static org.opends.messages.AdminToolMessages.*; import java.net.InetAddress; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import org.opends.guitools.controlpanel.datamodel.ConnectionHandlerDescriptor. Protocol; import org.opends.messages.Message; /** * The table model used to display the monitoring information of connection * handlers. * */ public class ConnectionHandlersMonitoringTableModel extends MonitoringTableModel<ConnectionHandlerDescriptor, AddressConnectionHandlerDescriptor> { private static final long serialVersionUID = -8891998773191495L; /** * {@inheritDoc} */ protected Set<AddressConnectionHandlerDescriptor> convertToInternalData( Set<ConnectionHandlerDescriptor> newData) { Set<AddressConnectionHandlerDescriptor> newAddresses = new HashSet<AddressConnectionHandlerDescriptor>(); for (ConnectionHandlerDescriptor ch : newData) { if (ch.getAddresses().isEmpty()) { newAddresses.add(new AddressConnectionHandlerDescriptor(ch, null, getMonitoringEntry(null, ch))); } else { for (InetAddress address : ch.getAddresses()) { newAddresses.add(new AddressConnectionHandlerDescriptor(ch, address, getMonitoringEntry(address, ch))); } } } return newAddresses; } /** * {@inheritDoc} */ public int compare(AddressConnectionHandlerDescriptor desc1, AddressConnectionHandlerDescriptor desc2) { int result; ArrayList<Integer> possibleResults = new ArrayList<Integer>(); possibleResults.add(compareNames(desc1, desc2)); possibleResults.addAll(getMonitoringPossibleResults( desc1.getMonitoringEntry(), desc2.getMonitoringEntry())); result = possibleResults.get(getSortColumn()); if (result == 0) { for (int i : possibleResults) { if (i != 0) { result = i; break; } } } if (!isSortAscending()) { result = -result; } return result; } private int compareNames(AddressConnectionHandlerDescriptor ach1, AddressConnectionHandlerDescriptor ach2) { int compare = 0; boolean addressEqual = false; if (ach1.getAddress() == null) { if (ach2.getAddress() == null) { addressEqual = true; } } else if (ach2.getAddress() != null) { addressEqual = ach1.getAddress().equals(ach2.getAddress()); } if (addressEqual) { Integer port1 = new Integer(ach1.getConnectionHandler().getPort()); Integer port2 = new Integer(ach2.getConnectionHandler().getPort()); compare = port1.compareTo(port2); } else { compare = getName(ach1).compareTo(getName(ach2)); } return compare; } /** * {@inheritDoc} */ protected CustomSearchResult getMonitoringEntry( AddressConnectionHandlerDescriptor ach) { return ach.getMonitoringEntry(); } /** * {@inheritDoc} */ protected String getName(AddressConnectionHandlerDescriptor ach) { StringBuilder sb = new StringBuilder(); ConnectionHandlerDescriptor ch = ach.getConnectionHandler(); if (ch.getProtocol() == Protocol.ADMINISTRATION_CONNECTOR) { sb.append(INFO_CTRL_PANEL_ADMINISTRATION_CONNECTOR_NAME.get( ch.getPort())); } else { if (ach.getAddress() != null) { sb.append(ach.getAddress().getHostAddress()+":"+ch.getPort()); } else { sb.append(ch.getPort()); } sb.append(" - "); switch (ch.getProtocol()) { case OTHER: sb.append(ch.getName()); break; default: sb.append(ch.getProtocol().getDisplayMessage().toString()); break; } } return sb.toString(); } private CustomSearchResult getMonitoringEntry(InetAddress address, ConnectionHandlerDescriptor cch) { CustomSearchResult monitoringEntry = null; for (CustomSearchResult sr : cch.getMonitoringEntries()) { String cn = (String)getFirstMonitoringValue(sr, "cn"); if (cn != null) { if (address == null) { monitoringEntry = sr; break; } else { if (cn.endsWith( " "+address.getHostAddress()+" port "+cch.getPort()+ " Statistics")) { monitoringEntry = sr; break; } } } } return monitoringEntry; } /** * {@inheritDoc} */ protected Message getNameHeader() { return INFO_CTRL_PANEL_CONNECTION_HANDLER_HEADER.get(); } } /** * The table model has one line per address, this object represents that * address and all the associated monitoring information. * */ class AddressConnectionHandlerDescriptor { private ConnectionHandlerDescriptor ch; private InetAddress address; private CustomSearchResult monitoringEntry; private int hashCode; /** * Constructor of this data structure. * @param ch the connection handler descriptor. * @param address the address. * @param monitoringEntry the monitoringEntry. */ public AddressConnectionHandlerDescriptor( ConnectionHandlerDescriptor ch, InetAddress address, CustomSearchResult monitoringEntry) { this.ch = ch; this.address = address; this.monitoringEntry = monitoringEntry; if (address != null) { hashCode = ch.hashCode() + address.hashCode(); } else { hashCode = ch.hashCode(); } } /** * Returns the address. * @return the address. */ public InetAddress getAddress() { return address; } /** * Returns the connection handler descriptor. * @return the connection handler descriptor. */ public ConnectionHandlerDescriptor getConnectionHandler() { return ch; } /** * Returns the monitoring entry. * @return the monitoring entry. */ public CustomSearchResult getMonitoringEntry() { return monitoringEntry; } /** * {@inheritDoc} */ public int hashCode() { return hashCode; } /** * {@inheritDoc} */ public boolean equals(Object o) { boolean equals = false; if (o != this) { if (o instanceof AddressConnectionHandlerDescriptor) { AddressConnectionHandlerDescriptor ach = (AddressConnectionHandlerDescriptor)o; if (ach.getAddress() == null) { equals = getAddress() == null; } else if (getAddress() == null) { equals = false; } else { equals = ach.getAddress().equals(getAddress()); } if (equals) { equals = ach.getConnectionHandler().equals(getConnectionHandler()); } } } else { equals = true; } return equals; } }