-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathIcescrumAttachmentableGrailsPlugin.groovy
98 lines (93 loc) · 4.1 KB
/
IcescrumAttachmentableGrailsPlugin.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* Copyright (c) 2010 iceScrum Technologies.
*
* This file is part of iceScrum.
*
* iceScrum is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* iceScrum is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iceScrum. If not, see <http://www.gnu.org/licenses/>.
*
* Authors:
*
* Vincent Barrier (vincent.barrier@icescrum.com)
*
*/
import org.icescrum.plugins.attachmentable.domain.Attachment
import org.icescrum.plugins.attachmentable.domain.AttachmentLink
import org.icescrum.plugins.attachmentable.interfaces.Attachmentable
import org.icescrum.plugins.attachmentable.services.AttachmentableService
class IcescrumAttachmentableGrailsPlugin {
def groupId = "org.icescrum"
def version = "1.1.0"
def grailsVersion = "2.5 > *"
def author = "Vincent Barrier"
def authorEmail = "vincent.barrier@icescrum.com"
def title = "iceScrum attachmentable plugin"
def description = '''Attach file to your domain class in a generic manner (without MultipartFile or Ajax)
if you don't need to customize ajax/multipartFile -> Try Attachmentable plugin'''
def doWithSpring = {
attachmentsBaseDir application
}
def doWithDynamicMethods = { ctx ->
AttachmentableService attachmentableService = ctx.getBean('attachmentableService')
for (domainClass in application.domainClasses) {
if (Attachmentable.class.isAssignableFrom(domainClass.clazz)) {
domainClass.clazz.metaClass {
addAttachment { poster, def file, String originalName = null ->
return attachmentableService.addAttachment(poster, delegate, file, originalName)
}
addAttachments { poster, def tmpFiles ->
tmpFiles.each { tmpFile ->
if (tmpFile instanceof File) {
addAttachment(poster, tmpFile)
} else {
addAttachment(poster, tmpFile.url ? tmpFile : tmpFile.file, tmpFile.filename)
}
}
}
removeAttachment { Attachment attachment ->
attachmentableService.removeAttachment(attachment, delegate)
}
removeAttachment { Long id ->
def attachment = Attachment.load(id)
if (attachment) {
removeAttachment(attachment)
}
}
removeAllAttachments {
def delDir = delegate.attachments?.findAll { it.url != null }?.size() > 0 ?: false
delegate.attachments?.each { Attachment a ->
removeAttachment(a)
}
if (delDir) {
attachmentableService.removeAttachmentDir(delegate)
}
}
getAttachments = { ->
AttachmentLink.getAttachments(delegate).list()
}
getTotalAttachments = { ->
AttachmentLink.getTotalAttachments(delegate).list()[0]
}
}
}
}
}
private void attachmentsBaseDir(application) {
def dir = application.config.grails.attachmentable?.baseDir
if (!dir) {
String userHome = System.properties.'user.home'
String appName = application.metadata['app.name']
dir = new File(userHome, appName).canonicalPath
application.config.grails.attachmentable.baseDir = dir
}
}
}