]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org/argeo/server/ads/AdsContainer.java
Prepare next development cycle
[lgpl/argeo-commons.git] / org / argeo / server / ads / AdsContainer.java
1 package org.argeo.server.ads;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.Properties;
7
8 import javax.naming.Context;
9 import javax.naming.InitialContext;
10 import javax.naming.NamingException;
11 import javax.naming.directory.InitialDirContext;
12
13 import org.apache.commons.io.FileUtils;
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16 import org.apache.directory.server.configuration.MutableServerStartupConfiguration;
17 import org.apache.directory.server.core.configuration.ShutdownConfiguration;
18 import org.apache.directory.server.jndi.ServerContextFactory;
19 import org.springframework.beans.factory.DisposableBean;
20 import org.springframework.beans.factory.InitializingBean;
21 import org.springframework.core.io.Resource;
22 import org.springframework.util.Assert;
23
24 public class AdsContainer implements InitializingBean, DisposableBean {
25 private final static Log log = LogFactory.getLog(AdsContainer.class);
26
27 private MutableServerStartupConfiguration configuration;
28 private Properties environment = null;
29 private File workingDirectory = new File(System
30 .getProperty("java.io.tmpdir")
31 + File.separator + "argeo-apacheDirectoryServer");
32 private List<Resource> ldifs = new ArrayList<Resource>();
33 private File ldifDirectory;
34 private Boolean deleteWorkingDirOnExit = false;
35
36 @SuppressWarnings("unchecked")
37 public void afterPropertiesSet() throws Exception {
38
39 log.info("Starting directory server with id '"
40 + configuration.getInstanceId() + "' in directory "
41 + workingDirectory.getAbsolutePath());
42
43 if (deleteWorkingDirOnExit && workingDirectory.exists()) {
44 log.warn("Found existing directory " + workingDirectory
45 + " deleting it...");
46 FileUtils.deleteDirectory(workingDirectory);
47 }
48 configuration.setWorkingDirectory(workingDirectory);
49 workingDirectory.mkdirs();
50
51 if (ldifDirectory != null)
52 configuration.setLdifDirectory(ldifDirectory);
53 else
54 configuration.setLdifDirectory(new File(workingDirectory
55 .getAbsolutePath()
56 + File.separator + "ldif"));
57
58 if (ldifs.size() > 0)
59 configuration.getLdifDirectory().mkdirs();
60 for (Resource ldif : ldifs) {
61 FileUtils.copyURLToFile(ldif.getURL(), new File(configuration
62 .getLdifDirectory().getAbsolutePath()
63 + File.separator + ldif.getFilename().replace(':', '_')));
64 if (log.isDebugEnabled())
65 log.debug("Copied " + ldif + " to LDIF directory "
66 + configuration.getLdifDirectory());
67 }
68
69 Properties env = new Properties();
70 env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
71 ServerContextFactory.class.getName());
72 Assert.notNull(environment);
73 env.putAll(environment);
74 env.putAll(configuration.toJndiEnvironment());
75
76 try {
77 new InitialDirContext(env);
78 } catch (NamingException e) {
79 throw new RuntimeException(
80 "Failed to start Apache Directory server", e);
81 }
82 }
83
84 @SuppressWarnings("unchecked")
85 public void destroy() throws Exception {
86 ShutdownConfiguration shutdown = new ShutdownConfiguration(
87 configuration.getInstanceId());
88
89 Properties env = new Properties();
90 env.setProperty(Context.INITIAL_CONTEXT_FACTORY,
91 ServerContextFactory.class.getName());
92 Assert.notNull(environment);
93 env.putAll(environment);
94 env.putAll(shutdown.toJndiEnvironment());
95
96 log.info("Shutting down directory server with id '"
97 + configuration.getInstanceId() + "'");
98
99 try {
100 new InitialContext(env);
101 } catch (NamingException e) {
102 throw new RuntimeException(
103 "Failed to stop Apache Directory server", e);
104 }
105
106 if (workingDirectory.exists() && deleteWorkingDirOnExit) {
107 if (log.isDebugEnabled())
108 log.debug("Delete Apache DS working dir " + workingDirectory);
109 FileUtils.deleteDirectory(workingDirectory);
110 }
111
112 }
113
114 public void setConfiguration(MutableServerStartupConfiguration configuration) {
115 this.configuration = configuration;
116 }
117
118 public void setWorkingDirectory(File workingDirectory) {
119 this.workingDirectory = workingDirectory;
120 }
121
122 public void setEnvironment(Properties environment) {
123 this.environment = environment;
124 }
125
126 public void setLdifs(List<Resource> ldifs) {
127 this.ldifs = ldifs;
128 }
129
130 public void setLdifDirectory(File ldifDirectory) {
131 this.ldifDirectory = ldifDirectory;
132 }
133
134 public void setDeleteWorkingDirOnExit(Boolean deleteWorkingDirOnExit) {
135 this.deleteWorkingDirOnExit = deleteWorkingDirOnExit;
136 }
137
138 }