package org.opentosca.csarrepo.service;
import org.opentosca.csarrepo.exception.PersistenceException;
import org.opentosca.csarrepo.filesystem.FileSystem;
import org.opentosca.csarrepo.model.Csar;
import org.opentosca.csarrepo.model.CsarFile;
import org.opentosca.csarrepo.model.HashedFile;
import org.opentosca.csarrepo.model.repository.CsarFileRepository;
import org.opentosca.csarrepo.model.repository.FileSystemRepository;
/**
* Deletes the given CSAR file.
*
* @author Dennis Przytarski
*/
public class DeleteCsarFileService extends AbstractService {
private long csarFileId;
private boolean returnValue = false;
private Csar csar;
/**
* @param userId
* @param csarFileId
*/
public DeleteCsarFileService(long userId, long csarFileId) {
super(userId);
this.csarFileId = csarFileId;
try {
FileSystemRepository fileSystemRepository = new FileSystemRepository();
CsarFileRepository csarFileRepository = new CsarFileRepository();
CsarFile csarFile = csarFileRepository.getbyId(this.csarFileId);
this.csar = csarFile.getCsar();
HashedFile hashedFile = csarFile.getHashedFile();
// csar file must be deleted before hashed file
csarFileRepository.delete(csarFile);
// delete hashed file from database and file system, if necessary
if (fileSystemRepository.isHashDeletable(hashedFile.getHash())) {
fileSystemRepository.delete(hashedFile);
FileSystem fileSystem = new FileSystem();
fileSystem.deleteFromFileSystem(hashedFile.getFilename());
}
this.returnValue = true;
} catch (PersistenceException e) {
this.addError(e.getMessage());
}
}
/**
* @return status of deletion
*/
public boolean getResult() {
super.logInvalidResultAccess("getResult");
return this.returnValue;
}
/**
*
* @return a Csar
*/
public Csar getCsar() {
super.logInvalidResultAccess("getCsar");
return this.csar;
}
}