diff --git a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/common/ContactsHelper.java b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/common/ContactsHelper.java index 5c32b289976..7b255f206a9 100644 --- a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/common/ContactsHelper.java +++ b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/common/ContactsHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -12,22 +12,39 @@ import org.eclipse.scout.contacts.client.ConfigProperties.ReadOnlyProperty; import org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu; import org.eclipse.scout.rt.client.ui.action.menu.IMenu; -import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractOkButton; +import org.eclipse.scout.rt.client.ui.form.AbstractForm; import org.eclipse.scout.rt.client.ui.form.fields.button.IButton; import org.eclipse.scout.rt.platform.ApplicationScoped; import org.eclipse.scout.rt.platform.Order; import org.eclipse.scout.rt.platform.classid.ClassId; import org.eclipse.scout.rt.platform.config.CONFIG; import org.eclipse.scout.rt.platform.text.TEXTS; +import org.eclipse.scout.rt.platform.util.Assertions; import org.eclipse.scout.rt.platform.util.collection.OrderedCollection; @ApplicationScoped public class ContactsHelper { - public void handleReadOnly(AbstractOkButton okButton) { + public void handleReadOnly(AbstractForm form) { + if (!CONFIG.getPropertyValue(ReadOnlyProperty.class)) { + return; + } + + form.visit(b -> { + switch (b.getSystemType()) { + case IButton.SYSTEM_TYPE_CANCEL -> b.setSystemType(IButton.SYSTEM_TYPE_CLOSE); + case IButton.SYSTEM_TYPE_OK -> { + b.setLabel(TEXTS.get("CloseButton")); + b.setSystemType(IButton.SYSTEM_TYPE_CLOSE); + } + case IButton.SYSTEM_TYPE_SAVE, IButton.SYSTEM_TYPE_SAVE_WITHOUT_MARKER_CHANGE -> b.setSystemType(IButton.SYSTEM_TYPE_NONE); + } + }, IButton.class); + } + + public void failIfReadOnly() { if (CONFIG.getPropertyValue(ReadOnlyProperty.class)) { - okButton.setLabel(TEXTS.get("CloseButton")); - okButton.setSystemType(IButton.SYSTEM_TYPE_CLOSE); + Assertions.fail("Not allowed in read only mode"); } } diff --git a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/organization/OrganizationForm.java b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/organization/OrganizationForm.java index a1a2cc7bffc..95a462672b3 100644 --- a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/organization/OrganizationForm.java +++ b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/organization/OrganizationForm.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -156,7 +156,7 @@ public PhoneField getPhoneField() { @Override protected void execInitForm() { - BEANS.get(ContactsHelper.class).handleReadOnly(getOkButton()); + BEANS.get(ContactsHelper.class).handleReadOnly(this); } // tag::layout[] @@ -348,6 +348,7 @@ protected void execLoad() { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); OrganizationFormData formData = new OrganizationFormData(); exportFormData(formData); BEANS.get(IOrganizationService.class).store(formData); @@ -368,6 +369,7 @@ public class NewHandler extends AbstractDirtyFormHandler { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); OrganizationFormData formData = new OrganizationFormData(); exportFormData(formData); formData = BEANS.get(IOrganizationService.class).create(formData); diff --git a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/person/PersonForm.java b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/person/PersonForm.java index 9593771d0be..a23f545a4a8 100644 --- a/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/person/PersonForm.java +++ b/code/contacts/org.eclipse.scout.contacts.client/src/main/java/org/eclipse/scout/contacts/client/person/PersonForm.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -643,7 +643,7 @@ public class EmailField extends AbstractStringField { // http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/ // tag::email[] private static final String EMAIL_PATTERN = // <1> - "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + + "^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; @Override @@ -796,6 +796,7 @@ protected void execLoad() { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); IPersonService service = BEANS.get(IPersonService.class); PersonFormData formData = new PersonFormData(); exportFormData(formData); @@ -807,6 +808,7 @@ public class NewHandler extends AbstractFormHandler { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); IPersonService service = BEANS.get(IPersonService.class); PersonFormData formData = new PersonFormData(); exportFormData(formData); @@ -816,7 +818,7 @@ protected void execStore() { } // end::handler[] - //This modify handler is used in the application: + //This modify-handler is used in the application: public class ModifyDirtyHandler extends AbstractDirtyFormHandler { @Override @@ -832,6 +834,7 @@ protected void execLoad() { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); IPersonService service = BEANS.get(IPersonService.class); PersonFormData formData = new PersonFormData(); exportFormData(formData); @@ -854,6 +857,7 @@ public class NewDirtyHandler extends AbstractDirtyFormHandler { @Override protected void execStore() { + BEANS.get(ContactsHelper.class).failIfReadOnly(); IPersonService service = BEANS.get(IPersonService.class); PersonFormData formData = new PersonFormData(); exportFormData(formData); @@ -869,7 +873,7 @@ protected void execDirtyStatusChanged(boolean dirty) { @Override protected void execInitForm() { - BEANS.get(ContactsHelper.class).handleReadOnly(getOkButton()); + BEANS.get(ContactsHelper.class).handleReadOnly(this); } diff --git a/code/contacts/org.eclipse.scout.contacts.events.client/src/main/java/org/eclipse/scout/contacts/events/client/event/EventForm.java b/code/contacts/org.eclipse.scout.contacts.events.client/src/main/java/org/eclipse/scout/contacts/events/client/event/EventForm.java index 57d7d541793..9de59134669 100644 --- a/code/contacts/org.eclipse.scout.contacts.events.client/src/main/java/org/eclipse/scout/contacts/events/client/event/EventForm.java +++ b/code/contacts/org.eclipse.scout.contacts.events.client/src/main/java/org/eclipse/scout/contacts/events/client/event/EventForm.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2023 BSI Business Systems Integration AG + * Copyright (c) 2010, 2026 BSI Business Systems Integration AG * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 @@ -184,7 +184,7 @@ public Object computeExclusiveKey() { @Override protected void execInitForm() { - BEANS.get(ContactsHelper.class).handleReadOnly(getOkButton()); + BEANS.get(ContactsHelper.class).handleReadOnly(this); } @Order(1) @@ -333,11 +333,6 @@ protected String getConfiguredLabel() { @ClassId("627f6a0e-349f-4846-8449-1ec41156657d") public class ParticipantTableFieldField extends AbstractTableField