Dan and I (and Shannon and Josh) discussed this a bit at CFinNC (more
accurately on the drive to the airport from CFinNC). I realized that one
solution is quite simple:

1. Create a utilitiy controller - let's call it UtilController.
2. The UtilController will listen for a message "needsFileUpload".
3. That message will accept an argument which will specify the name of the
form field that contains a file.
4. The controller method invoked via the message will then upload the file
(using a separate FileUploader component), and create a structure containing
metadata about the upload (e.g., success, serverfilename, etc.), and place
that structure into the Event object. It could create an object instead of a
structure, but that might be overkill.
5. For any event that you know requires a file upload, you add a
needsFileUpload message to the event.

This would allow for "automatic" file uploads, with all of the code having
to do with file uploads being encapsulated in the UtilController and the
FileUploader.

This seems like a pretty decent approach, and is something that a developer
could implement themselves without having to worry about MG doing anything
for them.  This also follows MG's approach of configuration rather than
convention.  You would now have a map in your MG.xml file which shows which
events expect files, so there's some value in that.

Personally I'd still prefer to be able to have it happen automatically
(i.e., without having to add a message and argument each time I need a file
upload as part of an event), and we discussed that as well. We discussed the
possibility of using conventions (e.g., form field names) and also the
possibility of detecting file uploads automatically and responding to them.

One idea that was discussed was the possibility of adding a configurable
feature like this to MG. As this does relate to the controller part of the
code, and it's a common requirement, there might be some value in adding
such a feature to MG. The idea is that some sort of FileUploadDetector could
be added to the MG request lifecycle, and folks could choose to implement it
however they felt.  When the FileUploadDetector does detect a form field
containing a file, it would then automatically upload it using a separate
FileUploader object, which could be configured via Coldspring, and would
place the metadata for the file upload into the Event object.

The default FileUploadDetector would not detect any files, and therefore no
files would ever get uploaded automatically. If one wanted to turn on the
feature, one would specify a different FileUploadDetector component that
uses an algorithm for detecting files. Perhaps one component would look for
fieldnames starting with "file_". Perhaps another would look for any field
that contains a file (I have an untested algorithm for that). Perhaps yet
another would respond to messages in the MG.xml file (to allow for
configuration).  The point is that if a developer wanted to use conventions
to implement the algorithm they could, and if one wanted to use
configuration they could. And if one didn't want to have anything to do with
this crazy auto-file-uploading scheme, well they'd just accept the default
behaviour. Nobody would be forced to do it a certain way, but anyone would
be able to do it however they pleased.

I think that this would be fairly easy to implement, and I'd be willing to
take a crack at it, but first I'd like to know what others think of the
idea.  Does it sound like a good idea? A bad idea? A crazy idea? Any other
takes on approaches to the same issue?

Thanks for listening,
Bob


-- 
Bob Silverberg
www.silverwareconsulting.com

--~--~---------~--~----~------------~-------~--~----~
Model-Glue Sites:
Home Page: http://www.model-glue.com
Documentation: http://docs.model-glue.com
Bug Tracker: http://bugs.model-glue.com
Blog: http://www.model-glue.com/blog

You received this message because you are subscribed to the Google
Groups "model-glue" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/model-glue?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to