/*
* Copyright 2009 Alin Dreghiciu.
*
* Licensed 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.ops4j.pax.url.assembly.internal;
import java.net.URL;
import org.ops4j.lang.NullArgumentException;
/**
* A resource from a zip/jar file.
*
* @author Alin Dreghiciu
* @since 1.1.0, August 31, 2009
*/
class JarResource
implements Resource
{
/**
* Resource URL.
*/
private final URL m_url;
/**
* Constructor.
*
* @param url resource url
*/
JarResource( final URL url )
{
NullArgumentException.validateNotNull( url, "Resource url" );
if( !"jar".equals( url.getProtocol() )
&& !url.toExternalForm().contains( "!/" ) )
{
throw new IllegalArgumentException( String.format( "URL [%s] is not referring to a jar resource", url ) );
}
m_url = url;
}
/**
* Returns file canonical path relative to parent.
*
* {@inheritDoc}
*/
public String path()
{
final String externalForm = m_url.toExternalForm();
return externalForm.substring( externalForm.lastIndexOf( "!/" ) + 2 );
}
/**
* Returns file url.
*
* {@inheritDoc}
*/
public URL url()
{
return m_url;
}
@Override
public boolean equals( Object o )
{
if( this == o )
{
return true;
}
if( !( o instanceof Resource ) )
{
return false;
}
Resource that = (Resource) o;
return path().equals( that.path() );
}
@Override
public int hashCode()
{
return path().hashCode();
}
@Override
public String toString()
{
return path();
}
}