Index: lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/dao/hibernate/WikiDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/dao/hibernate/WikiDAO.java,v diff -u -r1.1 -r1.1.6.1 --- lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/dao/hibernate/WikiDAO.java 8 Oct 2008 05:33:00 -0000 1.1 +++ lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/dao/hibernate/WikiDAO.java 17 Jun 2009 06:20:22 -0000 1.1.6.1 @@ -24,13 +24,17 @@ package org.lamsfoundation.lams.tool.wiki.dao.hibernate; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Set; import org.hibernate.FlushMode; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.tool.wiki.dao.IWikiDAO; import org.lamsfoundation.lams.tool.wiki.model.Wiki; import org.lamsfoundation.lams.tool.wiki.model.WikiAttachment; +import org.lamsfoundation.lams.tool.wiki.model.WikiPage; import org.springframework.orm.hibernate3.HibernateTemplate; /** @@ -45,15 +49,21 @@ public Wiki getByContentId(Long toolContentId) { List list = getHibernateTemplate().find(FIND_FORUM_BY_CONTENTID, toolContentId); - if (list != null && list.size() > 0) - return (Wiki) list.get(0); - else + if (list != null && list.size() > 0) { + Wiki wiki = (Wiki) list.get(0); + removeDuplicatePages(wiki); + return wiki; + } else { return null; + } + } public void saveOrUpdate(Wiki wiki) { + // Removing duplicate pages + removeDuplicatePages(wiki); this.getHibernateTemplate().saveOrUpdate(wiki); - this.getHibernateTemplate().flush(); + //this.getHibernateTemplate().flush(); } public void deleteInstructionFile(Long toolContentId, Long uuid, Long versionId, String type) { @@ -70,4 +80,35 @@ } } + + /** + * Although we are dealing with a set, still somehow duplicates are coming + * through. This method removes them. + * + * @param wiki + */ + public void removeDuplicatePages(Wiki wiki) { + Set wikiPages = wiki.getWikiPages(); + if (wikiPages != null) { + Set wikiPagesCopy = new HashSet(wikiPages); + Iterator it = wikiPages.iterator(); + while (it.hasNext()) { + WikiPage page = (WikiPage) it.next(); + if (containsDuplicate(page, wikiPagesCopy)) { + it.remove(); + wikiPagesCopy = new HashSet(wikiPages); + } + } + } + } + + private boolean containsDuplicate(WikiPage compPage, Set wikiPages) { + int count = 0; + for (WikiPage page : wikiPages) { + if (page.getTitle().equals(compPage.getTitle())) { + count++; + } + } + return count > 1; + } } Index: lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java,v diff -u -r1.10.4.1 -r1.10.4.2 --- lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java 17 Apr 2009 05:31:15 -0000 1.10.4.1 +++ lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java 17 Jun 2009 06:20:22 -0000 1.10.4.2 @@ -582,6 +582,8 @@ * @return */ private Wiki insertUnsavedWikiContent(Wiki wiki) { + + wikiDAO.saveOrUpdate(wiki); // Go through the wiki object and save all the pages and content for (WikiPage wikiPage : wiki.getWikiPages()) { WikiPageContent currentContent = wikiPage.getCurrentWikiContent(); @@ -598,7 +600,7 @@ wiki.getWikiPages().add(wikiPage); } - wikiDAO.saveOrUpdate(wiki); + // Update the wiki pages to reference their parent for (WikiPage wikiPage : wiki.getWikiPages()) {