1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.tiles.extras.module;
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.List;
29 import java.util.jar.Attributes;
30 import java.util.jar.Manifest;
31
32 import javax.servlet.ServletContext;
33
34 import org.apache.tiles.definition.DefinitionsFactoryException;
35 import org.apache.tiles.request.ApplicationContext;
36 import org.apache.tiles.request.ApplicationResource;
37 import org.apache.tiles.request.reflect.ClassUtil;
38 import org.apache.tiles.request.servlet.wildcard.WildcardServletApplicationContext;
39 import org.apache.tiles.startup.TilesInitializer;
40
41
42
43
44
45
46
47
48
49
50
51 public class ModularTilesInitializer implements TilesInitializer {
52
53
54
55
56 private List<TilesInitializer> initializers;
57
58
59 public void initialize(ApplicationContext preliminaryContext) {
60 ApplicationContext applicationContext = new WildcardServletApplicationContext(
61 (ServletContext) preliminaryContext.getContext());
62 loadInitializers(applicationContext);
63
64 for (TilesInitializer initializer : initializers) {
65 initializer.initialize(preliminaryContext);
66 }
67 }
68
69
70 public void destroy() {
71 for (TilesInitializer initializer : initializers) {
72 initializer.destroy();
73 }
74 }
75
76
77
78
79
80
81 private void loadInitializers(ApplicationContext applicationContext) {
82 initializers = new ArrayList<TilesInitializer>();
83 try {
84 Collection<ApplicationResource> resources = applicationContext
85 .getResources("classpath*:META-INF/MANIFEST.MF");
86 ApplicationResource mainResource = applicationContext.getResource("/META-INF/MANIFEST.MF");
87 if (mainResource != null) {
88 resources.add(mainResource);
89 }
90 for (ApplicationResource resource : resources) {
91 InputStream stream = resource.getInputStream();
92 try {
93 Manifest manifest = new Manifest(stream);
94 Attributes attributes = manifest.getMainAttributes();
95 if (attributes != null) {
96 String initializerName = attributes.getValue("Tiles-Initializer");
97 if (initializerName != null) {
98 TilesInitializer initializer = (TilesInitializer) ClassUtil
99 .instantiate(initializerName);
100 initializers.add(initializer);
101 }
102 }
103 } finally {
104 stream.close();
105 }
106 }
107 } catch (IOException e) {
108 throw new DefinitionsFactoryException("Error getting manifest files", e);
109 }
110 }
111 }