* Mir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * GNU General Public License for more details.f
*
* You should have received a copy of the GNU General Public License
* along with Mir; if not, write to the Free Software
package mircoders.servlet;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.Vector;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUtils;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.net.smtp.SMTPClient;
-import org.apache.commons.net.smtp.SMTPReply;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.Searcher;
-import org.apache.struts.util.MessageResources;
import gnu.regexp.RE;
import gnu.regexp.REMatch;
-
+import mir.bundle.Bundle;
import mir.entity.Entity;
import mir.generator.Generator;
import mir.log.LoggerWrapper;
import mir.servlet.ServletModuleExc;
import mir.servlet.ServletModuleFailure;
import mir.servlet.ServletModuleUserExc;
-import mir.session.HTTPAdapters;
-import mir.session.Request;
-import mir.session.Session;
-import mir.session.SessionHandler;
-import mir.session.SimpleResponse;
-import mir.session.UploadedFile;
-import mir.storage.StorageObjectFailure;
-import mir.util.ExceptionFunctions;
-import mir.util.HTTPParsedRequest;
-import mir.util.HTTPRequestParser;
-import mir.util.StringRoutines;
+import mir.session.*;
+import mir.storage.DatabaseFailure;
+import mir.util.*;
import mircoders.entity.EntityComment;
import mircoders.entity.EntityContent;
import mircoders.global.CacheKey;
import mircoders.global.MirGlobal;
import mircoders.media.MediaUploadProcessor;
+import mircoders.media.UnsupportedMediaTypeExc;
import mircoders.module.ModuleComment;
import mircoders.module.ModuleContent;
-import mircoders.module.ModuleImages;
-import mircoders.module.ModuleMediaType;
-import mircoders.module.ModuleTopics;
import mircoders.pdf.PDFGenerator;
-import mircoders.search.AudioSearchTerm;
-import mircoders.search.ContentSearchTerm;
-import mircoders.search.ImagesSearchTerm;
-import mircoders.search.KeywordSearchTerm;
-import mircoders.search.TextSearchTerm;
-import mircoders.search.TopicSearchTerm;
-import mircoders.search.TopicMatrixSearchTerm;
-import mircoders.search.UnIndexedSearchTerm;
-import mircoders.search.VideoSearchTerm;
-import mircoders.storage.DatabaseComment;
-import mircoders.storage.DatabaseContent;
-import mircoders.storage.DatabaseContentToMedia;
-import mircoders.storage.DatabaseContentToTopics;
-import mircoders.storage.DatabaseImages;
-import mircoders.storage.DatabaseLanguage;
-import mircoders.storage.DatabaseTopics;
+import mircoders.search.*;
+import mircoders.storage.*;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.net.smtp.SMTPClient;
+import org.apache.commons.net.smtp.SMTPReply;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Searcher;
+import org.apache.lucene.store.FSDirectory;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.*;
+import java.util.*;
/*
* ServletModuleOpenIndy -
* open-postings to the newswire
*
* @author mir-coders group
- * @version $Id: ServletModuleOpenIndy.java,v 1.89.2.4 2003/06/19 02:24:13 zapata Exp $
+ * @version $Id: ServletModuleOpenIndy.java,v 1.89.2.18 2005/08/21 17:09:24 zapata Exp $
*
*/
private String prepareMailTemplate,sentMailTemplate,emailAnArticleTemplate;
private ModuleContent contentModule;
private ModuleComment commentModule;
- private ModuleImages imageModule;
- private ModuleTopics topicsModule;
private String directOp ="yes";
- // Singelton / Kontruktor
private static ServletModuleOpenIndy instance = new ServletModuleOpenIndy();
- public static ServletModule getInstance() { return instance; }
+
+ public static ServletModule getInstance() {
+ return instance;
+ }
private ServletModuleOpenIndy() {
super();
emailAnArticleTemplate = configuration.getString("ServletModule.OpenIndy.MailableArticleTemplate");
sentMailTemplate = configuration.getString("ServletModule.OpenIndy.SentMailTemplate");
directOp = configuration.getString("DirectOpenposting").toLowerCase();
- commentModule = new ModuleComment(DatabaseComment.getInstance());
+ commentModule = new ModuleComment();
mainModule = commentModule;
- contentModule = new ModuleContent(DatabaseContent.getInstance());
- topicsModule = new ModuleTopics(DatabaseTopics.getInstance());
- imageModule = new ModuleImages(DatabaseImages.getInstance());
- defaultAction="addposting";
+ contentModule = new ModuleContent();
+ defaultAction = "defaultAction";
}
- catch (StorageObjectFailure e) {
+ catch (DatabaseFailure e) {
logger.error("servletmoduleopenindy could not be initialized: " + e.getMessage());
}
}
/**
- * Method to return an "apology" when open postings are disabled
+ * Perform the default open posting action
+ */
+ public void defaultAction(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
+ opensession(aRequest, aResponse);
+ }
+
+ /**
+ * Method to return an out of service notice when open postings are disabled
*
* @param aRequest
* @param aResponse
* @throws ServletModuleFailure
*/
public void openPostingDisabled(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
- deliver(aRequest, aResponse, (Map) null, null,
- configuration.getString("ServletModule.OpenIndy.PostingDisabledTemplate"));
+ deliver(aRequest, aResponse, null, null, configuration.getString("ServletModule.OpenIndy.PostingDisabledTemplate"));
}
/**
* Method for making a comment
*/
-
public void addcomment(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
if (MirGlobal.abuse().getOpenPostingDisabled()) {
openPostingDisabled(req, res);
// onetimepasswd
if (MirGlobal.abuse().getOpenPostingPassword()) {
- String passwd = this.createOneTimePasswd();
+ String passwd = generateOnetimePassword();
HttpSession session = req.getSession(false);
session.setAttribute("passwd", passwd);
mergeData.put("passwd", passwd);
}
else {
- mergeData.put("passwd", (String)null);
+ mergeData.put("passwd", null);
}
mergeData.put("aid", aid);
response.setResponseGenerator(commentFormDoneTemplate);
if (id == null) {
- deliver(req, res, (Map)null, null, commentFormDupeTemplate);
+ deliver(req, res, null, null, commentFormDupeTemplate);
}
else {
DatabaseContent.getInstance().setUnproduced("id=" + aid);
*/
public void addposting(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure
- {
+ throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
try {
if (MirGlobal.abuse().getOpenPostingDisabled()) {
openPostingDisabled(req, res);
mergeData.put("passwd", passwd);
}
else {
- mergeData.put("passwd", (String)null);
+ mergeData.put("passwd", null);
}
String maxMedia = configuration.getString("ServletModule.OpenIndy.MaxMediaUploadItems");
}
int mediaNum = Integer.parseInt(numOfMedia);
- List mediaFields = new Vector();
+ List mediaFields = new ArrayList();
for (int i = 0; i < mediaNum; i++) {
Integer mNum = new Integer(i + 1);
mediaFields.add(mNum.toString());
Map extraInfo = new HashMap();
extraInfo.put("languagePopUpData", DatabaseLanguage.getInstance().getPopupData());
- extraInfo.put("themenPopupData", topicsModule.getTopicsAsSimpleList());
+ extraInfo.put("themenPopupData", DatabaseTopics.getInstance().getPopupData());
- extraInfo.put("topics", topicsModule.getTopicsList());
deliver(req, res, mergeData, extraInfo, postingFormTemplate);
}
catch (Throwable t) {
HttpSession session = aRequest.getSession(false);
String sessionPasswd = (String) session.getAttribute("passwd");
if (sessionPasswd != null) {
- String passwd = (String) parsedRequest.getParameter("passwd");
+ String passwd = parsedRequest.getParameter("passwd");
if (passwd == null || passwd.length() == 0) {
throw new ServletModuleUserExc("posting.error.missingpassword", new String[] {});
session.invalidate();
}
- if ((((String) parsedRequest.getParameter("title")).length() == 0) ||
- (((String) parsedRequest.getParameter("description")).length() == 0) ||
- (((String) parsedRequest.getParameter("content_data")).length() == 0))
+ if (((parsedRequest.getParameter("title")).length() == 0) ||
+ ((parsedRequest.getParameter("description")).length() == 0) ||
+ ((parsedRequest.getParameter("content_data")).length() == 0))
throw new ServletModuleUserExc("posting.error.missingfield", new String[] {});
- List mediaList = new Vector();
+ List mediaList = new ArrayList();
Iterator i = parsedRequest.getFiles().iterator();
while (i.hasNext()) {
}
Map withValues = new HashMap();
- i = DatabaseContent.getInstance().getFields().iterator();
+ i = DatabaseContent.getInstance().getFieldNames().iterator();
while (i.hasNext()) {
String field = (String) i.next();
String value = parsedRequest.getParameter(field);
}
catch (Throwable e) {
e.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE));
- Throwable cause = ExceptionFunctions.traceCauseException(e);
+ Throwable cause = ExceptionRoutines.traceCauseException(e);
- if (cause instanceof ModuleMediaType.UnsupportedMimeTypeExc) {
+ if (cause instanceof UnsupportedMediaTypeExc) {
throw new ServletModuleUserExc("media.unsupportedformat", new String[] {});
}
throw new ServletModuleFailure(e);
private static final String SESSION_REQUEST_KEY="sessionid";
/**
- * Selects the language for the response.
- *
- * @param session
- * @param aRequest
+ * Determines the Locale to be used for the current session
*/
-
protected Locale getResponseLocale(HttpSession aSession, HttpServletRequest aRequest) {
String requestLanguage = aRequest.getParameter("language");
String sessionLanguage = (String) aSession.getAttribute("language");
* @throws ServletModuleUserExc
* @throws ServletModuleFailure
*/
-
public void opensession(HttpServletRequest aRequest, HttpServletResponse aResponse)
throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
SimpleResponse response = new SimpleResponse(
ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getResponseLocale(aRequest.getSession(), aRequest), getFallbackLocale(aRequest)},
- "bundles.open"));
+ "etc/bundles/open"));
- response.setResponseValue("actionURL", aResponse.encodeURL(HttpUtils.getRequestURL(aRequest).toString())+"?"+SESSION_REQUEST_KEY+"="+aRequest.getSession().getId());
+ response.setResponseValue("actionURL", aResponse.encodeURL(MirGlobal.config().getString("RootUri") + "/servlet/OpenMir")+"?"+SESSION_REQUEST_KEY+"="+aRequest.getSession().getId());
SessionHandler handler = MirGlobal.localizer().openPostings().getOpenSessionHandler(request, session);
/**
* Method for preparing and sending a content as an email message
*/
-
public void mail(HttpServletRequest req, HttpServletResponse res)
throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure
{
String theEmailText;
if (MirGlobal.mruCache().hasObject(theCacheKey)){
- logger.info("fetching email text for article "+aid+" from cache");
- theEmailText = (String) MirGlobal.mruCache().getObject(theCacheKey);
+ logger.info("fetching email text for article "+aid+" from cache");
+ theEmailText = (String) MirGlobal.mruCache().getObject(theCacheKey);
}
else {
EntityContent contentEnt;
}
try {
- mergeData.put("topics", topicsModule.getTopicsAsSimpleList());
+ mergeData.put("topics", DatabaseTopics.getInstance().getPopupData());
}
catch (Throwable e) {
logger.debug("Can't get topics: " + e.toString());
session.setAttribute("positionInResults", new Integer(newPosition));
}
else {
- String indexPath = configuration.getString("IndexPath");
+ File indexFile = FileRoutines.getAbsoluteOrRelativeFile(configuration.getHome(), configuration.getString("IndexPath"));
String creatorFragment = creatorTerm.makeTerm(req);
if (creatorFragment != null) {
queryString = queryString + " +" + videoFragment;
}
- if (queryString == null || queryString == "") {
+ if (queryString == null || queryString.length()==0) {
queryString = "";
}
else {
try {
Searcher searcher = null;
+
try {
- searcher = new IndexSearcher(indexPath);
+ searcher = new IndexSearcher(FSDirectory.getDirectory(indexFile,false));
}
catch (IOException e) {
- logger.debug("Can't open indexPath: " + indexPath);
+ logger.debug("Can't open indexPath: " + indexFile.getAbsolutePath());
throw new ServletModuleExc("Problem with Search Index! : " + e.toString());
}
throw new ServletModuleExc("Please let me sort by something!(missing search_sort)");
}
- // here is where the documents will go for storage across sessions
+ // here is where the documents will go for database across sessions
ArrayList theDocumentsSorted = new ArrayList();
if (sortBy.equals("score")) {
ArrayList theDocs = (ArrayList) session.getAttribute("theDocumentsSorted");
if (theDocs != null) {
- mergeData.put("numberOfHits", ( (Integer) session.getAttribute("numberOfHits")).toString());
- List theHits = new Vector();
+ mergeData.put("numberOfHits", (session.getAttribute("numberOfHits")).toString());
+ List theHits = new ArrayList();
int pIR = ( (Integer) session.getAttribute("positionInResults")).intValue();
int terminus;
int numHits = ( (Integer) session.getAttribute("numberOfHits")).intValue();
*/
public void getpdf(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
- long starttime=System.currentTimeMillis();
+ throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure {
+ long starttime = System.currentTimeMillis();
String ID_REQUEST_PARAM = "id";
int maxArticlesInNewsleter = 15; // it is nice not to be dos'ed
try {
String idParam = req.getParameter(ID_REQUEST_PARAM);
if (idParam != null) {
+ RE re = new RE("[0-9]+");
- RE re = new RE("[0-9]+");
-
+ REMatch[] idMatches = re.getAllMatches(idParam);
- REMatch[] idMatches=re.getAllMatches(idParam);
+ String cacheSelector = "";
- String cacheSelector="";
-
- for (int i = 0; i < idMatches.length; i++){
- cacheSelector= cacheSelector + "," + idMatches[i].toString();
- }
+ for (int i = 0; i < idMatches.length; i++) {
+ cacheSelector = cacheSelector + "," + idMatches[i].toString();
+ }
- String cacheType="pdf";
+ String cacheType = "pdf";
- CacheKey theCacheKey = new CacheKey(cacheType,cacheSelector);
+ CacheKey theCacheKey = new CacheKey(cacheType, cacheSelector);
- byte[] thePDF;
+ byte[] thePDF;
- if (MirGlobal.mruCache().hasObject(theCacheKey)){
- logger.info("fetching pdf from cache");
- thePDF = (byte[]) MirGlobal.mruCache().getObject(theCacheKey);
- }
- else {
- logger.info("generating pdf and caching it");
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- PDFGenerator pdfMaker = new PDFGenerator(out);
-
- if (idMatches.length > 1){
- pdfMaker.addLine();
- for (int i = 0; i < idMatches.length && i < maxArticlesInNewsleter; i++){
- REMatch aMatch = idMatches[i];
- String id=aMatch.toString();
- EntityContent contentEnt = (EntityContent)contentModule.getById(id);
- pdfMaker.addIndexItem(contentEnt);
- }
- }
+ if (MirGlobal.mruCache().hasObject(theCacheKey)) {
+ logger.info("fetching pdf from cache");
+ thePDF = (byte[]) MirGlobal.mruCache().getObject(theCacheKey);
+ }
+ else {
+ logger.info("generating pdf and caching it");
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ PDFGenerator pdfMaker = new PDFGenerator(out);
+
+ if (idMatches.length > 1) {
+ pdfMaker.addLine();
+ for (int i = 0; i < idMatches.length && i < maxArticlesInNewsleter; i++) {
+ REMatch aMatch = idMatches[i];
+ String id = aMatch.toString();
+ EntityContent contentEnt = (EntityContent) contentModule.getById(id);
+ pdfMaker.addIndexItem(contentEnt);
+ }
+ }
- for (int i = 0; i < idMatches.length; i++){
- REMatch aMatch = idMatches[i];
- String id=aMatch.toString();
- EntityContent contentEnt = (EntityContent)contentModule.getById(id);
+ for (int i = 0; i < idMatches.length; i++) {
+ REMatch aMatch = idMatches[i];
+ String id = aMatch.toString();
+ EntityContent contentEnt = (EntityContent) contentModule.getById(id);
- pdfMaker.add(contentEnt);
- }
+ pdfMaker.add(contentEnt);
+ }
- pdfMaker.stop();
- thePDF = out.toByteArray();
+ pdfMaker.stop();
+ thePDF = out.toByteArray();
- //and save all our hard work!
- MirGlobal.mruCache().storeObject(theCacheKey,thePDF);
- }
+ //and save all our hard work!
+ MirGlobal.mruCache().storeObject(theCacheKey, thePDF);
+ }
- res.setContentType("application/pdf");
- res.setContentLength(thePDF.length);
- res.getOutputStream().write(thePDF);
- res.getOutputStream().flush();
- String elapsedtime=(new Long(System.currentTimeMillis()-starttime)).toString();
- logger.info("pdf retireval took "+elapsedtime + " milliseconds" );
+ res.setContentType("application/pdf");
+ res.setContentLength(thePDF.length);
+ res.getOutputStream().write(thePDF);
+ res.getOutputStream().flush();
+ String elapsedtime = (new Long(System.currentTimeMillis() - starttime)).toString();
+ logger.info("pdf retireval took " + elapsedtime + " milliseconds");
}
else {
- throw new ServletModuleExc("Missing id.");
+ throw new ServletModuleExc("Missing id.");
}
}
catch (Throwable t) {
logger.error(t.toString());
throw new ServletModuleFailure(t);
}
-
}
public void deliver(PrintWriter anOutputWriter, HttpServletRequest aRequest, HttpServletResponse aResponse, Map aData, Map anExtra, String aGenerator)
throws ServletModuleFailure {
try {
- Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)}, "bundles.open");
+ Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)}, "etc/bundles/open");
responseData.put("data", aData);
responseData.put("extra", anExtra);
public void deliver(PrintWriter anOutputWriter, HttpServletRequest aRequest, HttpServletResponse aResponse, Map aData, Map anExtra, String aGenerator,String aLocaleString)
throws ServletModuleFailure {
try {
- Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { new Locale(aLocaleString,""), getFallbackLocale(aRequest)}, "bundles.open");
+ Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { new Locale(aLocaleString,""), getFallbackLocale(aRequest)}, "etc/bundles/open");
responseData.put("data", aData);
responseData.put("extra", anExtra);
public void handleError(HttpServletRequest aRequest, HttpServletResponse aResponse,PrintWriter out, Throwable anException) {
try {
- logger.error("error: " + anException);
+ logger.error("Error during open action", anException);
Map data = new HashMap();
data.put("errorstring", anException.getMessage());
logger.warn("user error: " + anException.getMessage());
Map data = new HashMap();
- MessageResources messages = MessageResources.getMessageResources("bundles.open");
- data.put("errorstring", messages.getMessage(getLocale(aRequest), anException.getMessage(), anException.getParameters()));
+ Bundle bundle =
+ MirGlobal.getBundleFactory().getBundle("etc/bundles/open", new
+ String[] { getLocale(aRequest).getLanguage() });
+ data.put("errorstring", bundle.getValue(anException.getMessage(), Arrays.asList(anException.getParameters())));
data.put("date", StringUtil.date2readableDateTime(new GregorianCalendar()));
deliver(out, aRequest, aResponse, data, null, configuration.getString("ServletModule.OpenIndy.UserErrorTemplate"));
throw new ServletModuleFailure(e);
}
}
-
- private String createOneTimePasswd() {
- return "";
- }
}