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.form.field.factory;
35
36 import info.magnolia.cms.i18n.I18nContentSupport;
37 import info.magnolia.cms.i18n.Messages;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.api.context.UiContext;
40 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
41 import info.magnolia.ui.form.field.SwitchableField;
42 import info.magnolia.ui.form.field.definition.ConfiguredFieldDefinition;
43 import info.magnolia.ui.form.field.definition.Layout;
44 import info.magnolia.ui.form.field.definition.OptionGroupFieldDefinition;
45 import info.magnolia.ui.form.field.definition.SelectFieldDefinition;
46 import info.magnolia.ui.form.field.definition.StaticFieldDefinition;
47 import info.magnolia.ui.form.field.definition.SwitchableFieldDefinition;
48 import info.magnolia.ui.form.field.transformer.Transformer;
49 import info.magnolia.ui.form.field.transformer.composite.DelegatingCompositeFieldTransformer;
50
51 import java.util.ArrayList;
52 import java.util.List;
53
54 import javax.inject.Inject;
55
56 import org.apache.commons.lang3.StringUtils;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60 import com.vaadin.v7.data.Item;
61 import com.vaadin.v7.data.util.PropertysetItem;
62 import com.vaadin.v7.ui.Field;
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 @Deprecated
82 public class SwitchableFieldFactory<D extends SwitchableFieldDefinition> extends AbstractFieldFactory<D, PropertysetItem> {
83
84 private static final Logger log = LoggerFactory.getLogger(SwitchableFieldFactory.class);
85
86 private final FieldFactoryFactory fieldFactoryFactory;
87 private final ComponentProvider componentProvider;
88 private final I18NAuthoringSupport i18nAuthoringSupport;
89
90 @Inject
91 public SwitchableFieldFactory(D definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider) {
92 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
93 this.fieldFactoryFactory = fieldFactoryFactory;
94 this.componentProvider = componentProvider;
95 this.i18nAuthoringSupport = i18nAuthoringSupport;
96 }
97
98
99
100
101 @Deprecated
102 public SwitchableFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider, I18NAuthoringSupport i18nAuthoringSupport) {
103 this(definition, relatedFieldItem, null, i18nAuthoringSupport, fieldFactoryFactory, componentProvider);
104
105 }
106
107
108
109
110 @Deprecated
111 public SwitchableFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, I18nContentSupport i18nContentSupport, ComponentProvider componentProvider) {
112 this(definition, relatedFieldItem, null, componentProvider.getComponent(I18NAuthoringSupport.class), fieldFactoryFactory, componentProvider);
113 }
114
115 @Override
116 protected Field<PropertysetItem> createFieldComponent() {
117
118 Messages messages = getMessages();
119 if (messages != null) {
120 definition.setI18nBasename(messages.getBasename());
121 }
122
123
124 if (!containsSelectFieldDefinition()) {
125 definition.addField(createSelectFieldDefinition());
126 }
127
128 return new SwitchableField(definition, fieldFactoryFactory, componentProvider, item, i18nAuthoringSupport);
129 }
130
131
132
133
134 @Override
135 protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
136
137 List<String> propertyNames = new ArrayList<>(definition.getFieldNames());
138 if (!propertyNames.contains(definition.getName())) {
139 propertyNames.add(definition.getName());
140 }
141 final Transformer<?> transformer = this.componentProvider.newInstance(transformerClass, item, definition, PropertysetItem.class, propertyNames, i18nAuthoringSupport);
142 transformer.setLocale(getLocale());
143 return transformer;
144 }
145
146
147
148
149 private boolean containsSelectFieldDefinition() {
150 for (ConfiguredFieldDefinition fieldDefinition : definition.getFields()) {
151 if (StringUtils.equals(fieldDefinition.getName(), definition.getName())) {
152 return true;
153 }
154 }
155 return false;
156 }
157
158
159
160
161
162 protected ConfiguredFieldDefinition createSelectFieldDefinition() {
163 try {
164 SelectFieldDefinition selectDefinition;
165
166 String layout = "horizontal";
167 if (definition.getSelectionType().equals("radio")) {
168 selectDefinition = new OptionGroupFieldDefinition();
169 if (definition.getLayout() == Layout.vertical) {
170 layout = "vertical";
171 }
172 } else {
173 selectDefinition = new SelectFieldDefinition();
174 }
175
176 selectDefinition.setOptions(definition.getOptions());
177 selectDefinition.setTransformerClass(null);
178 selectDefinition.setRequired(false);
179 selectDefinition.setSortOptions(false);
180 selectDefinition.setStyleName(layout);
181 selectDefinition.setName(definition.getName());
182
183 if (definition.isI18n() && definition.getTransformerClass().isAssignableFrom(DelegatingCompositeFieldTransformer.class)) {
184 selectDefinition.setI18n(definition.isI18n());
185 }
186 return selectDefinition;
187 } catch (Exception e) {
188 log.warn("Couldn't create the select field.", e.getMessage());
189 StaticFieldDefinitionaticFieldDefinition.html#StaticFieldDefinition">StaticFieldDefinition definition = new StaticFieldDefinition();
190 definition.setName(this.definition.getName());
191 definition.setValue("Select definition not correctly initialised. Please check your field configuration");
192 return definition;
193 }
194 }
195 }