forked from alexo/wro4j
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Wro4jGrailsPlugin.groovy
96 lines (85 loc) · 2.82 KB
/
Wro4jGrailsPlugin.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
import org.springframework.web.filter.DelegatingFilterProxy
import wro4j.grails.plugin.ReloadableWroFilter
import wro4j.grails.plugin.WroConfigHandler
import org.springframework.context.ApplicationContext
import ro.isdc.wro.extensions.model.factory.GroovyWroModelParser
import wro4j.grails.plugin.WroDSLHandler
class Wro4jGrailsPlugin {
// the plugin version == wro4j version
def version = "1.3.9-SNAPSHOT"
// the version or versions of Grails the plugin is designed for
def grailsVersion = "1.3.7 > *"
// the other plugins this plugin depends on
def dependsOn = [:]
// resources that are excluded from plugin packaging
def pluginExcludes = [
"grails-app/views/error.gsp",
"grails-app/views/index.gsp",
"grails-app/conf/Wro.groovy",
"web-app/css/style.css",
"web-app/js/script.js",
"web-app/js/jquery.js",
]
// TODO Fill in these fields
def author = "Romain Philibert"
def authorEmail = "filirom1@gmail.com"
def title = "Wro4j Grails Plugin"
def description = '''\\
Web Resource Optimizer for Grails
'''
// URL to the plugin's documentation
def documentation = "http://code.google.com/p/wro4j/wiki/GrailsPlugin"
def doWithWebDescriptor = { xml ->
def contextParam = xml.'context-param'
contextParam[contextParam.size() - 1] + {
'filter' {
'filter-name'('wroFilter')
'filter-class'(DelegatingFilterProxy.name)
'init-param' {
'param-name'('targetFilterLifecycle')
'param-value'(true)
}
}
}
def filter = xml.'filter'
filter[filter.size() - 1] + {
'filter-mapping' {
'filter-name'('wroFilter')
'url-pattern'('/wro/*')
}
}
}
def doWithSpring = {
WroConfigHandler.application = application
def config = WroConfigHandler.getConfig()
wroFilter(ReloadableWroFilter) {
properties = config.toProperties()
}
}
def doWithDynamicMethods = { ctx ->
// TODO Implement registering dynamic methods to classes (optional)
}
def doWithApplicationContext = { applicationContext ->
// TODO Implement post initialization spring config (optional)
}
/** File to watch to trigger onChange */
def watchedResources = "file:./grails-app/conf/Wro.groovy"
/** Detect Wro.groovy changes */
def onChange = { event ->
if (event.source && event.source instanceof Class && event.source.name == "Wro") {
Class clazz = event.source
WroDSLHandler.dsl = clazz.newInstance()
reload(event.ctx)
}
}
/** Detect Config.groovy changes */
def onConfigChange = { event ->
reload(event.ctx)
}
/** Reload Wro4J Filter */
void reload(ApplicationContext ctx) {
WroConfigHandler.reloadConfig()
ReloadableWroFilter wroFilter = ctx.getBeansOfType(ReloadableWroFilter).wroFilter as ReloadableWroFilter
wroFilter.reload()
}
}