/* $Id: CheckAll.java 988245 2010-08-23 18:39:35Z kwright $ */
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.manifoldcf.authorities;
import java.io.*;
import org.apache.manifoldcf.core.interfaces.*;
import org.apache.manifoldcf.authorities.interfaces.*;
import org.apache.manifoldcf.authorities.system.*;
import java.util.*;
/** This class is used during testing.
*/
public class CheckAll
{
public static final String _rcsid = "@(#)$Id: CheckAll.java 988245 2010-08-23 18:39:35Z kwright $";
private CheckAll()
{
}
public static void main(String[] args)
{
if (args.length != 0)
{
System.err.println("Usage: CheckAll");
System.exit(1);
}
try
{
IThreadContext tc = ThreadContextFactory.make();
ManifoldCF.initializeEnvironment(tc);
IAuthorityConnectorPool authorityConnectorPool = AuthorityConnectorPoolFactory.make(tc);
// Now, get a list of the authority connections
IAuthorityConnectionManager mgr = AuthorityConnectionManagerFactory.make(tc);
IAuthorityConnection[] connections = mgr.getAllConnections();
int i = 0;
while (i < connections.length)
{
// Grab the connection and perform a check operation.
// Check operations that return "connection working" are ignored.
// Operations that return anything else stream stuff to standard error,
// in a form which is parseable. This will be an escaped form of the authority identifying string, followed by ":",
// followed by the message and a newline
IAuthorityConnection connection = connections[i++];
String identifyingName = connection.getDescription();
if (identifyingName == null || identifyingName.length() == 0)
identifyingName = connection.getName();
String className = connection.getClassName();
int maxCount = connection.getMaxConnections();
ConfigParams parameters = connection.getConfigParams();
// Now, test the connection.
String connectionStatus;
try
{
IAuthorityConnector c = authorityConnectorPool.grab(connection);
if (c != null)
{
try
{
connectionStatus = c.check();
}
finally
{
authorityConnectorPool.release(connection,c);
}
}
else
connectionStatus = "Connector not installed";
}
catch (ManifoldCFException e)
{
connectionStatus = "Threw exception: '"+e.getMessage()+"'";
}
if (connectionStatus.startsWith("Connection working"))
continue;
UTF8Stdout.println(encode(identifyingName)+":"+encode(connectionStatus));
}
System.err.println("Done getting authority status");
}
catch (Exception e)
{
System.err.print(e.getMessage());
Logging.root.warn("Exception in CheckAll: "+e.getMessage(),e);
System.exit(2);
}
}
/** Encode a string so that it doesn't have control characters, newlines, or colons in it */
protected static String encode(String input)
{
StringBuilder sb = new StringBuilder();
int i = 0;
while (i < input.length())
{
char x = input.charAt(i++);
if (x == ':')
sb.append('\\').append(x);
else if (x < ' ' && x >= 0)
sb.append(' ');
else
sb.append(x);
}
return sb.toString();
}
}