2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.view
.registration
;
11 import static eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationStyles
.LABEL_NOWRAP
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Collection
;
15 import java
.util
.Collections
;
16 import java
.util
.EnumSet
;
17 import java
.util
.HashMap
;
18 import java
.util
.Iterator
;
19 import java
.util
.List
;
22 import java
.util
.Stack
;
23 import java
.util
.UUID
;
25 import org
.springframework
.security
.core
.GrantedAuthority
;
26 import org
.vaadin
.viritin
.fields
.LazyComboBox
;
28 import com
.vaadin
.navigator
.View
;
29 import com
.vaadin
.navigator
.ViewChangeListener
.ViewChangeEvent
;
30 import com
.vaadin
.server
.FontAwesome
;
31 import com
.vaadin
.server
.Page
;
32 import com
.vaadin
.shared
.ui
.label
.ContentMode
;
33 import com
.vaadin
.spring
.annotation
.SpringView
;
34 import com
.vaadin
.ui
.Alignment
;
35 import com
.vaadin
.ui
.Button
;
36 import com
.vaadin
.ui
.Component
;
37 import com
.vaadin
.ui
.CssLayout
;
38 import com
.vaadin
.ui
.GridLayout
;
39 import com
.vaadin
.ui
.HorizontalLayout
;
40 import com
.vaadin
.ui
.Label
;
41 import com
.vaadin
.ui
.Notification
;
42 import com
.vaadin
.ui
.Panel
;
43 import com
.vaadin
.ui
.UI
;
44 import com
.vaadin
.ui
.VerticalLayout
;
45 import com
.vaadin
.ui
.Window
;
46 import com
.vaadin
.ui
.themes
.ValoTheme
;
48 import eu
.etaxonomy
.cdm
.api
.service
.dto
.RegistrationDTO
;
49 import eu
.etaxonomy
.cdm
.api
.service
.dto
.RegistrationWorkingSet
;
50 import eu
.etaxonomy
.cdm
.api
.service
.name
.TypeDesignationSet
.TypeDesignationSetType
;
51 import eu
.etaxonomy
.cdm
.api
.util
.RoleProberImpl
;
52 import eu
.etaxonomy
.cdm
.model
.common
.VersionableEntity
;
53 import eu
.etaxonomy
.cdm
.model
.name
.Registration
;
54 import eu
.etaxonomy
.cdm
.model
.name
.RegistrationStatus
;
55 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
56 import eu
.etaxonomy
.cdm
.model
.permission
.CRUD
;
57 import eu
.etaxonomy
.cdm
.ref
.EntityReference
;
58 import eu
.etaxonomy
.cdm
.ref
.TypedEntityReference
;
59 import eu
.etaxonomy
.cdm
.service
.UserHelperAccess
;
60 import eu
.etaxonomy
.cdm
.vaadin
.component
.BadgeButton
;
61 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItem
;
62 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItemButtons
;
63 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItemNameAndTypeButtons
;
64 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItemNameAndTypeButtons
.TypeDesignationSetButton
;
65 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationItemsPanel
;
66 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationStatusFieldInstantiator
;
67 import eu
.etaxonomy
.cdm
.vaadin
.component
.registration
.RegistrationStatusLabel
;
68 import eu
.etaxonomy
.cdm
.vaadin
.event
.EditorActionContext
;
69 import eu
.etaxonomy
.cdm
.vaadin
.event
.RegistrationEditorAction
;
70 import eu
.etaxonomy
.cdm
.vaadin
.event
.ShowDetailsEvent
;
71 import eu
.etaxonomy
.cdm
.vaadin
.event
.TaxonNameEditorAction
;
72 import eu
.etaxonomy
.cdm
.vaadin
.event
.TypeDesignationSetEditorAction
;
73 import eu
.etaxonomy
.cdm
.vaadin
.event
.registration
.RegistrationWorkingsetAction
;
74 import eu
.etaxonomy
.cdm
.vaadin
.permission
.AccessRestrictedView
;
75 import eu
.etaxonomy
.cdm
.vaadin
.permission
.PermissionDebugUtils
;
76 import eu
.etaxonomy
.cdm
.vaadin
.permission
.RolesAndPermissions
;
77 import eu
.etaxonomy
.cdm
.vaadin
.theme
.EditValoTheme
;
78 import eu
.etaxonomy
.cdm
.vaadin
.view
.AbstractPageView
;
79 import eu
.etaxonomy
.vaadin
.event
.EditorActionType
;
82 * @author a.kohlbecker
85 @SpringView(name
=RegistrationWorksetViewBean
.NAME
)
86 public class RegistrationWorksetViewBean
87 extends AbstractPageView
<RegistrationWorkingsetPresenter
>
88 implements RegistrationWorkingsetView
, View
, AccessRestrictedView
{
90 private static final long serialVersionUID
= -213040114015958970L;
92 private static final int COL_INDEX_STATE_LABEL
= 0;
94 private static final int COL_INDEX_REG_ITEM
= 1;
96 private static final int COL_INDEX_BUTTON_GROUP
= 2;
98 public static final String DOM_ID_WORKINGSET
= "workingset";
100 public static final String TEXT_NAME_TYPIFICATION
= "covering the name and typifications";
101 public static final String TEXT_TYPIFICATION_ONLY
= "covering typifications only";
103 public static final String NAME
= "workingset";
105 private List
<CssLayout
> registrations
= new ArrayList
<>();
107 private String headerText
= "Registration Workingset Editor";
108 private String subheaderText
= "";
110 private UUID citationUuid
;
112 private GridLayout registrationsGrid
;
114 private RegistrationItem workingsetHeader
;
116 private Panel registrationListPanel
;
118 private Button addNewNameRegistrationButton
;
120 private Button addExistingNameButton
;
122 private LazyComboBox
<TaxonName
> existingNameCombobox
;
124 private Label existingNameRegistrationTypeLabel
;
127 * uses the registrationId as key
129 private Map
<UUID
, RegistrationDetailsItem
> registrationItemMap
= new HashMap
<>();
132 * uses the registrationId as key
134 private Map
<UUID
, EntityReference
> typifiedNamesMap
= new HashMap
<>();
136 private RegistrationStatusFieldInstantiator statusFieldInstantiator
;
138 private String accessDeniedMessage
;
140 private Object existingNameEditor
;
142 public RegistrationWorksetViewBean() {
147 protected void initContent() {
148 getLayout().setId(NAME
);
150 // all content is added in createRegistrationsList()
154 public void enter(ViewChangeEvent event
) {
155 if(event
.getParameters() != null){
156 this.citationUuid
= UUID
.fromString(event
.getParameters());
158 getPresenter().handleViewEntered();
163 public void setWorkingset(RegistrationWorkingSet workingset
) {
165 if(workingsetHeader
!= null){
166 getLayout().removeComponent(workingsetHeader
);
167 getLayout().removeComponent(registrationListPanel
);
169 workingsetHeader
= new RegistrationItem(workingset
, this, getPresenter().getCache());
170 addContentComponent(workingsetHeader
, null);
172 registrationListPanel
= createRegistrationsList(workingset
);
173 registrationListPanel
.setHeight("100%");
174 registrationListPanel
.setStyleName("registration-list");
175 registrationListPanel
.setCaption("Registrations");
176 addContentComponent(registrationListPanel
, 1.0f
);
180 public void setBlockingRegistrations(UUID registrationUuid
, Set
<RegistrationDTO
> blockingRegDTOs
) {
182 RegistrationDetailsItem regItem
= registrationItemMap
.get(registrationUuid
);
184 boolean blockingRegAdded
= false;
185 for(Iterator it
= regItem
.itemFooter
.iterator(); it
.hasNext(); ){
186 if(it
.next() instanceof RegistrationItemsPanel
){
187 blockingRegAdded
= true;
191 if(!blockingRegAdded
){
192 regItem
.itemFooter
.addComponent(new RegistrationItemsPanel(this, "Blocked by", blockingRegDTOs
, getPresenter().getCache()));
197 @Deprecated // no longer needed
198 public void addBlockingRegistration(RegistrationDTO blocking
) {
199 if(registrations
== null) {
200 throw new RuntimeException("A Workingset must be present prior adding blocking registrations.");
202 // add the blocking registration
206 public Panel
createRegistrationsList(RegistrationWorkingSet workingset
) {
208 registrationsGrid
= new GridLayout(3, 1);
209 registrationsGrid
.setWidth("100%");
210 // allow vertical scrolling:
211 registrationsGrid
.setHeightUndefined();
213 //registrationsGrid.setColumnExpandRatio(0, 0.1f);
214 registrationsGrid
.setColumnExpandRatio(1, 1f
);
216 registrationItemMap
.clear();
217 registrationsGrid
.setRows(workingset
.getRegistrationDTOs().size() * 2 + 3);
219 for(RegistrationDTO dto
: workingset
.getRegistrationDTOs()) {
220 row
= putRegistrationListComponent(row
, dto
);
223 // --- Footer with UI to create new registrations ----
224 Label addRegistrationLabel_1
= new Label("Add a new registration for a");
225 Label addRegistrationLabel_2
= new Label("or an");
227 addNewNameRegistrationButton
= new Button("new name");
228 addNewNameRegistrationButton
.setDescription("A name which is newly published in this publication.");
229 Stack
<EditorActionContext
> context
= new Stack
<EditorActionContext
>();
230 context
.push(new EditorActionContext(
231 new TypedEntityReference
<>(Registration
.class, null),
234 addNewNameRegistrationButton
.addClickListener(
236 getViewEventBus().publish(this, new TaxonNameEditorAction(EditorActionType
.ADD
, null, addNewNameRegistrationButton
, null, this, context
));
240 existingNameRegistrationTypeLabel
= new Label();
241 addExistingNameButton
= new Button("existing name:");
242 addExistingNameButton
.setEnabled(false);
243 addExistingNameButton
.addClickListener(e
-> reviewExistingName());
245 existingNameCombobox
= new LazyComboBox
<TaxonName
>(TaxonName
.class);
246 existingNameCombobox
.addValueChangeListener(
248 boolean selectionNotEmpty
= e
.getProperty().getValue() != null;
249 addExistingNameButton
.setEnabled(false);
250 existingNameRegistrationTypeLabel
.setValue(null);
251 if(selectionNotEmpty
){
252 TaxonName name
= (TaxonName
)e
.getProperty().getValue();
253 if(getPresenter().canCreateNameRegistrationFor(name
)){
254 existingNameRegistrationTypeLabel
.setValue(TEXT_NAME_TYPIFICATION
);
255 addExistingNameButton
.setEnabled(true);
257 if(!getPresenter().checkWokingsetContainsProtologe(name
)){
258 existingNameRegistrationTypeLabel
.setValue(TEXT_TYPIFICATION_ONLY
);
259 addExistingNameButton
.setEnabled(true);
263 existingNameRegistrationTypeLabel
.setValue(null);
268 HorizontalLayout buttonContainer
= new HorizontalLayout(
269 addRegistrationLabel_1
,
270 addNewNameRegistrationButton
,
271 addRegistrationLabel_2
,
272 addExistingNameButton
,
273 existingNameCombobox
,
274 existingNameRegistrationTypeLabel
276 buttonContainer
.setSpacing(true);
277 // buttonContainer.setWidth(100, Unit.PERCENTAGE);
278 buttonContainer
.setComponentAlignment(addRegistrationLabel_1
, Alignment
.MIDDLE_LEFT
);
279 buttonContainer
.setComponentAlignment(addRegistrationLabel_2
, Alignment
.MIDDLE_LEFT
);
282 registrationsGrid
.addComponent(buttonContainer
, 0, row
, COL_INDEX_BUTTON_GROUP
, row
);
283 registrationsGrid
.setComponentAlignment(buttonContainer
, Alignment
.MIDDLE_RIGHT
);
286 Label hint
= new Label(
287 "For most names that already exist in the system, it is only possible to create a registration covering type designations. "
288 + "In all other cases please choose <a href=\"registration#!regStart\">\"New\"</a> from the main menu and start a registration for the nomenclatural reference of the name to be registered.",
290 registrationsGrid
.addComponent(hint
, 0, row
, COL_INDEX_BUTTON_GROUP
, row
);
291 registrationsGrid
.setComponentAlignment(hint
, Alignment
.MIDDLE_RIGHT
);
293 Panel namesTypesPanel
= new Panel(registrationsGrid
);
294 namesTypesPanel
.setStyleName(EditValoTheme
.PANEL_CONTENT_PADDING_LEFT
);
295 return namesTypesPanel
;
298 private void reviewExistingName() {
299 // call commit to make the selection available
300 existingNameCombobox
.commit();
301 TaxonName taxonName
= existingNameCombobox
.getValue();
302 Stack
<EditorActionContext
> context
= new Stack
<>();
303 context
.push(new EditorActionContext(
304 TypedEntityReference
.fromEntity(taxonName
),
307 getViewEventBus().publish(
309 new TaxonNameEditorAction(
310 EditorActionType
.EDIT
,
312 addExistingNameButton
,
313 existingNameCombobox
,
321 * publishes an event to the {@link RegistrationWorkingsetPresenter}
322 * @deprecated no longer used but kept for reference
323 * TODO remove for version 5.8 when not used again.
326 private void triggerRegistrationForExistingName() {
327 getViewEventBus().publish(this, new RegistrationWorkingsetAction(
329 RegistrationWorkingsetAction
.Action
.start
334 protected int putRegistrationListComponent(int row
, RegistrationDTO dto
) {
336 EntityReference typifiedNameReference
= dto
.getTypifiedNameRef();
337 if(typifiedNameReference
== null){
338 typifiedNameReference
= dto
.getNameRef();
340 typifiedNamesMap
.put(dto
.getUuid(), typifiedNameReference
);
342 RegistrationItemNameAndTypeButtons regItemButtonGroup
= new RegistrationItemNameAndTypeButtons(dto
, getPresenter().getCache());
343 UUID registrationEntityUuid
= dto
.getUuid();
345 RegistrationItemButtons regItemButtons
= new RegistrationItemButtons();
347 CssLayout footer
= new CssLayout();
348 footer
.setWidth(100, Unit
.PERCENTAGE
);
349 footer
.setStyleName("item-footer");
351 RegistrationDetailsItem regDetailsItem
= new RegistrationDetailsItem(regItemButtonGroup
, regItemButtons
, footer
);
352 registrationItemMap
.put(registrationEntityUuid
, regDetailsItem
);
354 Stack
<EditorActionContext
> context
= new Stack
<EditorActionContext
>();
355 context
.push(new EditorActionContext(
356 new TypedEntityReference
<>(Registration
.class, registrationEntityUuid
),
360 if(regItemButtonGroup
.getNameButton() != null){
361 regItemButtonGroup
.getNameButton().getButton().addClickListener(e
-> {
362 UUID nameuUuid
= regItemButtonGroup
.getNameButton().getUuid();
363 getViewEventBus().publish(this, new TaxonNameEditorAction(
364 EditorActionType
.EDIT
,
375 for(TypeDesignationSetButton workingsetButton
: regItemButtonGroup
.getTypeDesignationButtons()){
376 workingsetButton
.getButton().addClickListener(e
-> {
377 VersionableEntity baseEntity
= workingsetButton
.getBaseEntity();
378 EntityReference typifiedNameRef
= typifiedNamesMap
.get(registrationEntityUuid
);
379 TypeDesignationSetType workingsetType
= workingsetButton
.getType();
380 getViewEventBus().publish(this, new TypeDesignationSetEditorAction(
383 registrationEntityUuid
,
384 typifiedNameRef
.getUuid(),
394 regItemButtonGroup
.getAddTypeDesignationButton().addClickListener(
395 e
-> chooseNewTypeRegistrationWorkingset(dto
.getUuid())
398 Button blockingRegistrationButton
= regItemButtons
.getBlockingRegistrationButton();
399 blockingRegistrationButton
.setStyleName(ValoTheme
.BUTTON_TINY
);
400 blockingRegistrationButton
.setDescription("No blocking registrations");
402 blockingRegistrationButton
.setEnabled(true);
403 blockingRegistrationButton
.setDescription("This registration is currently blocked by other registrations");
404 blockingRegistrationButton
.addStyleName(EditValoTheme
.BUTTON_HIGHLITE
);
405 blockingRegistrationButton
.addClickListener(e
-> getViewEventBus().publish(
407 new ShowDetailsEvent
<RegistrationDTO
, UUID
>(
409 RegistrationDTO
.class,
411 RegistrationItem
.BLOCKED_BY
416 BadgeButton validationProblemsButton
= regItemButtons
.getValidationProblemsButton();
417 validationProblemsButton
.setStyleName(ValoTheme
.BUTTON_TINY
); // + " " + RegistrationStyles.STYLE_FRIENDLY_FOREGROUND);
419 if(!dto
.getValidationProblems().isEmpty()){
420 validationProblemsButton
.setEnabled(true);
421 validationProblemsButton
.addClickListener(e
-> getViewEventBus().publish(this,
422 new ShowDetailsEvent
<RegistrationDTO
, UUID
>(
424 RegistrationDTO
.class,
426 RegistrationItem
.VALIDATION_PROBLEMS
431 int problemCount
= dto
.getValidationProblems().size();
432 validationProblemsButton
.setCaption(problemCount
> 0 ? Integer
.toString(problemCount
) : null);
434 Component statusComponent
;
435 if(statusFieldInstantiator
!= null){
436 statusComponent
= statusFieldInstantiator
.create(dto
);
438 statusComponent
= new RegistrationStatusLabel().update(dto
.getStatus());
440 Label submitterLabel
= new Label(dto
.getSubmitterUserName());
441 submitterLabel
.setStyleName(LABEL_NOWRAP
+ " submitter");
442 submitterLabel
.setIcon(FontAwesome
.USER
);
443 submitterLabel
.setContentMode(ContentMode
.HTML
);
444 CssLayout stateAndSubmitter
= new CssLayout(statusComponent
, submitterLabel
);
447 if(UserHelperAccess
.userHelper().userIs(new RoleProberImpl(RolesAndPermissions
.ROLE_CURATION
)) || UserHelperAccess
.userHelper().userIsAdmin()) {
449 Button editRegistrationButton
= new Button(FontAwesome
.COG
);
450 editRegistrationButton
.setStyleName(ValoTheme
.BUTTON_TINY
);
451 editRegistrationButton
.setDescription("Edit registration");
452 editRegistrationButton
.addClickListener(e
-> getViewEventBus().publish(this, new RegistrationEditorAction(
453 EditorActionType
.EDIT
,
460 Button unlockButton
= new Button(FontAwesome
.LOCK
);
461 unlockButton
.setStyleName(ValoTheme
.BUTTON_TINY
);
462 unlockButton
.setDescription("Unlock");
463 unlockButton
.addClickListener(e
-> {
464 regItemButtonGroup
.setLockOverride(!regItemButtonGroup
.isLockOverride());
465 if(regItemButtonGroup
.isRegistrationLocked()){
466 unlockButton
.setIcon(regItemButtonGroup
.isLockOverride() ? FontAwesome
.UNLOCK_ALT
: FontAwesome
.LOCK
);
467 unlockButton
.setDescription(regItemButtonGroup
.isLockOverride() ?
"Click to unlock editing" : "Click to lock editing");
470 unlockButton
.setEnabled(regItemButtonGroup
.isRegistrationLocked());
471 regItemButtons
.addComponents(unlockButton
, editRegistrationButton
);
474 PermissionDebugUtils
.addGainPerEntityPermissionButton(regItemButtons
, Registration
.class, dto
.getUuid(),
475 EnumSet
.of(CRUD
.UPDATE
), RegistrationStatus
.PREPARATION
.name());
478 registrationsGrid
.addComponent(stateAndSubmitter
, COL_INDEX_STATE_LABEL
, row
);
479 // registrationsGrid.setComponentAlignment(stateLabel, Alignment.TOP_LEFT);
480 registrationsGrid
.addComponent(regItemButtonGroup
, COL_INDEX_REG_ITEM
, row
);
481 registrationsGrid
.addComponent(regItemButtons
, COL_INDEX_BUTTON_GROUP
, row
);
482 registrationsGrid
.setComponentAlignment(regItemButtons
, Alignment
.TOP_LEFT
);
485 registrationsGrid
.addComponent(footer
, 0, row
, COL_INDEX_BUTTON_GROUP
, row
);
491 public void chooseNewTypeRegistrationWorkingset(UUID registrationEntityUuid
){
492 Window typeDesignationTypeCooser
= new Window();
493 typeDesignationTypeCooser
.setModal(true);
494 typeDesignationTypeCooser
.setResizable(false);
495 typeDesignationTypeCooser
.setCaption("Add new type designation");
496 Label label
= new Label("Please select kind of type designation to be created.");
497 Button newSpecimenTypeDesignationButton
= new Button("Specimen type designation",
498 e
-> addNewTypeDesignationSet(TypeDesignationSetType
.SPECIMEN_TYPE_DESIGNATION_SET
, registrationEntityUuid
, typeDesignationTypeCooser
, e
.getButton()));
499 Button newNameTypeDesignationButton
= new Button("Name type designation",
500 e
-> addNewTypeDesignationSet(TypeDesignationSetType
.NAME_TYPE_DESIGNATION_SET
, registrationEntityUuid
, typeDesignationTypeCooser
, e
.getButton()));
502 VerticalLayout layout
= new VerticalLayout(label
, newSpecimenTypeDesignationButton
, newNameTypeDesignationButton
);
503 layout
.setMargin(true);
504 layout
.setSpacing(true);
505 layout
.setComponentAlignment(newSpecimenTypeDesignationButton
, Alignment
.MIDDLE_CENTER
);
506 layout
.setComponentAlignment(newNameTypeDesignationButton
, Alignment
.MIDDLE_CENTER
);
507 typeDesignationTypeCooser
.setContent(layout
);
508 UI
.getCurrent().addWindow(typeDesignationTypeCooser
);
511 protected void addNewTypeDesignationSet(TypeDesignationSetType newWorkingsetType
, UUID registrationEntityUuid
, Window typeDesignationTypeCooser
, Button sourceButton
) {
512 UI
.getCurrent().removeWindow(typeDesignationTypeCooser
);
513 EntityReference typifiedNameRef
= typifiedNamesMap
.get(registrationEntityUuid
);
514 getViewEventBus().publish(this, new TypeDesignationSetEditorAction(
516 registrationEntityUuid
,
517 typifiedNameRef
.getUuid(),
525 public void openReferenceEditor(UUID referenceUuid
) {
526 // TODO Auto-generated method stub
530 public void openNameEditor(UUID nameUuid
) {
531 // TODO Auto-generated method stub
535 protected String
getHeaderText() {
540 public void setHeaderText(String text
) {
541 this.headerText
= text
;
545 public String
getSubheaderText() {
546 return subheaderText
;
550 public void setSubheaderText(String text
) {
551 subheaderText
= text
;
556 protected String
getSubHeaderText() {
557 return subheaderText
;
561 public void openDetailsPopup(String caption
, List
<String
> messages
) {
562 StringBuffer sb
= new StringBuffer();
563 sb
.append("<div class=\"details-popup-content\">");
564 messages
.forEach(s
-> sb
.append(s
).append("</br>"));
566 new Notification(caption
, sb
.toString(), Notification
.Type
.HUMANIZED_MESSAGE
, true).show(Page
.getCurrent());
570 public boolean allowAnonymousAccess() {
575 public Collection
<Collection
<GrantedAuthority
>> allowedGrantedAuthorities() {
580 public String
getAccessDeniedMessage() {
581 return accessDeniedMessage
;
585 public void setAccessDeniedMessage(String accessDeniedMessage
) {
586 this.accessDeniedMessage
= accessDeniedMessage
;
590 * @return the addNewNameRegistrationButton
593 public Button
getAddNewNameRegistrationButton() {
594 return addNewNameRegistrationButton
;
598 public Button
getAddExistingNameRegistrationButton() {
599 return addExistingNameButton
;
603 public LazyComboBox
<TaxonName
> getExistingNameCombobox() {
604 return existingNameCombobox
;
608 public UUID
getCitationUuid() {
613 public Map
<UUID
, RegistrationDetailsItem
> getRegistrationItemMap(){
614 return Collections
.unmodifiableMap(registrationItemMap
);
618 * @param statusFieldInstantiator the statusFieldInstantiator to set
621 public void setStatusComponentInstantiator(RegistrationStatusFieldInstantiator statusComponentInstantiator
) {
622 this.statusFieldInstantiator
= statusComponentInstantiator
;