[java-libglom] Add Report layout items.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [java-libglom] Add Report layout items.
- Date: Sun, 4 Mar 2012 17:15:18 +0000 (UTC)
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]