Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit dd7ffa6

Browse files
author
barnabartha
committed
SORMAS-Foundation#3253 - simplify message log query
- add notification after message sending - add user right & feature type & sms service conditions for showing SMS manual external messages related view elements
1 parent 6321b38 commit dd7ffa6

15 files changed

Lines changed: 108 additions & 90 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public interface Captions {
6767
String actionSave = "actionSave";
6868
String actionSaveChanges = "actionSaveChanges";
6969
String actionSelectAll = "actionSelectAll";
70+
String actionSend = "actionSend";
7071
String actionSettings = "actionSettings";
7172
String actionShowLessFilters = "actionShowLessFilters";
7273
String actionShowMoreFilters = "actionShowMoreFilters";
@@ -169,7 +170,6 @@ public interface Captions {
169170
String campaignNewCampaign = "campaignNewCampaign";
170171
String campaignSearch = "campaignSearch";
171172
String campaignValidateForms = "campaignValidateForms";
172-
String cancel = "cancel";
173173
String caseActiveCases = "caseActiveCases";
174174
String caseAllCases = "caseAllCases";
175175
String caseArchivedCases = "caseArchivedCases";
@@ -395,7 +395,6 @@ public interface Captions {
395395
String caseSearchSpecificCase = "caseSearchSpecificCase";
396396
String caseTransferCase = "caseTransferCase";
397397
String caseTransferCases = "caseTransferCases";
398-
String characters = "characters";
399398
String city = "city";
400399
String ClinicalVisit = "ClinicalVisit";
401400
String ClinicalVisit_bloodPressure = "ClinicalVisit.bloodPressure";
@@ -742,7 +741,6 @@ public interface Captions {
742741
String DocumentTemplate_QuarantineOrder_templates = "DocumentTemplate.QuarantineOrder.templates";
743742
String DocumentTemplate_uploadTemplate = "DocumentTemplate.uploadTemplate";
744743
String documentUploadDocument = "documentUploadDocument";
745-
String email = "email";
746744
String EpiData = "EpiData";
747745
String EpiData_areaInfectedAnimals = "EpiData.areaInfectedAnimals";
748746
String EpiData_contactWithSourceCaseKnown = "EpiData.contactWithSourceCaseKnown";
@@ -1067,16 +1065,22 @@ public interface Captions {
10671065
String MaternalHistory_swollenLymphsMonth = "MaternalHistory.swollenLymphsMonth";
10681066
String MaternalHistory_swollenLymphsOnset = "MaternalHistory.swollenLymphsOnset";
10691067
String menu = "menu";
1068+
String Messages_characters = "Messages.characters";
1069+
String Messages_email = "Messages.email";
1070+
String Messages_noPhoneNumberForCasePerson = "Messages.noPhoneNumberForCasePerson";
1071+
String Messages_noSmsSentForCase = "Messages.noSmsSentForCase";
1072+
String Messages_numberOfMessages = "Messages.numberOfMessages";
1073+
String Messages_numberOfMissingPhoneNumbers = "Messages.numberOfMissingPhoneNumbers";
1074+
String Messages_sendingSms = "Messages.sendingSms";
1075+
String Messages_sendSMS = "Messages.sendSMS";
1076+
String Messages_sentBy = "Messages.sentBy";
1077+
String Messages_sms = "Messages.sms";
10701078
String moreActions = "moreActions";
10711079
String name = "name";
10721080
String nationalHealthId = "nationalHealthId";
1073-
String noPhoneNumberForCasePerson = "noPhoneNumberForCasePerson";
1074-
String noSmsSentForCase = "noSmsSentForCase";
10751081
String notAvailableShort = "notAvailableShort";
10761082
String notSpecified = "notSpecified";
10771083
String numberOfCharacters = "numberOfCharacters";
1078-
String numberOfMessages = "numberOfMessages";
1079-
String numberOfMissingPhoneNumbers = "numberOfMissingPhoneNumbers";
10801084
String options = "options";
10811085
String outbreakAffectedDistricts = "outbreakAffectedDistricts";
10821086
String outbreakNoOutbreak = "outbreakNoOutbreak";
@@ -1373,14 +1377,9 @@ public interface Captions {
13731377
String sampleSamplesList = "sampleSamplesList";
13741378
String sampleShipped = "sampleShipped";
13751379
String sampleSpecimenNotAdequate = "sampleSpecimenNotAdequate";
1376-
String send = "send";
1377-
String sendingSms = "sendingSms";
1378-
String sendSMS = "sendSMS";
1379-
String sentBy = "sentBy";
13801380
String sex = "sex";
13811381
String showPlacesOnMap = "showPlacesOnMap";
13821382
String singleDayEventDate = "singleDayEventDate";
1383-
String sms = "sms";
13841383
String sormasToSormasCaseNotShared = "sormasToSormasCaseNotShared";
13851384
String sormasToSormasContactNotShared = "sormasToSormasContactNotShared";
13861385
String sormasToSormasDialogTitle = "sormasToSormasDialogTitle";

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ public interface Strings {
128128
String DiseaseNetworkDiagram_subheading = "DiseaseNetworkDiagram.subheading";
129129
String done = "done";
130130
String edit = "edit";
131-
String enterSMS = "enterSMS";
132131
String entityAction = "entityAction";
133132
String entityActions = "entityActions";
134133
String entityAdditionalTest = "entityAdditionalTest";
@@ -724,6 +723,8 @@ public interface Strings {
724723
String messageRegionsArchived = "messageRegionsArchived";
725724
String messageRegionsArchivingNotPossible = "messageRegionsArchivingNotPossible";
726725
String messageRegionsDearchived = "messageRegionsDearchived";
726+
String Messages_enterSMS = "Messages.enterSMS";
727+
String Messages_smsSent = "Messages.smsSent";
727728
String messageSampleErrors = "messageSampleErrors";
728729
String messageSampleOpened = "messageSampleOpened";
729730
String messageSampleSaved = "messageSampleSaved";

sormas-api/src/main/resources/captions.properties

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ Action.actionStatus=Action status
8787
actionApplyDateFilter=Apply date filter
8888
actionArchive=Archive
8989
actionAssignNewEpidNumber=Assign new epid number
90+
actionSend = Send
9091
actionCancel=Cancel
9192
actionClear=Clear
9293
actionClearAll=Clear all
@@ -1137,6 +1138,18 @@ LoginSidebar.diseasePrevention=Disease Prevention
11371138
LoginSidebar.outbreakResponse=Outbreak Response
11381139
LoginSidebar.poweredBy=Powered By
11391140

1141+
# Messaging
1142+
Messages.sendSMS=Send SMS
1143+
Messages.sentBy=Sent by
1144+
Messages.noSmsSentForCase=No SMS sent to case person
1145+
Messages.noPhoneNumberForCasePerson=Case person has no phone number
1146+
Messages.sms = SMS
1147+
Messages.email = Email
1148+
Messages.sendingSms = Send new SMS
1149+
Messages.numberOfMissingPhoneNumbers = Number of selected cases without phone number: %s
1150+
Messages.characters = Characters: %d / 160
1151+
Messages.numberOfMessages = Nr. of messages: %d
1152+
11401153
# Main Menu
11411154
mainMenuAbout=About
11421155
mainMenuCampaigns=Campaigns
@@ -1963,17 +1976,3 @@ patientDiaryRegistrationError=Could not register person in the patient diary.
19631976
patientDiaryPersonNotExportable=Cannot export the person to the patient diary. The person needs a valid birthdate and either a valid phone number or email address.
19641977

19651978
showPlacesOnMap=Show
1966-
1967-
# Messaging
1968-
sendSMS=Send SMS
1969-
sentBy=Sent by
1970-
noSmsSentForCase=No SMS sent to case person
1971-
noPhoneNumberForCasePerson=Case person has no phone number
1972-
sms = SMS
1973-
email = Email
1974-
send = Send
1975-
cancel = Cancel
1976-
sendingSms = Send new SMS
1977-
numberOfMissingPhoneNumbers = Number of selected cases without phone number: %s
1978-
characters = Characters: %d / 160
1979-
numberOfMessages = Nr. of messages: %d

sormas-api/src/main/resources/strings.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -923,4 +923,5 @@ SurvnetGateway.notificationErrorSending = Error when sending entry
923923
warningDashboardMapTooManyMarkers = There are %d places to display and it is possible that your browser will freeze while displaying them.
924924

925925
# Messaging
926-
enterSMS = Please enter your SMS message here:
926+
Messages.enterSMS = Please enter your SMS message here:
927+
Messages.smsSent = Message sent

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3111,15 +3111,17 @@ public long countCasesWithMissingContactInformation(List<String> caseUuids, Mess
31113111
IterableHelper.executeBatched(caseUuids, ModelConstants.PARAMETER_LIMIT, e -> totalCount.addAndGet(caseService.count((cb, root) -> {
31123112
final Join<Case, Person> personJoin = root.join(Case.PERSON, JoinType.LEFT);
31133113
final String messageTypeColumn = messageType == MessageType.EMAIL ? Person.EMAIL_ADDRESS : Person.PHONE;
3114-
return cb.and(root.get(Case.UUID).in(caseUuids), cb.isNull(personJoin.get(messageTypeColumn)));
3114+
return cb.and(
3115+
root.get(Case.UUID).in(caseUuids),
3116+
cb.and(cb.isNull(personJoin.get(messageTypeColumn)), cb.notEqual(personJoin.get(messageTypeColumn), StringUtils.EMPTY)));
31153117
})));
31163118

31173119
return totalCount.get();
31183120
}
31193121

31203122
@Override
3121-
public List<ManualMessageLogDto> getMessageLog(String caseUuid, MessageType messageType) {
3122-
return manualMessageLogService.getByCaseUuid(caseUuid, messageType)
3123+
public List<ManualMessageLogDto> getMessageLog(String personUuid, MessageType messageType) {
3124+
return manualMessageLogService.getByPersonUuid(personUuid, messageType)
31233125
.stream()
31243126
.map(
31253127
mml -> new ManualMessageLogDto(

sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/ManualMessageLogService.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
import javax.persistence.criteria.From;
1010
import javax.persistence.criteria.Predicate;
1111
import javax.persistence.criteria.Root;
12-
import javax.persistence.criteria.Subquery;
1312
import javax.validation.constraints.NotNull;
1413

1514
import de.symeda.sormas.api.messaging.MessageType;
16-
import de.symeda.sormas.backend.caze.Case;
1715
import de.symeda.sormas.backend.common.AbstractAdoService;
1816
import de.symeda.sormas.backend.person.Person;
1917

@@ -32,19 +30,14 @@ public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?,
3230
throw new UnsupportedOperationException();
3331
}
3432

35-
public List<ManualMessageLog> getByCaseUuid(@NotNull String caseUuid, MessageType messageType) {
33+
public List<ManualMessageLog> getByPersonUuid(@NotNull String personUuid, MessageType messageType) {
3634

3735
final CriteriaBuilder cb = em.getCriteriaBuilder();
3836
final CriteriaQuery<ManualMessageLog> cq = cb.createQuery(ManualMessageLog.class);
3937
final Root<ManualMessageLog> manualMessageLogRoot = cq.from(ManualMessageLog.class);
4038

41-
final Subquery<Person> casePersonIdSubQuery = cq.subquery(Person.class);
42-
final Root<Case> caseRoot = casePersonIdSubQuery.from(Case.class);
43-
casePersonIdSubQuery.where(cb.equal(caseRoot.get(Case.UUID), caseUuid));
44-
casePersonIdSubQuery.select(caseRoot.get(Case.PERSON).get(Person.ID));
45-
46-
Predicate filter = cb.and(
47-
cb.equal(manualMessageLogRoot.get(ManualMessageLog.RECIPIENT_PERSON).get(Person.ID), casePersonIdSubQuery),
39+
final Predicate filter = cb.and(
40+
cb.equal(manualMessageLogRoot.get(ManualMessageLog.RECIPIENT_PERSON).get(Person.UUID), personUuid),
4841
cb.equal(manualMessageLogRoot.get(ManualMessageLog.MESSAGE_TYPE), messageType));
4942

5043
cq.where(filter);

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,14 +1165,15 @@ public void sendSmsToAllSelectedItems(Collection<? extends CaseIndexDto> selecte
11651165
final SmsComponent smsComponent =
11661166
new SmsComponent(FacadeProvider.getCaseFacade().countCasesWithMissingContactInformation(caseUuids, MessageType.SMS));
11671167
VaadinUiUtil.showConfirmationPopup(
1168-
I18nProperties.getCaption(Captions.sendingSms),
1168+
I18nProperties.getCaption(Captions.Messages_sendingSms),
11691169
smsComponent,
1170-
I18nProperties.getCaption(Captions.send),
1171-
I18nProperties.getCaption(Captions.cancel),
1170+
I18nProperties.getCaption(Captions.actionSend),
1171+
I18nProperties.getCaption(Captions.actionCancel),
11721172
640,
11731173
confirmationEvent -> {
11741174
if (confirmationEvent.booleanValue()) {
11751175
FacadeProvider.getCaseFacade().sendMessage(caseUuids, "", smsComponent.getValue(), MessageType.SMS);
1176+
Notification.show(null, I18nProperties.getString(Strings.Messages_smsSent), Type.TRAY_NOTIFICATION);
11761177
}
11771178
});
11781179
}

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataView.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,10 @@ protected void initView(String params) {
118118
layout.addComponent(taskList, TASKS_LOC);
119119
}
120120

121-
boolean externalMessagesEnabled = FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.MANUAL_EXTERNAL_MESSAGES);
122-
if (externalMessagesEnabled && UserProvider.getCurrent().hasUserRight(UserRight.SEND_MANUAL_EXTERNAL_MESSAGES)) {
123-
SmsListComponent smsList = new SmsListComponent(getCaseRef());
121+
final boolean externalMessagesEnabled = FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.MANUAL_EXTERNAL_MESSAGES);
122+
final boolean isSmsServiceSetUp = FacadeProvider.getConfigFacade().isSmsServiceSetUp();
123+
if (isSmsServiceSetUp && externalMessagesEnabled && UserProvider.getCurrent().hasUserRight(UserRight.SEND_MANUAL_EXTERNAL_MESSAGES)) {
124+
SmsListComponent smsList = new SmsListComponent(getCaseRef(), caze.getPerson());
124125
smsList.addStyleName(CssStyles.SIDE_COMPONENT);
125126
layout.addComponent(smsList, SMS_LOC);
126127
}

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CasesView.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@
2020
import static de.symeda.sormas.ui.utils.FollowUpUtils.createFollowUpLegend;
2121

2222
import java.time.LocalDate;
23+
import java.util.ArrayList;
2324
import java.util.Date;
2425
import java.util.HashMap;
26+
import java.util.List;
2527
import java.util.function.Supplier;
2628
import java.util.stream.Collectors;
2729

28-
import de.symeda.sormas.api.utils.DataHelper;
2930
import org.vaadin.hene.popupbutton.PopupButton;
3031

3132
import com.vaadin.icons.VaadinIcons;
@@ -68,6 +69,7 @@
6869
import de.symeda.sormas.api.sample.SampleDto;
6970
import de.symeda.sormas.api.sample.SampleExportDto;
7071
import de.symeda.sormas.api.user.UserRight;
72+
import de.symeda.sormas.api.utils.DataHelper;
7173
import de.symeda.sormas.api.utils.DateHelper;
7274
import de.symeda.sormas.ui.ControllerProvider;
7375
import de.symeda.sormas.ui.SearchSpecificLayout;
@@ -682,44 +684,59 @@ public HorizontalLayout createStatusFilterBar() {
682684
if (isBulkEditAllowed()) {
683685
boolean hasBulkOperationsRight = UserProvider.getCurrent().hasUserRight(UserRight.PERFORM_BULK_OPERATIONS);
684686

685-
bulkOperationsDropdown = MenuBarHelper.createDropDown(
686-
Captions.bulkActions,
687+
final List<MenuBarHelper.MenuBarItem> menuBarItems = new ArrayList<>();
688+
689+
menuBarItems.add(
687690
new MenuBarHelper.MenuBarItem(
688691
I18nProperties.getCaption(Captions.bulkEdit),
689692
VaadinIcons.ELLIPSIS_H,
690693
mi -> ControllerProvider.getCaseController().showBulkCaseDataEditComponent(caseGrid.asMultiSelect().getSelectedItems()),
691-
hasBulkOperationsRight),
694+
hasBulkOperationsRight));
695+
menuBarItems.add(
692696
new MenuBarHelper.MenuBarItem(
693697
I18nProperties.getCaption(Captions.bulkDelete),
694698
VaadinIcons.TRASH,
695699
selectedItem -> ControllerProvider.getCaseController()
696700
.deleteAllSelectedItems(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
697-
hasBulkOperationsRight),
698-
new MenuBarHelper.MenuBarItem(
699-
I18nProperties.getCaption(Captions.sendSMS),
700-
VaadinIcons.MOBILE_RETRO,
701-
selectedItem -> ControllerProvider.getCaseController()
702-
.sendSmsToAllSelectedItems(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
703-
hasBulkOperationsRight),
701+
hasBulkOperationsRight));
702+
final boolean externalMessagesEnabled =
703+
FacadeProvider.getFeatureConfigurationFacade().isFeatureEnabled(FeatureType.MANUAL_EXTERNAL_MESSAGES);
704+
final boolean isSmsServiceSetUp = FacadeProvider.getConfigFacade().isSmsServiceSetUp();
705+
if (isSmsServiceSetUp
706+
&& externalMessagesEnabled
707+
&& UserProvider.getCurrent().hasUserRight(UserRight.SEND_MANUAL_EXTERNAL_MESSAGES)) {
708+
menuBarItems.add(
709+
new MenuBarHelper.MenuBarItem(
710+
I18nProperties.getCaption(Captions.Messages_sendSMS),
711+
VaadinIcons.MOBILE_RETRO,
712+
selectedItem -> ControllerProvider.getCaseController()
713+
.sendSmsToAllSelectedItems(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
714+
hasBulkOperationsRight));
715+
}
716+
menuBarItems.add(
704717
new MenuBarHelper.MenuBarItem(
705718
I18nProperties.getCaption(Captions.actionArchive),
706719
VaadinIcons.ARCHIVE,
707720
mi -> ControllerProvider.getCaseController()
708721
.archiveAllSelectedItems(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
709-
hasBulkOperationsRight && EntityRelevanceStatus.ACTIVE.equals(criteria.getRelevanceStatus())),
722+
hasBulkOperationsRight && EntityRelevanceStatus.ACTIVE.equals(criteria.getRelevanceStatus())));
723+
menuBarItems.add(
710724
new MenuBarHelper.MenuBarItem(
711725
I18nProperties.getCaption(Captions.actionDearchive),
712726
VaadinIcons.ARCHIVE,
713727
mi -> ControllerProvider.getCaseController()
714728
.dearchiveAllSelectedItems(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
715-
hasBulkOperationsRight && EntityRelevanceStatus.ARCHIVED.equals(criteria.getRelevanceStatus())),
729+
hasBulkOperationsRight && EntityRelevanceStatus.ARCHIVED.equals(criteria.getRelevanceStatus())));
730+
menuBarItems.add(
716731
new MenuBarHelper.MenuBarItem(
717732
I18nProperties.getCaption(Captions.sormasToSormasShare),
718733
VaadinIcons.SHARE,
719734
mi -> ControllerProvider.getSormasToSormasController()
720735
.shareSelectedCases(caseGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(criteria)),
721736
FacadeProvider.getSormasToSormasFacade().isFeatureEnabled()));
722737

738+
bulkOperationsDropdown = MenuBarHelper.createDropDown(Captions.bulkActions, menuBarItems);
739+
723740
bulkOperationsDropdown.setVisible(viewConfiguration.isInEagerMode());
724741
actionButtonsLayout.addComponent(bulkOperationsDropdown);
725742
}

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/messaging/SmsComponent.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package de.symeda.sormas.ui.caze.messaging;
22

3-
import org.apache.commons.lang3.StringUtils;
4-
53
import com.vaadin.icons.VaadinIcons;
64
import com.vaadin.shared.ui.ContentMode;
75
import com.vaadin.ui.Alignment;
86
import com.vaadin.ui.Component;
9-
import com.vaadin.ui.HorizontalLayout;
107
import com.vaadin.ui.Label;
118
import com.vaadin.ui.VerticalLayout;
129
import com.vaadin.v7.ui.CustomField;
@@ -39,30 +36,25 @@ protected Component initContent() {
3936
mainLayout.addComponent(
4037
new Label(
4138
VaadinIcons.INFO_CIRCLE.getHtml() + " "
42-
+ String.format(I18nProperties.getCaption(Captions.numberOfMissingPhoneNumbers), missingPhoneNumbers),
39+
+ String.format(I18nProperties.getCaption(Captions.Messages_numberOfMissingPhoneNumbers), missingPhoneNumbers),
4340
ContentMode.HTML));
4441
mainLayout.addComponent(new Label());
4542
}
4643

47-
mainLayout.addComponent(new Label(I18nProperties.getString(Strings.enterSMS)));
44+
mainLayout.addComponent(new Label(I18nProperties.getString(Strings.Messages_enterSMS)));
4845

4946
final TextFieldWithMaxLengthWrapper<TextArea> tTextFieldWithMaxLengthWrapper = new TextFieldWithMaxLengthWrapper<>();
5047

5148
smsTextArea = new TextArea();
5249
smsTextArea.setWidth(100, Unit.PERCENTAGE);
5350
smsTextArea.setRows(4);
54-
mainLayout.addComponent(tTextFieldWithMaxLengthWrapper.wrap(smsTextArea, Captions.characters));
55-
56-
final HorizontalLayout nrOfMessagesLayout = new HorizontalLayout();
57-
nrOfMessagesLayout.setSpacing(false);
58-
nrOfMessagesLayout.setMargin(false);
51+
mainLayout.addComponent(tTextFieldWithMaxLengthWrapper.wrap(smsTextArea, Captions.Messages_characters));
5952

60-
final Label numberOfMessagesLabel = new Label(StringUtils.EMPTY);
53+
final Label numberOfMessagesLabel = new Label(String.format(I18nProperties.getCaption(Captions.Messages_numberOfMessages), 0));
6154
numberOfMessagesLabel.addStyleNames(CssStyles.ALIGN_RIGHT, CssStyles.FIELD_EXTRA_INFO, CssStyles.LABEL_ITALIC);
62-
nrOfMessagesLayout.addComponent(numberOfMessagesLabel);
55+
mainLayout.addComponent(numberOfMessagesLabel);
6356

64-
mainLayout.addComponent(nrOfMessagesLayout);
65-
mainLayout.setComponentAlignment(nrOfMessagesLayout, Alignment.BOTTOM_RIGHT);
57+
mainLayout.setComponentAlignment(numberOfMessagesLabel, Alignment.BOTTOM_RIGHT);
6658

6759
smsTextArea.addTextChangeListener(e -> setNumberOfMessagesLabel(numberOfMessagesLabel, e.getText().length()));
6860
smsTextArea.addValueChangeListener(e -> setNumberOfMessagesLabel(numberOfMessagesLabel, smsTextArea.getValue().length()));
@@ -71,7 +63,7 @@ protected Component initContent() {
7163
}
7264

7365
private void setNumberOfMessagesLabel(Label numberOfMessagesLabel, int nrOfCharacters) {
74-
numberOfMessagesLabel.setValue(String.format(I18nProperties.getCaption(Captions.numberOfMessages), (1 + nrOfCharacters / 160)));
66+
numberOfMessagesLabel.setValue(String.format(I18nProperties.getCaption(Captions.Messages_numberOfMessages), (1 + nrOfCharacters / 160)));
7567
}
7668

7769
@Override

0 commit comments

Comments
 (0)