[java-libglom] Add Report layout items.



commit 28168306ebb53bf5a07908270b0d5ade9e6805df
Author: Murray Cumming <murrayc murrayc com>
Date:   Sun Mar 4 18:15:11 2012 +0100

    Add Report layout items.
    
    * Makefile.am:
    * src/glom.i: Add LayoutItem_GroupBy, LayoutItem_Summary,
    LayoutItem_FieldSummary, and LayoutItem_VerticalGroup, used in
    reports.
    * src/test/java/org/glom/libglom/tests/DocumentTest.java:
    Add tests for some of this new API.

 ChangeLog                                          |   11 +++
 Makefile.am                                        |    4 +
 src/glom.i                                         |   66 +++++++++++++++++++-
 .../java/org/glom/libglom/tests/DocumentTest.java  |   40 ++++++++++++
 4 files changed, 120 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index beb6c28..1f3a857 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-03-04  Murray Cumming  <murrayc murrayc com>
+
+	Add Report layout items.
+
+	* Makefile.am:
+	* src/glom.i: Add LayoutItem_GroupBy, LayoutItem_Summary, 
+	LayoutItem_FieldSummary, and LayoutItem_VerticalGroup, used in 
+	reports.
+	* src/test/java/org/glom/libglom/tests/DocumentTest.java: 
+	Add tests for some of this new API.
+
 2012-01-29  Murray Cumming  <murrayc murrayc com>
 
 	Fix the build with the latest libglom API.
diff --git a/Makefile.am b/Makefile.am
index 15e3b91..0b8dd28 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,10 +51,14 @@ generated_java_sources = src/main/java/org/glom/libglom/BakeryDocument.java \
                          src/main/java/org/glom/libglom/LayoutGroupVector.java \
                          src/main/java/org/glom/libglom/LayoutItem_CalendarPortal.java \
                          src/main/java/org/glom/libglom/LayoutItem_Field.java \
+                         src/main/java/org/glom/libglom/LayoutItem_FieldSummary.java \
                          src/main/java/org/glom/libglom/LayoutItem.java \
+                         src/main/java/org/glom/libglom/LayoutItem_GroupBy.java \
                          src/main/java/org/glom/libglom/LayoutItem_Notebook.java \
                          src/main/java/org/glom/libglom/LayoutItem_Portal.java \
+                         src/main/java/org/glom/libglom/LayoutItem_Summary.java \
                          src/main/java/org/glom/libglom/LayoutItem_Text.java \
+                         src/main/java/org/glom/libglom/LayoutItem_VerticalGroup.java \
                          src/main/java/org/glom/libglom/LayoutItemVector.java \
                          src/main/java/org/glom/libglom/LayoutItem_WithFormatting.java \
                          src/main/java/org/glom/libglom/LocalToTranslationMap.java \
diff --git a/src/glom.i b/src/glom.i
index 3c6a74c..d195475 100644
--- a/src/glom.i
+++ b/src/glom.i
@@ -31,6 +31,9 @@
 #include <libglom/document/document.h>
 #include <libglom/data_structure/glomconversions.h>
 #include <libglom/data_structure/layout/layoutitem_calendarportal.h>
+#include <libglom/data_structure/layout/report_parts/layoutitem_fieldsummary.h>
+#include <libglom/data_structure/layout/report_parts/layoutitem_summary.h>
+#include <libglom/data_structure/layout/report_parts/layoutitem_verticalgroup.h>
 #include <libglom/utils.h>
 #include <libglom/db_utils.h>
 using namespace Glom;
@@ -124,12 +127,16 @@ using namespace Glom;
 %glom_sharedptr(Glom::Field);
 %glom_sharedptr(Glom::Relationship);
 %glom_sharedptr(Glom::LayoutGroup);
