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.dam.app.assets.field;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.api.context.UiContext;
40 import info.magnolia.ui.api.event.AdmincentralEventBus;
41 import info.magnolia.ui.api.event.ChooseDialogEventBus;
42 import info.magnolia.ui.api.event.ContentChangedEvent;
43 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
44 import info.magnolia.ui.form.field.factory.AbstractFieldFactory;
45 import info.magnolia.ui.imageprovider.ImageProvider;
46 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
47 import info.magnolia.ui.workbench.WorkbenchPresenter;
48 import info.magnolia.ui.workbench.event.SelectionChangedEvent;
49
50 import javax.inject.Inject;
51 import javax.inject.Named;
52
53 import org.apache.commons.collections4.CollectionUtils;
54
55 import com.vaadin.v7.data.Item;
56 import com.vaadin.v7.ui.Field;
57
58
59
60
61 public class DamWorkbenchFieldFactory extends AbstractFieldFactory<DamWorkbenchFieldDefinition, Object> {
62
63 private final DamWorkbenchFieldDefinition definition;
64
65 private final WorkbenchPresenter workbenchPresenter;
66 private final ContentConnector contentConnector;
67
68 private final EventBus chooseDialogEventBus;
69 private final EventBus admincentralEventBus;
70
71 private final ComponentProvider componentProvider;
72 private final SimpleTranslator i18n;
73
74 @Inject
75 public DamWorkbenchFieldFactory(
76 DamWorkbenchFieldDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport,
77 WorkbenchPresenter workbenchPresenter, ContentConnector contentConnector,
78 @Named(ChooseDialogEventBus.NAME) EventBus chooseDialogEventBus,
79 @Named(AdmincentralEventBus.NAME) EventBus admincentralEventBus, ComponentProvider componentProvider, SimpleTranslator i18n) {
80
81 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
82 this.definition = definition;
83 this.workbenchPresenter = workbenchPresenter;
84 this.contentConnector = contentConnector;
85 this.chooseDialogEventBus = chooseDialogEventBus;
86 this.admincentralEventBus = admincentralEventBus;
87 this.componentProvider = componentProvider;
88 this.i18n = i18n;
89 }
90
91 @Override
92 protected Field<Object> createFieldComponent() {
93 final DamWorkbenchField workbenchField = new DamWorkbenchField(definition.getWorkbench(), definition.getImageProvider(), workbenchPresenter, chooseDialogEventBus, i18n);
94
95 if (admincentralEventBus != null) {
96 admincentralEventBus.addHandler(ContentChangedEvent.class, event -> {
97 Object itemId = event.getItemId();
98 if (contentConnector.canHandleItem(itemId)) {
99 workbenchField.getPresenter().refresh();
100 workbenchField.getPresenter().select(itemId);
101 }
102 });
103 }
104
105 ImageProvider imageProvider = componentProvider.newInstance(definition.getImageProvider().getImageProviderClass(), definition.getImageProvider());
106
107 if (imageProvider != null) {
108 Object thumbnailResource = imageProvider.getThumbnailResource(workbenchField.getValue(), ImageProvider.PORTRAIT_GENERATOR);
109 workbenchField.setPreviewResource(thumbnailResource);
110
111 this.chooseDialogEventBus.addHandler(SelectionChangedEvent.class, event -> {
112 Object selectedThumbnailResource = null;
113
114 if (CollectionUtils.isNotEmpty(event.getItemIds()) && event.getItemIds().size() == 1) {
115 selectedThumbnailResource = imageProvider.getThumbnailResource(event.getFirstItemId(), ImageProvider.PORTRAIT_GENERATOR);
116 }
117 workbenchField.setPreviewResource(selectedThumbnailResource);
118 });
119 }
120
121 return workbenchField;
122 }
123 }