Index: .gitignore =================================================================== diff -u -r3fb6c0e8e7068726c84a18eeb122d345e576b67f -r6ec580c560a46ce67e6efa484ee02e9080e0cafe --- .gitignore (.../.gitignore) (revision 3fb6c0e8e7068726c84a18eeb122d345e576b67f) +++ .gitignore (.../.gitignore) (revision 6ec580c560a46ce67e6efa484ee02e9080e0cafe) @@ -15,6 +15,6 @@ bin mediaPath -media +/media temporaryMediaPath dsLocaleImport Index: grails-app/domain/com/lemans/ds/media/Media.groovy =================================================================== diff -u --- grails-app/domain/com/lemans/ds/media/Media.groovy (revision 0) +++ grails-app/domain/com/lemans/ds/media/Media.groovy (revision 6ec580c560a46ce67e6efa484ee02e9080e0cafe) @@ -0,0 +1,85 @@ +package com.lemans.ds.media + +import com.lemans.services.Auditable +import groovy.transform.ToString + +@ToString(includeNames = true) +class Media extends Auditable { + + static final Integer DS_SOURCE = 0 + + static final String NOT_CLIENT_SETTABLE = 'not.clientSettable' + + Integer id + + Integer mediaTypeId + + Integer mimeTypeId + + Integer mediaClassificationId + + Integer source = DS_SOURCE + + String fileName = UUID.randomUUID() + + String mediaUrl + + String originalFileName + + String extension + + String title + + String description + + Date effectiveDate + + Integer languageId + + static constraints = { + mimeTypeId nullable: true + fileName nullable: true, maxSize: 250, validator: { value, Media media, errors -> + if (media.originalFileName && !value) { rejectBlankField('fileName', errors) } + } + mediaUrl blank: false, maxSize: 255 + originalFileName maxSize: 250, validator: { value, Media media, errors -> + if (media.extension && !value) { rejectBlankField('originalFileName', errors) } + } + // NOTE: extension is effectively required for Media Files but not Links - i.e. it's needed for file location + extension nullable: true, maxSize: 7 + + description nullable: true, maxSize: 100 + title nullable: true, maxSize: 100 + effectiveDate nullable: true + mediaClassificationId nullable: true + languageId nullable: true + } + + static mapping = { + table 'Media' + id column: 'mediaId' + mediaTypeId updateable: true + mimeTypeId updateable: true + source updateable: false + mediaUrl updateable: true + fileName updateable: true + originalFileName updateable: true + extension updateable: true + title updateable: true + } + + private static void rejectBlankField(String field, errors) { + errors.rejectValue(field, 'blank', [field] as Object[], '{0} is required') + } + + private static final Map IMMUTABLE_PROPERTIES = [ + mediaUrl: 'Media Url', + fileName: 'File Name', + source: 'Source' + ].asImmutable() + + @Override + protected Map immutables() { + Media.IMMUTABLE_PROPERTIES + } +} Index: grails-app/domain/com/lemans/ds/media/MediaEntity.groovy =================================================================== diff -u --- grails-app/domain/com/lemans/ds/media/MediaEntity.groovy (revision 0) +++ grails-app/domain/com/lemans/ds/media/MediaEntity.groovy (revision 6ec580c560a46ce67e6efa484ee02e9080e0cafe) @@ -0,0 +1,23 @@ +package com.lemans.ds.media + +import com.lemans.services.Auditable + +class MediaEntity extends Auditable { + + Integer id + Integer mediaId + String entityClass + String entityId + Boolean isHidden + + static constraints = { + mediaId nullable: false + entityClass nullable: false + entityId nullable: false + } + + static mapping = { + table 'MediaEntity' + id column: 'mediaEntityId' + } +} Index: grails-app/domain/com/lemans/ds/media/MediaType.groovy =================================================================== diff -u --- grails-app/domain/com/lemans/ds/media/MediaType.groovy (revision 0) +++ grails-app/domain/com/lemans/ds/media/MediaType.groovy (revision 6ec580c560a46ce67e6efa484ee02e9080e0cafe) @@ -0,0 +1,23 @@ +package com.lemans.ds.media + +import com.lemans.services.Auditable +import groovy.transform.ToString + +@ToString +class MediaType extends Auditable { + + Integer id + + String description + + String descriptionDisplayName + + static constraints = { + descriptionDisplayName nullable: true + } + + static mapping = { + table 'MediaType' + id column: 'mediaTypeId' + } +} Index: grails-app/domain/com/lemans/ds/media/MimeType.groovy =================================================================== diff -u --- grails-app/domain/com/lemans/ds/media/MimeType.groovy (revision 0) +++ grails-app/domain/com/lemans/ds/media/MimeType.groovy (revision 6ec580c560a46ce67e6efa484ee02e9080e0cafe) @@ -0,0 +1,23 @@ +package com.lemans.ds.media + +import com.lemans.services.Auditable +import groovy.transform.ToString + +@ToString +class MimeType extends Auditable { + + Integer id + + String mimeType + + String extension + + static constraints = { + extension nullable: true + } + + static mapping = { + table 'MimeType' + id column: 'mediaTypeId' + } +}