1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.framework.i18n;
35
36 import info.magnolia.cms.i18n.I18nContentSupport;
37 import info.magnolia.context.Context;
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.link.LinkUtil;
40 import info.magnolia.objectfactory.Components;
41 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
43
44 import java.util.ArrayList;
45 import java.util.Collections;
46 import java.util.List;
47 import java.util.Locale;
48 import java.util.Objects;
49
50 import javax.inject.Provider;
51 import javax.jcr.Node;
52
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 import com.vaadin.ui.HasComponents;
57 import com.vaadin.v7.data.Item;
58
59
60
61
62 public class DefaultI18NAuthoringSupport implements I18NAuthoringSupport {
63
64 private static final Logger log = LoggerFactory.getLogger(DefaultI18NAuthoringSupport.class);
65
66 private I18nContentSupport i18nContentSupport;
67
68 private final Provider<Context> contextProvider;
69
70 private boolean enabled = true;
71
72 public DefaultI18NAuthoringSupport() {
73 this(Components.getComponent(I18nContentSupport.class), MgnlContext::getInstance);
74 }
75
76 public DefaultI18NAuthoringSupport(I18nContentSupport i18nContentSupportProvider, Provider<Context> contextProvider) {
77 this.i18nContentSupport = i18nContentSupportProvider;
78 this.contextProvider = contextProvider;
79 }
80
81
82
83
84
85
86
87
88 @Override
89 public List<Locale> getAvailableLocales(Node node) {
90 return getAvailableLocales();
91 }
92
93 @Override
94 public Locale getDefaultLocale(Node node) {
95 return getDefaultLocale();
96 }
97
98 @Override
99 public String deriveLocalisedPropertyName(String base, Locale locale) {
100 return String.format("%s_%s", base, locale.toString());
101 }
102
103
104
105
106 @Override
107 public List<Locale> getAvailableLocales() {
108 if (enabled && i18nContentSupport.isEnabled()) {
109 return new ArrayList<>(i18nContentSupport.getLocales());
110 }
111 return Collections.emptyList();
112 }
113
114
115
116
117 @Override
118 public Locale getDefaultLocale() {
119 if (enabled && i18nContentSupport.isEnabled()) {
120 return i18nContentSupport.getDefaultLocale();
121 }
122 return contextProvider.get().getLocale();
123 }
124
125 @Override
126 public List<Locale> getAvailableLocales(Item item) {
127 if (item instanceof JcrNodeAdapter) {
128 return getAvailableLocales(((JcrNodeAdapter)item).getJcrItem());
129 }
130 return Collections.emptyList();
131 }
132
133 @Override
134 public Locale getDefaultLocale(Item item) {
135 if (item instanceof JcrNodeAdapter) {
136 return getDefaultLocale(((JcrNodeAdapter) item).getJcrItem());
137 }
138 return contextProvider.get().getLocale();
139 }
140
141 @Override
142 public boolean isDefaultLocale(Locale locale, Item item) {
143 return Objects.equals(getDefaultLocale(item), locale);
144 }
145
146 @Override
147 public void i18nize(HasComponents fieldContainer, Locale locale) {
148 log.warn("I18NAuthoringSupport.i18nize is deprecated without a replacement as of version 5.4.1, see e.g. #FormView.Listener.localeChanged(..) implementation for a workaround hint");
149 }
150
151 @Override
152 public String createI18NURI(Node node, Locale locale) {
153
154 Locale currentLocale = i18nContentSupport.getLocale();
155 String uri;
156 try {
157
158 i18nContentSupport.setLocale(locale);
159 uri = LinkUtil.createAbsoluteLink(node);
160 }
161
162 finally {
163 i18nContentSupport.setLocale(currentLocale);
164 }
165 return uri;
166 }
167
168 public boolean isEnabled() {
169 return enabled;
170 }
171
172 public void setEnabled(boolean enabled) {
173 this.enabled = enabled;
174 }
175
176 @Override
177 @Deprecated
178 public Locale getAuthorLocale() {
179 log.warn("I18NAuthoringSupport.getAuthorLocale() is deprecated, returning null. Use SubAppContext.getAuthoringLocale() instead.");
180 return null;
181 }
182
183 @Deprecated
184 public void setAuthorLocale(Locale locale) {
185 log.warn("I18NAuthoringSupport.setAuthorLocale(Locale) is deprecated, not doing anything. Use SubAppContext.setAuthoringLocale(Locale) instead.");
186 }
187
188 }