1: Permanently Removed deprecated "getUserByUsername" methods.

2: Lookups and Json response handlers now use Autowiring instead of xml-boilerplate
3: Some minor refactoring in the response handlers, lots more to come
This commit is contained in:
Robin Eklund 2011-08-04 13:02:59 +02:00
parent bed74f671a
commit ec9691ecd3
13 changed files with 158 additions and 301 deletions

@ -3,14 +3,6 @@ package se.su.dsv.scipro.data.dao.interfaces;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.TypedQuery;
import org.hibernate.ejb.QueryHints;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.DomainObject; import se.su.dsv.scipro.data.dataobjects.DomainObject;
/** /**
* @author Richard Wilkinson - richard.wilkinson@jweekend.com * @author Richard Wilkinson - richard.wilkinson@jweekend.com

@ -9,8 +9,6 @@ public interface UserDao extends LazyDeleteDao<User> {
User getUserByIdentifier(Long identifier); User getUserByIdentifier(Long identifier);
User getUserByUsername(String userName);
User getUserByUsername(String userName, String realm); User getUserByUsername(String userName, String realm);
User getUserByEmail(String emailAddress); User getUserByEmail(String emailAddress);

@ -62,12 +62,6 @@ public class UserDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<User> implements
}); });
} }
@Transactional
@Deprecated
public User getUserByUsername(final String username) {
return this.getUserByUsername(username, "DSV.SU.SE");
}
@Transactional(readOnly = true) @Transactional(readOnly = true)
public User getUserByUsername(final String username, final String realm) { public User getUserByUsername(final String username, final String realm) {
return getJpaTemplate().execute(new JpaCallback<User>() { return getJpaTemplate().execute(new JpaCallback<User>() {

@ -10,6 +10,7 @@ import se.su.dsv.scipro.data.dao.interfaces.UserDao;
/** /**
* Package-private Abstract base for the public UserLookups. * Package-private Abstract base for the public UserLookups.
* This is not an ideal pattern under most circumstances, but class is package private and thus not part of exported API.
*/ */
abstract class DefaultUserLookupBase{ abstract class DefaultUserLookupBase{
@Autowired @Autowired

@ -3,7 +3,7 @@ package se.su.dsv.scipro.json;
/** /**
* Generic interface for Remote lookups. * Generic interface for Remote lookups.
* The recommended way of using this interface is to create specializations * The recommended way of using this interface is to create specializations
* (see IUserLookupFromIdentifier) that defines the actual parameterized types used, and implement those interfaces in concrete classes. * (see IUserLookupFromIdentifier for an example) that defines the actual parameterized types used, and implement those interfaces in concrete classes.
* @param <T> The return type specifier, implementations are urged to return a null value when a lookup fails. * @param <T> The return type specifier, implementations are urged to return a null value when a lookup fails.
* @param <E> The lookup parameter, use compound types to support querying on multiple parameters. * @param <E> The lookup parameter, use compound types to support querying on multiple parameters.
*/ */

@ -3,6 +3,7 @@ package se.su.dsv.scipro.json;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import org.apache.log4j.Level; import org.apache.log4j.Level;
import org.springframework.stereotype.Component;
import se.su.dsv.scipro.jsonobjects.JsonUpdateStatsContainer; import se.su.dsv.scipro.jsonobjects.JsonUpdateStatsContainer;
import se.su.dsv.scipro.workerthreads.UserAndProjectImportWorker; import se.su.dsv.scipro.workerthreads.UserAndProjectImportWorker;
@ -12,20 +13,10 @@ import com.google.gson.reflect.TypeToken;
/** /**
* Handler for json responses regarding users (creating and updating) * Handler for json responses regarding users (creating and updating)
*
* @author Dan Kjellman <dan-kjel@dsv.su.se>
* *
*/ */
@Component
public class ImportUpdateStatsResponseHandler extends JsonResponseHandler { public class ImportUpdateStatsResponseHandler extends JsonResponseHandler {
private boolean logResult = false;
public ImportUpdateStatsResponseHandler(){
super();
}
/** /**
* Handles a json string * Handles a json string
* *
@ -49,26 +40,5 @@ public class ImportUpdateStatsResponseHandler extends JsonResponseHandler {
UserAndProjectImportWorker.updatedUsers = statsContainer.updatedUsers.intValue(); UserAndProjectImportWorker.updatedUsers = statsContainer.updatedUsers.intValue();
UserAndProjectImportWorker.updatedTheses = statsContainer.updatedTheses.intValue(); UserAndProjectImportWorker.updatedTheses = statsContainer.updatedTheses.intValue();
} }
/*
if(logResult){
logger.log(Level.INFO, "\nResult from userimport/update:\nChecked: " + completeContainer.theses.size() + " users\n" +
"Changed users: " + changedUsers + "\n" +
"Created users: " + createdUsers + "\n" +
"Number of errors when creating users: " + userCreationErrors + "\n" +
"Num First name changes: " + getNumFirstNameChanges() + "\n" +
"Num last name changes: " + getNumLastNameChanges() + "\n" +
"Num Email changes: " + getNumEmailChanges() + "\n" +
"Num Usernames added: " + getNumUsernamesAdded() + "\n" +
"Num Supervisors created: " + getNumFirstNameChanges() + "\n");
}
*/
}
public void setLogResult(boolean logResult) {
this.logResult = logResult;
}
public boolean isLogResult() {
return logResult;
} }
} }

