]> git.argeo.org Git - lgpl/argeo-commons.git/blob - SingleUserContentRepository.java
c44200243d83847d94d56be513330d719b4fa75b
[lgpl/argeo-commons.git] / SingleUserContentRepository.java
1 package org.argeo.cms.acr;
2
3 import java.util.Locale;
4 import java.util.Objects;
5
6 import javax.security.auth.Subject;
7
8 import org.argeo.api.acr.ContentSession;
9 import org.argeo.api.acr.spi.ProvidedRepository;
10
11 /**
12 * A standalone {@link ProvidedRepository} with a single {@link Subject} (which
13 * also provides the system session).
14 */
15 public class SingleUserContentRepository extends AbstractContentRepository {
16 private final Subject subject;
17 private final Locale locale;
18
19 // the single session
20 private CmsContentSession contentSession;
21
22 public SingleUserContentRepository(Subject subject) {
23 this(subject, Locale.getDefault());
24
25 initRootContentProvider(null);
26 }
27
28 public SingleUserContentRepository(Subject subject, Locale locale) {
29 Objects.requireNonNull(subject);
30 Objects.requireNonNull(locale);
31
32 this.subject = subject;
33 this.locale = locale;
34 }
35
36 @Override
37 public void start() {
38 Objects.requireNonNull(subject);
39 Objects.requireNonNull(locale);
40
41 super.start();
42 if (contentSession != null)
43 throw new IllegalStateException("Repository is already started, stop it first.");
44 contentSession = new CmsContentSession(this, subject, locale);
45 }
46
47 @Override
48 public void stop() {
49 if (contentSession != null)
50 contentSession.close();
51 contentSession = null;
52 super.stop();
53 }
54
55 @Override
56 public ContentSession get(Locale locale) {
57 if (!this.locale.equals(locale))
58 throw new UnsupportedOperationException("This repository does not support multi-locale sessions");
59 return contentSession;
60 }
61
62 @Override
63 public ContentSession get() {
64 return contentSession;
65 }
66
67 @Override
68 protected CmsContentSession newSystemSession() {
69 return new CmsContentSession(this, subject, Locale.getDefault());
70 }
71
72 }