diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/match/AdminKeywordPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/match/AdminKeywordPage.java index d860050954..a1da81c43e 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/match/AdminKeywordPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/match/AdminKeywordPage.java @@ -14,9 +14,9 @@ public class AdminKeywordPage extends AbstractAdminMatchPage { public AdminKeywordPage(PageParameters pp) { super(pp); - add(new ManageKeywordPanel("manageWordKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR), true)); - add(new ManageKeywordPanel("manageUnitKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.UNIT), false)); - add(new ManageKeywordPanel("manageAreaKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA), false)); + add(new ManageKeywordPanel("manageWordKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.REGULAR), true, false)); + add(new ManageKeywordPanel("manageUnitKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.UNIT), false, false)); + add(new ManageKeywordPanel("manageAreaKeyword", keywordTypeDao.findByType(KeywordTypeDao.TYPE.RESEARCH_AREA), false, true)); } } diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html index 6f4bc34cf8..b9ff620343 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html @@ -6,18 +6,22 @@ <div wicket:id="editDialog"> <div wicket:id="dialogContent"></div> </div> + <div wicket:id="manageDialog"> + <div wicket:id="dialogContent"></div> + </div> <a href=# wicket:id="createLink"><img wicket:id="addIcon" alt="" />Create new keyword</a> <form> <table wicket:id="table" class="rounded-corner"> <thead> <tr> - <th class="rounded-left-top">Name</th><th>Type</th><th>Active</th><th class="rounded-right-top">Edit</th> + <th class="rounded-left-top">Name</th><th>Manage associations</th><th>Type</th><th>Active</th><th class="rounded-right-top">Edit</th> </tr> </thead> <tbody> <tr wicket:id="keywordsDataView"> <td><a href="#" wicket:id="detailsLink"><span wicket:id="name"></span></a></td> + <td><a wicket:id="manageAssociationsLink">Manage</a></td> <td wicket:id="type"></td> <td><a href="#" wicket:id="activeLink"> <img wicket:id="activeIcon" /></a></td> diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java index 09ffe7b27c..dedffb58ae 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java @@ -16,33 +16,37 @@ import org.odlabs.wiquery.ui.dialog.Dialog; import se.su.dsv.scipro.components.LazyDeleteAjaxLink; import se.su.dsv.scipro.icons.ImageObject; +import se.su.dsv.scipro.keywords.KeywordContainer; +import se.su.dsv.scipro.keywords.SelectKeywordsPanel; 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.match.dataprovider.KeywordsDataProvider; public class ManageKeywordPanel extends Panel { - private static final long serialVersionUID = 1L; - - @SpringBean - private KeywordDao keywordDao; - - private KeywordsDataProvider keywordsDataProvider; - - private Dialog dialog; - private final WebMarkupContainer tableContainer; - private final DataView<Keyword> keywordsDataView; + private static final long serialVersionUID = 1L; - public ManageKeywordPanel(String str, final KeywordType keywordType, final boolean isEditable) { - super(str); - - AjaxLink<Void> createLink = new AjaxLink<Void>("createLink"){ + @SpringBean + private KeywordDao keywordDao; + + private KeywordsDataProvider keywordsDataProvider; + + private Dialog dialog; + private Dialog dialog2; + private final WebMarkupContainer tableContainer; + private final DataView<Keyword> keywordsDataView; + + public ManageKeywordPanel(String str, final KeywordType keywordType, final boolean isEditable, final boolean hasManageAssociations) { + super(str); + + AjaxLink<Void> createLink = new AjaxLink<Void>("createLink") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { - dialog.replace(new EditKeywordPanel("dialogContent", new Model<Keyword>(new Keyword()),keywordType)); + dialog.replace(new EditKeywordPanel("dialogContent", new Model<Keyword>(new Keyword()), keywordType)); target.addComponent(dialog); dialog.setTitle("Add new keyword"); dialog.open(target); @@ -50,104 +54,139 @@ public class ManageKeywordPanel extends Panel { }; createLink.add(new ImageObject("addIcon", ImageObject.SIXTEEN + ImageObject.ADD)); createLink.setVisible(isEditable); - - dialog = new Dialog("editDialog"); - dialog.setModal(true); - dialog.setAutoOpen(false); - dialog.setWidth(400); - dialog.setHeight(225); - dialog.add(new EmptyPanel("dialogContent")); - dialog.setOutputMarkupId(true); - - keywordsDataProvider = new KeywordsDataProvider(keywordType, true); - - tableContainer = new WebMarkupContainer("table"); - tableContainer.setOutputMarkupId(true); - - keywordsDataView = new DataView<Keyword>("keywordsDataView", keywordsDataProvider) { - - private static final long serialVersionUID = 1L; - @Override - protected void populateItem(final Item<Keyword> item) { - item.setOutputMarkupId(true); - final Keyword keyword = item.getModelObject(); - - final ImageObject editIcon = new ImageObject("editIcon", ImageObject.SIXTEEN + ImageObject.EDIT); - - final AjaxLink<Void> editLink = new AjaxLink<Void>("editLink") { - private static final long serialVersionUID = 1L; - - @Override - protected void onInitialize() { - super.onInitialize(); - } + dialog = new Dialog("editDialog"); + dialog.setModal(true); + dialog.setAutoOpen(false); + dialog.setWidth(400); + dialog.setHeight(225); + dialog.add(new EmptyPanel("dialogContent")); + dialog.setOutputMarkupId(true); - @Override - public void onClick(AjaxRequestTarget target) { - target.addComponent(dialog); - dialog.setWidth(400); - dialog.setHeight(225); - dialog.setTitle("Edit keyword: " + item.getModelObject().getKeyword()); - dialog.replace(new EditKeywordPanel("dialogContent", new Model<Keyword>(item.getModelObject()),null)); - dialog.open(target); - } - }; - editLink.add(editIcon); - editLink.setVisible(isEditable); - LazyDeleteAjaxLink activeLink = new LazyDeleteAjaxLink("activeLink", - new PropertyModel<Boolean>(item.getModel(), "deleted")) { - private static final long serialVersionUID = 1L; - @Override - public void onClick(AjaxRequestTarget target) { - super.onClick(target); - IModel<Keyword> model = item.getModel(); - model.setObject(keywordDao.save(model.getObject())); - target.addComponent(tableContainer); - } + dialog2 = new Dialog("manageDialog"); + dialog2.setModal(true); + dialog2.setAutoOpen(false); + dialog2.setWidth(800); + dialog2.setHeight(600); +// dialog2.add(new EmptyPanel("dialogContent")); + dialog2.add(new Label("dialogContent", "bla bla")); + dialog2.setOutputMarkupId(true); - @Override - public String getIconId() { - return "activeIcon"; - } - }; - - final AjaxLink<Void> keywordDetailsLink = new AjaxLink<Void>("detailsLink") { - private static final long serialVersionUID = 1340379052190115333L; + keywordsDataProvider = new KeywordsDataProvider(keywordType, true); - @Override - public void onClick(AjaxRequestTarget target) { - target.addComponent(dialog); - dialog.setWidth(500); - dialog.setHeight(580); - dialog.setTitle(keyword.getKeyword()); - dialog.replace(new KeywordDetailsPanel("dialogContent", keyword) { + tableContainer = new WebMarkupContainer("table"); + tableContainer.setOutputMarkupId(true); - private static final long serialVersionUID = 8439790560385286282L; + keywordsDataView = new DataView<Keyword>("keywordsDataView", keywordsDataProvider) { - @Override - public void onCloseButton(AjaxRequestTarget target) { - dialog.close(target); - } - }); - dialog.open(target); - } - - }; - keywordDetailsLink.add(new Label("name", new Model<String>(keyword.getKeyword()))); - item.add(keywordDetailsLink); - item.add(new Label("type", new Model<String>(keyword.getType().getName()))); - item.add(editLink); - item.add(activeLink); - } + private static final long serialVersionUID = 1L; - }; - tableContainer.add(keywordsDataView); - add(createLink); - add(dialog); - add(tableContainer); - } + @Override + protected void populateItem(final Item<Keyword> item) { + item.setOutputMarkupId(true); + final Keyword keyword = item.getModelObject(); + + final ImageObject editIcon = new ImageObject("editIcon", ImageObject.SIXTEEN + ImageObject.EDIT); + + final AjaxLink<Void> editLink = new AjaxLink<Void>("editLink") { + private static final long serialVersionUID = 1L; + + @Override + protected void onInitialize() { + super.onInitialize(); + } + + @Override + public void onClick(AjaxRequestTarget target) { + target.addComponent(dialog); + dialog.setWidth(400); + dialog.setHeight(225); + dialog.setTitle("Edit keyword: " + item.getModelObject().getKeyword()); + dialog.replace(new EditKeywordPanel("dialogContent", new Model<Keyword>(item.getModelObject()), null)); + dialog.open(target); + } + }; + editLink.add(editIcon); + editLink.setVisible(isEditable); + LazyDeleteAjaxLink activeLink = new LazyDeleteAjaxLink("activeLink", + new PropertyModel<Boolean>(item.getModel(), "deleted")) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + super.onClick(target); + IModel<Keyword> model = item.getModel(); + model.setObject(keywordDao.save(model.getObject())); + target.addComponent(tableContainer); + } + + @Override + public String getIconId() { + return "activeIcon"; + } + }; + + final AjaxLink<Void> keywordDetailsLink = new AjaxLink<Void>("detailsLink") { + + private static final long serialVersionUID = 1340379052190115333L; + + @Override + public void onClick(AjaxRequestTarget target) { + target.addComponent(dialog); + dialog.setWidth(500); + dialog.setHeight(580); + dialog.setTitle(keyword.getKeyword()); + dialog.replace(new KeywordDetailsPanel("dialogContent", keyword) { + + private static final long serialVersionUID = 8439790560385286282L; + + @Override + public void onCloseButton(AjaxRequestTarget target) { + dialog.close(target); + } + }); + dialog.open(target); + } + + }; + keywordDetailsLink.add(new Label("name", new Model<String>(keyword.getKeyword()))); + item.add(keywordDetailsLink); + item.add(new Label("type", new Model<String>(keyword.getType().getName()))); + item.add(editLink); + item.add(activeLink); + + + item.add(new AjaxLink<Void>("manageAssociationsLink") { + + @Override + public void onClick(AjaxRequestTarget target) { + + dialog2.replace(new SelectKeywordsPanel("dialogContent", new Model<KeywordContainer>(new KeywordContainer(item.getModelObject().getAssociatedKeywords())), KeywordTypeDao.TYPE.REGULAR, new String("blabla")) { + @Override + public void onUpdateAdd(AjaxRequestTarget target, Keyword addedKeyword) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void onUpdateRemove(AjaxRequestTarget target, Keyword removedKeyword) { + //To change body of implemented methods use File | Settings | File Templates. + } + }); + + dialog2.open(target); + } + }.setVisible(hasManageAssociations)); + + } + + }; + tableContainer.add(keywordsDataView); + add(createLink); + add(dialog); + add(dialog2); + add(tableContainer); + } } \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/match/dataobject/Keyword.java b/src/main/java/se/su/dsv/scipro/match/dataobject/Keyword.java index 1f74ea8472..c7efc4f928 100644 --- a/src/main/java/se/su/dsv/scipro/match/dataobject/Keyword.java +++ b/src/main/java/se/su/dsv/scipro/match/dataobject/Keyword.java @@ -7,6 +7,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import se.su.dsv.scipro.data.dataobjects.LazyDeletableDomainObject; +import java.util.HashSet; import java.util.Set; @Entity @@ -28,7 +29,15 @@ public class Keyword extends LazyDeletableDomainObject { private KeywordType type; @ManyToMany - private Set<Keyword> associatedKeywords; + private Set<Keyword> associatedKeywords = new HashSet<Keyword>(); + + public Set<Keyword> getAssociatedKeywords() { + return associatedKeywords; + } + + public void setAssociatedKeywords(Set<Keyword> associatedKeywords) { + this.associatedKeywords = associatedKeywords; + } public Keyword() { }