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.objectfactory.Components;
37 import info.magnolia.pages.app.editor.PageEditorPresenter;
38 import info.magnolia.registry.RegistrationException;
39 import info.magnolia.rendering.template.TemplateDefinition;
40 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
41 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
42 import info.magnolia.ui.form.field.factory.SelectFieldFactory;
43 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
44
45 import java.util.ArrayList;
46 import java.util.List;
47
48 import javax.inject.Inject;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import com.vaadin.data.Item;
54
55
56
57
58
59
60 public class ComponentSelectorFieldFactory extends SelectFieldFactory<ComponentSelectorDefinition> {
61
62 private static final Logger log = LoggerFactory.getLogger(ComponentSelectorFieldFactory.class);
63
64 private final TemplateDefinitionRegistry templateRegistry;
65 private final PageEditorPresenter pageEditorPresenter;
66
67 @Inject
68 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem, TemplateDefinitionRegistry templateRegistry, PageEditorPresenter pageEditorPresenter) {
69 super(definition, relatedFieldItem);
70 this.templateRegistry = templateRegistry;
71 this.pageEditorPresenter = pageEditorPresenter;
72 }
73
74
75
76
77 @Deprecated
78 public ComponentSelectorFieldFactory(ComponentSelectorDefinition definition, Item relatedFieldItem) {
79 this(definition, relatedFieldItem, Components.getComponent(TemplateDefinitionRegistry.class), Components.getComponent(PageEditorPresenter.class));
80 }
81
82
83
84
85 @Override
86 public List<SelectFieldOptionDefinition> getSelectFieldOptionDefinition() {
87 List<SelectFieldOptionDefinition> res = new ArrayList<SelectFieldOptionDefinition>();
88
89 if (!(pageEditorPresenter.getSelectedElement() instanceof AreaElement)) {
90 log.warn("Cannot get available components, selected element {} is not an area.", pageEditorPresenter.getSelectedElement());
91 return res;
92 }
93
94 AreaElement area = (AreaElement) pageEditorPresenter.getSelectedElement();
95 String availableComponents = area.getAvailableComponents();
96
97 String[] tokens = availableComponents.split(",");
98 for (String token : tokens) {
99 try {
100 TemplateDefinition templateDefinition = templateRegistry.getTemplateDefinition(token);
101
102 SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
103 option.setValue(templateDefinition.getId());
104 option.setLabel(TemplateSelectorFieldFactory.getI18nTitle(templateDefinition));
105 res.add(option);
106 } catch (RegistrationException e) {
107 log.error("Could not get TemplateDefinition for id '{}'.", token, e);
108 }
109 }
110
111 return res;
112 }
113
114 @Override
115 protected Class<?> getDefaultFieldType() {
116 return String.class;
117 }
118
119 }