Merge branch 'develop' of git.dsv.su.se:/git/scipro/scipro into develop

This commit is contained in:
Niklas Herder 2012-04-02 12:31:32 +02:00
commit 5620dd7221
10 changed files with 253 additions and 91 deletions

@ -24,11 +24,6 @@
<name>Spring Maven MILESTONE Repository</name>
<url>http://repo.springsource.org/libs-milestone</url>
</repository>
<repository>
<id>spring-roo-repository</id>
<name>Spring Roo Repository</name>
<url>http://spring-roo-repository.springsource.org/release</url>
</repository>
</repositories>
<dependencies>
<!-- WICKET DEPENDENCIES -->

@ -12,6 +12,7 @@ import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.string.Strings;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.admin.pages.match.AdminManageProjectIdeaPage;
import se.su.dsv.scipro.data.dataobjects.Employee;
@ -56,16 +57,19 @@ public class ManualMatchPanel extends Panel {
add(currentFragment.setOutputMarkupId(true));
}
private String createNameAndEmail(Employee employee) {
private String createNameAndEmailOutput(Employee employee) {
return employee.getNameAsString() + " <" + employee.getEmailAsString()+">";
}
private String createNameAndEmailAutoComplete(Employee employee) {
return employee.getNameAsString() + " &lt;" + employee.getEmailAsString()+"&gt;";
}
private boolean testACInputString(EmployeeAutoComplete autoCompleteObjectField) {
return autoCompleteObjectField.getModelObject() == null ||
autoCompleteObjectField.getInput() == null ||
autoCompleteObjectField.getInput().isEmpty() ||
!autoCompleteObjectField.getInput().equals(createNameAndEmail(autoCompleteObjectField.getModelObject()));
!autoCompleteObjectField.getInput().equals(autoCompleteObjectField.getModelObject().getNameAsString());
}
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<Match> matchModel, final Component feedbackPanel, final Match.Status status,
@ -81,7 +85,7 @@ public class ManualMatchPanel extends Panel {
matchModel.getObject().setSupervisor(autoCompleteObjectField.getModelObject() != null ? autoCompleteObjectField.getModelObject():null);
matchModel.getObject().setStatus(status);
matchDao.changeStatus(SciProSession.get().getUser(), matchModel.getObject(), null);
Session.get().info(createMatchMessage(createNameAndEmail(autoCompleteObjectField.getModelObject()), matchModel.getObject().getProjectIdea().getTitle(), status));
Session.get().info(createMatchMessage(autoCompleteObjectField.getModelObject(), matchModel.getObject().getProjectIdea().getTitle(), status));
setResponsePage(AdminManageProjectIdeaPage.class);
target.addComponent(feedbackPanel);
}
@ -197,19 +201,14 @@ public class ManualMatchPanel extends Panel {
private static final long serialVersionUID = 7734889540424308421L;
@Override
public void action(AjaxRequestTarget pTarget, Employee newSelection) {
// these checks have already been performed when action is called
// if (newSelection != null) {
// if (pTarget != null) {
final String declineMessage = createDeclineMessage(newSelection, projectIdea, status);
if(declineMessage != null && !declineMessage.isEmpty()) {
saveButton.setMessageContentHTML(declineMessage);
pTarget.addComponent(saveButton);
} else {
saveButton.setMessageContentHTML(createConfirmationMessage(newSelection, status));
pTarget.addComponent(saveButton);
}
// }
// }
final String declineMessage = createDeclineMessage(newSelection, projectIdea, status);
if(declineMessage != null && !declineMessage.isEmpty()) {
saveButton.setMessageContentHTML(declineMessage);
pTarget.addComponent(saveButton);
} else {
saveButton.setMessageContentHTML(createConfirmationMessage(newSelection, status));
pTarget.addComponent(saveButton);
}
}
};
}
@ -217,20 +216,20 @@ public class ManualMatchPanel extends Panel {
/**
*
* This method is used to return a match message that the employee was matched or suggested to supervise the project idea .
* @param nameAndEmail the name and email of the employee
* @param employee the employee that is confirmed or suggested to supervise
* @param projectIdeaTitle the title of the project idea
* @param status the status of the match
* @return String the match message
*/
private String createMatchMessage(final String nameAndEmail, final String projectIdeaTitle, Match.Status status) {
private String createMatchMessage(final Employee employee, final String projectIdeaTitle, Match.Status status) {
StringBuilder messageStr = new StringBuilder();
messageStr.append(nameAndEmail != null ? nameAndEmail : "" );
messageStr.append(createNameAndEmailOutput(employee));
if(status.equals(Match.Status.CONFIRMED)) {
messageStr.append(" was accepted ");
} else if (status.equals(Match.Status.PUBLISHED)) {
messageStr.append(" was suggested ");
}
messageStr.append("as supervisor to The project idea ");
messageStr.append("as supervisor for The project idea ");
messageStr.append(projectIdeaTitle != null ? projectIdeaTitle : "");
messageStr.append(".");
return messageStr.toString();
@ -250,7 +249,7 @@ public class ManualMatchPanel extends Panel {
StringBuilder stringBuilder = new StringBuilder();
if(declineMessage != null && !declineMessage.isEmpty()) {
stringBuilder.append("The project idea has already been rejected by ");
stringBuilder.append(createNameAndEmail(supervisor));
stringBuilder.append(createNameAndEmailAutoComplete(supervisor));
stringBuilder.append(". The decline message was: '");
stringBuilder.append(declineMessage);
if(status.equals(Match.Status.CONFIRMED)) {
@ -280,7 +279,7 @@ public class ManualMatchPanel extends Panel {
} else if (status.equals(Match.Status.PUBLISHED)) {
stringBuilder.append("suggest ");
}
stringBuilder.append(createNameAndEmail(supervisor));
stringBuilder.append(createNameAndEmailAutoComplete(supervisor));
stringBuilder.append(" as supervisor for the project idea.");
return stringBuilder.toString();
}

@ -46,16 +46,20 @@ public class ManualSetReviewerPanel extends Panel {
add(currentFragment);
}
private String createNameAndEmail(EmployeeAutoComplete autoCompleteObjectField) {
return autoCompleteObjectField.getModelObject().getNameAsString() + " <" + autoCompleteObjectField.getModelObject().getEmailAsString()+">";
private String createNameAndEmailOutput(Employee employee) {
return employee.getNameAsString() + " <" + employee.getEmailAsString()+">";
}
private String createNameAndEmailAutoComplete(Employee employee) {
return employee.getNameAsString() + " &lt;" + employee.getEmailAsString()+"&gt;";
}
private boolean testACInputString(EmployeeAutoComplete autoCompleteObjectField) {
return autoCompleteObjectField.getModelObject() == null ||
autoCompleteObjectField.getInput() == null ||
autoCompleteObjectField.getInput().isEmpty() ||
!autoCompleteObjectField.getInput().equals(createNameAndEmail(autoCompleteObjectField));
!autoCompleteObjectField.getInput().equals(autoCompleteObjectField.getModelObject().getNameAsString());
}
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<ProjectIdea> projectIdeaModel, final Component feedbackPanel,
@ -73,7 +77,7 @@ public class ManualSetReviewerPanel extends Panel {
ProjectIdea projectIdea = projectIdeaModel.getObject();
projectIdea.setSuggestedReviewer(autocompleteReviewerField.getModelObject());
projectIdeaDao.save(projectIdea);
Session.get().info(getInfoMessage(projectIdea.getTitle(), createNameAndEmail(autocompleteReviewerField)));
Session.get().info(getInfoMessage(projectIdea.getTitle(), autocompleteReviewerField.getModelObject()));
setResponsePage(AdminManageProjectIdeaPage.class);
target.addComponent(feedbackPanel);
}
@ -81,7 +85,7 @@ public class ManualSetReviewerPanel extends Panel {
@Override //Listener method invoked on form submit with errors
protected void onError(AjaxRequestTarget target, Form<?> form) {
Session.get().error(getErrorMessage(projectIdeaModel.getObject().getTitle(), autocompleteReviewerField.getModelObject().getNameAsString()));
Session.get().error(getErrorMessage(projectIdeaModel.getObject().getTitle(), autocompleteReviewerField.getModelObject()));
super.onError(target, form);
setResponsePage(AdminManageProjectIdeaPage.class);
target.addComponent(feedbackPanel); // is only activated on "this"
@ -165,13 +169,8 @@ public class ManualSetReviewerPanel extends Panel {
@Override
public void action(AjaxRequestTarget pTarget, Employee newSelection) {
// these checks have already been performed when action is called
// if (newSelection != null) {
// if (pTarget != null) {
saveButton.setMessageContentHTML(getConfirmMessage(newSelection.getNameAsString(), projectIdea.getTitle()));
pTarget.addComponent(saveButton);
// }
// }
saveButton.setMessageContentHTML(getConfirmMessage(newSelection));
pTarget.addComponent(saveButton);
}
};
}
@ -179,31 +178,30 @@ public class ManualSetReviewerPanel extends Panel {
/**
*
* This method is used to return an confirmation message (is shown in a confirmation dialog)
* to the administrator, that the employee really should be suggested as a reviewer for the project idea.
* @param projectIdeaTitle the title of the project idea
* @param reviewerName the name of the suggested reviewer
* to the administrator, that the employee really should be suggested as reviewer for the project idea.
* @param reviewer the suggested reviewer
* @return String the confirmation message
*/
private String getConfirmMessage(final String reviewerName, final String projectIdeaTitle) {
private String getConfirmMessage(final Employee reviewer) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Confirm that you want to suggest ");
stringBuilder.append(reviewerName);
stringBuilder.append(" as a reviewer for the project idea.");
stringBuilder.append(createNameAndEmailAutoComplete(reviewer));
stringBuilder.append(" as reviewer for the project idea.");
return stringBuilder.toString();
}
/**
*
* This method is used to return an information message that the employee was suggested as a reviewer for the project idea.
* This method is used to return an information message that the employee was suggested as reviewer for the project idea.
* @param projectIdeaTitle the title of the project idea
* @param reviewerName the name of the suggested reviewer
* @param reviewer the suggested reviewer
* @return String the information message
*/
private String getInfoMessage(final String projectIdeaTitle, final String reviewerName) {
private String getInfoMessage(final String projectIdeaTitle, final Employee reviewer) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(reviewerName);
stringBuilder.append(" was suggested reviewer for the project idea ");
stringBuilder.append(createNameAndEmailOutput(reviewer));
stringBuilder.append(" was suggested as reviewer for the project idea ");
stringBuilder.append(projectIdeaTitle);
stringBuilder.append(".");
return stringBuilder.toString();
@ -213,13 +211,13 @@ public class ManualSetReviewerPanel extends Panel {
*
* This method is used to return an error message which is shown in case of an unforeseen error.
* @param projectIdeaTitle the title of the project idea
* @param reviewerName the name of the presumed reviewer
* @param reviewer the presumed reviewer
* @return String the error message
*/
private String getErrorMessage(String projectIdeaTitle, String reviewerName) {
private String getErrorMessage(final String projectIdeaTitle, final Employee reviewer) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("An error occurred when suggesting ");
stringBuilder.append(reviewerName);
stringBuilder.append(createNameAndEmailAutoComplete(reviewer));
stringBuilder.append(" as reviewer for the project idea ");
stringBuilder.append(projectIdeaTitle);
stringBuilder.append(".");

@ -18,7 +18,11 @@
<table wicket:id="table" class="rounded-corner">
<thead>
<tr>
<th class="rounded-left-top"><a href="#" wicket:id="nameSortLink">Name</a></th><th>Research Areas</th><th class="rounded-right-top">Regular keywords</th>
<th class="rounded-left-top"><a href="#" wicket:id="nameSortLink">Name</a></th>
<th>Research Areas</th>
<th class="rounded-right-top">
<a href="#" wicket:id="numberOfRegularsSortLink">Regular keywords</a>
</th>
</tr>
</thead>
<tbody>

@ -1,7 +1,6 @@
package se.su.dsv.scipro.admin.panels.match;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@ -9,21 +8,22 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.ui.dialog.Dialog;
import se.su.dsv.scipro.data.dao.interfaces.Dao.SortableParams.Sort;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.dataproviders.QueryableDataProvider;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
import se.su.dsv.scipro.match.dao.interfaces.SupervisorDaoParams;
import se.su.dsv.scipro.match.dataobject.Keyword;
import se.su.dsv.scipro.springdata.services.SupervisorService;
public class AdminSupervisorKeywordPanel extends Panel {
@ -32,6 +32,9 @@ public class AdminSupervisorKeywordPanel extends Panel {
@SpringBean
private SupervisorDao supervisorDao;
@SpringBean
private SupervisorService supervisorService;
public AdminSupervisorKeywordPanel(String str) {
super(str);
Dialog dialog = new Dialog("detailsDialog");
@ -39,10 +42,12 @@ public class AdminSupervisorKeywordPanel extends Panel {
WebMarkupContainer tableContainer = new WebMarkupContainer("table");
SupervisorDaoParams params = new SupervisorDaoParams();
params.setSortOn("user.lastName", Sort.ASCENDING);
params.setSortOn("keywords.size()", Sort.ASCENDING);
TextField<String> supervisorField = new TextField<String>("supervisorField", new Model<String>());
setUpTable(dialog, tableContainer, params);
setUpFiltering(tableContainer, params, supervisorField);
}
//addSortLink("numberOfRegulars", "keywords.size()", tableContainer, params);
}
private void setUpFiltering(WebMarkupContainer tableContainer, SupervisorDaoParams params, TextField<String> supervisorField) {
FilterForm form = new FilterForm(tableContainer, params, supervisorField);
@ -58,15 +63,46 @@ public class AdminSupervisorKeywordPanel extends Panel {
dialog.add(new EmptyPanel("dialogContent"));
add(dialog.setOutputMarkupId(true));
}
private void addSortLink(String markup, final String sortField, final WebMarkupContainer allContainer, final SupervisorDaoParams params) {
final AjaxLink<Void> sortLink = new AjaxLink<Void>(markup + "SortLink") {
private static final long serialVersionUID = -8463105615994034854L;
@Override
public void onClick(AjaxRequestTarget target) {
if (params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn(sortField, Sort.DESCENDING);
} else {
params.setSortOn(sortField, Sort.ASCENDING);
}
target.addComponent(allContainer);
}
};
allContainer.add(sortLink);
}
private void setUpTable(final Dialog dialog, final WebMarkupContainer tableContainer, final SupervisorDaoParams params) {
QueryableDataProvider<Employee, SupervisorDaoParams> provider = new QueryableDataProvider<Employee, SupervisorDaoParams>(supervisorDao, params);
DataView<Employee> dataView = new DataView<Employee>("supervisorList", provider, 1000) {
final StringBuffer definedSortOrder = new StringBuffer();
definedSortOrder.append("user.firstName");
final StringBuffer definedSortDirection = new StringBuffer();
definedSortDirection.append("ASC");
final ListView<Employee> dataView = new ListView<Employee>("supervisorList", new LoadableDetachableModel<List<Employee>>() {
private static final long serialVersionUID = -2395796971679213814L;
@Override
protected List<Employee> load() {
return supervisorService.findAllEmployees(new org.springframework.data.domain.Sort(definedSortOrder.toString()));
}
}) {
private static final long serialVersionUID = 3572766096237883198L;
@Override
protected void populateItem(Item<Employee> item) {
protected void populateItem(ListItem<Employee> item) {
final Employee supervisor = item.getModelObject();
List<Keyword> areaKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.RESEARCH_AREA.toDbName());
List<Keyword> regularKeywords = supervisor.getKeywords().getFiltered(KeywordTypeDao.TYPE.REGULAR.toDbName());
@ -98,20 +134,40 @@ public class AdminSupervisorKeywordPanel extends Panel {
}
};
final AjaxLink<Void> nameSortLink = new AjaxLink<Void>("nameSortLink") {
private static final long serialVersionUID = -6459164267551936706L;
@Override
public void onClick(AjaxRequestTarget target) {
if(params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn("user.lastName", Sort.DESCENDING);
org.springframework.data.domain.Sort sortOrder;
if(definedSortDirection.toString().equals("ASC")) {
sortOrder = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "user.lastName");
definedSortDirection.delete(0, definedSortDirection.length()-1);
definedSortDirection.append("DESC");
} else {
params.setSortOn("user.lastName", Sort.ASCENDING);
sortOrder = new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.ASC, "user.lastName");
definedSortDirection.delete(0, definedSortDirection.length()-1);
definedSortDirection.append("ASC");
}
dataView.setDefaultModelObject(supervisorService.findAllEmployees(sortOrder));
target.addComponent(tableContainer);
}
};
tableContainer.add(nameSortLink);
final AjaxLink<Void> numberOfRegularsSortLink = new AjaxLink<Void>("numberOfRegularsSortLink") {
private static final long serialVersionUID = 5809993580126828318L;
@Override
public void onClick(AjaxRequestTarget target) {
if(params.getDirection().equals(Sort.ASCENDING)) {
params.setSortOn("keywords.size", Sort.DESCENDING);
} else {
params.setSortOn("keywords.size", Sort.ASCENDING);
}
target.addComponent(tableContainer);
}
};
tableContainer.add(numberOfRegularsSortLink);
tableContainer.add(dataView);
add(tableContainer.setOutputMarkupId(true));
}

@ -47,7 +47,9 @@ public abstract class AbstractRoleAutoCompleteComponent<T extends Role> extends
@Override
protected Renderer<T> getListItemRenderer() {
return new Renderer<T>() {
@Override
private static final long serialVersionUID = -7256889096575950095L;
@Override
protected String getHeader(T item) {
return item.getNameAsString();
}

@ -27,8 +27,8 @@ public class SupervisorServiceImpl extends AbstractQueryService<Employee, Long>
}
@Override
public List<Employee> findAllEmployees() {
return supervisorRepo.findAll();
public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders) {
return supervisorRepo.findAll(orders);
}
}

@ -8,5 +8,5 @@ import java.util.List;
* date: 2012 03 26
*/
public interface SupervisorService extends CrudService<Employee,Long>, QueryService<Employee, Long> {
public List<Employee> findAllEmployees();
public List<Employee> findAllEmployees(org.springframework.data.domain.Sort orders);
}

@ -7,13 +7,12 @@ import java.util.Set;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.SendFailedException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sun.mail.smtp.SMTPSendFailedException;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.data.dao.interfaces.MailEventDao;
import se.su.dsv.scipro.data.dataobjects.MailEvent;
@ -65,7 +64,7 @@ public class MailEventWorker extends AbstractWorker {
replyToEmails[i] = u.getEmailAddress();
i++;
}
if( generalSystemSettingsDao.getGeneralSystemSettingsInstance().isMailNotifications() ){ //If false, mail-events "vanish"
logger.debug("Sending mail notification to: "+recipients);
mail.mail(fromName, fromEmail, recipientsEmails, replyToEmails, subject, messageBody, false);
@ -75,19 +74,26 @@ public class MailEventWorker extends AbstractWorker {
this.commitTransaction();
} catch(SMTPSendFailedException e){
} catch(SendFailedException e){
// We need to catch this exception for the use case when one or
// more of the recipients are invalid, to make sure we still
// send the mail to the valid recipients, and delete the mail
// event to prevent spamming.
// event to prevent spamming.
logger.info("Could not send mail to all of the recipients, more info:");
if(e.getInvalidAddresses()!=null){
for(Address a : e.getInvalidAddresses()) {
logger.info("Message could not be sent to the following invalid address: "+a.toString());
}
}
if(e.getValidSentAddresses()!=null){
for(Address a : e.getValidSentAddresses()){
logger.info("Message have been sent to the following valid address: "+a.toString());
}
}
if(e.getValidUnsentAddresses()!=null){
for(Address a : e.getValidUnsentAddresses()){
logger.info("Message have not been sent to the following valid address: "+a.toString());
}
}
mailEvent = mailEventDao.reLoad(mailEvent);
mailEventDao.delete(mailEvent);

@ -5,15 +5,19 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dao.interfaces.UsernameDao;
import se.su.dsv.scipro.data.dataobjects.Employee;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.data.dataobjects.Username;
import se.su.dsv.scipro.match.Weights;
import se.su.dsv.scipro.match.dao.interfaces.KeywordDao;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao;
import se.su.dsv.scipro.match.dataobject.Keyword;
import se.su.dsv.scipro.match.dataobject.KeywordType;
import se.su.dsv.scipro.springdata.services.SupervisorService;
import java.util.ArrayList;
@ -24,6 +28,7 @@ import static org.junit.Assert.*;
@ContextConfiguration(inheritLocations = false, locations = {
"classpath:test-applicationContext.xml"
})
public class TestSupervisor {
@Autowired
@ -32,11 +37,57 @@ public class TestSupervisor {
@Autowired
private UserDao userDao;
@Autowired
private KeywordDao keywordDao;
@Autowired
private KeywordTypeDao keywordTypeDao;
private KeywordType keywordTypeArea;
private KeywordType keywordTypeWord;
private Weights weights;
@SuppressWarnings("EmptyMethod")
@Before
public void startTransaction() throws Exception {
keywordTypeArea = keywordTypeDao.save(new KeywordType("Area"));
keywordTypeWord = keywordTypeDao.save(new KeywordType("Word"));
weights = createWeights();
}
private Weights createWeights() {
Weights weights = new Weights();
weights.setKeywordPoints(3); // "Word" + "Unit"??
weights.setResearchAreaPoints(5); // "Area"
weights.setPreferredSupervisorPoints(10);
return weights;
}
private Employee getEmployee(final String firstName, final String lastName, final String email) {
User user = new User();
user.setFirstName(firstName);
user.setLastName(lastName);
user.setEmailAddress(email);
user = userDao.save(user);
assertNotNull(user);
Employee employee = new Employee();
employee.setUser(user);
return supervisorService.save(employee);
}
private Keyword createKeyword(final KeywordType keyWordType , final String keyWordName, final boolean deleted) {
Keyword keyword = keywordDao.getKeywordByNameAndType(keyWordName, keyWordType);
if(keyword == null) {
keyword = new Keyword();
keyword.setType(keyWordType);
keyword.setKeyword(keyWordName);
keyword.setDeleted(deleted);
return keywordDao.save(keyword);
} else {
return keyword;
}
}
/**
* Test for implementing a supervisorService with Spring Data
@ -44,18 +95,69 @@ public class TestSupervisor {
@Test
@Transactional
@Rollback
public void findAllSupervisorsWithSpringData() {
public void findSupervisorLastName() {
List<Employee> employeeList = new ArrayList<Employee>();
User davidH = new User();
davidH.setFirstName("David");
davidH.setLastName("Hallberg");
davidH.setEmailAddress("dhallb@dsv.su.se");
davidH = userDao.save(davidH);
Employee larsson = getEmployee("Ken", "Larsson", "kenlars@dsv.su.se");
Employee hallberg = getEmployee("David", "Hallberg", "dhallb@dsv.su.se");
Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se");
Employee moattar = getEmployee("Golrokh", "Moattar", "goli@dsv.su.se");
Employee friis = getEmployee("Fredrik", "Friis", "fre-fri@dsv.su.se");
Employee herder = getEmployee("Niklas", "Herder", "herder@dsv.su.se");
Sort sortOrder = new Sort("user.lastName");
employeeList.addAll(supervisorService.findAllEmployees(sortOrder));
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.get(0).equals(friis));
assertTrue(employeeList.get(5).equals(tholerus));
}
Employee supervisor = new Employee();
supervisor.setUser(davidH);
supervisorService.save(supervisor);
// employeeList.addAll(supervisorService.findAllEmployees());
// assertTrue(employeeList.size() == 1);
/**
* Test for implementing a supervisorService with Spring Data
*/
@Test
@Transactional
@Rollback
public void findSupervisorFirstName() {
List<Employee> employeeList = new ArrayList<Employee>();
Employee larsson = getEmployee("Ken", "Larsson", "kenlars@dsv.su.se");
Employee hallberg = getEmployee("David", "Hallberg", "dhallb@dsv.su.se");
Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se");
Employee moattar = getEmployee("Golrokh", "Moattar", "goli@dsv.su.se");
Employee friis = getEmployee("Fredrik", "Friis", "fre-fri@dsv.su.se");
Employee herder = getEmployee("Niklas", "Herder", "herder@dsv.su.se");
Sort sortOrder = new Sort("user.firstName");
employeeList.addAll(supervisorService.findAllEmployees(sortOrder));
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.get(0).equals(hallberg));
assertTrue(employeeList.get(5).equals(tholerus));
}
/**
* Test for implementing a supervisorService with Spring Data
*/
@Test
@Transactional
@Rollback
public void findSupervisorKeywords() {
List<Employee> employeeList = new ArrayList<Employee>();
Employee larsson = getEmployee("Ken", "Larsson", "kenlars@dsv.su.se");
Employee hallberg = getEmployee("David", "Hallberg", "dhallb@dsv.su.se");
Employee tholerus = getEmployee("Torgny", "Tholerus", "torgny@dsv.su.se");
Employee herder = getEmployee("Niklas", "Herder", "herder@dsv.su.se");
Employee moattar = getEmployee("Golrokh", "Moattar", "goli@dsv.su.se");
Employee friis = getEmployee("Fredrik", "Friis", "fre-fri@dsv.su.se");
Keyword keyword = createKeyword(keywordTypeWord, "JUnit", false);
herder.getKeywords().getAll().add(keyword);
keyword = createKeyword(keywordTypeWord, "Maven", false);
herder.getKeywords().getAll().add(keyword);
herder = supervisorService.save(herder);
/* Sort sortOrder = new Sort("keywords.getAll().size");
employeeList.addAll(supervisorService.findAllEmployees(sortOrder));
assertFalse(employeeList.isEmpty());
assertTrue(employeeList.get(0).equals(herder));*/
//assertTrue(employeeList.get(5).equals(tholerus));
}
}