/* * Copyright 2013 Turkcell Teknoloji Inc. and individual * contributors by the @authors tag. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.ttech.cordovabuild.domain.application; import com.ttech.cordovabuild.domain.application.source.ApplicationSource; import com.ttech.cordovabuild.domain.application.source.ApplicationSourceFactory; import com.ttech.cordovabuild.domain.asset.AssetRef; import com.ttech.cordovabuild.domain.user.User; import com.ttech.cordovabuild.domain.user.UserRepository; import com.ttech.cordovabuild.infrastructure.git.GitUtils; import com.ttech.cordovabuild.infrastructure.queue.BuiltQueuePublisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigInteger; import java.nio.file.Path; import java.security.SecureRandom; import java.text.MessageFormat; import java.util.List; /** * @author Anıl Halil */ @Service @Transactional public class ApplicationServiceImpl implements ApplicationService { private static final Logger LOGGER = LoggerFactory .getLogger(ApplicationServiceImpl.class); @Autowired ApplicationRepository repository; @Autowired ApplicationSourceFactory sourceFactory; @Autowired BuiltQueuePublisher builtQueuePublisher; @Autowired UserRepository userRepository; private SecureRandom random = new SecureRandom(); @Override public List<ApplicationBuilt> getApplications(User user) { return repository.getApplications(user); } @Override public List<ApplicationBuilt> getApplications(String username) { return getApplications(userRepository.findUserByUserName(username)); } @Override public Application createApplication(User owner, String repositoryURI) { LOGGER.info( "new application will be created for {} with repository {}", owner, repositoryURI); ApplicationSource applicationSource = createApplicationSource(repositoryURI); return repository.saveApplication(new Application(applicationSource.toAsset(), applicationSource.getApplicationConfig(), repositoryURI, owner, nextQrKey())); } private ApplicationSource createApplicationSource(String repositoryURI) { Path localPath = GitUtils.clone(repositoryURI); LOGGER.info("clone finished"); return sourceFactory.createSource(localPath); } @Override public Application createApplication(String userName, String repositoryURI) { return createApplication(userRepository.findUserByUserName(userName), repositoryURI); } @Override public Application createApplication(User owner, AssetRef assetRef) { ApplicationSource source = sourceFactory.createSource(assetRef); return repository.saveApplication(new Application(assetRef, source.getApplicationConfig(), null, owner, nextQrKey())); } @Override public Application updateApplicationCode(Long id) { Application application = findApplication(id); if (!application.hasRepositoryUri()) throw new ApplicationUpdateException(MessageFormat.format("application with id {0} does not have any repositoryURI", application.getId())); ApplicationSource applicationSource = createApplicationSource(application.getRepositoryURI()); return updateApplicationSourceInner(application, applicationSource.toAsset(), applicationSource.getApplicationConfig()); } private Application updateApplicationSourceInner(Application application, AssetRef assetRef, ApplicationConfig applicationConfig) { application.setSourceAssetRef(assetRef); application.setApplicationConfig(applicationConfig); return repository.updateApplication(application); } @Override public Application updateApplicationCode(Long id, AssetRef assetRef) { Application application = findApplication(id); if (application.hasRepositoryUri()) throw new ApplicationUpdateException(MessageFormat.format("application with id {0} does have repositoryURI {1}", application.getId(), application.getRepositoryURI())); ApplicationSource applicationSource = sourceFactory.createSource(assetRef); return updateApplicationSourceInner(application, assetRef, applicationSource.getApplicationConfig()); } @Override public ApplicationBuilt prepareApplicationBuilt(Application application) { return repository.saveApplicationBuilt(new ApplicationBuilt(application)); } @Override public ApplicationBuilt prepareApplicationBuilt(Long id) { return prepareApplicationBuilt(findApplication(id)); } @Override public Application findApplication(Long id) { return repository.findById(id); } @Override public ApplicationBuilt findApplicationBuilt(Long id) { return repository.findApplicationBuild(id); } @Override public ApplicationBuilt updateApplicationBuilt(ApplicationBuilt applicationBuilt) { return repository.updateApplicationBuilt(applicationBuilt); } @Override public ApplicationBuilt getLatestBuilt(Long id) { return getLatestBuilt(findApplication(id)); } @Override public ApplicationBuilt getLatestBuilt(Application application) { return repository.getLatestBuilt(application); } private String nextQrKey() { return new BigInteger(130, random).toString(32); } }