+%glom_sharedptr(Glom::LayoutItem_GroupBy);
+%glom_sharedptr(Glom::LayoutItem_Summary);
+%glom_sharedptr(Glom::LayoutItem_FieldSummary);
 %glom_sharedptr(Glom::LayoutItem_Notebook);
 %glom_sharedptr(Glom::LayoutItem_Portal);
 %glom_sharedptr(Glom::LayoutItem_CalendarPortal);
 %glom_sharedptr(Glom::LayoutItem_WithFormatting);
 %glom_sharedptr(Glom::LayoutItem_Field);
 %glom_sharedptr(Glom::LayoutItem_Text);
+%glom_sharedptr(Glom::LayoutItem_VerticalGroup);
 %glom_sharedptr(Glom::CustomTitle);
 %glom_sharedptr(Glom::ChoiceValue);
 
@@ -212,6 +219,7 @@ using namespace Glom;
 %include <libglom/data_structure/tableinfo.h>
 
 %include <libglom/data_structure/print_layout.h>
+%ignore  Glom::Report::get_layout_group() const;
 %include <libglom/data_structure/report.h>
 
 
@@ -236,6 +244,15 @@ using namespace Glom;
 // LayoutItem_Notebook:
 %include <libglom/data_structure/layout/layoutitem_notebook.h>
 
+/** Report layout items */
+%ignore Glom::LayoutItem_GroupBy::get_fields_sort_by() const;
+%ignore Glom::LayoutItem_GroupBy::get_field_group_by() const;
+%rename(_group_secondary_fields) Glom::LayoutItem_GroupBy::m_group_secondary_fields;
+%include <libglom/data_structure/layout/report_parts/layoutitem_groupby.h>
+%include <libglom/data_structure/layout/report_parts/layoutitem_summary.h>
+%include <libglom/data_structure/layout/report_parts/layoutitem_fieldsummary.h>
+%include <libglom/data_structure/layout/report_parts/layoutitem_verticalgroup.h>
+
 // LayoutItem_Portal:
 //
 // We don't need this method for now but a wrapper method can be created to avoid using UsesRelationship.
@@ -481,7 +498,7 @@ sharedptr<const LayoutItem_Field> get_navigation_relationship_specific()
 /*
  * cast_dynamic methods.
  *
- * The code for cast_dynamic methods have been taken from the template code in
+ * The code for cast_dynamic methods has been taken from the template code in
  * sharedptr::cast_dynamic with appropriate classes filled in. You can safely
  * add more cast_dynamic methods here as needed.
  */
@@ -557,6 +574,53 @@ static Glom::sharedptr<Glom::LayoutItem_Notebook> cast_dynamic(const Glom::share
 }
 };
 
