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