blob: ad4b5a0e87ee4a8eab01262b6f7cc31cb20d4871 [file] [log] [blame]
package org.apache.maven.scm.provider.integrity;
/*
* 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.
*/
import com.mks.api.response.APIException;
import com.mks.api.response.Response;
import com.mks.api.response.WorkItemIterator;
import com.mks.api.response.InterruptedException;
/**
* Helper class to appropriately diagnose an APIException
* @author <a href="mailto:cletus@mks.com">Cletus D'Souza</a>
*/
public class ExceptionHandler
{
// Private variables to provide diagnostics on the exception
private String message;
private String command;
private int exitCode;
/**
* Constructor requires a single APIException to debug
* @param ex APIException
*/
public ExceptionHandler( APIException ex )
{
// API Exceptions can be nested. Hence we will need to recurse the
// exception hierarchy to dig for a conclusive message
Response response = ex.getResponse();
// Print the stack trace to standard out for debugging purposes
ex.printStackTrace();
// The API failed to execute the command (i.e. a real API error)
if ( null == response )
{
message = ex.getMessage();
command = new java.lang.String();
//exitCode = Integer.parseInt(ex.getExceptionId());
exitCode = -1;
}
else
{
command = response.getCommandString();
try
{
exitCode = response.getExitCode();
}
catch ( InterruptedException ie )
{
// Just print out the stack trace
ie.printStackTrace();
exitCode = -1;
}
WorkItemIterator wit = response.getWorkItems();
// In the event there is a problem with one of the command's elements
// we have to dig deeper into the exception...
try
{
while ( wit.hasNext() )
{
wit.next();
}
// If we got here then just extract the message
if ( ex.getMessage() != null )
{
message = ex.getMessage();
}
}
catch ( APIException ae )
{
// This message will be the real reason for the exception
String curMessage = ae.getMessage();
if ( curMessage != null )
{
message = curMessage;
}
ae.printStackTrace();
}
}
}
/**
* Returns the Message obtained from the APIException
* @return message APIException String
*/
public String getMessage()
{
return message;
}
/**
* Returns the executed command that caused the exception
* @return command Complete CLI Command String
*/
public String getCommand()
{
return command;
}
/**
* Returns the exit codes associated with executing the command
* @return exitCode API/CLI Exit Code
*/
public int getExitCode()
{
return exitCode;
}
}