blob: 66cb43d52b8be47cc09d979fc0a42388dde022a2 [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.jena.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.AccessControlException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Location files in the filing system.
* A FileLocator can have a "current directory" - this is separate from any
* location mapping (see @link{LocationMapping}) as it applies only to files.
* @deprecated Use {@code StreamManager} and {@code LocatorFile} from {@code org.apache.jena.riot.system.stream}.
*/
@Deprecated
public class LocatorFile implements Locator
{
static Logger log = LoggerFactory.getLogger(LocatorFile.class) ;
private String thisDir = null ;
private String thisDirLogStr = "" ;
public LocatorFile(String dir)
{
if ( dir != null )
{
if ( dir.endsWith("/") || dir.endsWith(java.io.File.separator) )
dir = dir.substring(0,dir.length()-1) ;
thisDirLogStr = " ["+dir+"]" ;
}
thisDir = dir ;
}
LocatorFile()
{
this(null) ;
}
@Override
public boolean equals( Object other )
{
return
other instanceof LocatorFile
&& equals( thisDir, ((LocatorFile) other).thisDir );
}
private boolean equals( String a, String b )
{
return a == null ? b == null : a.equals( b );
}
@Override
public int hashCode()
{
if ( thisDir == null )
return 157 ;
return thisDir.hashCode();
}
private File toFile(String filenameOrURI)
{
String fn = FileUtils.toFilename(filenameOrURI) ;
if ( fn == null )
return null ;
if ( thisDir != null && ! fn.startsWith("/") && ! fn.startsWith(FileManager.filePathSeparator) )
fn = thisDir+java.io.File.separator+fn ;
return new File(fn) ;
}
public boolean exists(String filenameOrURI)
{
File f = toFile(filenameOrURI) ;
if ( f == null )
return false ;
return f.exists() ;
}
@Override
public TypedStream open(String filenameOrURI)
{
// Worry about %20.
// toFile calls FileUtils.toFilename(filenameOrURI) ;
File f = toFile(filenameOrURI) ;
try {
if ( f == null || !f.exists() )
{
if ( FileManager.logAllLookups && log.isTraceEnabled())
log.trace("Not found: "+filenameOrURI+thisDirLogStr) ;
return null ;
}
} catch (AccessControlException e) {
log.warn("Security problem testing for file", e);
return null;
}
try {
InputStream in = new FileInputStream(f) ;
if ( FileManager.logAllLookups && log.isTraceEnabled() )
log.trace("Found: "+filenameOrURI+thisDirLogStr) ;
// Create base -- Java 1.4-isms
//base = f.toURI().toURL().toExternalForm() ;
//base = base.replaceFirst("^file:/([^/])", "file:///$1") ;
return new TypedStream(in) ;
} catch (IOException ioEx)
{
// Includes FileNotFoundException
// We already tested whether the file exists or not.
log.warn("File unreadable (but exists): "+f.getPath()+" Exception: "+ioEx.getMessage()) ;
return null ;
}
}
public String getDir() { return thisDir ; }
@Override
public String getName()
{
String tmp = "LocatorFile" ;
if ( thisDir != null )
tmp = tmp+"("+thisDir+")" ;
return tmp ;
}
}