package org.opentosca.csarrepo.service;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import net.lingala.zip4j.exception.ZipException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.opentosca.csarrepo.exception.DeploymentException;
import org.opentosca.csarrepo.exception.PersistenceException;
import org.opentosca.csarrepo.filesystem.FileSystem;
import org.opentosca.csarrepo.model.CsarFile;
import org.opentosca.csarrepo.model.OpenToscaServer;
import org.opentosca.csarrepo.model.repository.CsarFileRepository;
import org.opentosca.csarrepo.model.repository.OpenToscaServerRepository;
import org.opentosca.csarrepo.util.ContainerApiClient;
import org.opentosca.csarrepo.util.ZipUtils;
public class DeployToOpenToscaService extends AbstractService {
private boolean success = false;
private static final Logger LOGGER = LogManager.getLogger(DeployToOpenToscaService.class);
public DeployToOpenToscaService(long userId, long openToscaId, long csarFileId) throws ZipException, IOException {
super(userId);
OpenToscaServerRepository openToscaServerRepository = new OpenToscaServerRepository();
CsarFileRepository csarFileRepo = new CsarFileRepository();
OpenToscaServer openToscaServer;
CsarFile csarFile;
try {
openToscaServer = openToscaServerRepository.getbyId(openToscaId);
csarFile = csarFileRepo.getbyId(csarFileId);
} catch (PersistenceException e) {
this.addError("Couldn't determine required parameters " + e.getMessage());
return;
}
// TODO: move this addition of meta data to a utility class, copied from
// DownloadCsarFileServlet
FileSystem fileSystem = new FileSystem();
File file = fileSystem.getFile(csarFile.getHashedFile().getFilename());
File zipArchive = DownloadCsarFileService.duplicateFile(file);
File csarRepositoryFile = DownloadCsarFileService.transformBytesToFile(Long.toString(csarFileId).getBytes());
ZipUtils.add(zipArchive, csarRepositoryFile);
String filename = csarFile.getName();
try {
ContainerApiClient containerApiClient = new ContainerApiClient(openToscaServer);
String location = containerApiClient.uploadFileToOpenTOSCA(zipArchive, filename);
// create meta-data
csarFile.addOpenToscaServer(openToscaServer, location);
csarFileRepo.save(csarFile);
success = true;
} catch (DeploymentException | PersistenceException | URISyntaxException e) {
this.addError(e.getMessage());
return;
}
}
public boolean getResult() {
this.logInvalidResultAccess("getResult");
return this.success;
}
}