import org.apache.log4j.Logger;
import com.vaadin.server.ExternalResource;
+import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Link;
private List<Label> labels = new ArrayList<>();
+ private List<ButtonWithUserEditPermission> editButtons = new ArrayList<>();
+
private Button addTypeDesignationButton;
private Label nameLabel = null;
private Link identifierLink;
+ private boolean isRegistrationLocked;
+
+ private boolean isLockOverride;
+
public RegistrationItemNameAndTypeButtons(RegistrationDTO regDto, ICdmEntityUuidCacher entitiyCacher) {
- boolean isRegistrationLocked = EnumSet.of(
+ isRegistrationLocked = EnumSet.of(
RegistrationStatus.PUBLISHED, RegistrationStatus.REJECTED)
.contains(regDto.getStatus());
Label nameLabel = new Label(regDto.getNameRef().getLabel());
nameLabel.setWidthUndefined();
boolean userHasPermission = userHelper.userHasPermission(regDto.registration().getName(), CRUD.UPDATE);
- nameButton.setReadOnly(isRegistrationLocked || ! userHasPermission);
+ editButtons.add(new ButtonWithUserEditPermission(nameButton, userHasPermission));
addComponent(nameIdButton.getButton());
PermissionDebugUtils.addGainPerEntityPermissionButton(this, TaxonName.class, regDto.getNameRef().getUuid(),
Button tdButton = new Button(buttonLabel + ":");
tdButton.setDescription("Edit the type designation working set");
boolean userHasUpdatePermission = userHelper.userHasPermission(baseEntityRef.getType(), baseEntityRef.getUuid(), CRUD.UPDATE, CRUD.DELETE);
- tdButton.setReadOnly(isRegistrationLocked || !userHasUpdatePermission);
+ editButtons.add(new ButtonWithUserEditPermission(tdButton, userHasUpdatePermission));
addComponent(tdButton);
PermissionDebugUtils.addGainPerEntityPermissionButton(this, SpecimenOrObservationBase.class,
}
iterator().forEachRemaining(c -> addStyledComponent(c));
+ updateEditorButtonReadonlyStates();
addDefaultStyles();
}
+
+ private void updateEditorButtonReadonlyStates() {
+ for(ButtonWithUserEditPermission b : editButtons){
+ boolean impossibleToUnlock = !b.userCanEdit && isLockOverride && isRegistrationLocked;
+ b.button.setReadOnly((isRegistrationLocked && !isLockOverride) || !b.userCanEdit);
+ b.button.setEnabled(!impossibleToUnlock);
+ b.button.setDescription(impossibleToUnlock ? "Unlock failed due to missing permissions!" : "");
+ b.button.setIcon(isLockOverride ? FontAwesome.UNLOCK_ALT : null);
+ }
+
+ }
+
public IdButton<TaxonName> getNameButton() {
return nameIdButton;
}
}
+ public class ButtonWithUserEditPermission {
+
+ Button button;
+ boolean userCanEdit;
+ /**
+ * @param button
+ * @param userCanEdit
+ */
+ public ButtonWithUserEditPermission(Button button, boolean userCanEdit) {
+ super();
+ this.button = button;
+ this.userCanEdit = userCanEdit;
+ }
+
+
+
+ }
+ public boolean isRegistrationLocked() {
+ return isRegistrationLocked;
+ }
+
+
+ /**
+ * @return the isLockOverride
+ */
+ public boolean isLockOverride() {
+ return isLockOverride;
+ }
+
+ /**
+ * @param isLockOverride the isLockOverride to set
+ */
+ public void setLockOverride(boolean isLockOverride) {
+ if(this.isLockOverride != isLockOverride){
+ this.isLockOverride = isLockOverride;
+ updateEditorButtonReadonlyStates();
+ }
+ }
+
}
if(UserHelperAccess.userHelper().userIs(new RoleProber(RolesAndPermissions.ROLE_CURATION)) || UserHelperAccess.userHelper().userIsAdmin()) {
+
Button editRegistrationButton = new Button(FontAwesome.COG);
editRegistrationButton.setStyleName(ValoTheme.BUTTON_TINY);
editRegistrationButton.setDescription("Edit registration");
null,
this
)));
- regItemButtons.addComponent(editRegistrationButton);
+
+ Button unlockButton = new Button(FontAwesome.LOCK);
+ unlockButton.setStyleName(ValoTheme.BUTTON_TINY);
+ unlockButton.setDescription("Unlock");
+ unlockButton.addClickListener(e -> {
+ regItemButtonGroup.setLockOverride(!regItemButtonGroup.isLockOverride());
+ if(regItemButtonGroup.isRegistrationLocked()){
+ unlockButton.setIcon(regItemButtonGroup.isLockOverride() ? FontAwesome.UNLOCK_ALT : FontAwesome.LOCK);
+ unlockButton.setDescription(regItemButtonGroup.isLockOverride() ? "Click to unlock editing" : "Click to lock editing");
+ }
+ });
+ unlockButton.setEnabled(regItemButtonGroup.isRegistrationLocked());
+ regItemButtons.addComponents(unlockButton, editRegistrationButton);
}
PermissionDebugUtils.addGainPerEntityPermissionButton(regItemButtons, Registration.class, dto.getUuid(),