1 16 package com.blandware.atleap.webapp.action.news; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.common.NewsModuleConstants; 20 import com.blandware.atleap.common.parsers.html.HTMLPlainTextExtractor; 21 import com.blandware.atleap.common.util.ConvertUtil; 22 import com.blandware.atleap.model.news.NewsItem; 23 import com.blandware.atleap.search.SearchManager; 24 import com.blandware.atleap.service.exception.BeanAlreadyExistsException; 25 import com.blandware.atleap.service.news.NewsManager; 26 import com.blandware.atleap.webapp.action.core.BaseAction; 27 import com.blandware.atleap.webapp.form.NewsItemForm; 28 import com.blandware.atleap.webapp.util.core.WebappUtil; 29 import com.blandware.atleap.webapp.util.core.WebappConstants; 30 import com.blandware.atleap.webapp.util.core.LocaleUtil; 31 import com.blandware.atleap.webapp.util.news.NewsModuleWebConstants; 32 import org.apache.commons.validator.GenericValidator; 33 import org.apache.struts.action.ActionForm; 34 import org.apache.struts.action.ActionForward; 35 import org.apache.struts.action.ActionMapping; 36 import org.apache.struts.action.ActionMessage; 37 import org.apache.struts.action.ActionMessages; 38 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 import java.io.ByteArrayInputStream ; 42 import java.io.InputStream ; 43 import java.util.*; 44 45 68 public final class CreateNewsItemAction extends BaseAction { 69 78 public ActionForward execute(ActionMapping mapping, ActionForm form, 79 HttpServletRequest request, HttpServletResponse response) throws Exception { 80 81 NewsItemForm newsItemForm = (NewsItemForm) form; 82 String localesMode = newsItemForm.getLocalesMode(); 83 84 if ( isBackPressed(request) ) { 85 if (request.getSession().getAttribute(WebappConstants.CONTENT_LOCALES_COLLECTION_KEY) == null) { 88 List contentLocales = LocaleUtil.getInstance(servlet.getServletContext()).getAvailableLocales(); 89 request.getSession().setAttribute(WebappConstants.CONTENT_LOCALES_COLLECTION_KEY, contentLocales); 90 } 91 92 newsItemForm.setAllCheckedFlagForBodyCheckboxes(request, localesMode); 94 95 return mapping.findForward("inputForward"); 96 } 97 98 if ( isCancelled(request) ) { 99 return mapping.findForward("listNewsItems"); 100 } 101 102 if ( request.getSession().getAttribute(NewsModuleWebConstants.NEWS_ITEM_SUBMITTED_ACTION_KEY) == null ) { 103 request.getSession().setAttribute(NewsModuleWebConstants.NEWS_ITEM_SUBMITTED_ACTION_KEY, "create"); 104 105 NewsItem newsItem = new NewsItem(); 106 WebappUtil.copyProperties(newsItem, newsItemForm, request); 107 108 Date publicationDate = newsItem.getPublicationDate(); 109 110 Date today = new Date(); 112 if ( publicationDate.compareTo(today) <= 0 ) { 113 newsItem.setActive(Boolean.TRUE); 114 } else { 115 newsItem.setActive(Boolean.FALSE); 116 } 117 118 Map annotationMap = newsItemForm.getAnnotationMap(); 119 Map bodyMap = newsItemForm.getBodyMap(); 120 Map annotationCheckedBoxes = newsItemForm.getAnnotationCheckedBoxes(); 121 Map bodyCheckedBoxes = newsItemForm.getBodyCheckedBoxes(); 122 for (Iterator i = annotationMap.entrySet().iterator(); i.hasNext();) { 123 Map.Entry entry = (Map.Entry) i.next(); 124 String localeIdentifier = (String ) entry.getKey(); 125 if (annotationCheckedBoxes.get(localeIdentifier) == null) { 126 annotationMap.put(localeIdentifier, ""); 128 } 129 } 130 for (Iterator i = bodyMap.entrySet().iterator(); i.hasNext();) { 131 Map.Entry entry = (Map.Entry) i.next(); 132 String localeIdentifier = (String ) entry.getKey(); 133 if (bodyCheckedBoxes.get(localeIdentifier) == null) { 134 bodyMap.put(localeIdentifier, ""); 136 } 137 } 138 139 newsItem.setTitle(newsItemForm.getTitleMap()); 140 newsItem.setAnnotation(annotationMap); 141 newsItem.setBody(bodyMap); 142 NewsManager newsManager = (NewsManager) getBean(NewsModuleConstants.NEWS_MANAGER_BEAN); 143 144 HTMLPlainTextExtractor extractor = new HTMLPlainTextExtractor(); 146 Set refs = new HashSet(); 147 for ( Iterator i = annotationMap.entrySet().iterator(); i.hasNext(); ) { 148 Map.Entry entry = (Map.Entry) i.next(); 149 String locale = (String ) entry.getKey(); 150 String annotation = (String ) entry.getValue(); 151 String body = (String ) bodyMap.get(locale); 152 InputStream annotationIS = new ByteArrayInputStream (ConvertUtil.convertToByteArray(annotation)); 153 refs.addAll(extractor.extractAllRefs(annotationIS, Constants.DEFAULT_ENCODING)); 154 if ( !GenericValidator.isBlankOrNull(body) ) { 155 InputStream bodyIS = new ByteArrayInputStream (ConvertUtil.convertToByteArray(body)); 156 refs.addAll(extractor.extractAllRefs(bodyIS, Constants.DEFAULT_ENCODING)); 157 } 158 } 159 160 Map linkedObjects = WebappUtil.mapObjectsToRefs(refs, request.getSession().getServletContext(), request.getContextPath()); 161 162 Long newsItemId = null; 163 String uri = null; 164 165 try { 166 newsItemId = newsManager.createNewsItem(newsItem, linkedObjects); 168 169 uri = NewsModuleWebConstants.NEWS_ITEM_URI_PREFIX + "/item" + newsItemId; 170 newsItem.setUri(uri); 171 newsManager.updateNewsItem(newsItem, linkedObjects); 172 173 if ( newsItem.getActive().booleanValue() ) { 174 SearchManager searchManager = SearchManager.getInstance(request.getSession().getServletContext()); 176 searchManager.reIndexPage(newsItem, request); 177 } 178 179 } catch ( BeanAlreadyExistsException e ) { 180 182 newsItemForm.setAllCheckedFlagForBodyCheckboxes(request, localesMode); 184 185 ActionMessages errors = new ActionMessages(); 186 errors.add("newsItemAlreadyExists", new ActionMessage("news.errors.alreadyExists", uri)); 187 saveErrors(request, errors); 188 saveToken(request); 189 return mapping.getInputForward(); 190 } 191 } 192 return mapping.findForward("listNewsItems"); 193 } 194 } | Popular Tags |