+ String[] to_topicsArr = mp.getParameterValues("to_topic");
+
+ if (to_topicsArr != null && to_topicsArr.length > 0) {
+ try{
+ DatabaseContentToTopics.getInstance().setTopics(cid,to_topicsArr);
+ setTopic = true;
+ theLog.printError("setting content_x_topic success");
+ } catch (Exception e) {
+ theLog.printError("setting content_x_topic failed");
+ contentModule.deleteById(cid);
+ throw new ServletModuleException("smod - openindy :: insposting: setting content_x_topic failed: "+e.toString());
+ } //end try
+ } //end if
+
+ // if op contains uploaddata
+ String mediaId=null;
+ int i=1;
+ for(Iterator it = mp.requestList.iterator(); it.hasNext();){
+ MpRequest mpReq = (MpRequest)it.next();
+ String fileName = mpReq.getFilename();
+
+ //get the content-type from what the client browser
+ //sends us. (the "Oreilly method")
+ String contentType = mpReq.getContentType();
+
+ theLog.printError("FROM BROWSER: "+contentType);
+
+ //if the client browser sent us unknown (text/plain is default)
+ //or if we got application/octet-stream, it's possible that
+ //the browser is in error, better check against the file extension
+ if (contentType.equals("text/plain") ||
+ contentType.equals("application/octet-stream")) {
+ /**
+ * This is just a temporary way to get the content-type via
+ * the .extension , we could maybe use a magic method, by looking
+ * at the header (first few bytes) of the file. (like the file(1)
+ * command).
+ * The Oreilly method relies on the content-type that the client
+ * browser sends and that sometimes is application-octet stream with
+ * broken/mis-configured browsers.
+ *
+ * The map file should be Mir/content-types.properties, it's the
+ * default Sun Java file with some additional entries that it did
+ * not have. So if you support a new media type you have to make
+ * sure that it is in this file -mh
+ */
+ contentType = FileUtil.guessContentTypeFromName(fileName);
+ theLog.printError("tYPE: "+contentType);
+ if (contentType==null)
+ contentType = "text/plain"; // rfc1867 says this is the default
+ }
+ HashMap mediaValues = new HashMap();
+
+ theLog.printError("CONTENT TYPE IS: "+contentType);
+
+ if (contentType.equals("text/plain") ||
+ contentType.equals("application/octet-stream")) {
+ throw new ServletModuleUserException("One or more files of unrecognized types");
+ }
+
+ String mediaTitle=(String)withValues.get("media_title"+i);
+ i++;
+
+ if (mediaTitle==null)
+ mediaTitle = (String)withValues.get("title");
+
+ mediaValues.put("title", mediaTitle);
+ mediaValues.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
+ mediaValues.put("to_publisher", "1"); // op user
+ mediaValues.put("to_media_folder", "7"); // op media_folder
+ mediaValues.put("is_produced", "0");
+ mediaValues.put("is_published","0");
+
+ //the where clause to find the media_type entry
+ //from the content-type.
+ //we use the media type entry to lookup the
+ //media Handler/Storage classes
+ String wc = " mime_type='"+contentType+"'";
+
+ EntityList mediaTypesList = DatabaseMediaType.getInstance().selectByWhereClause(wc);
+
+ String mediaTypeId = null;
+ String mediaStorageName = null;
+ String mediaHandlerName = null;
+
+ //if we found an entry matching the
+ //content-type int the table.
+ if (mediaTypesList.size() > 0) {
+ //get the class names from the media_type table.
+ mediaTypeId = mediaTypesList.elementAt(0).getId();
+ mediaStorageName = mediaTypesList.elementAt(0).getValue("tablename");
+ mediaHandlerName = mediaTypesList.elementAt(0).getValue("classname");
+ mediaValues.put("to_media_type",mediaTypeId);
+
+ //load the classes via reflection
+ String MediaId;
+ Entity mediaEnt = null;
+ try {
+ Class mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
+ Method m = mediaStorageClass.getMethod("getInstance", null);
+ Database mediaStorage = (Database)m.invoke(null, null);
+ mediaEnt = (Entity)mediaStorage.getEntityClass().newInstance();
+ mediaEnt.setStorage(mediaStorage);
+ mediaEnt.setValues(mediaValues);
+ mediaId = mediaEnt.insert();
+
+ Class mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
+ MirMedia mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
+ //save and store the media data/metadata
+ mediaHandler.set(mpReq.getMedia(), mediaEnt,mediaTypesList.elementAt(0));
+
+ //were done with mpReq at this point, dereference it.
+ //as it contains mucho mem. -mh 01.10.2001
+ mpReq=null;
+
+ //we got this far, associate the media to the article
+ theLog.printError("ID"+mediaId);
+ mediaEnt.setValueForProperty("is_published","1");
+ mediaEnt.update();
+ new ProducerMedia().handle(null,null,false,false,mediaId);
+ DatabaseContentToMedia.getInstance().addMedia(cid,mediaId);
+ } catch (Exception e) {
+ theLog.printError("setting media failed: "+e.toString());
+ contentModule.deleteById(cid);
+ throw new ServletModuleException("setting media failed: "+e.toString());
+ }
+
+ } else {
+ contentModule.deleteById(cid);
+ theLog.printDebugInfo("Wrong file type uploaded!: " + fileName);
+ throw new ServletModuleUserException("One or more files of unrecognized types");
+ } // end if-else mediaTypesList.size() > 0
+
+ } //end for Iterator...
+
+ //if we're here all is ok...
+ EntityContent contentEnt = (EntityContent)contentModule.getById(cid);
+ contentEnt.setValueForProperty("is_published","1");
+ contentEnt.update();
+
+ //dereference mp. -mh
+ mp=null;