Merge branch 'develop' of git.dsv.su.se:/git/scipro/scipro into develop
This commit is contained in:
commit
5620dd7221
pom.xml
src
main/java/se/su/dsv/scipro
test/java/se/su/dsv/scipro/springdata
5
pom.xml
5
pom.xml
@ -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() + " <" + employee.getEmailAsString()+">";
|
||||
}
|
||||
|
||||
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() + " <" + employee.getEmailAsString()+">";
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user