Revision 414d166a
Added by Andreas Kohlbecker almost 6 years ago
src/main/java/eu/etaxonomy/cdm/vaadin/event/NestedButtonStateUpdater.java | ||
---|---|---|
1 |
/** |
|
2 |
* Copyright (C) 2018 EDIT |
|
3 |
* European Distributed Institute of Taxonomy |
|
4 |
* http://www.e-taxonomy.eu |
|
5 |
* |
|
6 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
|
7 |
* See LICENSE.TXT at the top of this package for the full license terms. |
|
8 |
*/ |
|
9 |
package eu.etaxonomy.cdm.vaadin.event; |
|
10 |
|
|
11 |
import com.vaadin.data.Property.ValueChangeListener; |
|
12 |
|
|
13 |
/** |
|
14 |
* @author a.kohlbecker |
|
15 |
* @since Jun 6, 2018 |
|
16 |
* |
|
17 |
*/ |
|
18 |
public interface NestedButtonStateUpdater extends ValueChangeListener{ |
|
19 |
|
|
20 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/event/ToOneRelatedEntityButtonUpdater.java | ||
---|---|---|
9 | 9 |
package eu.etaxonomy.cdm.vaadin.event; |
10 | 10 |
|
11 | 11 |
import com.vaadin.data.Property.ValueChangeEvent; |
12 |
import com.vaadin.data.Property.ValueChangeListener; |
|
13 | 12 |
|
14 | 13 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
15 | 14 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
... | ... | |
21 | 20 |
* @since 19.10.2017 |
22 | 21 |
* |
23 | 22 |
*/ |
24 |
public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements ValueChangeListener {
|
|
23 |
public class ToOneRelatedEntityButtonUpdater<CDM extends CdmBase> implements NestedButtonStateUpdater {
|
|
25 | 24 |
|
26 | 25 |
private static final long serialVersionUID = 4472031263172275012L; |
27 | 26 |
|
... | ... | |
33 | 32 |
public ToOneRelatedEntityButtonUpdater(ToOneRelatedEntityField<CDM> toOneRelatedEntityField){ |
34 | 33 |
this.toOneRelatedEntityField = toOneRelatedEntityField; |
35 | 34 |
this.type = toOneRelatedEntityField.getType(); |
35 |
toOneRelatedEntityField.setEditButtonEnabled(false); |
|
36 | 36 |
} |
37 | 37 |
|
38 | 38 |
/** |
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationDTORow.java | ||
---|---|---|
17 | 17 |
import com.vaadin.ui.TextField; |
18 | 18 |
|
19 | 19 |
import eu.etaxonomy.cdm.model.common.DefinedTerm; |
20 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
|
20 | 21 |
import eu.etaxonomy.cdm.model.reference.Reference; |
21 | 22 |
import eu.etaxonomy.cdm.vaadin.component.CollectionRow; |
22 | 23 |
import eu.etaxonomy.cdm.vaadin.component.CollectionRowItemCollection; |
23 | 24 |
import eu.etaxonomy.cdm.vaadin.component.CollectionRowRepresentative; |
24 | 25 |
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix; |
26 |
import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater; |
|
25 | 27 |
import eu.etaxonomy.cdm.vaadin.model.registration.KindOfUnitTerms; |
26 | 28 |
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter; |
27 | 29 |
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox; |
... | ... | |
52 | 54 |
ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference = |
53 | 55 |
new ToOneRelatedEntityCombobox<Reference>(null, Reference.class); |
54 | 56 |
TextField mediaSpecimenReferenceDetail = new TextFieldNFix(); //"Image reference detail"); |
57 |
private ToOneRelatedEntityButtonUpdater<Reference> mediaSpecimenReferenceUpdater; |
|
58 |
private ToOneRelatedEntityButtonUpdater<Collection> collectionFieldUpdater; |
|
55 | 59 |
|
56 | 60 |
public SpecimenTypeDesignationDTORow(){ |
57 | 61 |
kindOfUnit.setRows(1); |
... | ... | |
64 | 68 |
preferredStableUri.setWidth(150, Unit.PIXELS); |
65 | 69 |
preferredStableUri.setConverter(new UriConverter()); |
66 | 70 |
collection.setWidth(200, Unit.PIXELS); |
71 |
collectionFieldUpdater = new ToOneRelatedEntityButtonUpdater<Collection>(collection); |
|
72 |
collection.addValueChangeListener( |
|
73 |
collectionFieldUpdater |
|
74 |
); |
|
67 | 75 |
mediaUri.setWidth(150, Unit.PIXELS); |
68 | 76 |
mediaUri.setConverter(new UriConverter()); |
69 | 77 |
mediaSpecimenReference.setWidth(200, Unit.PIXELS); |
78 |
mediaSpecimenReferenceUpdater = new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference); |
|
79 |
mediaSpecimenReference.addValueChangeListener( |
|
80 |
mediaSpecimenReferenceUpdater |
|
81 |
); |
|
70 | 82 |
mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS); |
71 | 83 |
|
72 | 84 |
kindOfUnit.addValueChangeListener(e -> |
... | ... | |
114 | 126 |
kindOfUnit.setEnabled(!kindOfUnitLocked); |
115 | 127 |
kindOfUnit.setDescription(kindOfUnitLocked ? |
116 | 128 |
"Can not be changed since the type specimen is associated with multiple type designations" : ""); |
129 |
|
|
117 | 130 |
mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType); |
118 | 131 |
mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType); |
119 | 132 |
mediaUri.setEnabled(publishedImageType || unPublishedImageType); |
src/main/java/eu/etaxonomy/vaadin/component/CompositeCustomField.java | ||
---|---|---|
17 | 17 |
import com.vaadin.data.fieldgroup.FieldGroup.CommitEvent; |
18 | 18 |
import com.vaadin.data.fieldgroup.FieldGroup.CommitException; |
19 | 19 |
import com.vaadin.data.fieldgroup.FieldGroup.CommitHandler; |
20 |
import com.vaadin.ui.AbstractField; |
|
20 | 21 |
import com.vaadin.ui.Button; |
21 | 22 |
import com.vaadin.ui.Component; |
22 | 23 |
import com.vaadin.ui.CustomField; |
23 | 24 |
import com.vaadin.ui.Field; |
24 | 25 |
import com.vaadin.ui.HasComponents; |
25 | 26 |
|
27 |
import eu.etaxonomy.cdm.vaadin.event.NestedButtonStateUpdater; |
|
28 |
|
|
26 | 29 |
/** |
27 | 30 |
* TODO implement height methods for full component size support |
28 | 31 |
* |
... | ... | |
232 | 235 |
|
233 | 236 |
/** |
234 | 237 |
* Sets the readonly state for the component but treats Buttons differently. |
235 |
* Buttons are also set to disabled to make them inactive. |
|
236 |
|
|
238 |
* For nested Buttons the readonly state is projected to enabled state to |
|
239 |
* make them inactive. Finally NestedButtonStateUpdaters are triggered to |
|
240 |
* allow to disable buttons accordingly to user permissions. |
|
241 |
* |
|
237 | 242 |
* @param readOnly |
238 | 243 |
* @param component |
239 | 244 |
*/ |
... | ... | |
242 | 247 |
if(Button.class.isAssignableFrom(component.getClass())){ |
243 | 248 |
component.setEnabled(!readOnly); |
244 | 249 |
} |
250 |
triggerNestedButtonStateUpdaters(); |
|
251 |
} |
|
252 |
|
|
253 |
/** |
|
254 |
* |
|
255 |
*/ |
|
256 |
protected void triggerNestedButtonStateUpdaters() { |
|
257 |
for(Object l : getListeners(AbstractField.ValueChangeEvent.class)){ |
|
258 |
if(NestedButtonStateUpdater.class.isAssignableFrom(l.getClass())){ |
|
259 |
// trigger a fake ValueChangeEvent to let the ToOneRelatedEntityButtonUpdater fix the states |
|
260 |
// of nested buttons |
|
261 |
((NestedButtonStateUpdater)l).valueChange(new AbstractField.ValueChangeEvent(this)); |
|
262 |
} |
|
263 |
} |
|
264 |
|
|
245 | 265 |
} |
246 | 266 |
|
247 | 267 |
@Override |
Also available in: Unified diff
CustomComponentFields using NestedButtonStateUpdaters for consistent button states