diff --git a/pom.xml b/pom.xml index 38bb6a6d38..07c4a944d2 100644 --- a/pom.xml +++ b/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 --> diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/ManualMatchPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/ManualMatchPanel.java index 4731beb5e8..3d2f82356e 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/ManualMatchPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/ManualMatchPanel.java @@ -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(); } diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java index 2a23cb5f25..c5be6a0840 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java @@ -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("."); diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html index 68e12de8a0..2167576974 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.html @@ -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> diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java index ef005486bf..51ad32555a 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/AdminSupervisorKeywordPanel.java @@ -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)); } diff --git a/src/main/java/se/su/dsv/scipro/reusable/AbstractRoleAutoCompleteComponent.java b/src/main/java/se/su/dsv/scipro/reusable/AbstractRoleAutoCompleteComponent.java index b5bb7229e3..c630cc8612 100644 --- a/src/main/java/se/su/dsv/scipro/reusable/AbstractRoleAutoCompleteComponent.java +++ b/src/main/java/se/su/dsv/scipro/reusable/AbstractRoleAutoCompleteComponent.java @@ -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(); } diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java index df56d6fb63..9041daecb2 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImpl.java @@ -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); } } diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java index 6189a4c8ba..439d9e1c97 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorService.java @@ -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); } diff --git a/src/main/java/se/su/dsv/scipro/workerthreads/MailEventWorker.java b/src/main/java/se/su/dsv/scipro/workerthreads/MailEventWorker.java index 8f0c06eed6..f2f28d8862 100644 --- a/src/main/java/se/su/dsv/scipro/workerthreads/MailEventWorker.java +++ b/src/main/java/se/su/dsv/scipro/workerthreads/MailEventWorker.java @@ -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); diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java index fcc16afbf2..11b6ffa01f 100644 --- a/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java +++ b/src/test/java/se/su/dsv/scipro/springdata/TestSupervisor.java @@ -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)); } }