+%extend Glom::LayoutItem_GroupBy {
+static Glom::sharedptr<Glom::LayoutItem_GroupBy> cast_dynamic(const Glom::sharedptr<Glom::LayoutItem>& src)
+{
+  Glom::LayoutItem_GroupBy *const pCppObject = dynamic_cast<Glom::LayoutItem_GroupBy*>(src.operator->());
+
+  if(pCppObject)
+    return Glom::sharedptr<Glom::LayoutItem_GroupBy>(pCppObject, src._get_refcount());
+  else
+    return Glom::sharedptr<Glom::LayoutItem_GroupBy>();
+}
+};
+
+%extend Glom::LayoutItem_Summary {
+static Glom::sharedptr<Glom::LayoutItem_Summary> cast_dynamic(const Glom::sharedptr<Glom::LayoutItem>& src)
+{
+  Glom::LayoutItem_Summary *const pCppObject = dynamic_cast<Glom::LayoutItem_Summary*>(src.operator->());
+
+  if(pCppObject)
+    return Glom::sharedptr<Glom::LayoutItem_Summary>(pCppObject, src._get_refcount());
+  else
+    return Glom::sharedptr<Glom::LayoutItem_Summary>();
+}
+};
+
+%extend Glom::LayoutItem_FieldSummary {
+static Glom::sharedptr<Glom::LayoutItem_FieldSummary> cast_dynamic(const Glom::sharedptr<Glom::LayoutItem>& src)
+{
+  Glom::LayoutItem_FieldSummary *const pCppObject = dynamic_cast<Glom::LayoutItem_FieldSummary*>(src.operator->());
+
+  if(pCppObject)
+    return Glom::sharedptr<Glom::LayoutItem_FieldSummary>(pCppObject, src._get_refcount());
+  else
+    return Glom::sharedptr<Glom::LayoutItem_FieldSummary>();
+}
+};
+
+%extend Glom::LayoutItem_VerticalGroup {
+static Glom::sharedptr<Glom::LayoutItem_VerticalGroup> cast_dynamic(const Glom::sharedptr<Glom::LayoutItem>& src)
+{
+  Glom::LayoutItem_VerticalGroup *const pCppObject = dynamic_cast<Glom::LayoutItem_VerticalGroup*>(src.operator->());
+
+  if(pCppObject)
+    return Glom::sharedptr<Glom::LayoutItem_VerticalGroup>(pCppObject, src._get_refcount());
+  else
+    return Glom::sharedptr<Glom::LayoutItem_VerticalGroup>();
+}
+};
 
 /*
  * Methods to access methods from Glom::UsesRelationship.
diff --git a/src/test/java/org/glom/libglom/tests/DocumentTest.java b/src/test/java/org/glom/libglom/tests/DocumentTest.java
index 4619f46..d25bb92 100644
--- a/src/test/java/org/glom/libglom/tests/DocumentTest.java
+++ b/src/test/java/org/glom/libglom/tests/DocumentTest.java
@@ -32,12 +32,14 @@ import org.glom.libglom.LayoutFieldVector;
 import org.glom.libglom.LayoutGroup;
 import org.glom.libglom.LayoutGroupVector;
 import org.glom.libglom.LayoutItem;
+import org.glom.libglom.LayoutItem_GroupBy;
 import org.glom.libglom.LayoutItemVector;
 import org.glom.libglom.LayoutItem_Field;
 import org.glom.libglom.LayoutItem_Notebook;
 import org.glom.libglom.LayoutItem_Portal;
 import org.glom.libglom.NumericFormat;
 import org.glom.libglom.Relationship;
+import org.glom.libglom.Report;
 import org.glom.libglom.SortClause;
 import org.glom.libglom.SortFieldPair;
 import org.glom.libglom.StringVector;
@@ -296,6 +298,44 @@ public class DocumentTest {
 
 	}
 
+	@Test
+	public void testReadReportNames() {
+		StringVector reportNames = document.get_report_names("albums");
+		assertEquals(1, reportNames.size()); //TODO: Test something with more reports.
+
+		String reports = reportNames.get(0);
+		for (int i = 1; i < reportNames.size(); i++) {
+			reports += ", " + reportNames.get(i);
+		}
+		assertThat(reports, is("albums_by_artist"));
+	}
+
+	@Test
+	public void testReadReportStructure() {
+		Report report = document.get_report("albums", "albums_by_artist");
+		assertTrue(report != null);
+		LayoutGroup layoutGroup = report.get_layout_group();
+		assertTrue(layoutGroup != null);
+		LayoutItemVector layoutItems = layoutGroup.get_items();
+		final int numItems = safeLongToInt(layoutItems.size());
+		assertEquals(1, numItems);
+
+		LayoutItem layoutItem = layoutItems.get(0);
+		assertTrue(layoutItem != null);
+		LayoutGroup asGroup = LayoutGroup.cast_dynamic(layoutItem);
+		assertTrue(asGroup != null);
+		LayoutItem_GroupBy groupby = LayoutItem_GroupBy.cast_dynamic(layoutItem);
+		assertTrue(groupby != null);
+
+		assertTrue(groupby.get_has_field_group_by());
+		LayoutItem_Field fieldGroupBy = groupby.get_field_group_by();
+		assertTrue(fieldGroupBy != null);
+		assertThat(fieldGroupBy.get_name(), is("artist_id"));
+
+		LayoutGroup groupSecondaries = groupby.get_group_secondary_fields();
+		assertTrue(groupSecondaries != null);
+	}
+
 	// Test thread class that runs all the tests.
 	private class TestThread implements Runnable {
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]