package no.niths.services.development;
import java.util.List;
import no.niths.application.rest.helper.Status;
import no.niths.common.helpers.MessageProvider;
import no.niths.common.helpers.ValidationHelper;
import no.niths.domain.development.Application;
import no.niths.domain.development.Developer;
import no.niths.domain.school.Committee;
import no.niths.infrastructure.development.interfaces.ApplicationRepository;
import no.niths.infrastructure.development.interfaces.DeveloperRepository;
import no.niths.infrastructure.interfaces.GenericRepository;
import no.niths.services.AbstractGenericService;
import no.niths.services.development.interfaces.DeveloperService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Service Class for Developer
*
* <p>
* Inherits the basic CRUD actions and has methods
* for getAllWithApps, getDeveloperByDeveloperKey,
* enableDeveloper, disableDeveloper,
* resetDeveloperKey, addApplication
* and removeApplicaiton
* </p>
*/
@Service
public class DeveloperServiceImpl extends AbstractGenericService<Developer>
implements DeveloperService {
@Autowired
private DeveloperRepository repo;
@Autowired
private ApplicationRepository applicationRepo;
private Logger logger = LoggerFactory.getLogger(DeveloperServiceImpl.class);
/**
* {@inheritDoc}
*/
@Override
@Deprecated
public Developer getDeveloperByDeveloperToken(String token,
boolean isEnabled) {
return repo.getByDeveloperToken(token, isEnabled);
}
/**
* {@inheritDoc}
*/
@Override
public Developer getDeveloperByDeveloperKey(String key) {
Developer dev = repo.getByDeveloperKey(key);
if (dev != null) {
dev.getApps().size();
}
return dev;
}
/**
* {@inheritDoc}
*/
@Override
public List<Developer> getAllWithApps(Developer dev) {
List<Developer> all = repo.getAll(dev);
for (Developer d : all) {
d.getApps().size();
}
return all;
}
@Override
public GenericRepository<Developer> getRepository() {
return repo;
}
/**
* {@inheritDoc}
*/
@Override
public void enableDeveloper(Long developerId) {
Developer developer = validate(repo.getById(developerId),
Developer.class);
developer.setEnabled(true);
logger.debug("Developer " + developer.getName() + " is enabled");
}
/**
* {@inheritDoc}
*/
@Override
public void disableDeveloper(Long developerId) {
Developer developer = validate(repo.getById(developerId),
Developer.class);
developer.setEnabled(false);
logger.debug("Developer " + developer.getName() + " is disabled");
}
/**
* {@inheritDoc}
*/
@Override
public void resetDeveloperKey(Long developerId, String generatedDeveloperKey) {
Developer developer = validate(repo.getById(developerId),
Developer.class);
logger.debug("OLD-dev key :" + developer.getDeveloperKey()
+ "\n new developer key :" + generatedDeveloperKey);
developer.setDeveloperKey(generatedDeveloperKey);
}
/**
* {@inheritDoc}
*/
@Override
public void addApplication(Long developerId, Long applicationId) {
Developer developer = validate(repo.getById(developerId),
Developer.class);
checkIfObjectIsInCollection(developer.getApps(), applicationId,
Application.class);
Application app = applicationRepo.getById(applicationId);
ValidationHelper.isObjectNull(app, Application.class);
developer.getApps().add(app);
logger.debug(MessageProvider.buildStatusMsg(Committee.class,
Status.UPDATED));
}
/**
* {@inheritDoc}
*/
@Override
public void removeApplicaiton(Long developerId, Long applicationId) {
Developer developer = validate(repo.getById(developerId),
Developer.class);
checkIfIsRemoved(
developer.getApps().remove(new Application(applicationId)),
Application.class);
}
}