I've hit some snags during implementation. I've made some design changes to accommodate them. I'm going to document them as I go to keep Ken informed, and to have a place to go back to in case I ever wonder "WTF did I do that?"
- Removed Owner, Group and Permissions
- I removed file ownership and access control for two reasons. They would either require some ThreadContext object to track the actor, or adding a "actor" parameter to every method call to check permissions. This would pollute the interface right now. It may be added later.
- Java has a nice ACL library that we may want to use instead. My mental stack is too full to figure it out right now.
- Address is a first class citizen
- I promoted the "Address" abstraction to be a first class citizen. It's used by Contact, Meeting, and Photo, so I think it should be 1st class. I am making it immutable for now.
- Created our own MimeType
- I was planning to use the activation framework's MimeType object, but it isn't immutable. I don't want the mime type that is describing a file to be changeable. It doesn't make sense for an instance of Music to have a Document mime type. I wrote a quick little immutable mime type.