📄 pserveraccrinterface.java
字号:
/*
* ====================================================================
* The Vovida Software License, Version 1.0
*
* Copyright (c) 2000 Vovida Networks, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The names "VOCAL", "Vovida Open Communication Application Library",
* and "Vovida Open Communication Application Library (VOCAL)" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact vocal@vovida.org.
*
* 4. Products derived from this software may not be called "VOCAL", nor
* may "VOCAL" appear in their name, without prior written
* permission of Vovida Networks, Inc.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
* NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
* IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* ====================================================================
*
* This software consists of voluntary contributions made by Vovida
* Networks, Inc. and many individuals on behalf of Vovida Networks,
* Inc. For more information on Vovida Networks, Inc., please see
* <http://www.vovida.org/>.
*
*/
package vocal.userEditor;
import vocal.comm.VPPTransactionWrapper;
import vocal.comm.VPPException;
import vocal.comm.VPPNoSuchFileException;
import vocal.data.XMLUtils;
import vocal.util.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Document;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.net.ConnectException;
public class PServerAccrInterface
{
private VPPTransactionWrapper connection = null;
private DocumentBuilder parser = null;
private Hashtable featureGroups = null;
private Hashtable groupServers = null;
private String[] marshalTypes = null;
public PServerAccrInterface(VPPTransactionWrapper con)
{
connection = con;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try
{
parser = dbf.newDocumentBuilder();
}
catch(ParserConfigurationException e)
{
e.printStackTrace();
}
}
public PServerAccrInterface(String aHost, int aPort) throws VPPException
{
connection = new VPPTransactionWrapper(aHost, aPort);
}
public void deleteUser(String name) throws VPPNoSuchFileException
{
try
{
connection.request("DELETEGROUP", name, "");
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
throw (VPPNoSuchFileException) ex;
}
else
{
connection.showVPPException(ex, "");
}
}
}
public void deleteAdmin(String name) throws VPPNoSuchFileException
{
try
{
connection.request("REMOVE", "Admin_Accounts", name);
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
throw (VPPNoSuchFileException) ex;
}
else
{
connection.showVPPException(ex, "");
}
}
}
public void saveGroup(String name, Document doc)
{
String xml = new XMLUtils().buildXMLString(doc);
try
{
connection.doPut("AccreditGroup", name, xml);
}
catch (VPPException e)
{
connection.showVPPException(e, "");
}
}
/**
* Pass through for doPut. <p>
*/
public void put(String group, String filename, String data)
{
try
{
connection.doPut(group, filename, data);
}
catch (VPPException e)
{
connection.showVPPException(e, "");
}
}
public String get(String group,
String filename) throws VPPNoSuchFileException
{
try
{
return connection.doGet(group, filename);
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
throw (VPPNoSuchFileException) ex;
}
else
{
connection.showVPPException(ex, "");
}
}
return "";
}
private Document getGroupNamed(String group,
String filename) throws VPPException, IOException, SAXException
{
BufferedReader accreditgroup = connection.request("GET", group, filename);
return parser.parse(new InputSource(accreditgroup));
}
public Document getAdminNamed(String name)
throws VPPException, IOException, SAXException
{
return getGroupNamed("Admin_Accounts", name);
}
/**
* Retrieve the xml file for a user with the given name and parse it.
*/
public Document getGroupNamed(String name)
throws VPPException, IOException, SAXException
{
return getGroupNamed("AccreditGroup", name);
}
public String[] getAllAdminNames() throws VPPNoSuchFileException
{
return getAllNames("Admin_Accounts");
}
public String[] getAllAliasNames() throws VPPNoSuchFileException
{
return getAllNames("Aliases");
}
public String getAliasNamed(String alias) throws VPPNoSuchFileException
{
try
{
return connection.doGet("Aliases", alias);
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
throw (VPPNoSuchFileException) ex;
}
else
{
connection.showVPPException(ex, "");
}
}
return "";
}
private String[] getAllNames(String group) throws VPPNoSuchFileException
{
String[] names = new String[]{};
Logger.swingLog("Downloading list of user names from server ...");
String fileList = null;
try
{
fileList = connection.requestString("NLIST", group, "");
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
Logger.swingLog("No names found");
throw (VPPNoSuchFileException) ex;
}
else
{
connection.showVPPException(ex, "");
}
}
if (fileList == null)
{
return names;
}
if (fileList.charAt(fileList.length() - 1) == '\n')
{
fileList = fileList.substring(0, Math.max(0, fileList.length() - 2));
}
if (fileList.length() == 0)
{
Logger.swingLog("No names found");
return names;
}
Logger.swingLog("Starting to tokenize user name list ...");
StringTokenizer tokenizer = new StringTokenizer(fileList, ",", false);
Vector namesTemp = new Vector();
String name;
while (tokenizer.hasMoreTokens())
{
name = tokenizer.nextToken();
namesTemp.addElement(name);
}
Logger.swingLog("Done tokenizing user name list ...");
names = new String[namesTemp.size()];
namesTemp.copyInto(names);
Logger.swingLog("Starting to sort user name list ...");
java.util.Arrays.sort(names);
Logger.swingLog("Done sorting ");
return names;
}
/**
* Retrieve a directory listing for all the /Accounts/ dir to get a list of
* the names of all the users.
*/
public String[] getAllUserNames() throws VPPNoSuchFileException
{
return getAllNames("AccreditGroup");
}
public String[] getMarshalGroups()
throws VPPNoSuchFileException, IOException, SAXException
{
if (marshalTypes == null)
{
String filegroup = "SystemConfiguration";
String filename = "ListOfMarshalServers";
try
{
BufferedReader configInfo = connection.request("GET", filegroup,
filename);
Document doc = parser.parse(new InputSource(configInfo));
NodeList marshals = doc.getElementsByTagName("serverType");
if (marshals.getLength() == 0)
{
throw new FileNotFoundException("There are no marshal servers defined in "
+ filegroup + " " + filename);
}
for (int i = 0; i < marshals.getLength(); i++)
{
Element marshal = (Element) marshals.item(i);
String type = marshal.getAttribute("value");
if (type.equals("UserAgent"))
{
NodeList groups = marshal.getElementsByTagName("serverGroup");
marshalTypes = new String[groups.getLength()];
for (int j = 0; j < groups.getLength(); j++)
{
Element group = (Element) groups.item(j);
String name = group.getAttribute("value");
marshalTypes[j] = name;
}
}
}
}
catch (VPPException ex)
{
if (VPPNoSuchFileException.class.isInstance(ex))
{
throw new VPPNoSuchFileException("Could not load file " + filegroup
+ " " + filename + "\n\nbecause:\n\n" + ex.getMessage());
}
else
{
connection.showVPPException(ex, "");
}
}
}
if ((marshalTypes == null) || (marshalTypes.length == 0))
{
throw new FileNotFoundException("Could not find any marshal types. Probably could not parse file.");
}
return marshalTypes;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -