001package co.codewizards.cloudstore.rest.server.service;
002
003import java.util.concurrent.Callable;
004
005import javax.ws.rs.Consumes;
006import javax.ws.rs.GET;
007import javax.ws.rs.Path;
008import javax.ws.rs.Produces;
009import javax.ws.rs.QueryParam;
010import javax.ws.rs.core.MediaType;
011
012import org.slf4j.Logger;
013import org.slf4j.LoggerFactory;
014
015import co.codewizards.cloudstore.core.concurrent.CallableProvider;
016import co.codewizards.cloudstore.core.concurrent.DeferrableExecutor;
017import co.codewizards.cloudstore.core.dto.ChangeSetDto;
018//import co.codewizards.cloudstore.core.repo.local.LocalRepoRegistry;
019import co.codewizards.cloudstore.core.repo.transport.RepoTransport;
020
021@Path("_ChangeSetDto/{repositoryName}")
022@Consumes(MediaType.APPLICATION_XML)
023@Produces(MediaType.APPLICATION_XML)
024public class ChangeSetDtoService extends AbstractServiceWithRepoToRepoAuth
025{
026        private static final Logger logger = LoggerFactory.getLogger(ChangeSetDtoService.class);
027
028        {
029                logger.debug("<init>: created new instance");
030        }
031
032        @GET
033        public ChangeSetDto getChangeSetDto(@QueryParam("localSync") final boolean localSync,
034                        @QueryParam("lastSyncToRemoteRepoLocalRepositoryRevisionSynced") final Long lastSyncToRemoteRepoLocalRepositoryRevisionSynced) {
035                final RepoTransport[] repoTransport = new RepoTransport[] { authenticateAndCreateLocalRepoTransport() };
036                try {
037                        final String callIdentifier = ChangeSetDtoService.class.getName() + ".getChangeSetDto|" + repositoryName + '|' + getAuth().getUserName() + '|' + localSync + '|' + lastSyncToRemoteRepoLocalRepositoryRevisionSynced;
038                        return DeferrableExecutor.getInstance().call(
039                                        callIdentifier,
040                                        new CallableProvider<ChangeSetDto>() {
041                                                @Override
042                                                public Callable<ChangeSetDto> getCallable() { // called synchronously during DeferrableExecutor.call(...) - if called at all
043                                                        final RepoTransport rt = repoTransport[0];
044                                                        repoTransport[0] = null;
045                                                        return new Callable<ChangeSetDto>() {
046                                                                @Override
047                                                                public ChangeSetDto call() throws Exception { // called *A*synchronously
048                                                                        try {
049                                                                                final ChangeSetDto changeSetDto = getChangeSetDto(rt, localSync, lastSyncToRemoteRepoLocalRepositoryRevisionSynced);
050                                                                                return changeSetDto;
051                                                                        } finally {
052                                                                                rt.close();
053                                                                        }
054                                                                }
055                                                        };
056                                                }
057                                        });
058                } finally {
059                        if (repoTransport[0] != null)
060                                repoTransport[0].close();
061                }
062        }
063
064        protected ChangeSetDto getChangeSetDto(final RepoTransport repoTransport, final boolean localSync, final Long lastSyncToRemoteRepoLocalRepositoryRevisionSynced) {
065                return repoTransport.getChangeSetDto(localSync, lastSyncToRemoteRepoLocalRepositoryRevisionSynced);
066        }
067}