package net.sourceforge.seqware.common.business.impl;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import net.sourceforge.seqware.common.business.FileService;
import net.sourceforge.seqware.common.dao.FileDAO;
import net.sourceforge.seqware.common.model.File;
import net.sourceforge.seqware.common.model.Processing;
import net.sourceforge.seqware.common.model.Registration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* <p>
* FileServiceImpl class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class FileServiceImpl implements FileService {
private FileDAO fileDAO = null;
private static final Log LOG = LogFactory.getLog(FileServiceImpl.class);
/**
* <p>
* Constructor for FileServiceImpl.
* </p>
*/
public FileServiceImpl() {
super();
}
/**
* {@inheritDoc}
*
* Sets a private member variable with an instance of an implementation of FileDAO. This method is called by the Spring framework at run
* time.
*
* @param dao
* @see FileDAO
*/
@Override
public void setFileDAO(FileDAO dao) {
this.fileDAO = dao;
}
/**
* {@inheritDoc}
*
* Inserts an instance of File into the database.
*
* @return
*/
@Override
public Integer insert(File file) {
return fileDAO.insert(file);
}
/**
* {@inheritDoc}
*
* Updates an instance of File in the database.
*/
@Override
public void update(File file) {
fileDAO.update(file);
}
/**
* {@inheritDoc}
*
* @param file
* @param deleteRealFiles
*/
@Override
public void delete(File file, boolean deleteRealFiles) {
Set<Processing> processings = file.getProcessings();
for (Processing processing : processings) {
processing.getFiles().remove(file);
}
file.getProcessings().clear();
fileDAO.delete(file);
if (deleteRealFiles) {
List<File> deleteFiles = new LinkedList<>();
deleteFiles.add(file);
fileDAO.deleteAllWithFolderStore(deleteFiles);
}
}
/**
* {@inheritDoc}
*
* @param files
* @param deleteRealFiles
*/
@Override
public void deleteAll(List<File> files, boolean deleteRealFiles) {
fileDAO.deleteAll(files);
if (deleteRealFiles) {
fileDAO.deleteAllWithFolderStore(files);
}
}
/** {@inheritDoc} */
@Override
public boolean isExists(String fileName, String folderStore) {
boolean isExists = false;
String path = folderStore + fileName;
if (findByPath(path) != null) {
isExists = true;
}
return isExists;
}
/** {@inheritDoc} */
@Override
public List<File> getFiles(Integer fileId) {
File file = findByID(fileId);
List<File> files = new ArrayList<>();
files.add(file);
return files;
}
/** {@inheritDoc} */
@Override
public List<File> getFiles(Integer fileId, String metaType) {
File file = findByID(fileId);
List<File> files = new ArrayList<>();
if (metaType.equals(file.getMetaType())) {
files.add(file);
}
return files;
}
/** {@inheritDoc} */
@Override
public Set<File> setWithHasFile(Set<File> list, String metaType) {
Set<File> result = new TreeSet<>();
for (File file : list) {
if (metaType.equals(file.getMetaType())) {
result.add(file);
}
}
return result;
}
/** {@inheritDoc} */
@Override
public File findByPath(String path) {
File file = null;
if (path != null) {
try {
file = fileDAO.findByPath(path.trim());
} catch (Exception exception) {
LOG.debug("Cannot find file by path " + path);
}
}
return file;
}
/**
* {@inheritDoc}
*
* @param fileId
*/
@Override
public File findByID(Integer fileId) {
File file = null;
if (fileId != null) {
try {
file = fileDAO.findByID(fileId);
} catch (Exception exception) {
LOG.error("Cannot find File by expID " + fileId);
LOG.error(exception.getMessage());
}
}
return file;
}
/** {@inheritDoc} */
@Override
public File findBySWAccession(Integer swAccession) {
File file = null;
if (swAccession != null) {
try {
file = fileDAO.findBySWAccession(swAccession);
} catch (Exception exception) {
LOG.error("Cannot find File by swAccession " + swAccession);
LOG.error(exception.getMessage());
}
}
return file;
}
/** {@inheritDoc} */
@Override
public List<File> findByCriteria(String criteria, boolean isCaseSens) {
return fileDAO.findByCriteria(criteria, isCaseSens);
}
/** {@inheritDoc} */
@Override
public File updateDetached(File file) {
return fileDAO.updateDetached(file);
}
/** {@inheritDoc} */
@Override
public List<File> findByOwnerId(Integer registrationId) {
List<File> files = null;
if (registrationId != null) {
try {
files = fileDAO.findByOwnerId(registrationId);
} catch (Exception exception) {
LOG.error("Cannot find Files by registrationId " + registrationId);
LOG.error(exception.getMessage());
}
}
return files;
}
/** {@inheritDoc} */
@Override
public List<File> list() {
return fileDAO.list();
}
/** {@inheritDoc} */
@Override
public void update(Registration registration, File file) {
fileDAO.update(registration, file);
}
/** {@inheritDoc} */
@Override
public Integer insert(Registration registration, File file) {
return fileDAO.insert(registration, file);
}
/** {@inheritDoc} */
@Override
public File updateDetached(Registration registration, File file) {
return fileDAO.updateDetached(registration, file);
}
}