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.external.app.field.factory;
35
36 import info.magnolia.dam.api.ItemKey;
37 import info.magnolia.dam.external.app.field.AssetLinkField;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.api.app.AppController;
40 import info.magnolia.ui.api.app.ChooseDialogCallback;
41 import info.magnolia.ui.api.context.UiContext;
42 import info.magnolia.ui.form.field.definition.LinkFieldDefinition;
43 import info.magnolia.ui.form.field.factory.AbstractFieldFactory;
44
45 import javax.inject.Inject;
46
47 import org.apache.commons.lang3.StringUtils;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51 import com.vaadin.data.Item;
52 import com.vaadin.ui.Button;
53 import com.vaadin.ui.Field;
54
55
56
57
58
59
60 public class AssetLinkFieldFactory<D extends LinkFieldDefinition> extends AbstractFieldFactory<D, String> {
61
62 private static final Logger log = LoggerFactory.getLogger(AssetLinkFieldFactory.class);
63
64 private final AppController appController;
65 private final UiContext uiContext;
66 private ComponentProvider componentProvider;
67
68 private AssetLinkField linkField;
69
70 @Inject
71 public AssetLinkFieldFactory(D definition, Item relatedFieldItem, AppController appController, UiContext uiContext, ComponentProvider componentProvider) {
72 super(definition, relatedFieldItem);
73 this.appController = appController;
74 this.uiContext = uiContext;
75 this.componentProvider = componentProvider;
76 }
77
78 @Override
79 public void setComponentProvider(ComponentProvider componentProvider) {
80 super.setComponentProvider(componentProvider);
81 this.componentProvider = componentProvider;
82 }
83
84 @Override
85 protected Field<String> createFieldComponent() {
86 linkField = new AssetLinkField(definition, componentProvider);
87
88 linkField.setButtonCaptionNew(getMessage(definition.getButtonSelectNewLabel()));
89 linkField.setButtonCaptionOther(getMessage(definition.getButtonSelectOtherLabel()));
90
91 linkField.getSelectButton().addClickListener(createButtonClickListener());
92 return linkField;
93 }
94
95
96
97
98
99 private Button.ClickListener createButtonClickListener() {
100 return new Button.ClickListener() {
101 @Override
102 public void buttonClick(Button.ClickEvent event) {
103 ChooseDialogCallback callback = createChooseDialogCallback();
104 String value = linkField.getTextField().getValue();
105 if (StringUtils.isNotBlank(definition.getTargetTreeRootPath())) {
106 appController.openChooseDialog(definition.getAppName(), uiContext, definition.getTargetTreeRootPath(), value, callback);
107 } else {
108 appController.openChooseDialog(definition.getAppName(), uiContext, value, callback);
109 }
110 }
111 };
112 }
113
114 protected ChooseDialogCallback createChooseDialogCallback() {
115 return new ChooseDialogCallback() {
116
117 @Override
118 public void onItemChosen(String actionName, final Object chosenValue) {
119 if (chosenValue instanceof ItemKey) {
120 ItemKey key = (ItemKey) chosenValue;
121 String compoundId = key.asString();
122 linkField.setValue(compoundId);
123 }
124 }
125
126 @Override
127 public void onCancel() {
128 }
129 };
130 }
131 }