org.eclipse.aether.RequestTrace Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-cloud-contract-shade Show documentation
Show all versions of spring-cloud-contract-shade Show documentation
Spring Cloud Contract Shaded Dependencies
/*******************************************************************************
* Copyright (c) 2010, 2011 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.aether;
/**
* A trace of nested requests that are performed by the repository system. This trace information can be used to
* correlate repository events with higher level operations in the application code that eventually caused the events. A
* single trace can carry an arbitrary object as data which is meant to describe a request/operation that is currently
* executed. For call hierarchies within the repository system itself, this data will usually be the {@code *Request}
* object that is currently processed. When invoking methods on the repository system, client code may provide a request
* trace that has been prepopulated with whatever data is useful for the application to indicate its state for later
* evaluation when processing the repository events.
*
* @see RepositoryEvent#getTrace()
*/
public class RequestTrace
{
private final RequestTrace parent;
private final Object data;
/**
* Creates a child of the specified request trace. This method is basically a convenience that will invoke
* {@link RequestTrace#newChild(Object) parent.newChild()} when the specified parent trace is not {@code null} or
* otherwise instantiante a new root trace.
*
* @param parent The parent request trace, may be {@code null}.
* @param data The data to associate with the child trace, may be {@code null}.
* @return The child trace, never {@code null}.
*/
public static RequestTrace newChild( RequestTrace parent, Object data )
{
if ( parent == null )
{
return new RequestTrace( data );
}
return parent.newChild( data );
}
/**
* Creates a new root trace with the specified data.
*
* @param data The data to associate with the trace, may be {@code null}.
*/
public RequestTrace( Object data )
{
this( null, data );
}
/**
* Creates a new trace with the specified data and parent
*
* @param parent The parent trace, may be {@code null} for a root trace.
* @param data The data to associate with the trace, may be {@code null}.
*/
protected RequestTrace( RequestTrace parent, Object data )
{
this.parent = parent;
this.data = data;
}
/**
* Gets the data associated with this trace.
*
* @return The data associated with this trace or {@code null} if none.
*/
public final Object getData()
{
return data;
}
/**
* Gets the parent of this trace.
*
* @return The parent of this trace or {@code null} if this is the root of the trace stack.
*/
public final RequestTrace getParent()
{
return parent;
}
/**
* Creates a new child of this trace.
*
* @param data The data to associate with the child, may be {@code null}.
* @return The child trace, never {@code null}.
*/
public RequestTrace newChild( Object data )
{
return new RequestTrace( this, data );
}
@Override
public String toString()
{
return String.valueOf( getData() );
}
}