summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/ui/GridLayout.java37
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java23
2 files changed, 58 insertions, 2 deletions
diff --git a/server/src/com/vaadin/ui/GridLayout.java b/server/src/com/vaadin/ui/GridLayout.java
index 792ad72dcc..8837ad71d1 100644
--- a/server/src/com/vaadin/ui/GridLayout.java
+++ b/server/src/com/vaadin/ui/GridLayout.java
@@ -1456,8 +1456,12 @@ public class GridLayout extends AbstractLayout implements
writeMargin(design, getMargin(), def.getMargin(), designContext);
- if (components.isEmpty()
- || !designContext.shouldWriteChildren(this, def)) {
+ if (!designContext.shouldWriteChildren(this, def)) {
+ return;
+ }
+
+ if (components.isEmpty()) {
+ writeEmptyColsAndRows(design, designContext);
return;
}
@@ -1593,6 +1597,35 @@ public class GridLayout extends AbstractLayout implements
}
}
+ /**
+ * Fills in the design with rows and empty columns. This needs to be done
+ * for empty {@link GridLayout}, because there's no other way to serialize
+ * info about number of columns and rows if there are absolutely no
+ * components in the {@link GridLayout}
+ *
+ * @since
+ * @param design
+ * @param designContext
+ */
+ private void writeEmptyColsAndRows(Element design,
+ DesignContext designContext) {
+ int rowCount = getState(false).rows;
+ int colCount = getState(false).columns;
+
+ // only write cols and rows tags if size is not 1x1
+ if (rowCount == 1 && colCount == 1) {
+ return;
+ }
+
+ for (int i = 0; i < rowCount; i++) {
+ Element row = design.appendElement("row");
+ for (int j = 0; j < colCount; j++) {
+ row.appendElement("column");
+ }
+ }
+
+ }
+
private int getRowSpan(Component[][] compMap, int i, int j, int colspan,
Component child) {
int rowspan = 1;
diff --git a/server/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java b/server/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java
index d69fd92984..fe2d1c4a23 100644
--- a/server/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java
+++ b/server/tests/src/com/vaadin/tests/server/component/gridlayout/GridLayoutDeclarativeTest.java
@@ -15,6 +15,10 @@
*/
package com.vaadin.tests.server.component.gridlayout;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
import org.junit.Assert;
import org.junit.Test;
@@ -22,6 +26,7 @@ import com.vaadin.tests.server.component.DeclarativeMarginTestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.declarative.Design;
import com.vaadin.ui.declarative.DesignContext;
public class GridLayoutDeclarativeTest extends
@@ -236,4 +241,22 @@ public class GridLayoutDeclarativeTest extends
testWrite(design, outer);
}
+
+ @Test
+ public void testEmptyGridLayoutWithColsAndRowsSet() throws IOException {
+ GridLayout layout = new GridLayout();
+ layout.setRows(2);
+ layout.setColumns(2);
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ DesignContext context = new DesignContext();
+ context.setRootComponent(layout);
+ Design.write(context, out);
+
+ ByteArrayInputStream input = new ByteArrayInputStream(out.toByteArray());
+ Component component = Design.read(input);
+ GridLayout readLayout = (GridLayout) component;
+
+ Assert.assertEquals(layout.getRows(), readLayout.getRows());
+ }
}