Project

General

Profile

« Previous | Next » 

Revision ad6c211a

Added by Andreas Kohlbecker over 2 years ago

ref #6732 rank selector offering compact and full list of ranks

View differences:

src/main/java/eu/etaxonomy/cdm/service/CdmBeanItemContainerFactory.java
68 68
        return termItemContainer;
69 69
    }
70 70

  
71
    @Transactional(readOnly=true)
72
    public <T extends DefinedTermBase> BeanItemContainer<T> buildTermItemContainer(Class<T> type, TermType termType) {
73

  
74
        clearSession();
75
        // TODO use TermCacher?
76
        List<T> terms = repo.getTermService().listByTermType(termType, null, null, orderHints, INIT_STRATEGY);
77
        BeanItemContainer<T> termItemContainer = new BeanItemContainer<>(DefinedTermBase.class);
78
        termItemContainer.addAll(terms);
79
        return termItemContainer;
80
    }
81

  
82

  
71 83
    @Transactional(readOnly=true)
72 84
    public BeanItemContainer<DefinedTermBase> buildVocabularyTermsItemContainer(UUID vocabularyUuid) {
73 85

  
src/main/java/eu/etaxonomy/cdm/vaadin/ui/RegistrationUIDefaults.java
12 12
import java.text.NumberFormat;
13 13
import java.util.Arrays;
14 14
import java.util.EnumSet;
15
import java.util.HashSet;
15 16
import java.util.List;
17
import java.util.Set;
16 18

  
17 19
import eu.etaxonomy.cdm.model.common.AnnotationType;
18 20
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
21
import eu.etaxonomy.cdm.model.name.Rank;
19 22
import eu.etaxonomy.cdm.model.reference.ReferenceType;
20 23
import eu.etaxonomy.cdm.persistence.permission.Role;
21 24
import eu.etaxonomy.cdm.vaadin.permission.RolesAndPermissions;
......
64 67
            ReferenceType.Report
65 68
            );
66 69

  
70
    public static final Set<Rank> RANK_SET_COMPACT = new HashSet<>(Arrays.asList(
71
            // see https://dev.e-taxonomy.eu/redmine/issues/6732
72
            Rank.GENUS(),
73
            Rank.SPECIES(),
74
            Rank.SUBSPECIES(),
75
            Rank.VARIETY(),
76
            Rank.FORM()
77
            ));
78

  
67 79
    /**
68 80
     *  TODO make configurable as preset and in TaxonNameEditor
69 81
     */
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/TaxonNameEditorPresenter.java
25 25
import org.vaadin.spring.events.annotation.EventBusListenerMethod;
26 26
import org.vaadin.viritin.fields.AbstractElementCollection;
27 27

  
28
import com.vaadin.data.Container.Filter;
29
import com.vaadin.data.Item;
28 30
import com.vaadin.data.Property;
29 31
import com.vaadin.data.util.BeanItemContainer;
30 32
import com.vaadin.spring.annotation.SpringComponent;
......
130 132

  
131 133
    private Integer taxonNameId;
132 134

  
135
    private BeanItemContainer<DefinedTermBase> rankTermItemContainer;
136

  
137
    private Filter rankListFilter;
138

  
139
    /**
140
     * the taxon names rank as loaded from the persistence layer
141
     */
142
    private Rank initialRank;
143

  
144

  
133 145
    @SuppressWarnings("serial")
134 146
    @Override
135 147
    public void handleViewEntered() {
......
142 154
                .buildEnumTermItemContainer(NomenclaturalCodeEdition.class,
143 155
                        nomCodes.toArray(new NomenclaturalCodeEdition[nomCodes.size()]));
144 156

  
157
        rankTermItemContainer = cdmBeanItemContainerFactory.buildTermItemContainer(TermType.Rank);
158
        rankListFilter = new Filter() {
159
            @Override
160
            public boolean passesFilter(Object itemId, Item item) throws UnsupportedOperationException {
161
                return getView().isRanksFullList() || RegistrationUIDefaults.RANK_SET_COMPACT.contains(itemId) || itemId.equals(initialRank);
162
            }
163
            @Override
164
            public boolean appliesToProperty(Object propertyId) {
165
                return false;
166
            }};
167
        rankTermItemContainer.addContainerFilter(rankListFilter);
145 168
        getView().getRankSelect()
146
                .setContainerDataSource(cdmBeanItemContainerFactory.buildTermItemContainer(TermType.Rank));
169
                .setContainerDataSource(rankTermItemContainer);
147 170
        getView().getRankSelect().setItemCaptionPropertyId("label");
171
        getView().getRankSelectFullListToggle().addClickListener(e -> {
172
            updateRankTermItemContainer();
173
        });
148 174

  
149 175
        CdmFilterablePagingProvider<AgentBase, TeamOrPersonBase> termOrPersonPagingProvider = pagingProviderFactory
150 176
                .teamOrPersonPagingProvider();
......
280 306
                .buildVocabularyTermsItemContainer(AnnotationType.EDITORIAL().getVocabulary().getUuid()));
281 307
    }
