package com.hwlcn.ldap.ldif;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.hwlcn.ldap.util.LDAPSDKException;
import com.hwlcn.core.annotation.NotMutable;
import com.hwlcn.ldap.util.StaticUtils;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
import static com.hwlcn.ldap.util.Validator.*;
@NotMutable()
@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
public final class LDIFException
extends LDAPSDKException
{
private static final long serialVersionUID = 1665883395956836732L;
private final boolean mayContinueReading;
private final long lineNumber;
private final List<String> dataLines;
public LDIFException(final String message, final long lineNumber,
final boolean mayContinueReading)
{
this(message, lineNumber, mayContinueReading, (List<CharSequence>) null,
null);
}
public LDIFException(final String message, final long lineNumber,
final boolean mayContinueReading, final Throwable cause)
{
this(message, lineNumber, mayContinueReading, (List<CharSequence>) null,
cause);
}
public LDIFException(final String message, final long lineNumber,
final boolean mayContinueReading,
final CharSequence[] dataLines, final Throwable cause)
{
this(message, lineNumber, mayContinueReading,
(dataLines == null) ? null : Arrays.asList(dataLines),
cause);
}
public LDIFException(final String message, final long lineNumber,
final boolean mayContinueReading,
final List<? extends CharSequence> dataLines,
final Throwable cause)
{
super(message, cause);
ensureNotNull(message);
this.lineNumber = lineNumber;
this.mayContinueReading = mayContinueReading;
if (dataLines == null)
{
this.dataLines = null;
}
else
{
final ArrayList<String> lineList =
new ArrayList<String>(dataLines.size());
for (final CharSequence s : dataLines)
{
lineList.add(s.toString());
}
this.dataLines = Collections.unmodifiableList(lineList);
}
}
public long getLineNumber()
{
return lineNumber;
}
public boolean mayContinueReading()
{
return mayContinueReading;
}
public List<String> getDataLines()
{
return dataLines;
}
@Override()
public void toString(final StringBuilder buffer)
{
buffer.append("LDIFException(lineNumber=");
buffer.append(lineNumber);
buffer.append(", mayContinueReading=");
buffer.append(mayContinueReading);
buffer.append(", message='");
buffer.append(getMessage());
if (dataLines != null)
{
buffer.append("', dataLines='");
for (final CharSequence s : dataLines)
{
buffer.append(s);
buffer.append("{end-of-line}");
}
}
final Throwable cause = getCause();
if (cause == null)
{
buffer.append("')");
}
else
{
buffer.append("', cause=");
StaticUtils.getStackTrace(cause, buffer);
buffer.append(')');
}
}
@Override()
public String getExceptionMessage()
{
return toString();
}
}