public static Trigger readTrigger(
     MarshallerReaderContext inCtx, ProtobufMessages.Trigger _trigger) {
   switch (_trigger.getType()) {
     case CRON:
       {
         ProtobufMessages.Trigger.CronTrigger _cron = _trigger.getCron();
         CronTrigger trigger = new CronTrigger();
         trigger.setStartTime(new Date(_cron.getStartTime()));
         if (_cron.hasEndTime()) {
           trigger.setEndTime(new Date(_cron.getEndTime()));
         }
         trigger.setRepeatLimit(_cron.getRepeatLimit());
         trigger.setRepeatCount(_cron.getRepeatCount());
         trigger.setCronExpression(_cron.getCronExpression());
         if (_cron.hasNextFireTime()) {
           trigger.setNextFireTime(new Date(_cron.getNextFireTime()));
         }
         String[] calendarNames = new String[_cron.getCalendarNameCount()];
         for (int i = 0; i < calendarNames.length; i++) {
           calendarNames[i] = _cron.getCalendarName(i);
         }
         trigger.setCalendarNames(calendarNames);
         return trigger;
       }
     case INTERVAL:
       {
         ProtobufMessages.Trigger.IntervalTrigger _interval = _trigger.getInterval();
         IntervalTrigger trigger = new IntervalTrigger();
         trigger.setStartTime(new Date(_interval.getStartTime()));
         if (_interval.hasEndTime()) {
           trigger.setEndTime(new Date(_interval.getEndTime()));
         }
         trigger.setRepeatLimit(_interval.getRepeatLimit());
         trigger.setRepeatCount(_interval.getRepeatCount());
         if (_interval.hasNextFireTime()) {
           trigger.setNextFireTime(new Date(_interval.getNextFireTime()));
         }
         trigger.setPeriod(_interval.getPeriod());
         String[] calendarNames = new String[_interval.getCalendarNameCount()];
         for (int i = 0; i < calendarNames.length; i++) {
           calendarNames[i] = _interval.getCalendarName(i);
         }
         trigger.setCalendarNames(calendarNames);
         return trigger;
       }
     case POINT_IN_TIME:
       {
         PointInTimeTrigger trigger =
             new PointInTimeTrigger(_trigger.getPit().getNextFireTime(), null, null);
         return trigger;
       }
   }
   throw new RuntimeException("Unable to deserialize Trigger for type: " + _trigger.getType());
 }
 public static ProtobufMessages.Trigger writeTrigger(
     Trigger trigger, MarshallerWriteContext outCtx) {
   if (trigger instanceof CronTrigger) {
     CronTrigger cronTrigger = (CronTrigger) trigger;
     ProtobufMessages.Trigger.CronTrigger.Builder _cron =
         ProtobufMessages.Trigger.CronTrigger.newBuilder()
             .setStartTime(cronTrigger.getStartTime().getTime())
             .setRepeatLimit(cronTrigger.getRepeatLimit())
             .setRepeatCount(cronTrigger.getRepeatCount())
             .setCronExpression(cronTrigger.getCronEx().getCronExpression());
     if (cronTrigger.getEndTime() != null) {
       _cron.setEndTime(cronTrigger.getEndTime().getTime());
     }
     if (cronTrigger.getNextFireTime() != null) {
       _cron.setNextFireTime(cronTrigger.getNextFireTime().getTime());
     }
     if (cronTrigger.getCalendarNames() != null) {
       for (String calendarName : cronTrigger.getCalendarNames()) {
         _cron.addCalendarName(calendarName);
       }
     }
     return ProtobufMessages.Trigger.newBuilder()
         .setType(ProtobufMessages.Trigger.TriggerType.CRON)
         .setCron(_cron.build())
         .build();
   } else if (trigger instanceof IntervalTrigger) {
     IntervalTrigger intTrigger = (IntervalTrigger) trigger;
     ProtobufMessages.Trigger.IntervalTrigger.Builder _interval =
         ProtobufMessages.Trigger.IntervalTrigger.newBuilder()
             .setStartTime(intTrigger.getStartTime().getTime())
             .setRepeatLimit(intTrigger.getRepeatLimit())
             .setRepeatCount(intTrigger.getRepeatCount())
             .setPeriod(intTrigger.getPeriod());
     if (intTrigger.getEndTime() != null) {
       _interval.setEndTime(intTrigger.getEndTime().getTime());
     }
     if (intTrigger.getNextFireTime() != null) {
       _interval.setNextFireTime(intTrigger.getNextFireTime().getTime());
     }
     if (intTrigger.getCalendarNames() != null) {
       for (String calendarName : intTrigger.getCalendarNames()) {
         _interval.addCalendarName(calendarName);
       }
     }
     return ProtobufMessages.Trigger.newBuilder()
         .setType(ProtobufMessages.Trigger.TriggerType.INTERVAL)
         .setInterval(_interval.build())
         .build();
   } else if (trigger instanceof PointInTimeTrigger) {
     PointInTimeTrigger pinTrigger = (PointInTimeTrigger) trigger;
     return ProtobufMessages.Trigger.newBuilder()
         .setType(ProtobufMessages.Trigger.TriggerType.POINT_IN_TIME)
         .setPit(
             ProtobufMessages.Trigger.PointInTimeTrigger.newBuilder()
                 .setNextFireTime(pinTrigger.hasNextFireTime().getTime())
                 .build())
         .build();
   } else if (trigger instanceof CompositeMaxDurationTrigger) {
     CompositeMaxDurationTrigger cmdTrigger = (CompositeMaxDurationTrigger) trigger;
     ProtobufMessages.Trigger.CompositeMaxDurationTrigger.Builder _cmdt =
         ProtobufMessages.Trigger.CompositeMaxDurationTrigger.newBuilder();
     if (cmdTrigger.getMaxDurationTimestamp() != null) {
       _cmdt.setMaxDurationTimestamp(cmdTrigger.getMaxDurationTimestamp().getTime());
     }
     if (cmdTrigger.getTimerCurrentDate() != null) {
       _cmdt.setTimerCurrentDate(cmdTrigger.getTimerCurrentDate().getTime());
     }
     if (cmdTrigger.getTimerTrigger() != null) {
       _cmdt.setTimerTrigger(writeTrigger(cmdTrigger.getTimerTrigger(), outCtx));
     }
     return ProtobufMessages.Trigger.newBuilder()
         .setType(ProtobufMessages.Trigger.TriggerType.COMPOSITE_MAX_DURATION)
         .setCmdt(_cmdt.build())
         .build();
   }
   throw new RuntimeException("Unable to serialize Trigger for type: " + trigger.getClass());
 }