1 166 package com.ivata.groupware.business.library.struts; 167 168 import java.util.HashMap ; 169 import java.util.Iterator ; 170 import java.util.List ; 171 import java.util.Map ; 172 import java.util.Set ; 173 import java.util.Vector ; 174 175 import javax.servlet.http.HttpServletRequest ; 176 import javax.servlet.http.HttpServletResponse ; 177 import javax.servlet.http.HttpSession ; 178 179 import org.apache.struts.Globals; 180 import org.apache.struts.action.ActionErrors; 181 import org.apache.struts.action.ActionForm; 182 import org.apache.struts.action.ActionMapping; 183 import org.apache.struts.action.ActionMessage; 184 import org.apache.struts.util.MessageResources; 185 186 import com.ivata.groupware.admin.security.server.SecuritySession; 187 import com.ivata.groupware.admin.security.user.UserDO; 188 import com.ivata.groupware.admin.setting.Settings; 189 import com.ivata.groupware.business.library.Library; 190 import com.ivata.groupware.business.library.NotificationException; 191 import com.ivata.groupware.business.library.faq.FAQDO; 192 import com.ivata.groupware.business.library.faq.category.FAQCategoryDO; 193 import com.ivata.groupware.business.library.item.LibraryItemConstants; 194 import com.ivata.groupware.business.library.item.LibraryItemDO; 195 import com.ivata.groupware.business.library.page.PageDO; 196 import com.ivata.groupware.business.library.right.LibraryRights; 197 import com.ivata.groupware.business.library.topic.TopicDO; 198 import com.ivata.mask.MaskFactory; 199 import com.ivata.mask.util.StringHandling; 200 import com.ivata.mask.util.SystemException; 201 import com.ivata.mask.util.ThrowableHandling; 202 import com.ivata.mask.web.struts.MaskAuthenticator; 203 204 205 214 public class SubmitAction extends DisplayAction { 215 private Library library; 216 private LibraryRights libraryRights; 217 218 228 public SubmitAction(Library library, LibraryRights libraryRights, 229 Settings settings, MaskFactory maskFactory, 230 MaskAuthenticator authenticator) { 231 super(library, settings, maskFactory, authenticator); 232 this.library = library; 233 this.libraryRights = libraryRights; 234 } 235 236 256 public void clear(final ActionMapping mapping, 257 final ActionErrors errors, 258 final ActionForm form, 259 final HttpServletRequest request, 260 final HttpServletResponse response, 261 final HttpSession session) throws SystemException { 262 request.setAttribute("type", ((ItemForm) form).getItem().getType()); 264 ItemForm itemForm = (ItemForm) form; 265 itemForm.clear(); 266 } 267 290 public String execute(final ActionMapping mapping, 291 final ActionErrors errors, 292 final ActionForm form, 293 final HttpServletRequest request, 294 final HttpServletResponse response, 295 final HttpSession session) throws SystemException { 296 ItemForm itemForm = (ItemForm) form; 297 LibraryItemDO item = itemForm.getItem(); 298 299 Integer requestType = StringHandling.integerValue(request.getParameter( 302 "type")); 303 304 if (requestType == null) { 305 requestType = (Integer ) request.getAttribute("type"); 306 } 307 308 if ((requestType != null) || (item == null)) { 309 itemForm.reset(mapping, request); 310 itemForm.setPreview(null); 311 itemForm.setSubmitIncludePage(null); 312 itemForm.setItem(item = new LibraryItemDO()); 313 } 314 315 SecuritySession securitySession = (SecuritySession) session.getAttribute("securitySession"); 316 UserDO user = securitySession.getUser(); 317 if ((item.getId() != null) && 320 !(libraryRights.canAmendInTopic(securitySession, item.getTopic().getId()) || 321 user.equals(item.getCreatedBy()))) { 322 errors.add(Globals.ERROR_KEY, 323 new ActionMessage("errors.library.item.amend.rights")); 324 325 return "libraryIndex"; 326 } 327 328 if (item.getType() == null) { 330 if (requestType != null) { 331 item.setType(requestType); 332 } else { 333 item.setType(LibraryItemConstants.ITEM_DOCUMENT); 334 } 335 } 336 337 Integer meetingId = StringHandling.integerValue(request.getParameter( 340 "meetingId")); 341 342 itemForm.setSummaryPromptKey(""); 344 345 if ((meetingId != null) || 346 item.getType().equals(LibraryItemConstants.ITEM_MEETING)) { 347 348 409 410 String newHeading = itemForm.getNewPoint(0); 413 int index = 0; 414 415 438 itemForm.setSubmitIncludePage("/library/submitMeeting.jsp"); 440 itemForm.setSummaryTitleKey("submit.title.itemDetails.meeting"); 441 itemForm.setHelpKey("library.submit.meeting"); 442 443 444 throw new RuntimeException ("ERROR: illegal dependency on calendar from library"); 446 447 448 } else if (item.getType().equals(LibraryItemConstants.ITEM_FAQ)) { 450 stripEmptyFaqCategories(item, request); 452 453 if ((item.getFAQCategories().size() == 0) || 456 !StringHandling.isNullOrEmpty(itemForm.getNewPage())) { 457 FAQCategoryDO faqCategory = new FAQCategoryDO(); 458 faqCategory.setFAQs(new Vector ()); 459 item.getFAQCategories().add(faqCategory); 460 } 461 462 String newHeading = itemForm.getNewPoint(0); 465 int index = 0; 466 467 for (Iterator i = item.getFAQCategories().iterator(); i.hasNext(); 468 ++index) { 469 FAQCategoryDO faqCategory = (FAQCategoryDO) i.next(); 470 471 if (((newHeading != null) && 473 (index == (Integer.valueOf(newHeading)).intValue())) || 474 (faqCategory.getFAQs().size() == 0)) { 475 faqCategory.getFAQs().add(new FAQDO()); 476 } 477 } 478 479 itemForm.setSubmitIncludePage("/library/submitFAQ.jsp"); 481 itemForm.setSummaryTitleKey("submit.title.itemDetails.faq"); 482 itemForm.setHelpKey("library.submit.faq"); 483 484 } else { 486 stripEmptyPages(item, request); 488 489 if (item.getType().equals(LibraryItemConstants.ITEM_NOTE)) { 491 itemForm.setSummaryTitleKey("submit.title.itemDetails.note"); 492 itemForm.setSummaryPromptKey("note"); 493 itemForm.setHelpKey("library.submit.note"); 494 } else { 495 itemForm.setSubmitIncludePage("/library/submitDocument.jsp"); 496 itemForm.setSummaryTitleKey("submit.title.itemDetails.document"); 497 itemForm.setHelpKey("library.submit.document"); 498 499 if ((item.getPages().size() == 0) || 501 !StringHandling.isNullOrEmpty(itemForm.getNewPage())) { 502 item.getPages().add(new PageDO()); 503 } 504 } 505 } 506 507 chooseItemType(itemForm); 509 510 setPageNumber("/library/submit.action", request, response, itemForm); 512 513 603 List topics = library.findTopics(securitySession); 605 Iterator topicIterator = topics.iterator(); 606 Map topicCaptions = new HashMap (); 607 Map topicImages = new HashMap (); 608 while (topicIterator.hasNext()) { 609 TopicDO topic = (TopicDO) topicIterator.next(); 610 Integer id = topic.getId(); 611 topicCaptions.put(id, topic.getCaption()); 612 topicImages.put(id, topic.getImage()); 613 } 614 615 itemForm.setTopicCaptions(topicCaptions); 616 Set topicIds = topicCaptions.keySet(); 617 itemForm.setTopicIds(topicIds); 618 itemForm.setTopicImages(topicImages); 619 620 if (topicIds.size() == 0) { 622 errors.add(Globals.ERROR_KEY, 623 new ActionMessage("errors.library.item.submit.noTopicRights")); 624 625 return "libraryIndex"; 626 } 627 628 return null; 629 } 630 631 656 public String onConfirm(final ActionMapping mapping, 657 final ActionErrors errors, 658 final ActionForm form, 659 final HttpServletRequest request, 660 final HttpServletResponse response, 661 final HttpSession session, 662 final String defaultForward) throws SystemException { 663 ItemForm itemForm = (ItemForm) form; 664 LibraryItemDO item = itemForm.getItem(); 665 SecuritySession securitySession = (SecuritySession) session.getAttribute("securitySession"); 666 667 if (item.getType().equals(LibraryItemConstants.ITEM_MEETING)) { 668 stripEmptyMeetingCategories(item, request); 669 } else if (item.getType().equals(LibraryItemConstants.ITEM_FAQ)) { 670 stripEmptyFaqCategories(item, request); 671 } else { 672 stripEmptyPages(item, request); 673 } 674 675 try { 677 if (item.getId() == null) { 678 item = library.addItem(securitySession, item, 679 itemForm.getComment()); 680 681 } else { 683 library.amendItem(securitySession, item, 684 itemForm.getComment()); 685 } 686 } catch(NotificationException e) { 687 Throwable cause = ThrowableHandling.getCause(e); 689 session.setAttribute("libraryNotificationException", e); 691 } 692 724 return defaultForward; 725 } 726 727 733 private void stripEmptyFaqCategories(final LibraryItemDO item, 734 final HttpServletRequest request) { 735 List newFaqCategories = new Vector (); 736 737 if (item.getFAQCategories() != null) { 738 for (Iterator i = item.getFAQCategories().iterator(); i.hasNext();) { 739 FAQCategoryDO faqCategory = (FAQCategoryDO) i.next(); 740 List newFaqs = new Vector (); 741 Iterator faqIterator = faqCategory.getFAQs().iterator(); 742 743 while (faqIterator.hasNext()) { 744 FAQDO faq = (FAQDO) faqIterator.next(); 745 String question = (String ) faq.getQuestion(); 746 String answer = (String ) faq.getAnswer(); 747 748 if (!StringHandling.isNullOrEmpty(question) || 749 !StringHandling.isNullOrEmpty(answer)) { 750 newFaqs.add(faq); 751 } 752 } 753 754 if ((newFaqs.size() != 0) || 755 !StringHandling.isNullOrEmpty(faqCategory.getName())) { 756 faqCategory.setFAQs(newFaqs); 757 newFaqCategories.add(faqCategory); 758 } 759 } 760 } 761 762 item.setFAQCategories(newFaqCategories); 763 } 764 765 771 private void stripEmptyMeetingCategories(final LibraryItemDO item, 772 final HttpServletRequest request) { 773 Vector newCategories = new Vector (); 774 Vector newAgendaPoints = new Vector (); 775 Vector newMinuteTexts = new Vector (); 776 MessageResources calendarMessages = this.getResources(request, 777 "calendar"); 778 int count = 0; 779 780 844 } 845 846 852 private void stripEmptyPages(final LibraryItemDO item, 853 final HttpServletRequest request) { 854 List newPages = new Vector (); 855 856 if (item.getPages() != null) { 857 for (Iterator i = item.getPages().iterator(); i.hasNext();) { 858 PageDO page = (PageDO) i.next(); 859 String pageText = page.getText(); 860 861 if (pageText.trim().length() > 0) { 862 newPages.add(page); 863 } 864 } 865 } 866 item.setPages(newPages); 867 868 } 869 } 870 | Popular Tags |