]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsApp.java
Open release cycle
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / AbstractCmsApp.java
1 package org.argeo.cms.ui;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.jcr.Repository;
10
11 import org.eclipse.rap.rwt.RWT;
12
13 /** Base class for {@link CmsApp}s. */
14 public abstract class AbstractCmsApp implements CmsApp {
15 private Map<String, CmsTheme> themes = Collections.synchronizedMap(new HashMap<>());
16
17 private List<CmsAppListener> cmsAppListeners = new ArrayList<>();
18
19 private Repository repository;
20
21 protected abstract String getThemeId(String uiName);
22
23 @Override
24 public CmsTheme getTheme(String uiName) {
25 String themeId = getThemeId(uiName);
26 if (themeId == null)
27 return null;
28 if (!themes.containsKey(themeId))
29 throw new IllegalArgumentException("Theme " + themeId + " not found.");
30 return themes.get(themeId);
31 }
32
33 @Override
34 public boolean allThemesAvailable() {
35 boolean themeMissing = false;
36 uiNames: for (String uiName : getUiNames()) {
37 String themeId = getThemeId(uiName);
38 if (RWT.DEFAULT_THEME_ID.equals(themeId))
39 continue uiNames;
40 if (!themes.containsKey(themeId)) {
41 themeMissing = true;
42 break uiNames;
43 }
44 }
45 return !themeMissing;
46 }
47
48 public void addTheme(CmsTheme theme, Map<String, String> properties) {
49 themes.put(theme.getThemeId(), theme);
50 if (allThemesAvailable())
51 for (CmsAppListener listener : cmsAppListeners)
52 listener.themingUpdated();
53 }
54
55 public void removeTheme(CmsTheme theme, Map<String, String> properties) {
56 themes.remove(theme.getThemeId());
57 }
58
59 @Override
60 public void addCmsAppListener(CmsAppListener listener) {
61 cmsAppListeners.add(listener);
62 if (allThemesAvailable())
63 listener.themingUpdated();
64 }
65
66 @Override
67 public void removeCmsAppListener(CmsAppListener listener) {
68 cmsAppListeners.remove(listener);
69 }
70
71 protected Repository getRepository() {
72 return repository;
73 }
74
75 public void setRepository(Repository repository) {
76 this.repository = repository;
77 }
78
79 }