added support for remote fetching of usernames based on the hierarchy of the new api. usernames are now fetched by person/id/usernames
This commit is contained in:
parent
0611d806ea
commit
2e4899a808
src/main/java/se/su/dsv/scipro/io
@ -77,6 +77,29 @@ public abstract class AbstractDtoResponseHandler implements DtoResponseHandler {
|
||||
return new ProjectDTOCollectionWrapper();
|
||||
}
|
||||
|
||||
protected final UsernameDTOCollectionWrapper asUsernameCollection(final String jsonUsernameCollection) {
|
||||
try{
|
||||
final Type collectionType = new TypeToken<Collection<UsernameDTO>>(){}.getType();
|
||||
final Collection<UsernameDTO> collection = parseTo(jsonUsernameCollection, collectionType);
|
||||
final UsernameDTOCollectionWrapper wrapper = new UsernameDTOCollectionWrapper(collection);
|
||||
return wrapper;
|
||||
} catch(final JsonParseException jpe){
|
||||
logger.debug("Attempting to treat response '"+jsonUsernameCollection+"' as a raw array failed.");
|
||||
}
|
||||
{
|
||||
final UsernameDTO usernameDTO = parseTo(jsonUsernameCollection, UsernameDTO.class);
|
||||
if(usernameDTO != null){
|
||||
final UsernameDTOCollectionWrapper wrapper = new UsernameDTOCollectionWrapper();
|
||||
wrapper.getUsernames().add(usernameDTO);
|
||||
return wrapper;
|
||||
} else{
|
||||
logger.debug("Attempting to treat response '" +jsonUsernameCollection+"' as a single username failed.");
|
||||
}
|
||||
}
|
||||
logger.warn("Returning empty username collection wrapper for response '"+jsonUsernameCollection+"'");
|
||||
return new UsernameDTOCollectionWrapper();
|
||||
}
|
||||
|
||||
protected final ResearchAreaDTOCollectionWrapper asAreaCollection(final String jsonAreaCollection){
|
||||
//Treat as raw array
|
||||
try{
|
||||
|
@ -0,0 +1,30 @@
|
||||
package se.su.dsv.scipro.io.dto;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
//Collection-wrapper for UsernameDTO objects
|
||||
public class UsernameDTOCollectionWrapper implements Iterable<UsernameDTO>{
|
||||
private final List<UsernameDTO> usernames = new ArrayList<UsernameDTO>();
|
||||
public UsernameDTOCollectionWrapper(){
|
||||
}
|
||||
public UsernameDTOCollectionWrapper(Collection<UsernameDTO> source){
|
||||
this.usernames.addAll(source);
|
||||
}
|
||||
public List<UsernameDTO> getUsernames() {
|
||||
return usernames;
|
||||
}
|
||||
public int size(){
|
||||
return usernames.size();
|
||||
}
|
||||
@Override
|
||||
public String toString(){
|
||||
return ("listOf "+usernames.size()+" usernames :" + usernames.toString());
|
||||
}
|
||||
@Override
|
||||
public Iterator<UsernameDTO> iterator() {
|
||||
return usernames.iterator();
|
||||
}
|
||||
}
|
@ -27,11 +27,12 @@ import se.su.dsv.scipro.io.dto.UnitDTOCollectionWrapper;
|
||||
import se.su.dsv.scipro.io.dto.UserDTO;
|
||||
import se.su.dsv.scipro.io.dto.UserDTOCollectionWrapper;
|
||||
import se.su.dsv.scipro.io.dto.UserRoleDTO;
|
||||
import se.su.dsv.scipro.io.dto.UsernameDTO;
|
||||
import se.su.dsv.scipro.io.dto.UsernameDTOCollectionWrapper;
|
||||
import se.su.dsv.scipro.io.exceptions.ExternalImportException;
|
||||
import se.su.dsv.scipro.io.exceptions.HttpRemoteRespondedWithFailureException;
|
||||
import se.su.dsv.scipro.io.facade.ImporterFacade;
|
||||
import se.su.dsv.scipro.io.http.HttpRequestSender;
|
||||
import se.su.dsv.scipro.io.http.HttpRequestSender.REQUEST_TYPE;
|
||||
import se.su.dsv.scipro.io.http.HttpsRequestSender;
|
||||
import se.su.dsv.scipro.security.auth.roles.Roles;
|
||||
|
||||
@ -246,6 +247,31 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
|
||||
return dtoCache;
|
||||
}
|
||||
|
||||
private Set<UsernameDTO> fetchRemoteUsernames(final Map<String,String> parameters, final HttpRequestSender.REQUEST_TYPE requestType, final UrlProcessor urlProcessor) {
|
||||
final String requestUrl = (urlProcessor==null?getRequestUrl():urlProcessor.process(getRequestUrl()));
|
||||
final Set<UsernameDTO> dtoCache = new HashSet<UsernameDTO>();
|
||||
final HttpsRequestSender senderProxy = new HttpsRequestSender(new AbstractDtoResponseHandler() {
|
||||
|
||||
@Override
|
||||
public void handleResponse(String response) {
|
||||
logger.info("Response recieved (from: "+requestUrl+"): " + response);
|
||||
final UsernameDTOCollectionWrapper usernameCollection = asUsernameCollection(response);
|
||||
if(usernameCollection.size() == 0){
|
||||
throw new ExternalImportException("No usernames found in remote");
|
||||
}else{
|
||||
dtoCache.addAll(usernameCollection.getUsernames());
|
||||
}
|
||||
logger.info("Received " + usernameCollection.size() + " usernames"+(usernameCollection.size()==1?"":"s")+" from remote");
|
||||
}
|
||||
}, requestUrl, getRequestUser(), getRequestPassword(), parameters, requestType);
|
||||
try{
|
||||
process(senderProxy);
|
||||
} catch (final ExternalImportException eie){
|
||||
logger.warn("No usernames found");
|
||||
}
|
||||
return dtoCache;
|
||||
}
|
||||
|
||||
private Set<ResearchAreaDTO> fetchResearchAreas(final Map<String, String> parameters, final HttpRequestSender.REQUEST_TYPE requestType, final UrlProcessor urlProcessor) {
|
||||
final String requestUrl = (urlProcessor==null?getRequestUrl():urlProcessor.process(getRequestUrl()));
|
||||
final Set<ResearchAreaDTO> dtoCache = new HashSet<ResearchAreaDTO>();
|
||||
@ -302,7 +328,14 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
|
||||
return (url+"/person/"+userDTO.id+"/theses");
|
||||
}
|
||||
});
|
||||
final Set<UsernameDTO> fetchedUsernames = fetchRemoteUsernames(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor(){
|
||||
@Override
|
||||
String process(String url){
|
||||
return(url+"/person/"+userDTO.id+"/usernames");
|
||||
}
|
||||
});
|
||||
userDTO.projects = fetchedProjects;
|
||||
userDTO.usernames = fetchedUsernames;
|
||||
return userDTO;
|
||||
}
|
||||
};
|
||||
@ -320,7 +353,13 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
|
||||
});
|
||||
userDTO.projects = fetchedProjects;
|
||||
}
|
||||
|
||||
final Set<UsernameDTO> fetchedUsernames = fetchRemoteUsernames(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor(){
|
||||
@Override
|
||||
String process(String url){
|
||||
return(url+"/person/"+userDTO.id+"/usernames");
|
||||
}
|
||||
});
|
||||
userDTO.usernames = fetchedUsernames;
|
||||
final Set<ResearchAreaDTO> fetchedResearchAreas = fetchResearchAreas(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor(){
|
||||
@Override
|
||||
String process(String url){
|
||||
|
Loading…
x
Reference in New Issue
Block a user