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(final @QueryParam("localSync") boolean localSync) { 034 final RepoTransport[] repoTransport = new RepoTransport[] { authenticateAndCreateLocalRepoTransport() }; 035 try { 036 final String callIdentifier = ChangeSetDtoService.class.getName() + ".getChangeSetDto|" + repositoryName + '|' + getAuth().getUserName() + '|' + localSync; 037 return DeferrableExecutor.getInstance().call( 038 callIdentifier, 039 new CallableProvider<ChangeSetDto>() { 040 @Override 041 public Callable<ChangeSetDto> getCallable() { // called synchronously during DeferrableExecutor.call(...) - if called at all 042 final RepoTransport rt = repoTransport[0]; 043 repoTransport[0] = null; 044 return new Callable<ChangeSetDto>() { 045 @Override 046 public ChangeSetDto call() throws Exception { // called *A*synchronously 047 try { 048 final ChangeSetDto changeSetDto = getChangeSetDto(rt, localSync); 049 return changeSetDto; 050 } finally { 051 rt.close(); 052 } 053 } 054 }; 055 } 056 }); 057 } finally { 058 if (repoTransport[0] != null) 059 repoTransport[0].close(); 060 } 061 } 062 063 protected ChangeSetDto getChangeSetDto(final RepoTransport repoTransport, final boolean localSync) { 064 return repoTransport.getChangeSetDto(localSync); 065 } 066}