@ -6,11 +6,10 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import se.su.dsv.scipro.ApplicationSettings; import se.su.dsv.scipro.ApplicationSettings;
/** /**
* This class does a lookup on a username against the remote remoteLookupUrl specified in * This class does a lookup on a username against the remote remoteLookupUrl specified in
* the applicationContext, under ApplicationSettings. * the applicationContext, under ApplicationSettings.
@ -18,16 +17,14 @@ import se.su.dsv.scipro.ApplicationSettings;
* *
* @author Dan Kjellman <dan-kjel@dsv.su.se> * @author Dan Kjellman <dan-kjel@dsv.su.se>
*/ */
@Component
public class ImportWorkerLookup { public class ImportWorkerLookup {
public static final String USERS = "users"; public static final String USERS = "users";
public static final String THESES = "theses"; public static final String THESES = "theses";
/* @Autowired
* References populated by spring (from applicationContext) private ImportWorkerResponseHandler importWorkerResponseHandler;
*/ @Autowired
private ImportWorkerResponseHandler thesesResponseHandler; private ImportUpdateStatsResponseHandler importUpdateStatsResponseHandler;
private ImportUpdateStatsResponseHandler statsResonseHandler;
@Autowired @Autowired
private ApplicationSettings applicationSettings; private ApplicationSettings applicationSettings;
@ -55,7 +52,7 @@ public class ImportWorkerLookup {
}else{ }else{
//logger.log(Level.INFO,"Starting lookup for completeGet=true & type="+type+" & updatedAfter=" + updatedAfter); //logger.log(Level.INFO,"Starting lookup for completeGet=true & type="+type+" & updatedAfter=" + updatedAfter);
} }
RequestSender request = new RequestSender(thesesResponseHandler, applicationSettings.getRemoteLookupUrl(), params, RequestSender.REQUEST_TYPE_POST); RequestSender request = new RequestSender(importWorkerResponseHandler, applicationSettings.getRemoteLookupUrl(), params, RequestSender.REQUEST_TYPE_POST);
try{ try{
request.processRequest(); request.processRequest();
} catch (IOException e) { } catch (IOException e) {
@ -69,7 +66,7 @@ public class ImportWorkerLookup {
params.put("updateStats", "true"); params.put("updateStats", "true");
params.put("updatedAfter",""+updatedAfter.getTime()); params.put("updatedAfter",""+updatedAfter.getTime());
RequestSender request = new RequestSender(statsResonseHandler, applicationSettings.getRemoteLookupUrl(), params, RequestSender.REQUEST_TYPE_POST); RequestSender request = new RequestSender(importUpdateStatsResponseHandler, applicationSettings.getRemoteLookupUrl(), params, RequestSender.REQUEST_TYPE_POST);
try{ try{
request.processRequest(); request.processRequest();
} catch (IOException e) { } catch (IOException e) {
@ -77,22 +74,4 @@ public class ImportWorkerLookup {
throw e; throw e;
} }
} }
/*
* Getters and setters (for spring)
*/
public ImportWorkerResponseHandler getUserResponseHandler() {
return thesesResponseHandler;
}
public void setUserResponseHandler(ImportWorkerResponseHandler thesesResponseHandler) {
this.thesesResponseHandler = thesesResponseHandler;
}
public ImportUpdateStatsResponseHandler getStatsResonseHandler() {
return statsResonseHandler;
}
public void setStatsResonseHandler(
ImportUpdateStatsResponseHandler statsResonseHandler) {
this.statsResonseHandler = statsResonseHandler;
}
} }

@ -3,6 +3,7 @@ package se.su.dsv.scipro.json;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import org.apache.log4j.Level; import org.apache.log4j.Level;
import org.springframework.stereotype.Component;
import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.Project;
import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.User;
@ -21,16 +22,8 @@ import com.google.gson.reflect.TypeToken;
* @author Dan Kjellman <dan-kjel@dsv.su.se> * @author Dan Kjellman <dan-kjel@dsv.su.se>
* *
*/ */
@Component
public class ImportWorkerResponseHandler extends JsonResponseHandler { public class ImportWorkerResponseHandler extends JsonResponseHandler {
private boolean logResult = false;
public ImportWorkerResponseHandler(){
super();
}
/** /**
* Handles a json string * Handles a json string
* *
@ -129,7 +122,7 @@ public class ImportWorkerResponseHandler extends JsonResponseHandler {
} }
} }
if(logResult){ if(isLogResult()){
logger.log(Level.INFO, "\nResult from userimport/update:\nChecked: " + completeContainer.users.size() + " users\n" + logger.log(Level.INFO, "\nResult from userimport/update:\nChecked: " + completeContainer.users.size() + " users\n" +
"Changed users: " + changedUsers + "\n" + "Changed users: " + changedUsers + "\n" +
"Created users: " + createdUsers + "\n" + "Created users: " + createdUsers + "\n" +
@ -147,12 +140,4 @@ public class ImportWorkerResponseHandler extends JsonResponseHandler {
"Number of errors when creating theses: " + thesesCreationsErrors + "\n" ); "Number of errors when creating theses: " + thesesCreationsErrors + "\n" );
} }
} }
public void setLogResult(boolean logResult) {
this.logResult = logResult;
}
public boolean isLogResult() {
return logResult;
}
} }

@ -7,7 +7,7 @@ import java.util.TreeSet;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.dao.DataAccessException;
import se.su.dsv.scipro.ApplicationSettings; import se.su.dsv.scipro.ApplicationSettings;
import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
@ -30,9 +30,11 @@ import se.su.dsv.scipro.jsonobjects.JsonThesisParticipant;
import se.su.dsv.scipro.jsonobjects.JsonUser; import se.su.dsv.scipro.jsonobjects.JsonUser;
import se.su.dsv.scipro.jsonobjects.JsonUserRole; import se.su.dsv.scipro.jsonobjects.JsonUserRole;
import se.su.dsv.scipro.jsonobjects.JsonUsername; import se.su.dsv.scipro.jsonobjects.JsonUsername;
/**
@Component * Package-private sase class for JsonResponseHandlers.
public abstract class JsonResponseHandler implements IResponseHandler { * Contains a number of utility methods to lessen boilerplate code inside implementations.
*/
abstract class JsonResponseHandler implements IResponseHandler {
@Autowired @Autowired
protected UserDao userDao; protected UserDao userDao;
@Autowired @Autowired
@ -50,7 +52,7 @@ public abstract class JsonResponseHandler implements IResponseHandler {
@Autowired @Autowired
protected ApplicationSettings applicationSettings; protected ApplicationSettings applicationSettings;
protected Logger logger = Logger.getLogger(this.getClass()); protected Logger logger = Logger.getLogger(JsonResponseHandler.class);
private int numUsersCreated = 0; private int numUsersCreated = 0;
private int numEmailChanges = 0; private int numEmailChanges = 0;
@ -60,161 +62,133 @@ public abstract class JsonResponseHandler implements IResponseHandler {
private int numSupervisorsCreated = 0; private int numSupervisorsCreated = 0;
private int numThesesCreated = 0; private int numThesesCreated = 0;
private int numThesesChanged = 0; private int numThesesChanged = 0;
private boolean logResult = false;
/** /**
* Creates a thesis user from a json user * Creates and persists a User from a JsonUser
* * @param jsonUser the JsonUser to use for creation
* @param jsonUser the json user to use for creation * @return The created User or null if it cannot be persisted.
* @return User the create thesisuser
*/ */
protected User createThesisUser(JsonUser jsonUser, boolean doFullCheck){ protected User createThesisUser(JsonUser jsonUser, boolean doFullCheck){
User thesisUser = null; User user = new User();
user.setFirstName(jsonUser.firstName);
try { user.setLastName(jsonUser.lastName);
thesisUser = new User(); user.setIdentifier(jsonUser.id);
thesisUser.setFirstName(jsonUser.firstName); user.setEmailAddress(jsonUser.email);
thesisUser.setLastName(jsonUser.lastName); try{
thesisUser.setIdentifier(jsonUser.id); user = userDao.save(user);
thesisUser.setEmailAddress(jsonUser.email); }catch(final DataAccessException dae){
logger.error("Cannot save User with jsonuserid: " + jsonUser.id);
//System.out.println("Trying to save " + thesisUser.getIdentifier()); return null;
thesisUser = userDao.save(thesisUser);
/*
* Check against daisy if the user is a supervisor - if so, create a supervisor role
*/
for(JsonUserRole jur : jsonUser.roles){
if(jur.role.equals("AUTHOR")){
roleDao.makeStudent(thesisUser);
}
if(jur.role.equals("SUPERVISOR")){
roleDao.makeEmployee(thesisUser);
}
if(jur.role.equals("ADMIN")){
// roleDao.makeAdmin(thesisUser);
}
}
for(JsonUsername jsonUsername : jsonUser.usernames){
Username thesisUserName = new Username();
thesisUserName.setUserName(jsonUsername.username.toLowerCase().trim());
thesisUserName.setRealm(jsonUsername.realm.toUpperCase().trim());
thesisUserName.setUser(thesisUser);
thesisUserName = userNameDao.save(thesisUserName);
}
if(doFullCheck){
for(JsonThesis jThesis : jsonUser.theses){
checkAndCreateProject(jThesis);
}
}
numUsersCreated++;
} }
catch (Exception e){ /*
logger.error("Cannot save jsonuser with jsonuserid: " + jsonUser.id + " - Rolling back...\n" + e.getMessage()); * Check against remote system data if the user is a supervisor - if so, create a supervisor role
throw new RuntimeException(e); */
for(JsonUserRole jur : jsonUser.roles){
if(jur.role.equals("AUTHOR")){
roleDao.makeStudent(user);
}
if(jur.role.equals("SUPERVISOR")){
roleDao.makeEmployee(user);
}
if(jur.role.equals("ADMIN")){
// roleDao.makeAdmin(thesisUser);
}
} }
return thesisUser; /*
* Create and set the user's usernames
*/
for(JsonUsername jsonUsername : jsonUser.usernames){
Username userName = new Username();
userName.setUserName(jsonUsername.username.toLowerCase().trim());
userName.setRealm(jsonUsername.realm.toUpperCase().trim());
userName.setUser(user);
userName = userNameDao.save(userName);
if(userName == null)
logger.error("Cannot save Username '"+jsonUsername.username+"' for User '"+user.getIdentifier()+"'");
}
/*
* Create any projects of which the user is a member of
*/
if(doFullCheck){
for(JsonThesis jThesis : jsonUser.theses){
checkAndCreateProject(jThesis);
}
}
numUsersCreated++;
return user;
} }
protected Project checkAndCreateProject(JsonThesis jThesis) { protected Project checkAndCreateProject(JsonThesis jThesis) {
Project project = null;
Project project = null; //System.out.println("Creating project:" + jThesis.thesisID);
project = projectDao.getProjectByIdentifier(jThesis.thesisID);
//System.out.println("Creating project:" + jThesis.thesisID); if(project == null){
project = projectDao.getProjectByIdentifier(jThesis.thesisID); project = new Project();
if(project == null){ project.setIdentifier(jThesis.thesisID);
project = new Project(); project.setTitle(jThesis.title);
project.setIdentifier(jThesis.thesisID); if(jThesis.status.equals("STARTED") || jThesis.status.equals("LATE")){
project.setTitle(jThesis.title); project.setProjectStatus(ProjectStatus.ACTIVE);
if(jThesis.status.equals("STARTED") || jThesis.status.equals("LATE")){ }else if(jThesis.status.equals("FINISHED")){
project.setProjectStatus(ProjectStatus.ACTIVE); project.setProjectStatus(ProjectStatus.COMPLETED);
}else if(jThesis.status.equals("FINISHED")){ }else{
project.setProjectStatus(ProjectStatus.COMPLETED); project.setProjectStatus(ProjectStatus.INACTIVE);
}else{
project.setProjectStatus(ProjectStatus.INACTIVE);
}
ProjectClass pc = getProjectClass(jThesis.type);
project.setProjectClass(pc);
if(jThesis.daisyStartDate > 0){
Date daisyStartDate = new Date(jThesis.daisyStartDate);
project.setDaisyStartDate(daisyStartDate);
}
project = projectDao.save(project);
for(JsonThesisParticipant jtp : jThesis.participants){
User u = userDao.getUserByIdentifier(jtp.id);
if(u == null){
final Long id = Long.valueOf(jtp.id);
try {
u = userLookupFromIdentifier.lookup(id);
} catch (Exception e) {
logger.error("Cannot save jsonuser with jsonuserid: " + jtp.id + " - Rolling back...\n" + e.getMessage());
throw new RuntimeException(e);
}
u = userDao.getUserByIdentifier(jtp.id);
}
if(u != null){
if(jtp.role.equals("SUPERVISOR")){
Employee e = roleDao.makeEmployee(u);
project.setHeadSupervisor(e);
}else if(jtp.role.equals("PARTICIPANT")){
Student s = roleDao.makeStudent(u);
project.getProjectParticipants().add(s);
}
else{
ProjectFollower pf = new ProjectFollower();
if(jtp.role.equals("ASSISTANT_SUPERVISOR")){
pf.setProjectRole(ProjectTeamMemberRoles.CO_SUPERVISOR);
pf.setFollower((Employee)roleDao.makeEmployee(u));
}else if(jtp.role.equals("OPPONENT")){
//TODO: OPPONENT
}else if (jtp.role.equals("EXAMINER")){
pf.setProjectRole(ProjectTeamMemberRoles.REVIEWER);
pf.setFollower(roleDao.makeEmployee(u));
}
if(pf.getFollower() != null && pf.getProjectRole() != null){
pf.setProject(project);
pf = projectFollowerDao.save(pf);
project.getProjectFollowers().add(pf);
}
}
}
}
project = projectDao.save(project);
/*
try{
txManager.commit(status);
}catch(TransactionException e){
logger.log(Level.ERROR, "Cannot commit transaction with projectid:"+project.getId() + " - Rolling back...\n" + e.getMessage());
txManager.rollback(status);
throw e;
}
*/
} }
project = null; ProjectClass pc = getProjectClass(jThesis.type);
project = projectDao.getProjectByIdentifier(jThesis.thesisID); project.setProjectClass(pc);
return project; if(jThesis.daisyStartDate > 0){
Date daisyStartDate = new Date(jThesis.daisyStartDate);
project.setDaisyStartDate(daisyStartDate);
}
project = projectDao.save(project);
//Synch participants
for(JsonThesisParticipant jtp : jThesis.participants){
User u = userDao.getUserByIdentifier(jtp.id);
//Attempt remote lookup if no user is found
if(u == null){
final Long id = Long.valueOf(jtp.id);
if( (u = userLookupFromIdentifier.lookup(id)) == null){
throw new RuntimeException("Cannot save jsonuser with jsonuserid: " + jtp.id);
}
}
//Move on
if(jtp.role.equals("SUPERVISOR")){
Employee e = roleDao.makeEmployee(u);
project.setHeadSupervisor(e);
}else if(jtp.role.equals("PARTICIPANT")){
Student s = roleDao.makeStudent(u);
project.getProjectParticipants().add(s);
}
else{
ProjectFollower pf = new ProjectFollower();
if(jtp.role.equals("ASSISTANT_SUPERVISOR")){
pf.setProjectRole(ProjectTeamMemberRoles.CO_SUPERVISOR);
pf.setFollower((Employee)roleDao.makeEmployee(u));
}else if(jtp.role.equals("OPPONENT")){
//TODO: OPPONENT
}else if (jtp.role.equals("EXAMINER")){
pf.setProjectRole(ProjectTeamMemberRoles.REVIEWER);
pf.setFollower(roleDao.makeEmployee(u));
}
if(pf.getFollower() != null && pf.getProjectRole() != null){
pf.setProject(project);
pf = projectFollowerDao.save(pf);
project.getProjectFollowers().add(pf);
}
}
}
project = projectDao.save(project);
}
project = projectDao.getProjectByIdentifier(jThesis.thesisID);
return project;
} }
/** /**
* Look for changes in a jsonuser against a thesisuser. BEWARE: you need to be sure that * Look for changes in a jsonuser against a User.
* a corresponding thesisuser exists, or an exception will be thrown * @note you need to be sure that a corresponding User exists, or a (potentially wrapped) Runtime exception will be thrown
* * @param jsonUser
* @param daisyUser
* @return * @return
*/ */
protected boolean lookForChangesInUserAndSave(JsonUser jsonUser){ protected boolean lookForChangesInUserAndSave(JsonUser jsonUser){
@ -481,8 +455,6 @@ public abstract class JsonResponseHandler implements IResponseHandler {
} }
return changed; return changed;
} }
/* /*
* Force subclasses to handle the response * Force subclasses to handle the response
*/ */
@ -518,14 +490,21 @@ public abstract class JsonResponseHandler implements IResponseHandler {
public int getNumThesesCreated() { public int getNumThesesCreated() {
return numThesesCreated; return numThesesCreated;
} }
public void setNumThesesCreated(int numThesesCreated) {
this.numThesesCreated = numThesesCreated;
}
public int getNumThesesChanged() { public int getNumThesesChanged() {
return numThesesChanged; return numThesesChanged;
} }
public void setNumThesesChanged(int numThesesChanged) { /**
this.numThesesChanged = numThesesChanged; * Sets parameter to increase logging output.
* @param logResult
*/
public void setLogResult(boolean logResult) {
this.logResult = logResult;
}
/**
* Getter for increased logging output.
*/
public boolean isLogResult() {
return logResult;
} }
} }

@ -3,6 +3,7 @@ package se.su.dsv.scipro.json;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import org.apache.log4j.Level; import org.apache.log4j.Level;
import org.springframework.stereotype.Component;
import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.dataobjects.Username; import se.su.dsv.scipro.data.dataobjects.Username;
@ -19,15 +20,8 @@ import com.google.gson.reflect.TypeToken;
* @author Dan Kjellman <dan-kjel@dsv.su.se> * @author Dan Kjellman <dan-kjel@dsv.su.se>
* *
*/ */
//@Component @Component
public class JsonUserFullResponseHandler extends JsonResponseHandler { public class JsonUserFullResponseHandler extends JsonResponseHandler {
private boolean logResult = false;
public JsonUserFullResponseHandler(){
super();
}
/** /**
* Handles a json string * Handles a json string
* *
@ -124,8 +118,7 @@ public class JsonUserFullResponseHandler extends JsonResponseHandler {
} }
} }
} }
if(isLogResult()){
if(logResult){
logger.log(Level.INFO, "\nResult from userimport/update:\nChecked: " + userContainer.users.size() + " users\n" + logger.log(Level.INFO, "\nResult from userimport/update:\nChecked: " + userContainer.users.size() + " users\n" +
"Changed users: " + changedUsers + "\n" + "Changed users: " + changedUsers + "\n" +
"Created users: " + createdUsers + "\n" + "Created users: " + createdUsers + "\n" +
@ -137,12 +130,4 @@ public class JsonUserFullResponseHandler extends JsonResponseHandler {
"Num Supervisors created: " + getNumFirstNameChanges() + "\n"); "Num Supervisors created: " + getNumFirstNameChanges() + "\n");
} }
} }
public void setLogResult(boolean logResult) {
this.logResult = logResult;
}
public boolean isLogResult() {
return logResult;
}
} }

@ -19,9 +19,6 @@ import com.google.gson.reflect.TypeToken;
*/ */
@Component @Component
public class JsonUserResponseHandler extends JsonResponseHandler { public class JsonUserResponseHandler extends JsonResponseHandler {
private boolean logResult = false;
/** /**
* Handles a json string * Handles a json string
* *
@ -66,7 +63,7 @@ public class JsonUserResponseHandler extends JsonResponseHandler {
} }
} }
if(logResult){ if(isLogResult()){
logger.info("Result from userimport/update:\nChecked: " + userContainer.users.size() + " users\n" + logger.info("Result from userimport/update:\nChecked: " + userContainer.users.size() + " users\n" +
"Changed users: " + changedUsers + "\n" + "Changed users: " + changedUsers + "\n" +
"Created users: " + createdUsers + "\n" + "Created users: " + createdUsers + "\n" +
@ -78,12 +75,4 @@ public class JsonUserResponseHandler extends JsonResponseHandler {
"Num Supervisors created: " + getNumFirstNameChanges() + "\n"); "Num Supervisors created: " + getNumFirstNameChanges() + "\n");
} }
} }
public void setLogResult(boolean logResult) {
this.logResult = logResult;
}
public boolean isLogResult() {
return logResult;
}
} }

@ -11,10 +11,8 @@ import org.springframework.stereotype.Component;
import se.su.dsv.scipro.json.ImportWorkerLookup; import se.su.dsv.scipro.json.ImportWorkerLookup;
@Component @Component
public class UserAndProjectImportWorker extends AbstractWorker{ public class UserAndProjectImportWorker extends AbstractWorker{
@Autowired @Autowired
private ImportWorkerLookup importLookup; private ImportWorkerLookup importWorkerLookup;
public static int updatedUsers; public static int updatedUsers;
public static int updatedTheses; public static int updatedTheses;
//The amount of theses or uses asked for //The amount of theses or uses asked for
@ -34,7 +32,7 @@ public class UserAndProjectImportWorker extends AbstractWorker{
//Sets static params updatedUsers/updatedTheses //Sets static params updatedUsers/updatedTheses
try{ try{
beginTransaction(); beginTransaction();
importLookup.lookupUpdateStats(this.getLastRun()); importWorkerLookup.lookupUpdateStats(this.getLastRun());
commitTransaction(); commitTransaction();
} catch(Exception e){ } catch(Exception e){
rollbackTransaction(); rollbackTransaction();
@ -60,7 +58,7 @@ public class UserAndProjectImportWorker extends AbstractWorker{
try{ try{
beginTransaction(); beginTransaction();
if(endIndex > 0){ if(endIndex > 0){
importLookup.lookup(startIndex, endIndex,(this.getLastRun()),ImportWorkerLookup.USERS); importWorkerLookup.lookup(startIndex, endIndex,(this.getLastRun()),ImportWorkerLookup.USERS);
} }
commitTransaction(); commitTransaction();
@ -90,7 +88,7 @@ public class UserAndProjectImportWorker extends AbstractWorker{
try{ try{
beginTransaction(); beginTransaction();
if(endIndex > 0) if(endIndex > 0)
importLookup.lookup(startIndex, endIndex,(this.getLastRun()), importWorkerLookup.lookup(startIndex, endIndex,(this.getLastRun()),
ImportWorkerLookup.THESES); ImportWorkerLookup.THESES);
commitTransaction(); commitTransaction();

@ -22,11 +22,10 @@
annotations annotations
--> -->
<tx:annotation-driven transaction-manager="transactionManager" /> <tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" /> <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean> </bean>
<!-- Load data initializer for default table-data -->
<bean class="se.su.dsv.scipro.DataInitialiser" init-method="dataInit" /> <bean class="se.su.dsv.scipro.DataInitialiser" init-method="dataInit" />
<!-- Defines global settings for the application --> <!-- Defines global settings for the application -->
<bean id="applicationSettings" class="se.su.dsv.scipro.ApplicationSettings"> <bean id="applicationSettings" class="se.su.dsv.scipro.ApplicationSettings">
@ -39,16 +38,4 @@
<!-- External auth support (via J2EE standard mechanism REMOTE_USER), if true: other authentication mechanics will be bypassed.--> <!-- External auth support (via J2EE standard mechanism REMOTE_USER), if true: other authentication mechanics will be bypassed.-->
<property name="acceptExternalAuthentication" value="true"/> <property name="acceptExternalAuthentication" value="true"/>
</bean> </bean>
<!-- Defines the class used for lookup in username against a remote server -->
<bean id="importWorkerLookup" class="se.su.dsv.scipro.json.ImportWorkerLookup">
<property name="userResponseHandler" ref="importWorkerResponseHandler" />
<property name="statsResonseHandler" ref="importStatsResponseHandler" />
</bean>
<!-- The abstract handler for json responses -->
<bean id="jsonResponseHandler" abstract="true" class="se.su.dsv.scipro.json.JsonResponseHandler" />
<!-- Handler for json responses regarding users -->
<bean id="jsonUserResponseHandler" parent="jsonResponseHandler" class="se.su.dsv.scipro.json.JsonUserResponseHandler" />
<bean id="jsonUserFullResponseHandler" parent="jsonResponseHandler" class="se.su.dsv.scipro.json.JsonUserFullResponseHandler" />
<bean id="importWorkerResponseHandler" parent="jsonResponseHandler" class="se.su.dsv.scipro.json.ImportWorkerResponseHandler" />
<bean id="importStatsResponseHandler" parent="jsonResponseHandler" class="se.su.dsv.scipro.json.ImportUpdateStatsResponseHandler" />
</beans> </beans>