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

This commit is contained in:
Fredrik Friis 2012-03-22 11:36:48 +09:00
commit 3fe10ef6c0
8 changed files with 132 additions and 72 deletions

@ -41,32 +41,33 @@ public class ManualMatchPanel extends Panel {
private Fragment currentFragment;
private Fragment alternateFragment;
private AutoCompleteObjectField<Employee, Long> autoCompleteObjectField;
private ConfirmerAjaxSubmitLink saveButton;
public ManualMatchPanel(String id, final IModel<Match> matchModel, final Component feedbackPanel, final Match.Status status) {
super(id);
Component localFeedback = new FeedbackPanel("localFeedback");
ConfirmerAjaxSubmitLink saveButton = createSubmitLink(matchModel, feedbackPanel, status, localFeedback);
autoCompleteObjectField = createDsvAutocompleteComponent(matchModel.getObject().getProjectIdea(), status, saveButton);
AutoCompleteObjectField<Employee, Long> autoCompleteObjectField =
createDsvAutocompleteComponent(matchModel.getObject().getProjectIdea(), status);
autoCompleteObjectField.setOutputMarkupId(true);
saveButton = createSubmitLink(matchModel, feedbackPanel, status, localFeedback, autoCompleteObjectField);
saveButton.setOutputMarkupId(true);
setOutputMarkupPlaceholderTag(true);
Form<Employee> matchForm = new Form<Employee>("matchForm");
currentFragment = createButtonFragment(status, matchForm);
currentFragment = createButtonFragment(status, matchForm, autoCompleteObjectField);
currentFragment.setOutputMarkupId(true);
alternateFragment = createMatchFragment(saveButton, matchForm, localFeedback);
alternateFragment = createMatchFragment(matchForm, localFeedback, autoCompleteObjectField);
alternateFragment.setOutputMarkupId(true);
add(currentFragment);
}
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<Match> matchModel, final Component feedbackPanel, final Match.Status status, final Component localFeedback) {
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<Match> matchModel, final Component feedbackPanel, final Match.Status status,
final Component localFeedback, final AutoCompleteObjectField<Employee, Long> autoCompleteObjectField) {
return new ConfirmerAjaxSubmitLink("saveButton") {
private static final long serialVersionUID = -1820883998549197409L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
if(autoCompleteObjectField.getModelObject() == null) {
Session.get().info("No match could be created because the supervisor was incorrect.");
Session.get().info("No match could be created because no supervisor was selected.");
target.addComponent(localFeedback);
} else {
matchModel.getObject().setSupervisor(autoCompleteObjectField.getModelObject() != null ? autoCompleteObjectField.getModelObject():null);
@ -87,7 +88,8 @@ public class ManualMatchPanel extends Panel {
};
}
private Fragment createButtonFragment(final Match.Status status, final Form<Employee> matchForm) {
private Fragment createButtonFragment(final Match.Status status, final Form<Employee> matchForm,
final AutoCompleteObjectField<Employee, Long> autoCompleteObjectField) {
Fragment buttonFragment = new Fragment("main", "buttonFragment", this) {
private static final long serialVersionUID = 2699118307386334814L;
@ -104,10 +106,7 @@ public class ManualMatchPanel extends Panel {
@Override
public void onClick(AjaxRequestTarget target) {
swapFragment();
if (target != null) {
target.addComponent(currentFragment);
}
swapAndAddToTarget(target, autoCompleteObjectField);
}
@Override
public boolean isVisible() {
@ -120,10 +119,7 @@ public class ManualMatchPanel extends Panel {
@Override
public void onClick(AjaxRequestTarget target) {
swapFragment();
if (target != null) {
target.addComponent(currentFragment);
}
swapAndAddToTarget(target, autoCompleteObjectField);
}
@Override
public boolean isVisible() {
@ -135,7 +131,27 @@ public class ManualMatchPanel extends Panel {
return buttonFragment;
}
private Fragment createMatchFragment(final ConfirmerAjaxSubmitLink saveButton, final Form<Employee> matchForm, Component localFeedback) {
private void swapAndAddToTarget(AjaxRequestTarget target, final AutoCompleteObjectField autoCompleteObjectField) {
swapFragment();
if (target != null) {
autoCompleteObjectField.setModelObject(null);
autoCompleteObjectField.clearInput();
saveButton.setMessageContentHTML("No supervisor was selected.");
target.addComponent(currentFragment);
target.addComponent(autoCompleteObjectField);
target.addComponent(saveButton);
}
}
private void swapFragment() {
Fragment tempFragment = currentFragment;
currentFragment.replaceWith(alternateFragment);
currentFragment = alternateFragment;
alternateFragment = tempFragment;
}
private Fragment createMatchFragment(final Form<Employee> matchForm, Component localFeedback, final AutoCompleteObjectField<Employee, Long> autoCompleteObjectField ) {
Fragment matchFragment = new Fragment("main", "matchFragment", this) {
private static final long serialVersionUID = -7770434904843562942L;
@ -146,22 +162,15 @@ public class ManualMatchPanel extends Panel {
}
};
autoCompleteObjectField.setModelObject(null);
saveButton.setOutputMarkupId(true);
localFeedback.setOutputMarkupId(true);
matchForm.add(localFeedback);
matchForm.add(autoCompleteObjectField);
matchForm.add(saveButton);
matchForm.add(new AjaxFallbackLink<Object>("cancelButton") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
swapFragment();
if (target != null) {
target.addComponent(currentFragment);
}
swapAndAddToTarget(target, autoCompleteObjectField);
}
});
matchFragment.add(matchForm);
@ -169,7 +178,7 @@ public class ManualMatchPanel extends Panel {
return matchFragment;
}
public AutoCompleteObjectField<Employee, Long> createDsvAutocompleteComponent(final ProjectIdea projectIdea, final Match.Status status, final ConfirmerAjaxSubmitLink saveButton) {
public AutoCompleteObjectField<Employee, Long> createDsvAutocompleteComponent(final ProjectIdea projectIdea, final Match.Status status) {
return new AutoCompleteObjectField<Employee, Long>("autoComplete", Employee.class) {
private static final long serialVersionUID = 7734889540424308421L;
@ -225,13 +234,6 @@ public class ManualMatchPanel extends Panel {
};
}
private void swapFragment() {
Fragment tempFragment = currentFragment;
currentFragment.replaceWith(alternateFragment);
currentFragment = alternateFragment;
alternateFragment = tempFragment;
}
/**
*
* This method is used to return a match message that an employee was matched or suggested to a project idea .

@ -32,20 +32,24 @@ public class ManualSetReviewerPanel extends Panel {
private Fragment currentFragment;
private Fragment alternateFragment;
private AutoCompleteObjectField<Employee, Long> autocompleteReviewerField;
private ConfirmerAjaxSubmitLink saveButton;
public ManualSetReviewerPanel(String id, IModel<ProjectIdea> projectIdeaModel, Component feedbackPanel) {
super(id);
Component localFeedback = new FeedbackPanel("localFeedback");
ConfirmerAjaxSubmitLink saveButton = createSubmitLink(projectIdeaModel, feedbackPanel, localFeedback);
autocompleteReviewerField = createDsvAutocompleteComponent(projectIdeaModel.getObject(), saveButton);
AutoCompleteObjectField<Employee, Long> autocompleteReviewerField = createDsvAutocompleteComponent(projectIdeaModel.getObject());
saveButton = createSubmitLink(projectIdeaModel, feedbackPanel, localFeedback, autocompleteReviewerField);
saveButton.setOutputMarkupId(true);
autocompleteReviewerField.setOutputMarkupId(true);
setOutputMarkupPlaceholderTag(true);
Form<Employee> reviewerForm = new Form<Employee>("reviewerForm");
currentFragment = createButtonFragment(reviewerForm);
alternateFragment = createReviewerFragment(saveButton, reviewerForm, localFeedback);
currentFragment = createButtonFragment(reviewerForm, autocompleteReviewerField);
alternateFragment = createReviewerFragment(reviewerForm, localFeedback, autocompleteReviewerField );
add(currentFragment);
}
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<ProjectIdea> projectIdeaModel, final Component feedbackPanel, final Component localFeedback) {
private ConfirmerAjaxSubmitLink createSubmitLink(final IModel<ProjectIdea> projectIdeaModel, final Component feedbackPanel,
final Component localFeedback, final AutoCompleteObjectField<Employee, Long> autocompleteReviewerField) {
return new ConfirmerAjaxSubmitLink("saveButton") {
private static final long serialVersionUID = -1852298712407811714L;
@ -53,7 +57,7 @@ public class ManualSetReviewerPanel extends Panel {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
if(autocompleteReviewerField.getModelObject() == null) {
Session.get().info("No match could be created because the reviewer was incorrect.");
Session.get().info("No reviewer could be selected because the data was incorrect.");
target.addComponent(localFeedback);
} else {
ProjectIdea projectIdea = projectIdeaModel.getObject();
@ -77,7 +81,7 @@ public class ManualSetReviewerPanel extends Panel {
private Fragment createButtonFragment(final Form<Employee> reviewerForm) {
private Fragment createButtonFragment(final Form<Employee> reviewerForm, final AutoCompleteObjectField<Employee, Long> autocompleteReviewerField) {
Fragment buttonFragment = new Fragment("main", "buttonFragment", this) {
private static final long serialVersionUID = 2383077895140299047L;
@ -93,17 +97,26 @@ public class ManualSetReviewerPanel extends Panel {
@Override
public void onClick(AjaxRequestTarget target) {
swapFragment();
if (target != null) {
target.addComponent(currentFragment);
}
swapAndAddToTarget(target, autocompleteReviewerField);
}
});
buttonFragment.setOutputMarkupPlaceholderTag(true);
return buttonFragment;
}
private Fragment createReviewerFragment(ConfirmerAjaxSubmitLink saveButton, final Form<Employee> reviewerForm, Component localFeedback) {
private void swapAndAddToTarget(AjaxRequestTarget target, final AutoCompleteObjectField autoCompleteObjectField) {
swapFragment();
if (target != null) {
autoCompleteObjectField.setModelObject(null);
autoCompleteObjectField.clearInput();
saveButton.setMessageContentHTML("No supervisor was selected.");
target.addComponent(currentFragment);
target.addComponent(autoCompleteObjectField);
target.addComponent(saveButton);
}
}
private Fragment createReviewerFragment(final Form<Employee> reviewerForm, Component localFeedback, final AutoCompleteObjectField<Employee, Long> autocompleteReviewerField) {
Fragment reviewerFragment = new Fragment("main", "reviewerFragment", this) {
private static final long serialVersionUID = -1831632235479216987L;
@ -115,23 +128,17 @@ public class ManualSetReviewerPanel extends Panel {
}
};
autocompleteReviewerField.setModelObject(null);
reviewerForm.add(autocompleteReviewerField);
saveButton.setOutputMarkupId(true);
localFeedback.setOutputMarkupId(true);
reviewerForm.add(localFeedback);
reviewerForm.add(saveButton);
reviewerForm.add(new AjaxFallbackLink<Object>("cancelButton") {
private static final long serialVersionUID = 5413209640805412939L;
@Override
public void onClick(AjaxRequestTarget target) {
swapFragment();
if (target != null) {
target.addComponent(currentFragment);
}
swapAndAddToTarget(target, autocompleteReviewerField);
}
});
reviewerFragment.add(reviewerForm);
@ -139,7 +146,7 @@ public class ManualSetReviewerPanel extends Panel {
return reviewerFragment;
}
public AutoCompleteObjectField<Employee, Long> createDsvAutocompleteComponent(final ProjectIdea projectIdea, final ConfirmerAjaxSubmitLink saveButton) {
public AutoCompleteObjectField<Employee, Long> createDsvAutocompleteComponent(final ProjectIdea projectIdea) {
return new AutoCompleteObjectField<Employee, Long>("reviewerTextField", Employee.class) {
private static final long serialVersionUID = 8639430940925886127L;

@ -18,9 +18,10 @@ public interface KeywordDao extends LazyDeleteDao<Keyword>{
* Returns the keyword if it is found
* @param keywordType the keyword can be of a specific type i.e. regular, research area or unit, is never NULL
* @param keywordName the search term, can only be a part of the keyword name, but must start with the same characters
* @param includeDeleted if deleted keywords should be included the search
* @return List<Keyword> the keyword list
*/
public List<Keyword> getAutoCompleteCapableSupervisors(final KeywordType keywordType, final String keywordName);
public List<Keyword> getAutoCompleteCapableSupervisors(final KeywordType keywordType, final String keywordName, boolean includeDeleted);
public List<Keyword> findAllFromType(KeywordType kt, boolean includeDeleted);

@ -138,11 +138,20 @@ public class KeywordDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Keyword> imple
}
@Override
public List<Keyword> getAutoCompleteCapableSupervisors(final KeywordType keywordType, final String keywordName) {
public List<Keyword> getAutoCompleteCapableSupervisors(final KeywordType keywordType, final String keywordName, final boolean includeDeleted) {
return getJpaTemplate().execute(new JpaCallback<List<Keyword>>() {
public List<Keyword> doInJpa(EntityManager em) throws PersistenceException {
TypedQuery<Keyword> query;
query = em.createQuery("SELECT x FROM "+domainClassString+" x WHERE x.type = :type AND x.keyword LIKE :keywordName ORDER BY keyword", domainClass);
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("SELECT x FROM ").append(domainClassString).append(" x ")
.append("WHERE x.type = :type AND x.keyword LIKE :keywordName AND ");
if(includeDeleted) {
sqlBuilder.append("(x.deleted = 1 OR x.deleted = 0) ");
} else {
sqlBuilder.append("x.deleted = 0 ");
}
sqlBuilder.append("ORDER BY keyword ");
query = em.createQuery(sqlBuilder.toString(), domainClass);
query.setParameter("type", keywordType);
String keyWordNameString = "%" + keywordName + "%";
query.setParameter("keywordName", keyWordNameString);

@ -116,7 +116,6 @@ public class AdminManageProjectIdeaPanel extends Panel {
@Override
public void onClick(AjaxRequestTarget target) {
// if (target != null) {
dialog.replace(new AdminEditProjectIdeaPanel("dialogContent", new Model<ProjectIdea>(idea), feedBackPanel) {
private static final long serialVersionUID = 1L;
});
@ -124,7 +123,6 @@ public class AdminManageProjectIdeaPanel extends Panel {
target.addComponent(dialog);
dialog.open(target);
// }
}
};

@ -1,9 +1,11 @@
package se.su.dsv.scipro.supervisor.panels;
import org.apache.wicket.Page;
import se.su.dsv.scipro.SciProSession;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightSupervisorMyProjects;
import se.su.dsv.scipro.peer.pages.SupervisorPeerPortalPage;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.supervisor.pages.*;
import java.util.ArrayList;
@ -28,7 +30,9 @@ public class SupervisorTabMenuPanel extends AbstractMenuPanel {
List<MenuItem> items = new ArrayList<MenuItem>();
items.add(new MenuItem("My projects", SupervisorStartPage.class, MenuHighlightSupervisorMyProjects.class));
items.add(new MenuItem("My matched project Ideas", SupervisorProjectIdeaPage.class));
items.add(new MenuItem("Unmatched project ideas", SupervisorUnmatchedProjectIdeaPage.class));
if(SciProSession.get().authorizedForRole(Roles.SYSADMIN) && SciProSession.get().hasActualRole(Roles.SYSADMIN)) {
items.add(new MenuItem("Unmatched project ideas", SupervisorUnmatchedProjectIdeaPage.class));
}
items.add(new MenuItem("Activity plan templates", SupervisorScheduleTemplatesPage.class));
items.add(new MenuItem("Peer portal", SupervisorPeerPortalPage.class));
items.add(new MenuItem("Final seminars", SupervisorProjectsFinalSeminarPage.class));

@ -28,7 +28,7 @@
<input style="width:300px;" wicket:id="areaKeyWordAC" /><br/>
</div>
<div class="span-14 last" >
<strong>Selected keywords and keyword types:</strong>
<label>Selected keywords:</label>
<ul wicket:id="keyWordsContainer">
<li wicket:id="keywordList">
<h5><span wicket:id="keyWord">[keyword]</span> (<span wicket:id="keyWordType">[keyWordType]</span>)</h5>
@ -39,7 +39,11 @@
<div class="span-22 last append-bottom">
<div class="span-3" wicket:id="projectClassPanel">
</div>
<div class="span-3">
<label>Include deleted keyword</label>
<input type="checkbox" wicket:id="includeDeleted" />
<span wicket:id="deletedLabel">[label]</span>
</div>
<div class="span-2">
<div><input wicket:id="filterButton" type="submit"/></div>

@ -6,6 +6,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
@ -35,10 +36,13 @@ import se.su.dsv.scipro.match.dataobject.Match;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
import se.su.dsv.scipro.match.dataprovider.ProjectIdeaDataProvider;
import se.su.dsv.scipro.match.panel.FilterFormProjectClassPanel;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.wicket.components.AutoCompleteObjectField;
import java.util.*;
@Authorization(authorizedRoles = {Roles.SYSADMIN})
public class SupervisorUnmatchedThesisPanel extends Panel {
private static final long serialVersionUID = 3080575522365470502L;
@ -49,14 +53,19 @@ public class SupervisorUnmatchedThesisPanel extends Panel {
@SpringBean
private KeywordDao keywordDao;
@SpringBean
private KeywordTypeDao keywordTypeDao;
@SpringBean
private ProjectClassDao projectClassDao;
private Label deletedLabel = new Label("deletedLabel", Boolean.FALSE.toString());
public SupervisorUnmatchedThesisPanel(String id, final Component feedBackPanel) {
super(id);
deletedLabel.setOutputMarkupId(true);
ProjectIdeaDataProvider allProvider = new ProjectIdeaDataProvider();
Params params = setUpParams(allProvider);
Label totalProjectIdeas = new Label("totalProjectIdeas", Integer.toString(allProvider.size()));
@ -185,9 +194,15 @@ public class SupervisorUnmatchedThesisPanel extends Panel {
}
public AutoCompleteObjectField<Keyword, Long> createKeywordAC(final String wicketId, final KeywordTypeDao.TYPE keyWordType,
final List<Keyword> keywords, final Component feedBackPanel, final WebMarkupContainer keyWordsContainer) {
final List<Keyword> keywords, final Component feedBackPanel,
final WebMarkupContainer keyWordsContainer) {
return new AutoCompleteObjectField<Keyword, Long>(wicketId, Keyword.class) {
private static final long serialVersionUID = 7734889540424308421L;
boolean includeDeleted = false;
public void setIncludeDeleted(boolean includeDeleted) {
this.includeDeleted = includeDeleted;
}
@Override
public Keyword loadObject(Long keywordId) {
@ -218,9 +233,13 @@ public class SupervisorUnmatchedThesisPanel extends Panel {
@Override
public Iterator<Keyword> getChoices(String input) {
final KeywordType kwtype = keywordTypeDao.findByType(keyWordType); // keyWordType is only the Type, but the object is required in findAllFromType
return keywordDao.getAutoCompleteCapableSupervisors(kwtype, input).iterator();
if(deletedLabel.getDefaultModelObject().equals(Boolean.TRUE.toString())) {
includeDeleted = true;
} else if(deletedLabel.getDefaultModelObject().equals(Boolean.FALSE.toString())) {
includeDeleted = false;
}
final KeywordType kwtype = keywordTypeDao.findByType(keyWordType);
return keywordDao.getAutoCompleteCapableSupervisors(kwtype, input, includeDeleted).iterator();
}
@Override
@ -271,9 +290,9 @@ public class SupervisorUnmatchedThesisPanel extends Panel {
keyWordsContainer.add(keywordListView);
add(keyWordsContainer);
AutoCompleteObjectField<Keyword, Long> regKeyWordAc = createKeywordAC("regKeyWordAC", KeywordTypeDao.TYPE.REGULAR, keywords, feedBackPanel, keyWordsContainer);
AutoCompleteObjectField<Keyword, Long> unitKeyWordAc = createKeywordAC("unitKeyWordAC", KeywordTypeDao.TYPE.UNIT, keywords, feedBackPanel, keyWordsContainer);
AutoCompleteObjectField<Keyword, Long> areaKeyWordAc = createKeywordAC("areaKeyWordAC", KeywordTypeDao.TYPE.RESEARCH_AREA, keywords, feedBackPanel, keyWordsContainer);
final AutoCompleteObjectField<Keyword, Long> regKeyWordAc = createKeywordAC("regKeyWordAC", KeywordTypeDao.TYPE.REGULAR, keywords, feedBackPanel, keyWordsContainer);
final AutoCompleteObjectField<Keyword, Long> unitKeyWordAc = createKeywordAC("unitKeyWordAC", KeywordTypeDao.TYPE.UNIT, keywords, feedBackPanel, keyWordsContainer);
final AutoCompleteObjectField<Keyword, Long> areaKeyWordAc = createKeywordAC("areaKeyWordAC", KeywordTypeDao.TYPE.RESEARCH_AREA, keywords, feedBackPanel, keyWordsContainer);
regKeyWordAc.setOutputMarkupId(true);
unitKeyWordAc.setOutputMarkupId(true);
areaKeyWordAc.setOutputMarkupId(true);
@ -291,6 +310,22 @@ public class SupervisorUnmatchedThesisPanel extends Panel {
final FilterFormProjectClassPanel projectClassPanel = new FilterFormProjectClassPanel("projectClassPanel", new ArrayList<ProjectClass>());
projectClassPanel.setOutputMarkupId(true);
add(projectClassPanel);
final AjaxCheckBox includeDeletedChbx = new AjaxCheckBox("includeDeleted", new Model<Boolean>()) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
if (getModelObject()) {
deletedLabel.setDefaultModel(new Model(Boolean.TRUE.toString()));
} else {
deletedLabel.setDefaultModel(new Model(Boolean.FALSE.toString()));
}
target.addComponent(deletedLabel);
}
};
add(includeDeletedChbx);
add(deletedLabel);
AjaxButton filterButton = new AjaxButton("filterButton", new Model<String>("Filter")) {
private static final long serialVersionUID = 874722659774465502L;