@@ -12,20 +12,26 @@ public class GridTemplateAreaCreator {
1212
1313 public static final String APOSTROPHE = "'" ;
1414
15- public String createGridTemplate (List <CampaignDashboardElement > dashboardElements ) {
16-
15+ private String [][] grid ;
16+ private Integer widthsSum ;
17+ private Integer nrOfGridAreaColumns ;
18+ private Integer nrOfGridAreaRows ;
19+ private Integer oneWidthAreaPercentage ;
20+ private Integer oneHeightAreaPercentage ;
21+
22+ public GridTemplateAreaCreator (List <CampaignDashboardElement > dashboardElements ) {
1723 dashboardElements =
1824 dashboardElements .stream ().sorted (Comparator .comparingInt (CampaignDashboardElement ::getOrder )).collect (Collectors .toList ());
1925
2026 final List <Integer > widths = dashboardElements .stream ().map (cde -> cde .getWidth ()).collect (Collectors .toList ());
2127 final List <Integer > heights = dashboardElements .stream ().map (cde -> cde .getHeight ()).collect (Collectors .toList ());
22- final Integer oneWidthAreaPercentage = gcd (widths );
23- final Integer oneHeightAreaPercentage = gcd (heights );
24- final Integer nrOfGridAreaColumns = 100 / oneWidthAreaPercentage ;
25- final Integer widthsSum = widths .stream ().reduce (0 , Integer ::sum );
26- final Integer nrOfGridAreaRows = (widthsSum / 100 + (widthsSum % 100 == 0 ? 0 : 1 )) * 100 / gcd (heights );
28+ oneWidthAreaPercentage = gcd (widths );
29+ oneHeightAreaPercentage = gcd (heights );
30+ nrOfGridAreaColumns = 100 / oneWidthAreaPercentage ;
31+ widthsSum = widths .stream ().reduce (0 , Integer ::sum );
32+ nrOfGridAreaRows = (widthsSum / 100 + (widthsSum % 100 == 0 ? 0 : 1 )) * 100 / gcd (heights );
2733
28- final String [][] grid = new String [nrOfGridAreaColumns ][nrOfGridAreaRows ];
34+ grid = new String [nrOfGridAreaColumns ][nrOfGridAreaRows ];
2935
3036 int startingColumn = 0 ;
3137 int startingRow = 0 ;
@@ -40,58 +46,75 @@ public String createGridTemplate(List<CampaignDashboardElement> dashboardElement
4046 grid [y + startingColumn ][x + startingRow ] = campaignDashboardElement .getDiagramId ();
4147 }
4248 }
43- final GridElementIndex nextDiagramFirstGridElement = findNextDiagramsStartingIndex (
44- dashboardElements ,
45- elementIndex ,
46- oneWidthAreaPercentage ,
47- widthAreas ,
48- heightAreas ,
49- nrOfGridAreaColumns ,
50- nrOfGridAreaRows ,
51- grid ,
52- startingRow ,
53- startingColumn );
49+ final GridElementIndex nextDiagramFirstGridElement =
50+ findNextDiagramsStartPosition (dashboardElements , elementIndex , oneWidthAreaPercentage , widthAreas , startingRow , startingColumn );
5451 startingColumn = nextDiagramFirstGridElement .getX ();
5552 startingRow = nextDiagramFirstGridElement .getY ();
5653 }
57-
58- return formatGridArea (nrOfGridAreaColumns , nrOfGridAreaRows , grid );
5954 }
6055
61- private String formatGridArea ( Integer nrOfGridColumnAreas , Integer nrOfGridRowAreas , String [][] grid ) {
56+ public String getFormattedGridTemplate ( ) {
6257 final StringBuilder result = new StringBuilder ();
6358
64- for (int x = 0 ; x < nrOfGridRowAreas ; x ++) {
65- if (rowIsNull (grid , x , nrOfGridColumnAreas )) {
59+ for (int x = 0 ; x < nrOfGridAreaRows ; x ++) {
60+ if (rowIsNull (x , nrOfGridAreaColumns )) {
6661 continue ;
6762 } else {
6863 result .append (APOSTROPHE );
69- for (int y = 0 ; y < nrOfGridColumnAreas ; y ++) {
70- result .append (grid [y ][x ] + (y == nrOfGridColumnAreas - 1 ? StringUtils .EMPTY : StringUtils .SPACE ));
64+ for (int y = 0 ; y < nrOfGridAreaColumns ; y ++) {
65+ final String diagramId = grid [y ][x ];
66+ final String area = diagramId != null ? diagramId : ("area" + x );
67+ result .append (area + (y == nrOfGridAreaColumns - 1 ? StringUtils .EMPTY : StringUtils .SPACE ));
7168 }
7269 result .append (APOSTROPHE );
7370 }
7471 }
7572 return result .toString ();
7673 }
7774
78- private boolean rowIsNull (String [][] grid , int x , Integer nrOfGridColumnAreas ) {
75+ public Integer getGridContainerHeight () {
76+ int nonNullRows = 0 ;
77+ for (int x = 0 ; x < nrOfGridAreaRows ; x ++) {
78+ if (!rowIsNull (x , nrOfGridAreaColumns )) {
79+ nonNullRows ++;
80+ }
81+ }
82+ return nonNullRows * oneHeightAreaPercentage ;
83+ }
84+
85+ public Integer getWidthsSum () {
86+ return widthsSum ;
87+ }
88+
89+ public Integer getGridColumns () {
90+ return nrOfGridAreaColumns ;
91+ }
92+
93+ public int getGridRows () {
94+ int rows = 0 ;
95+ for (int x = 0 ; x < nrOfGridAreaRows ; x ++) {
96+ if (rowIsNull (x , nrOfGridAreaColumns )) {
97+ continue ;
98+ } else {
99+ rows ++;
100+ }
101+ }
102+ return rows ;
103+ }
104+
105+ private boolean rowIsNull (int x , Integer nrOfGridColumnAreas ) {
79106 for (int y = 0 ; y < nrOfGridColumnAreas ; y ++) {
80107 if (grid [y ][x ] != null )
81108 return false ;
82109 }
83110 return true ;
84111 }
85112
86- private GridElementIndex findNextDiagramsStartingIndex (
113+ private GridElementIndex findNextDiagramsStartPosition (
87114 List <CampaignDashboardElement > dashboardElements ,
88115 int elementIndex ,
89116 int oneWidthAreaPercentage ,
90117 int widthAreas ,
91- int heightAreas ,
92- int nrOfGridAreaColumns ,
93- int nrOfGridAreaRows ,
94- String [][] grid ,
95118 int startingRow ,
96119 int startingColumn ) {
97120 if (elementIndex < dashboardElements .size () - 1 ) {
@@ -100,24 +123,21 @@ private GridElementIndex findNextDiagramsStartingIndex(
100123 if (widthAreas + startingColumn + nextWidthAreas <= nrOfGridAreaColumns ) {
101124 startingColumn += widthAreas ;
102125 } else {
103- final GridElementIndex firstEmptyGridElement = findFirstEmptyGridElement (grid , nrOfGridAreaColumns , nrOfGridAreaRows );
104- if (startingRow + heightAreas >= nrOfGridAreaRows
105- || (firstEmptyGridElement .getY () < startingRow + heightAreas && nextWidthAreas <= nrOfGridAreaColumns - widthAreas )) {
106- startingColumn = firstEmptyGridElement .getX ();
107- startingRow = firstEmptyGridElement .getY ();
108- } else {
109- startingRow += heightAreas ;
110- startingColumn = startingRow == nrOfGridAreaRows || grid [0 ][startingRow ] != null ? startingColumn : 0 ;
111- }
126+ final int nextStartingColumn = startingColumn == 0 ? widthAreas : startingColumn ;
127+ final int nrOfColumnsToBeParsed =
128+ nextStartingColumn + nextWidthAreas <= nrOfGridAreaColumns ? nrOfGridAreaColumns : nextStartingColumn ;
129+ final GridElementIndex firstEmptyGridElement = findFirstEmptyGridElement (nrOfColumnsToBeParsed , nrOfGridAreaRows );
130+ startingColumn = firstEmptyGridElement .getX ();
131+ startingRow = firstEmptyGridElement .getY ();
112132 }
113133 }
114134 return new GridElementIndex (startingColumn , startingRow );
115135 }
116136
117- private GridElementIndex findFirstEmptyGridElement (String [][] matrix , Integer nrOfColumns , Integer nrOfRows ) {
118- for (int x = 0 ; x < nrOfColumns ; x ++) {
119- for (int y = 0 ; y < nrOfRows ; y ++) {
120- if (matrix [x ][y ] == null ) {
137+ private GridElementIndex findFirstEmptyGridElement (Integer nrOfColumnsToBeParsed , Integer nrOfRows ) {
138+ for (int y = 0 ; y < nrOfRows ; y ++) {
139+ for (int x = 0 ; x < nrOfColumnsToBeParsed ; x ++) {
140+ if (grid [x ][y ] == null ) {
121141 return new GridElementIndex (x , y );
122142 }
123143 }
0 commit comments