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.pages.app.field;
35
36 import info.magnolia.config.registry.Registry;
37 import info.magnolia.i18nsystem.I18nizer;
38 import info.magnolia.objectfactory.Components;
39 import info.magnolia.pages.app.editor.PageEditorPresenter;
40 import info.magnolia.rendering.template.TemplateDefinition;
41 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
42 import info.magnolia.ui.api.context.UiContext;
43 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
44 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
45 import info.magnolia.ui.form.field.factory.SelectFieldFactory;
46 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
47
48 import java.util.ArrayList;
49 import java.util.List;
50
51 import javax.inject.Inject;
52
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 import com.vaadin.v7.data.Item;
57
58
59
60
61
62
63 public class ComponentSelectorFieldFactory extends SelectFieldFactory<ComponentSelectorDefinition> {
64
65 private static final Logger log = LoggerFactory.getLogger(ComponentSelectorFieldFactory.class);
66
67 private final TemplateDefinitionRegistry templateRegistry;
68 private final PageEditorPresenter pageEditorPresenter;
69 private final I18nizer i18nizer;
70
71 @Inject
72 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, TemplateDefinitionRegistry templateRegistry, PageEditorPresenter pageEditorPresenter, I18nizer i18nizer) {
73 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
74 this.templateRegistry = templateRegistry;
75 this.pageEditorPresenter = pageEditorPresenter;
76 this.i18nizer = i18nizer;
77 }
78
79
80
81
82 @Deprecated
83 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem, TemplateDefinitionRegistry templateRegistry, PageEditorPresenter pageEditorPresenter, I18nizer i18nizer) {
84 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), templateRegistry, pageEditorPresenter, i18nizer);
85 }
86
87
88
89
90 @Deprecated
91 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem, TemplateDefinitionRegistry templateRegistry, PageEditorPresenter pageEditorPresenter) {
92 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), templateRegistry, pageEditorPresenter, Components.getComponent(I18nizer.class));
93 }
94
95
96
97
98 @Deprecated
99 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem) {
100 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), Components.getComponent(TemplateDefinitionRegistry.class), Components.getComponent(PageEditorPresenter.class), Components.getComponent(I18nizer.class));
101 }
102
103
104
105
106 @Override
107 public List<SelectFieldOptionDefinition> getSelectFieldOptionDefinition() {
108 List<SelectFieldOptionDefinition> res = new ArrayList<SelectFieldOptionDefinition>();
109
110 if (!(pageEditorPresenter.getSelectedElement() instanceof AreaElement)) {
111 log.warn("Cannot get available components, selected element {} is not an area.", pageEditorPresenter.getSelectedElement());
112 return res;
113 }
114
115 AreaElement area = (AreaElement) pageEditorPresenter.getSelectedElement();
116 String availableComponents = area.getAvailableComponents();
117
118 String[] tokens = availableComponents.split(",");
119 for (String token : tokens) {
120 try {
121 TemplateDefinition templateDefinition = templateRegistry.getProvider(token).get();
122 SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
123 option.setValue(templateDefinition.getId());
124 option.setLabel(this.getTranslatedTitle(templateDefinition));
125 res.add(option);
126 } catch (Registry.NoSuchDefinitionException e) {
127 log.error("Could not get TemplateDefinition for id '{}'.", token, e);
128 }
129 }
130
131 return res;
132 }
133
134 @Override
135 protected Class<?> getDefaultFieldType() {
136 return String.class;
137 }
138
139 private String getTranslatedTitle(TemplateDefinition definition) {
140 String translatedTitle = i18nizer.decorate(definition).getTitle();
141 if (isMessageKey(translatedTitle)) {
142 translatedTitle = TemplateSelectorFieldFactory.getI18nTitle(definition);
143 }
144 if (isMessageKey(translatedTitle)) {
145 translatedTitle = definition.getId();
146 }
147 return translatedTitle;
148 }
149 }