blob: af51f8b217bfceddc214f6ba0f6993ee158b594e [file] [log] [blame]
/**
* 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.maven.mercury.transport.api;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import org.apache.maven.mercury.logging.IMercuryLogger;
import org.apache.maven.mercury.logging.MercuryLoggerManager;
/**
* Binding <p/> A Binding represents a remote uri whose contents are to be
* downloaded and stored in a locally, or a local resource whose contents are to
* be uploaded to the remote uri.
*/
public class Binding
{
private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( Binding.class );
protected URL remoteResource;
protected File localFile;
/**
* inbound in-memory binding for reading remote content.
* It is created by the constructor
*/
protected ByteArrayOutputStream localOS;
/**
* this is outbound in-memory binding. IS is passed by the client
*/
protected InputStream localIS;
protected Exception error;
public Binding()
{
}
public Binding( URL remoteUrl, File localFile)
{
this.remoteResource = remoteUrl;
this.localFile = localFile;
}
/**
* this is in-memory binding for writing remote content into localOS
*
* @param remoteUrl
* @param lenientChecksum
*/
public Binding( URL remoteUrl )
{
this.remoteResource = remoteUrl;
// let's assume 4k on average
this.localOS = new ByteArrayOutputStream( 4*1024 );
}
/**
* outbound constructor - send contents of the stream to remoteUrl
*
* @param remoteUrl
* @param is
*/
public Binding( URL remoteUrl, InputStream is )
{
this.remoteResource = remoteUrl;
this.localIS = is;
}
/**
* inbound constructor - read contents of the remoteUrl to the stream
*
* @param remoteUrl
* @param is
*/
public Binding( URL remoteUrl, ByteArrayOutputStream os )
{
this.remoteResource = remoteUrl;
this.localOS = os;
}
public URL getRemoteResource()
{
return remoteResource;
}
public void setRemoteResource( URL remoteResource )
{
this.remoteResource = remoteResource;
}
public Exception getError()
{
return error;
}
public void setError( Exception error )
{
this.error = error;
}
public boolean isInMemory()
{
return (!isFile() && (localIS != null || localOS != null));
}
public boolean isFile()
{
return localFile != null;
}
public byte [] getInboundContent()
{
if( localOS != null )
return localOS.toByteArray();
return null;
}
public OutputStream getLocalOutputStream()
{
return localOS;
}
public InputStream getLocalInputStream()
{
return localIS;
}
public File getLocalFile ()
{
return localFile;
}
@Override
public String toString()
{
return '['
+ (remoteResource == null ? "null URL" : remoteResource.toString() )+" <=> "
+ (localFile == null ? ( localIS == null ? (localOS == null ? "null local Res" : localOS) : "localIS" ) : localFile.getAbsolutePath() )
+']'
;
}
}