package org.opentosca.toscana.core.csar;


import org.opentosca.toscana.core.parse.CsarParser;
import org.opentosca.toscana.core.parse.InvalidCsarException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.InputStream;
import java.util.List;

//TODO Comment out once implementation is finished
//@Service
public class CsarServiceImpl implements CsarService {

    private final static Logger logger = LoggerFactory.getLogger(CsarService.class.getName());

    private final CsarDao csarDao;
    private final CsarParser csarParser;

    @Autowired
    public CsarServiceImpl(CsarDao dao, CsarParser parser) {
        this.csarDao = dao;
        this.csarParser = parser;
    }

    @Override
    public Csar submitCsar(String identifier, InputStream csarStream) {
        Csar csar = csarDao.create(identifier, csarStream);
        try {
            populateWithTemplate(csar);
        } catch (InvalidCsarException e) {
            logger.warn("Failed to submit csar", e);
            // TODO wait for 'csar state' discussion outcome. maybe cleanup disk and return null
            // TODO add test case
        }
        return csar;
    }

    private void populateWithTemplate(Csar csar) throws InvalidCsarException {
//		if (csar.getTemplate() == null) {
//			TServiceTemplate template = null;
//			template = csarParser.parse(csar);
//			csar.setTemplate(template);
//		}
    }

    @Override
    public void deleteCsar(Csar csar) {
        csarDao.delete(csar.getIdentifier());
    }

    @Override
    public List<Csar> getCsars() {
        List<Csar> list = csarDao.findAll();
        for (Csar csar : list) {
            try {
                populateWithTemplate(csar);
            } catch (InvalidCsarException e) {
                logger.error("Encountered invalid csar in repository.", csar, e);
                // TODO wait for discussion outcome, maybe cleanup disk
            }
        }
        return list;
    }

    @Override
    public Csar getCsar(String identifier) {
        Csar csar = csarDao.find(identifier);
        try {
            populateWithTemplate(csar);
        } catch (InvalidCsarException e) {
            logger.error("Encountered invalid csar in repository.", csar, e);
            // TODO wait for discussion outcome, maybe cleanup disk
        }
        return csar;
    }
}

@@ -36,16 +36,77 @@
 csar;%0A%0A%0A
+import org.eclipse.winery.model.tosca.yaml.TServiceTemplate;%0A
 import o
@@ -388,70 +388,8 @@
 t;%0A%0A
-//TODO Comment out once implementation is finished%0A//@Service%0A
 publ
@@ -1301,20 +1301,24 @@
 ption %7B%0A
-//%09%09
+        
 if (csar
@@ -1343,21 +1343,28 @@
 null) %7B%0A
-//%09%09%09
+            
 TService
@@ -1386,30 +1386,8 @@
 te =
- null;%0A//%09%09%09template =
  csa
@@ -1411,13 +1411,20 @@
 r);%0A
-//%09%09%09
+            
 csar
@@ -1451,12 +1451,16 @@
 e);%0A
-//%09%09
+        
 %7D%0A  

enable template population