/*
* ome.services.OmeroFilePathResolver
*
* Copyright 2011 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services;
import java.io.File;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ome.io.nio.AbstractFileSystemService;
import ome.io.nio.FilePathResolver;
import ome.model.core.Pixels;
import ome.util.SqlAction;
/**
* OMERO server based resolver for file paths.
*
* @author Chris Allan <a
* href="mailto:callan@blackcat.ca">callan@blackcat.ca</a>
* @since OMERO4.3
*/
public class OmeroFilePathResolver implements FilePathResolver
{
/** The logger for this particular class */
private static Logger log = LoggerFactory.getLogger(FilePathResolver.class);
/** SQL action instance for this class. */
protected final SqlAction sql;
/** The server's OMERO data directory. */
protected final String omeroDataDir;
/**
* Constructor.
* @param sql SQL action instance for this class.
* @param omeroDataDir The server's OMERO data directory.
*/
public OmeroFilePathResolver(SqlAction sql, String omeroDataDir)
{
this.sql = sql;
this.omeroDataDir = omeroDataDir;
}
/* (non-Javadoc)
* @see ome.io.nio.FilePathResolver#getOriginalFilePath(ome.io.nio.AbstractFileSystemService, ome.model.core.Pixels)
*/
public String getOriginalFilePath(AbstractFileSystemService service,
Pixels pixels)
{
List<String> namePathRepo =
sql.getPixelsNamePathRepo(pixels.getId());
String name = namePathRepo.get(0);
String path = namePathRepo.get(1);
String repo = namePathRepo.get(2);
if (name != null && path != null) // && repo == null)
// FIXME: In order to enable multi-server FS proper
// redirecting will need to happen at the pixel buffer
// layer as is currently happening in RawPixelsStoreI etc.
// In other words, far before we reach this code, we should
// already have been re-directed to the proper repo.
{
File f = new File(repo == null ? omeroDataDir : sql.findRepoRootPath(repo));
f = new File(f, namePathRepo.get(1));
f = new File(f, namePathRepo.get(0));
String originalFilePath = f.getAbsolutePath();
log.info("Metadata only file, resulting path: " +
originalFilePath);
return originalFilePath;
}
return null;
}
}