282 308

  
309
    public void updateRankTermItemContainer() {
310
        // add and remove the filter to update the list of rank terms
311
        // the filter itself will behave accordingly to the isRanksFullList in the view
312
        rankTermItemContainer.removeContainerFilter(rankListFilter);
313
        rankTermItemContainer.addContainerFilter(rankListFilter);
314
    }
315

  
283 316
    @Deprecated
284 317
    private void addNomenclaturalStatus(NomenclaturalStatusDTO element) {
285 318
        // Nothing to do
......
288 321
    @Override
289 322
    protected void adaptDataProviders() {
290 323
        updateOrthographicCorrectionRestriction();
324
        updateRankTermItemContainer();
291 325
    }
292 326

  
293 327
    private void updateOrthographicCorrectionRestriction() {
......
411 445
        }
412 446

  
413 447
        taxonNameId = Integer.valueOf(taxonName.getId());
448
        initialRank = taxonName.getRank();
414 449
        relatedNamePagingProvider.addRestriction(new Restriction<>("id", Operator.AND_NOT, null, taxonNameId));
415 450

  
416 451
        return taxonName;
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/TaxonNamePopupEditor.java
23 23
import com.vaadin.data.Property;
24 24
import com.vaadin.data.Property.ValueChangeListener;
25 25
import com.vaadin.data.Validator.InvalidValueException;
26
import com.vaadin.server.FontAwesome;
26 27
import com.vaadin.shared.ui.MarginInfo;
27 28
import com.vaadin.spring.annotation.SpringComponent;
28 29
import com.vaadin.ui.AbstractField;
29 30
import com.vaadin.ui.Alignment;
31
import com.vaadin.ui.Button;
30 32
import com.vaadin.ui.CheckBox;
31 33
import com.vaadin.ui.Component;
34
import com.vaadin.ui.CssLayout;
32 35
import com.vaadin.ui.GridLayout;
33 36
import com.vaadin.ui.NativeSelect;
34 37
import com.vaadin.ui.Panel;
35 38
import com.vaadin.ui.TextField;
39
import com.vaadin.ui.themes.ValoTheme;
36 40

  
37 41
import eu.etaxonomy.cdm.api.util.RoleProberImpl;
38 42
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
......
129 133

  
130 134
    private NativeSelect rankSelect;
131 135

  
136
    private Button rankSelectFullListToggle;
137

  
132 138
    private TeamOrPersonField combinationAuthorshipField;
133 139

  
134 140
    private TeamOrPersonField exCombinationAuthorshipField;
......
157 163

  
158 164
    private OrthographicCorrectionReferenceValidator orthographicCorrectionValidator;
159 165

  
166
    private boolean isRanksFullList = false;
167

  
160 168
    /**
161 169
     * By default  AnnotationType.EDITORIAL() is enabled.
162 170
     *
......
277 285
        rankSelect = new NativeSelect("Rank");
278 286
        rankSelect.setNullSelectionAllowed(false);
279 287
        rankSelect.setWidth(100, Unit.PERCENTAGE);
280
        addField(rankSelect, "rank", 0, row, 1, row);
281
        grid.setComponentAlignment(rankSelect, Alignment.TOP_RIGHT);
288
        rankSelectFullListToggle = new Button();
289
        updateRankSelectFullListToggleButton();
290
        rankSelectFullListToggle.addClickListener(e -> {
291
            isRanksFullList = !isRanksFullList;
292
            updateRankSelectFullListToggleButton();
293
        });
294
        CssLayout rankSelectGroup = new CssLayout();
295
        rankSelectGroup.setWidth(100,  Unit.PERCENTAGE);
296
        rankSelectGroup.addComponents(rankSelect, rankSelectFullListToggle);
297
        bindField(rankSelect, "rank");
298
        applyDefaultComponentStyles(rankSelect);
299
        applyDefaultComponentStyles(rankSelectFullListToggle);
300
        applyDefaultComponentStyle(rankSelectGroup);
301
        addComponent(rankSelectGroup, 0, row, 1, row);
302
        rankSelectGroup.setStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP);
303
        grid.setComponentAlignment(rankSelectGroup, Alignment.TOP_RIGHT);
282 304

  
283 305
        row++;
284 306
        basionymToggle = new CheckBox("With basionym");
......
581 603

  
582 604
    }
583 605

  
606
    private void updateRankSelectFullListToggleButton() {
607
        if(isRanksFullList) {
608
            rankSelectFullListToggle.setIcon(FontAwesome.COMPRESS);
609
            rankSelectFullListToggle.setDescription("Show short list of ranks");
610
        } else {
611
            rankSelectFullListToggle.setIcon(FontAwesome.EXPAND);
612
            rankSelectFullListToggle.setDescription("Show full list of ranks");
613
        }
614
    }
615

  
584 616
    protected TeamOrPersonBase inferBasiomynAuthors() {
585 617
        List<TaxonName> basionyms = basionymsComboboxSelect.getValue();
586 618
        if(!basionyms.isEmpty() && basionyms.get(0) != null){
......
807 839
        // TODO use getField() instead and remove field references
808 840
        Rank rank = (Rank) rankSelect.getValue();
809 841

  
842
        @SuppressWarnings("deprecation")
810 843
        boolean isSpeciesOrBelow = !rank.isHigher(Rank.SPECIES()) && !rank.getRankClass().equals(RankClass.Unknown);
811 844
        Boolean withBasionymSection = BooleanUtils.isTrue(basionymToggle.getValue());
812 845
        Boolean withValidationSection = BooleanUtils.isTrue(validationToggle.getValue());
......
971 1004
        return rankSelect;
972 1005
    }
973 1006

  
1007
    @Override
1008
    public Button getRankSelectFullListToggle() {
1009
        return rankSelectFullListToggle;
1010
    }
1011

  
974 1012
    @Override
975 1013
    public AbstractField<String> getGenusOrUninomialField(){
976 1014
        return genusOrUninomialField;
......
1017 1055
        return modesActive.contains(mode);
1018 1056
    }
1019 1057

  
1058
    @Override
1059
    public boolean isRanksFullList() {
1060
        return isRanksFullList;
1061
    }
1062

  
1020 1063
    @Override
1021 1064
    public void disableMode(TaxonNamePopupEditorMode mode){
1022 1065
        modesActive.remove(mode);
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/TaxonNamePopupEditorView.java
13 13
import org.vaadin.viritin.fields.ElementCollectionField;
14 14

  
15 15
import com.vaadin.ui.AbstractField;
16
import com.vaadin.ui.Button;
16 17
import com.vaadin.ui.CheckBox;
17 18
import com.vaadin.ui.Component;
18 19
import com.vaadin.ui.NativeSelect;
......
36 37
 */
37 38
public interface TaxonNamePopupEditorView extends ApplicationView<TaxonNameEditorPresenter>, AnnotationsEditor {
38 39

  
39
    /**
40
     * @return
41
     */
42 40
    public ToOneRelatedEntityCombobox<Reference> getNomReferenceCombobox();
43 41

  
44
    /**
45
     * @return
46
     */
47 42
    public ToManyRelatedEntitiesComboboxSelect<TaxonName> getBasionymComboboxSelect();
48 43

  
49 44
    public NativeSelect getRankSelect();
50 45

  
51
    /**
52
     * @return the exBasionymAuthorshipField
53
     */
46
    public Button getRankSelectFullListToggle();
47

  
54 48
    public TeamOrPersonField getExBasionymAuthorshipField();
55 49

  
56
    /**
57
     * @return the basionymAuthorshipField
58
     */
59 50
    public TeamOrPersonField getBasionymAuthorshipField();
60 51

  
61
    /**
62
     * @return the combinationAuthorshipField
63
     */
64 52
    public TeamOrPersonField getCombinationAuthorshipField();
65 53

  
66
    /**
67
     * @return the exCombinationAuthorshipField
68
     */
69 54
    public TeamOrPersonField getExCombinationAuthorshipField();
70 55

  
71 56
    void disableMode(TaxonNamePopupEditorMode mode);
......
77 62
     */
78 63
    void enableMode(TaxonNamePopupEditorMode mode);
79 64

  
80
    /**
81
     * @param mode
82
     * @return
83
     */
84 65
    boolean isModeEnabled(TaxonNamePopupEditorMode mode);
85 66

  
86 67
    public EnumSet<TaxonNamePopupEditorMode> getModesActive();
87 68

  
88
    /**
89
     * @return
90
     */
91 69
    CheckBox getBasionymToggle();
92 70

  
93 71
    void updateAuthorshipFields();
94 72

  
95
    /**
96
     * @return
97
     */
98 73
    ToManyRelatedEntitiesComboboxSelect<TaxonName> getReplacedSynonymsComboboxSelect();
99 74

  
100
    /**
101
     * @return
102
     */
103 75
    NameRelationField getValidationField();
104 76

  
105
    /**
106
     * @return
107
     */
108 77
    AbstractField<String> getGenusOrUninomialField();
109 78

  
110
    /**
111
     * @return the infraGenericEpithetField
112
     */
113 79
    public AbstractField<String> getInfraGenericEpithetField();
114 80

  
115
    /**
116
     * @return the specificEpithetField
117
     */
118 81
    public AbstractField<String> getSpecificEpithetField();
119 82

  
120
    /**
121
     * @return the infraSpecificEpithetField
122
     */
123 83
    public AbstractField<String> getInfraSpecificEpithetField();
124 84

  
125 85
    public NameRelationField getOrthographicVariantField();
126 86

  
127 87
    CheckBox getOrthographicVariantToggle();
128 88

  
129
    /**
130
     * @return
131
     */
132 89
    TextField getNomenclaturalReferenceDetail();
133 90

  
134 91
    ElementCollectionField<NomenclaturalStatusDTO> getNomStatusCollectionField();
135 92

  
136
    /**
137
     * @param components
138
     */
139 93
    void applyDefaultComponentStyle(Component[] components);
140 94

  
95
    /**
96
     * @return a flag indicating if the rank select should offer the full list of ranks or a compact list
97
     */
98
    public boolean isRanksFullList();
141 99

  
142 100
}

Also available in: Unified diff