Hi Stephen,

I've created a separate branch in my personal fork of the kitchensink app
[1] and pasted some of your code there in order to reproduce the issue.
Could you please follow a similar pattern next time to allow faster
debugging?

I have not debugged further but it might be an issue with storing Date
types in the viewmodel memento, could you raise a ticket in Jira?

Cheers,

Jeroen

[1] https://github.com/jcvanderwal/isis-app-kitchensink/tree/bug-stephen

On 12 October 2016 at 11:49, Stephen Cameron <steve.cameron...@gmail.com>
wrote:

> Hi,
>
> I've done a bit more investigation on this but no solution, maybe someone
> can tell me what is happening?
>
> I've defined a View Model, objects properties will normally get seeded from
> a database view but the behaviour is the same if I initialise the property
> values directly.
>
> I have the action below to demonstrate the effect:
>
>         public List<ActivityAttendanceSummary> listAttendanceData() {
>         ArrayList<ActivityAttendanceSummary> list = new ArrayList<>();
>         Calendar calendar1 = new GregorianCalendar(2015,0,29);
>         ActivityAttendanceSummary temp1 = new ActivityAttendanceSummary();
>         temp1.setActivityId(1000L);
>         temp1.setActivityName("Activity 1");
>         temp1.setAttendedCount(10);
>         temp1.setCancelled(false);
>         temp1.setRegionName("SOUTH");
>         temp1.setMaxEndDateTime(calendar1.getTime());
>         temp1.setMinEndDateTime(calendar1.getTime());
>         temp1.setMaxStartDateTime(calendar1.getTime());
>         temp1.setMinStartDateTime(calendar1.getTime());
>         list.add(temp1);
>
>         Calendar calendar2 = new GregorianCalendar(2015,0,30);
>         ActivityAttendanceSummary temp2 = new ActivityAttendanceSummary();
>         temp2.setActivityId(1001L);
>         temp2.setActivityName("Activity 2");
>         temp2.setAttendedCount(20);
>         temp2.setCancelled(true);
>         temp2.setRegionName("NORTH");
>         temp2.setMaxEndDateTime(calendar2.getTime());
>         temp2.setMinEndDateTime(calendar2.getTime());
>         temp2.setMaxStartDateTime(calendar2.getTime());
>         temp2.setMinStartDateTime(calendar2.getTime());
>         //list.add(temp2);
>         return list;
>     }
>
> The effect seen is that if there is only one object in the list then all
> the dates are displayed fine, whereas if there is two (I do add temp2) no
> dates for either temp1 or temp2 get displayed in the table but the other
> values I set do get displayed.
>
> The class ActivityAttendanceSummary is very simple:
>
> package au.com.scds.chats.dom.report.view;
>
> import java.util.Date;
>
> import javax.jdo.annotations.Extension;
> import javax.jdo.annotations.IdentityType;
> import javax.jdo.annotations.Inheritance;
> import javax.jdo.annotations.InheritanceStrategy;
> import javax.jdo.annotations.PersistenceCapable;
> import javax.jdo.annotations.Queries;
> import javax.jdo.annotations.Query;
>
> import org.apache.isis.applib.annotation.DomainObject;
> import org.apache.isis.applib.annotation.Editing;
> import org.apache.isis.applib.annotation.ViewModel;
> import org.joda.time.DateTime;
>
> @ViewModel
> @DomainObject(editing = Editing.DISABLED)
> @PersistenceCapable(identityType = IdentityType.NONDURABLE, table =
> "ActivityAttendanceSummary", extensions = {
>         @Extension(vendorName = "datanucleus", key = "view-definition",
> value = "CREATE VIEW ActivityAttendanceSummary "
>                 + "( " + "  {this.activityId}, " + "  {this.activityName},
> " + "  {this.regionName}, "
>                 + "  {this.startDateTime}, " + "  {this.cancelled}, " + "
> {this.attendedCount}, "
>                 + "  {this.notAttendedCount}, " + "
> {this.hasStartAndEndDateTimesCount}, "
>                 + "  {this.minStartDateTime}, " + "
> {this.maxStartDateTime}, " + "  {this.minEndDateTime}, "
>                 + "  {this.maxEndDateTime} " + ") AS " + "SELECT " + "
> activity.activity_id as activityId, "
>                 + "  activity.name AS activityName, " + "
> activity.region_name AS regionName, "
>                 + "  activity.startdatetime AS startDateTime, " + "
> activity.cancelled, "
>                 + "  sum(case when attend.attended = TRUE then 1 else 0
> end) as attendedCount, "
>                 + "  sum(case when attend.attended = FALSE then 1 else 0
> end) as notAttendedCount, "
>                 + "  sum(case when attend.attended = TRUE AND not
> isnull(attend.startdatetime) AND not isnull(attend.enddatetime) then 1 else
> 0 end) as hasStartAndEndDateTimesCount, "
>                 + "  min(attend.startdatetime) as minStartDateTime, "
>                 + "  max(attend.startdatetime) as maxStartDateTime, " + "
> min(attend.enddatetime) as minEndDateTime, "
>                 + "  max(attend.enddatetime) as maxEndDateTime " + "FROM "
> + "  activity " + "LEFT OUTER JOIN"
>                 + "  attend " + "ON " + "  attend.activity_activity_id =
> activity.activity_id " + "GROUP BY"
>                 + "  activity.activity_id") })
> @Queries({
>         @Query(name = "allActivityAttendanceSummary", language = "JDOQL",
> value = "SELECT FROM
> au.com.scds.chats.dom.report.view.ActivityAttendanceSummary"),
>         @Query(name = "allActivityAttendanceSummaryForPeriodAndRegion",
> language = "JDOQL", value = "SELECT FROM
> au.com.scds.chats.dom.report.view.ActivityAttendanceSummary pa "
>                 + "WHERE pa.startDateTime >= :startDateTime &&
> pa.startDateTime <= :endDateTime && pa.regionName == :region"), })
> @Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
> public class ActivityAttendanceSummary implements
> Comparable<ActivityAttendanceSummary> {
>
>     private Long activityId;
>     private String activityName;
>     private String regionName;
>     private Date startDateTime;
>     private Boolean cancelled;
>     private Integer attendedCount;
>     private Integer notAttendedCount;
>     private Integer hasStartAndEndDateTimesCount;
>     private Date minStartDateTime;
>     private Date maxStartDateTime;
>     private Date minEndDateTime;
>     private Date maxEndDateTime;
>
>     public Long getActivityId() {
>         return activityId;
>     }
>
>     public void setActivityId(Long activityId) {
>         this.activityId = activityId;
>     }
>
>     public String getActivityName() {
>         return activityName;
>     }
>
>     public void setActivityName(String activityName) {
>         this.activityName = activityName;
>     }
>
>     public String getRegionName() {
>         return regionName;
>     }
>
>     public void setRegionName(String regionName) {
>         this.regionName = regionName;
>     }
>
>     public Date getStartDateTime() {
>         return startDateTime;
>     }
>
>     public void setStartDateTime(Date startDateTime) {
>         this.startDateTime = startDateTime;
>     }
>
>     public Boolean getCancelled() {
>         return cancelled;
>     }
>
>     public void setCancelled(Boolean cancelled) {
>         this.cancelled = cancelled;
>     }
>
>     public Integer getAttendedCount() {
>         return attendedCount;
>     }
>
>     public void setAttendedCount(Integer attendedCount) {
>         this.attendedCount = attendedCount;
>     }
>
>     public Integer getNotAttendedCount() {
>         return notAttendedCount;
>     }
>
>     public void setNotAttendedCount(Integer notAttendedCount) {
>         this.notAttendedCount = notAttendedCount;
>     }
>
>     public Integer getHasStartAndEndDateTimesCount() {
>         return hasStartAndEndDateTimesCount;
>     }
>
>     public void setHasStartAndEndDateTimesCount(Integer
> hasStartAndEndDateTimesCount) {
>         this.hasStartAndEndDateTimesCount = hasStartAndEndDateTimesCount;
>     }
>
>     public Date getMinStartDateTime() {
>         return minStartDateTime;
>     }
>
>     public void setMinStartDateTime(Date minStartDateTime) {
>         this.minStartDateTime = minStartDateTime;
>     }
>
>     public Date getMaxStartDateTime() {
>         return maxStartDateTime;
>     }
>
>     public void setMaxStartDateTime(Date maxStartDateTime) {
>         this.maxStartDateTime = maxStartDateTime;
>     }
>
>     public Date getMinEndDateTime() {
>         return minEndDateTime;
>     }
>
>     public void setMinEndDateTime(Date minEndDateTime) {
>         this.minEndDateTime = minEndDateTime;
>     }
>
>     public Date getMaxEndDateTime() {
>         return maxEndDateTime;
>     }
>
>     public void setMaxEndDateTime(Date maxEndDateTime) {
>         this.maxEndDateTime = maxEndDateTime;
>     }
>
>     public String getMinStartDateTimeName() {
>         if (getMinStartDateTime() == null)
>             return null;
>         else
>             return getMinStartDateTime().toString();
>     }
>
>     public String getMaxStartDateTimeName() {
>         if (getMaxStartDateTime() == null)
>             return null;
>         else
>             return getMaxStartDateTime().toString();
>     }
>
>     public String getMinEndDateTimeName() {
>         if (getMinEndDateTime() == null)
>             return null;
>         else
>             return getMinEndDateTime().toString();
>     }
>
>     public String getMaxEndDateTimeName() {
>         if (getMaxEndDateTime() == null)
>             return null;
>         else
>             return getMaxEndDateTime().toString();
>     }
>
>     @Override
>     public int compareTo(ActivityAttendanceSummary o) {
>         // compare on name
>         if (getActivityName() != null && o.getActivityName() != null) {
>             if (!getActivityName().equals(o.getActivityName()))
>                 return getActivityName().compareTo(o.getActivityName());
>         }
>         // compare on start date
>         if (getStartDateTime() != null && o.getStartDateTime() != null) {
>             if (getStartDateTime().equals(o.getStartDateTime()))
>                 return 0;
>             else if (getStartDateTime().before(o.getStartDateTime()))
>                 return -1;
>             else
>                 return 1;
>         }
>         // compare on activity Id
>         if (getActivityId() != null && o.getActivityId() != null) {
>             if (getActivityId().equals(o.getActivityId()))
>                 return 0;
>             else if (getActivityId() < o.getActivityId())
>                 return -1;
>             else
>                 return 1;
>         } else
>             return 0;
>     }
>
> }
>
>
>
>
> On Tue, Oct 4, 2016 at 11:58 AM, Stephen Cameron <
> steve.cameron...@gmail.com
> > wrote:
>
> > Hi,
> >
> > I've noticed that Dates and Joda DateTimes are not being shown in Wicket
> > Viewer from a View Model class based on a database view.
> >
> > I am using 1.13.0 and a MySQL database.
> >
> > Its not critical at the moment, I'll look into it further soon.
> >
> > Steve
> >
>

Reply via email to