X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmircoders%2Fmedia%2FMediaUploadProcessor.java;h=b014f58a16f98da67c5b69917c0f85815c23642e;hb=25452ca9972bbd8746eab0b09dfb74e51dbf60ff;hp=e7d2eb7f979822dd611f65b2622cb5d1beb8756e;hpb=d1fe8297d584e69a5d2bed84cc979d8bdd13cb31;p=mir.git diff --git a/source/mircoders/media/MediaUploadProcessor.java b/source/mircoders/media/MediaUploadProcessor.java index e7d2eb7f..b014f58a 100755 --- a/source/mircoders/media/MediaUploadProcessor.java +++ b/source/mircoders/media/MediaUploadProcessor.java @@ -34,76 +34,71 @@ import java.util.HashMap; import java.util.Map; import mir.entity.Entity; -import mir.media.MediaExc; +import mir.log.LoggerWrapper; import mir.media.MediaFailure; -import mircoders.media.MediaHelper; import mir.media.MediaHandler; import mir.misc.StringUtil; import mir.session.UploadedFile; import mir.storage.Database; +import mir.util.FileRoutines; import mircoders.module.ModuleMediaType; public class MediaUploadProcessor { - public static Entity processMediaUpload(UploadedFile aFile, Map aValues) throws MediaExc, MediaFailure { - String mediaId; + private static LoggerWrapper logger = new LoggerWrapper("Media.UploadProcessor"); + private static ModuleMediaType mediaTypeModule = new ModuleMediaType(); + + /** + * Processes an uploaded media file. + * Will create the media entity and so on. + */ + public static Entity processMediaUpload(UploadedFile aFile, Map aValues) throws UnsupportedMediaTypeExc, MediaFailure { MediaHandler mediaHandler; - Entity mediaType; - ModuleMediaType mediaTypeModule; + Entity mediaType = null; Database mediaStorage; Map values = new HashMap(); - String MediaId; Entity mediaEntity; + String contentType = aFile.getContentType(); + logger.debug("processing media upload of " + aFile.getFileName() + " (content type = " + contentType + ")"); - try { - String contentType = aFile.getContentType(); - - if (contentType.equals("text/plain") || - contentType.equals("application/octet-stream") || - contentType == null) { - throw new MediaExc("Invalid content-type: " + contentType); - } - - values.putAll(aValues); - values.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); - values.put("is_produced", "0"); - - mediaTypeModule = new ModuleMediaType(); + if (contentType!=null) { mediaType = mediaTypeModule.findMediaTypeForMimeType(contentType); + } - try { - mediaHandler = MediaHelper.getHandler(mediaType); - mediaStorage = MediaHelper.getStorage(mediaType, mediaType.getFieldValue("tablename")); - } - catch (Throwable e) { - throw new MediaFailure(e); - } + if (mediaType==null) { + String extension = FileRoutines.getExtension(aFile.getFileName()); + mediaType = mediaTypeModule.findMediaTypeForExtension(extension); + } - values.put("to_media_type", mediaType.getId()); + if (mediaType==null) { + throw new UnsupportedMediaTypeExc("Media " + aFile.getFileName() + " " + + (aFile!=null?"("+aFile.getContentType()+") ":"") + " not supported", aFile.getContentType()); + } - try { - mediaEntity = (Entity) mediaStorage.getEntityClass().newInstance(); - mediaEntity.setStorage(mediaStorage); - } - catch (Throwable e) { - throw new MediaFailure(e); - } + values.putAll(aValues); + values.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); + values.put("is_produced", "0"); - mediaEntity.setValues(values); - mediaId = mediaEntity.insert(); + try { + mediaHandler = MediaHelper.getHandler(mediaType); + mediaStorage = MediaHelper.getStorage(mediaType, mediaType.getFieldValue("tablename")); + } + catch (Throwable e) { + throw new MediaFailure(e); + } - try { - mediaHandler.store(aFile.getInputStream(), mediaEntity, mediaType); - } - catch (Throwable e) { - throw new MediaFailure(e); - } + values.put("to_media_type", mediaType.getId()); - return mediaEntity; + try { + mediaEntity = mediaStorage.createNewEntity(); + mediaEntity.setFieldValues(values); + mediaEntity.insert(); + mediaHandler.store(aFile, mediaEntity, mediaType); } catch (Throwable e) { throw new MediaFailure(e); } + return mediaEntity; } } \ No newline at end of file