started on remake of unit imports after changes in external appi.

This commit is contained in:
Emil Siverhall 2012-02-13 16:49:23 +01:00
parent 9b2f7c568d
commit 4ebcd2f9b5
5 changed files with 104 additions and 10 deletions

@ -146,10 +146,35 @@ public abstract class AbstractDtoResponseHandler implements DtoResponseHandler {
logger.debug("Attempting to treat response '"+jsonUnitCollection+"' as a single project failed.");
}
}
logger.warn("Returning empty project collection wrapper for respose '"+jsonUnitCollection+"'");
logger.warn("Returning empty unit collection wrapper for respose '"+jsonUnitCollection+"'");
return new UnitDTOCollectionWrapper();
}
protected final SupervisorDTOCollectionWrapper asSupervisorCollection(final String jsonSupervisorCollection){
//Treat as raw array
try{
final Type collectionType = new TypeToken<Collection<SupervisorDTO>>(){}.getType();
final Collection<SupervisorDTO> collection = parseTo(jsonSupervisorCollection,collectionType);
final SupervisorDTOCollectionWrapper wrapper = new SupervisorDTOCollectionWrapper(collection);
return wrapper;
}catch(final JsonParseException jpe){
logger.debug("Attempting to treat response '"+jsonSupervisorCollection+"' as a raw array failed.");
}
//If that fails, treat as regular project
{
final SupervisorDTO supervisorDTO = parseTo(jsonSupervisorCollection, SupervisorDTO.class);
if(supervisorDTO != null){
final SupervisorDTOCollectionWrapper wrapper = new SupervisorDTOCollectionWrapper();
wrapper.getSupervisors().add(supervisorDTO);
return wrapper;
}else{
logger.debug("Attempting to treat response '"+jsonSupervisorCollection+"' as a single project failed.");
}
}
logger.warn("Returning empty supervisor collection wrapper for respose '"+jsonSupervisorCollection+"'");
return new SupervisorDTOCollectionWrapper();
}
/**
* Attempts to treat input as a UserDTO, returns null if unable to extract data.
* @param jsonUserString

@ -1,13 +1,10 @@
package se.su.dsv.scipro.io.dto;
import java.util.HashSet;
import java.util.Set;
public class SupervisorDTO {
public long id;
public String firstName, lastName, email;
public Set<UsernameDTO> usernames = new HashSet<UsernameDTO>();
public SupervisorDTO() {

@ -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 UnitDTO objects
public class SupervisorDTOCollectionWrapper implements Iterable<SupervisorDTO>{
private final List<SupervisorDTO> supervisors = new ArrayList<SupervisorDTO>();
public SupervisorDTOCollectionWrapper(){
}
public SupervisorDTOCollectionWrapper(Collection<SupervisorDTO> source){
this.supervisors.addAll(source);
}
public List<SupervisorDTO> getSupervisors() {
return supervisors;
}
public int size(){
return supervisors.size();
}
@Override
public String toString(){
return ("listOf "+supervisors.size()+" supervisors :" + supervisors.toString());
}
@Override
public Iterator<SupervisorDTO> iterator() {
return supervisors.iterator();
}
}

@ -14,7 +14,7 @@ public class UnitDTO {
this.name = name;
}
public Set<UnitDTO> subunits = new HashSet<UnitDTO>();
//public Set<UnitDTO> subunits = new HashSet<UnitDTO>();
public Set<SupervisorDTO> supervisors = new HashSet<SupervisorDTO>();
public UnitDTO(){}

@ -22,6 +22,7 @@ import se.su.dsv.scipro.io.dto.ProjectDTOCollectionWrapper;
import se.su.dsv.scipro.io.dto.ResearchAreaDTO;
import se.su.dsv.scipro.io.dto.ResearchAreaDTOCollectionWrapper;
import se.su.dsv.scipro.io.dto.SupervisorDTO;
import se.su.dsv.scipro.io.dto.SupervisorDTOCollectionWrapper;
import se.su.dsv.scipro.io.dto.UnitDTO;
import se.su.dsv.scipro.io.dto.UnitDTOCollectionWrapper;
import se.su.dsv.scipro.io.dto.UserDTO;
@ -133,10 +134,26 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
Set<UnitDTO> unitSet = fetchRemoteUnits(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor() {
@Override
String process(final String url){
return (url+"/orgunit/4");//This will retrieve DSV as main unit and the unit keywords to add as subunits underneath DSV.
return (url+"/orgunit/4/subunits");
}
});
for (UnitDTO u : unitSet) {
// TOTAL REMAKE
for (final UnitDTO unit : unitSet){
// Check if existing
Set<SupervisorDTO> supervisorSet = fetchSupervisorsOnUnit(new HashMap<String,String>(), HttpRequestSender.REQUEST_TYPE.GET, new UrlProcessor() {
@Override
String process(final String url){
return (url+"/orgunit/"+unit.id+"/supervisors");
}
});
// add supervisors to the current unit
}
/*for (UnitDTO u : unitSet) {
if (!u.subunits.isEmpty()) {
logger.info("Received " + u.subunits.size() + " subunits from remote");
importerFacade.addUnexistingUnitsAsKeywords(u.subunits);
@ -147,7 +164,7 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
}
} else
logger.info("No subunits found");
}
}*/
}
@Override
@ -159,12 +176,37 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
return (url+"/orgunit/4/researchAreas");
}
});
logger.info("Received " + areaSet.size() + " research areas from remote");
logger.info("Received " + areaSet.size() + " research areas from remote and adding those who not exist to database");
if(!areaSet.isEmpty()){
importerFacade.addUnexistingResearchAreas(areaSet);
}
}
private Set<SupervisorDTO> fetchSupervisorsOnUnit(final Map<String, String> parameters, final HttpRequestSender.REQUEST_TYPE requestType, UrlProcessor urlProcessor) {
final String requestUrl = (urlProcessor==null?getRequestUrl():urlProcessor.process(getRequestUrl()));
final Set<SupervisorDTO> dtoCache = new HashSet<SupervisorDTO>();
final HttpsRequestSender senderProxy = new HttpsRequestSender(new AbstractDtoResponseHandler() {
@Override
public void handleResponse(String response) {
logger.info("Response received (from: "+ requestUrl+"): " + response);
final SupervisorDTOCollectionWrapper supervisorCollection = asSupervisorCollection(response);
if(supervisorCollection.size() == 0){
throw new ExternalImportException("No supervisors found in remote");
} else {
dtoCache.addAll(supervisorCollection.getSupervisors());
}
logger.info("Received " + supervisorCollection.size() + " supervisor"+(supervisorCollection.size()==1?"":"s")+" from remote");
}
}, requestUrl, getRequestUser(), getRequestPassword(), parameters, requestType);
try{
process(senderProxy);
} catch (final ExternalImportException eie){
logger.warn("No supervisors found");
}
return dtoCache;
}
private Set<UnitDTO> fetchRemoteUnits(final Map<String,String> parameters,final HttpRequestSender.REQUEST_TYPE requestType,
UrlProcessor urlProcessor) {
final String requestUrl = (urlProcessor==null?getRequestUrl():urlProcessor.process(getRequestUrl()));
@ -285,7 +327,7 @@ public class ExternalImporterDaisyImpl implements ExternalImporter {
}else{
dtoCache.addAll(areaCollection.getAreas());
}
logger.info("Recieved " + areaCollection.size() + " research areas"+(areaCollection.size()==1?"":"s")+" from remote");
logger.info("Recieved " + areaCollection.size() + " research area"+(areaCollection.size()==1?"":"s")+" from remote");
}
}, requestUrl, getRequestUser(), getRequestPassword(), parameters, requestType);
try{