View Javadoc
1   /**
2    * This file Copyright (c) 2013-2018 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
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.CompositeField;
41  import info.magnolia.ui.form.field.definition.CompositeFieldDefinition;
42  import info.magnolia.ui.form.field.transformer.Transformer;
43  
44  import java.util.List;
45  
46  import javax.inject.Inject;
47  
48  import org.slf4j.Logger;
49  import org.slf4j.LoggerFactory;
50  
51  import com.vaadin.v7.data.Item;
52  import com.vaadin.v7.data.util.PropertysetItem;
53  import com.vaadin.v7.ui.Field;
54  
55  /**
56   * Factory used to initialize a {@link CompositeField}.
57   *
58   * @param <D> the field definition type — has to inherit from {@link CompositeFieldDefinition}.
59   *
60   * @deprecated since 6.2 - without direct replacement.
61   *
62   * @see <a href="https://documentation.magnolia-cms.com/display/DOCS62/Upgrading+to+Magnolia+6.2.x">Upgrading to Magnolia 6.2.x</a>
63   */
64  @Deprecated
65  public class CompositeFieldFactory<D extends CompositeFieldDefinition> extends AbstractFieldFactory<D, PropertysetItem> {
66  
67      private static final Logger log = LoggerFactory.getLogger(CompositeFieldFactory.class);
68      private FieldFactoryFactory fieldFactoryFactory;
69      private ComponentProvider componentProvider;
70      private final I18NAuthoringSupport i18nAuthoringSupport;
71  
72      @Inject
73      public CompositeFieldFactory(D definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider) {
74          super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
75          this.fieldFactoryFactory = fieldFactoryFactory;
76          this.componentProvider = componentProvider;
77          this.i18nAuthoringSupport = i18nAuthoringSupport;
78      }
79  
80      /**
81       * @deprecated since 5.4.7 - use {@link #CompositeFieldFactory(CompositeFieldDefinition, Item, UiContext, I18NAuthoringSupport, FieldFactoryFactory, ComponentProvider)} instead.
82       */
83      @Deprecated
84      public CompositeFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, ComponentProvider componentProvider, I18NAuthoringSupport i18nAuthoringSupport) {
85          this(definition, relatedFieldItem, null, i18nAuthoringSupport, fieldFactoryFactory, componentProvider);
86      }
87  
88      /**
89       * @deprecated since 5.3.5 removing i18nContentSupport dependency (actually unused way before that). Besides, fields should use i18nAuthoringSupport for internationalization.
90       */
91      @Deprecated
92      public CompositeFieldFactory(D definition, Item relatedFieldItem, FieldFactoryFactory fieldFactoryFactory, I18nContentSupport i18nContentSupport, ComponentProvider componentProvider) {
93          this(definition, relatedFieldItem, null, componentProvider.getComponent(I18NAuthoringSupport.class), fieldFactoryFactory, componentProvider);
94      }
95  
96      @Override
97      protected Field<PropertysetItem> createFieldComponent() {
98          // FIXME change i18n setting : MGNLUI-1548
99          definition.setI18nBasename(getMessages().getBasename());
100 
101         // we do not support composite fields themselves to be required. Definition is overwritten here. Can't set it on the field after its creation cause otherwise the required asterisk is displayed.
102         if (definition.isRequired()) {
103             log.warn("Definition of the composite field named [{}] is configured as required which is not supported (it is possible to configure the sub-fields as required though).", definition.getName());
104             definition.setRequired(false);
105         }
106         CompositeFieldompositeField.html#CompositeField">CompositeField field = new CompositeField(definition, fieldFactoryFactory, componentProvider, item, i18nAuthoringSupport);
107         return field;
108     }
109 
110     /**
111      * Create a new Instance of {@link Transformer}.
112      */
113     @Override
114     protected Transformer<?> initializeTransformer(Class<? extends Transformer<?>> transformerClass) {
115         List<String> propertyNames = definition.getFieldNames();
116         Transformer<?> transformer = this.componentProvider.newInstance(transformerClass, item, definition, PropertysetItem.class, propertyNames);
117         transformer.setLocale(getLocale());
118         return transformer;
119     }
120 }