/*
* Copyright (C) 2006-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.jlan.netbios;
import java.util.Vector;
/**
* NetBIOS Name List Class
*
* <p>Contains a list of NetBIOSName objects.
*
* @author gkspencer
*/
public class NetBIOSNameList {
// List of NetBIOS names
private Vector<NetBIOSName> m_nameList;
// MAC address
private byte[] m_mac = null;
/**
* Class constructor
*/
public NetBIOSNameList() {
m_nameList = new Vector<NetBIOSName>();
}
/**
* Determine if the MAC address is valid
*
* @return boolean
*/
public final boolean hasMACAddress() {
return m_mac != null ? true : false;
}
/**
* Return the MAC address of the remote server
*
* @return byte[]
*/
public final byte[] getMACAddress() {
return m_mac;
}
/**
* Return the MAC address as a string in the format nn:nn:nn:nn:nn:nn
*
* @return String
*/
public final String getMACAddressString() {
String macAddrStr = null;
if ( hasMACAddress()) {
StringBuffer str = new StringBuffer();
for ( int i = 0; i < m_mac.length; i++) {
int val = m_mac[i] & 0xFF;
if ( val < 16)
str.append("0");
str.append(Integer.toHexString(val));
str.append(":");
}
if ( str.length() > 0)
str.setLength(str.length() - 1);
macAddrStr = str.toString();
}
return macAddrStr;
}
/**
* Set the MAC address of the remote server
*
* @param mac byte[]
*/
public final void setMACAddress(byte[] mac) {
m_mac = mac;
}
/**
* Add a name to the list
*
* @param name NetBIOSName
*/
public final void addName(NetBIOSName name) {
m_nameList.add(name);
}
/**
* Get a name from the list
*
* @param idx int
* @return NetBIOSName
*/
public final NetBIOSName getName(int idx) {
if ( idx < m_nameList.size())
return m_nameList.get(idx);
return null;
}
/**
* Return the number of names in the list
*
* @return int
*/
public final int numberOfNames() {
return m_nameList.size();
}
/**
* Find names of the specified name of different types and return a subset of the
* available names.
*
* @param name String
* @return NetBIOSNameList
*/
public final NetBIOSNameList findNames(String name) {
// Allocate the sub list and search for required names
NetBIOSNameList subList = new NetBIOSNameList();
for ( int i = 0; i < m_nameList.size(); i++) {
NetBIOSName nbName = getName(i);
if ( nbName.getName().compareTo(name) == 0)
subList.addName(nbName);
}
// Return the sub list of names
return subList;
}
/**
* Find the first name of the specified type
*
* @param typ char
* @param group boolean
* @return NetBIOSName
*/
public final NetBIOSName findName(char typ, boolean group) {
// Search for the first name of the required type
for ( int i = 0; i < m_nameList.size(); i++) {
NetBIOSName name = getName(i);
if ( name.getType() == typ && name.isGroupName() == group)
return name;
}
// Name type not found
return null;
}
/**
* Find the specified name and type
*
* @param name String
* @param typ char
* @param group boolean
* @return NetBIOSName
*/
public final NetBIOSName findName(String name, char typ, boolean group) {
// Search for the first name of the required type
for ( int i = 0; i < m_nameList.size(); i++) {
NetBIOSName nbName = getName(i);
if ( nbName.getName().equals(name) && nbName.getType() == typ && nbName.isGroupName() == group)
return nbName;
}
// Name/type not found
return null;
}
/**
* Find names of the specified type and return a subset of the available names
*
* @param typ char
* @param group boolean
* @return NetBIOSNameList
*/
public final NetBIOSNameList findNames(char typ, boolean group) {
// Allocate the sub list and search for names of the required type
NetBIOSNameList subList = new NetBIOSNameList();
for ( int i = 0; i < m_nameList.size(); i++) {
NetBIOSName name = getName(i);
if ( name.getType() == typ && name.isGroupName() == group)
subList.addName(name);
}
// Return the sub list of names
return subList;
}
/**
* Remove a name from the list
*
* @param name NetBIOSName
* @return NetBIOSName
*/
public final NetBIOSName removeName(NetBIOSName name) {
for ( int i = 0; i < m_nameList.size(); i++) {
NetBIOSName curName = getName(i);
if ( curName.equals(name)) {
m_nameList.removeElementAt(i);
return curName;
}
}
return null;
}
/**
* Delete all names from the list
*/
public final void removeAllNames() {
m_nameList.removeAllElements();
}
}