1515import java .util .function .Function ;
1616import java .util .stream .Collectors ;
1717
18+ import com .vaadin .ui .Label ;
19+ import org .apache .commons .collections .CollectionUtils ;
20+ import org .apache .commons .collections .MapUtils ;
1821import org .apache .commons .text .StringEscapeUtils ;
1922
2023import com .vaadin .ui .Notification ;
@@ -39,21 +42,19 @@ public class CampaignDashboardDiagramComponent extends VerticalLayout {
3942 private final Map <CampaignDashboardTotalsReference , Double > totalValuesMap ;
4043 private boolean totalValuesWithoutStacks ;
4144 private boolean showPercentages ;
42- private String populationGroupDiagramTitle ;
43-
45+ private List <String > noPopulationDataLocations ;
4446 private final HighChart campaignColumnChart ;
4547
4648 public CampaignDashboardDiagramComponent (
4749 CampaignDiagramDefinitionDto diagramDefinition ,
4850 List <CampaignDiagramDataDto > diagramDataList ,
4951 Map <CampaignDashboardTotalsReference , Double > totalValuesMap ,
5052 boolean showPercentages ,
51- String populationGroupDiagramTitle ,
52- boolean isCampaignGrouping ) {
53- this .populationGroupDiagramTitle = populationGroupDiagramTitle ;
53+ boolean isCommunityGrouping ) {
5454 this .diagramDefinition = diagramDefinition ;
5555 this .showPercentages = showPercentages ;
5656 this .totalValuesMap = totalValuesMap ;
57+ noPopulationDataLocations = new LinkedList <>();
5758
5859 if (this .totalValuesMap != null && this .totalValuesMap .keySet ().stream ().noneMatch (r -> r .getStack () != null )) {
5960 totalValuesWithoutStacks = true ;
@@ -84,10 +85,10 @@ public CampaignDashboardDiagramComponent(
8485 objectCampaignDiagramDataDtoMap .put (diagramData .getGroupingKey (), diagramData );
8586 }
8687
87- buildDiagramChart (diagramDefinition .getDiagramCaption (), isCampaignGrouping );
88+ buildDiagramChart (diagramDefinition .getDiagramCaption (), isCommunityGrouping );
8889 }
8990
90- public void buildDiagramChart (String title , boolean isCampaignGrouping ) {
91+ public void buildDiagramChart (String title , boolean isCommunityGrouping ) {
9192 final StringBuilder hcjs = new StringBuilder ();
9293
9394 //@formatter:off
@@ -174,7 +175,14 @@ public void buildDiagramChart(String title, boolean isCampaignGrouping) {
174175 }
175176
176177 hcjs .append ("series: [" );
177- List <String > noPopulationLocations = new LinkedList <>();
178+ noPopulationDataLocations .clear ();
179+ if (Objects .nonNull (totalValuesMap )) {
180+ for (Object key : axisCaptions .keySet ()) {
181+ if ((Double .valueOf (0 )).equals (totalValuesMap .get (new CampaignDashboardTotalsReference (key , null )))) {
182+ noPopulationDataLocations .add (axisCaptions .get (key ));
183+ }
184+ }
185+ }
178186 for (CampaignDiagramSeries series : diagramDefinition .getCampaignDiagramSeries ()) {
179187 String seriesKey = series .getFormId () + series .getFieldId ();
180188 if (!diagramDataBySeriesAndXAxis .containsKey (seriesKey ))
@@ -183,12 +191,19 @@ public void buildDiagramChart(String title, boolean isCampaignGrouping) {
183191 Map <Object , CampaignDiagramDataDto > seriesData = diagramDataBySeriesAndXAxis .get (seriesKey );
184192 Collection <CampaignDiagramDataDto > values = seriesData .values ();
185193 Iterator <CampaignDiagramDataDto > iterator = values .iterator ();
186- String fieldName ;
187- if (Objects .nonNull (populationGroupDiagramTitle )) {
188- fieldName = populationGroupDiagramTitle ;
189- } else {
190- fieldName = iterator .hasNext () ? iterator .next ().getFieldCaption () : seriesKey ;
194+ String fieldName = (iterator .hasNext () ? iterator .next ().getFieldCaption () : seriesKey );
195+ if (showPercentages ) {
196+ if (isCommunityGrouping ) {
197+ fieldName = I18nProperties .getString (Strings .populationDataByCommunity );
198+ } /*
199+ * else if (!noPopulationLocations.isEmpty()) {
200+ * fieldName = fieldName
201+ * + ("<br/>" + String
202+ * .format(I18nProperties.getString(Strings.errorNoPopulationDataLocations), String.join(",", noPopulationLocations)));
203+ * }
204+ */
191205 }
206+
192207 hcjs .append ("{ name:'" ).append (StringEscapeUtils .escapeEcmaScript (fieldName )).append ("', data: [" );
193208 for (Object axisKey : axisKeys ) {
194209 if (seriesData .containsKey (axisKey )) {
@@ -198,9 +213,7 @@ public void buildDiagramChart(String title, boolean isCampaignGrouping) {
198213 seriesData .get (axisKey ).getGroupingKey (),
199214 totalValuesWithoutStacks ? null : series .getStack ()));
200215 if (totalValue == null ) {
201- if (isCampaignGrouping ) {
202- Notification .show (String .format (I18nProperties .getString (Strings .populationDataByCommunity )), ERROR_MESSAGE );
203- } else {
216+ if (!isCommunityGrouping ) {
204217 Notification .show (
205218 String .format (
206219 I18nProperties .getString (Strings .errorCampaignDiagramTotalsCalculationError ),
@@ -216,9 +229,6 @@ public void buildDiagramChart(String title, boolean isCampaignGrouping) {
216229 } else {
217230 hcjs .append ("0," );
218231 }
219- if ((Double .valueOf (0 )).equals (totalValue )) {
220- noPopulationLocations .add (seriesData .get (axisKey ).getGroupingCaption ());
221- }
222232 } else {
223233 hcjs .append (seriesData .get (axisKey ).getValueSum ().toString ()).append ("," );
224234 }
@@ -234,13 +244,6 @@ public void buildDiagramChart(String title, boolean isCampaignGrouping) {
234244 }
235245 hcjs .append ("]" );
236246 hcjs .append ("}" );
237- if (!noPopulationLocations .isEmpty () && showPercentages )
238-
239- {
240- Notification .show (
241- String .format (I18nProperties .getString (Strings .errorNoPopulationDataLocations ), String .join ("," , noPopulationLocations )),
242- ERROR_MESSAGE );
243- }
244247 campaignColumnChart .setHcjs (hcjs .toString ());
245248 }
246249
@@ -251,4 +254,12 @@ public boolean isShowPercentages() {
251254 public void setShowPercentages (boolean showPercentages ) {
252255 this .showPercentages = showPercentages ;
253256 }
257+
258+ public List <String > getNoPopulationDataLocations () {
259+ return noPopulationDataLocations ;
260+ }
261+
262+ public void setNoPopulationDataLocations (List <String > noPopulationDataLocations ) {
263+ this .noPopulationDataLocations = noPopulationDataLocations ;
264+ }
254265}
0 commit comments