package com.elminster.psn.restful.service;
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.elminster.common.util.ExceptionUtil;
import com.elminster.psn.restful.dao.IAdminDao;
import com.elminster.psn.restful.data.ExitCode;
import com.elminster.retrieve.psn.util.SystemSetting;
/**
* The admin service.
*
* @author jgu
* @version 1.0
*/
@Service
public class AdminServiceImpl implements IAdminService {
/** the logger. **/
private static final Log logger = LogFactory.getLog(AdminServiceImpl.class);
private final IAdminDao adminDao;
private EntityManager em;
@Autowired
public AdminServiceImpl(IAdminDao adminDao) {
this.adminDao = adminDao;
}
@Autowired
public void setEntityManager(EntityManager em) {
this.em = em;
}
/**
* dump the data.
*/
@Override
public int savepoint() {
int ec = ExitCode.NORMAL.getCode();
// save cookies
try {
SystemSetting.INSTANCE.persist();
} catch (IOException e1) {
ec &= ExitCode.COOKIE_SAVE_FAILED.getCode();
}
// dump db
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
adminDao.dumpData();
tx.commit();
} catch (Exception e) {
logger.error("failed to dump data. Cause: " + ExceptionUtil.getFullStackTrace(e));
tx.rollback();
ec &= ExitCode.DB_DUMP_FAILED.getCode();
}
return ec;
}
}