+ super(new Hashtable<String, Object>());
+ load(in);
+ }
+
+ private static Dictionary<String, Object> fromUri(String uri, String baseDn) {
+ Hashtable<String, Object> res = new Hashtable<String, Object>();
+ res.put(UserAdminConf.uri.name(), uri);
+ res.put(UserAdminConf.baseDn.name(), baseDn);
+ return res;
+ }
+
+ public void init() {
+ try {
+ if (getUri().getScheme().equals("file")) {
+ File file = new File(getUri());
+ if (!file.exists())
+ return;
+ }
+ load(getUri().toURL().openStream());
+ } catch (Exception e) {
+ throw new UserDirectoryException("Cannot open URL " + getUri(), e);
+ }
+ }
+
+ public void save() {
+ if (getUri() == null)
+ throw new UserDirectoryException("Cannot save LDIF user admin: no URI is set");
+ if (isReadOnly())
+ throw new UserDirectoryException("Cannot save LDIF user admin: " + getUri() + " is read-only");
+ try (FileOutputStream out = new FileOutputStream(new File(getUri()))) {
+ save(out);
+ } catch (IOException e) {
+ throw new UserDirectoryException("Cannot save user admin to " + getUri(), e);
+ }
+ }
+
+ public void save(OutputStream out) throws IOException {
+ try {
+ LdifWriter ldifWriter = new LdifWriter(out);
+ for (LdapName name : groups.keySet())
+ ldifWriter.writeEntry(name, groups.get(name).getAttributes());
+ for (LdapName name : users.keySet())
+ ldifWriter.writeEntry(name, users.get(name).getAttributes());
+ } finally {
+ out.close();
+ }
+ }
+
+ protected void load(InputStream in) {