@Override public void configure(Config config) { this.config = config; this.timestampTimeModel = getTimestampTimeModel(true); this.eventEffectiveFromTimeModel = getEventEffectiveFromTimeModel(true); this.eventEffectiveToTimeModel = getEventEffectiveToTimeModel(true); this.systemEffectiveFromTimeModel = getSystemEffectiveFromTimeModel(true); this.systemEffectiveToTimeModel = getSystemEffectiveToTimeModel(true); }
private TimeModel getEventEffectiveFromTimeModel(boolean configure) { return TimeModelFactory.create( getEventTimeModelConfig(), getEventTimeEffectiveFromFieldNames(), configure); }
private TimeModel getEventEffectiveToTimeModel(boolean configure) { return TimeModelFactory.create( getEventTimeModelConfig(), getEventTimeEffectiveToFieldNames(), configure); }
@Override public List<Row> planMutationsForKey(Row key, List<Row> arrivingForKey, List<Row> existingForKey) { resetCurrentSystemTime(); arriving = systemEffectiveFromTimeModel.appendFields(arriving); arriving = systemEffectiveToTimeModel.appendFields(arriving); if (hasCurrentFlagField()) { arriving = RowUtils.append(arriving, getCurrentFlagFieldName(), DataTypes.StringType, null); arriving = systemEffectiveFromTimeModel.setCurrentSystemTime(arriving); arriving = systemEffectiveToTimeModel.setFarFutureTime(arriving); if (hasCurrentFlagField()) { arriving = RowUtils.set(arriving, getCurrentFlagFieldName(), getCurrentFlagYesValue()); if (PlannerUtils.simultaneous(timestampTimeModel, arriving, plan) && RowUtils.different(arriving, plan, getValueFieldNames())) { arriving = PlannerUtils.copyTime(plan, eventEffectiveFromTimeModel, arriving, eventEffectiveFromTimeModel); arriving = PlannerUtils.copyTime(plan, eventEffectiveToTimeModel, arriving, eventEffectiveToTimeModel); arriving = systemEffectiveFromTimeModel.setCurrentSystemTime(arriving); arriving = systemEffectiveToTimeModel.setFarFutureTime(arriving); if (hasCurrentFlagField()) { arriving = RowUtils.set(arriving, getCurrentFlagFieldName(), RowUtils.get(plan, getCurrentFlagFieldName())); if (hasCurrentFlagField()) { plan = RowUtils.set(plan, getCurrentFlagFieldName(), getCurrentFlagNoValue()); arriving = systemEffectiveFromTimeModel.setCurrentSystemTime(arriving); arriving = systemEffectiveToTimeModel.setFarFutureTime(arriving); if (hasCurrentFlagField()) { arriving = RowUtils.set(arriving, getCurrentFlagFieldName(), getCurrentFlagNoValue());
@Override public Set<InstantiatedComponent> getComponents(Config config, boolean configure) { this.config = config; Set<InstantiatedComponent> components = Sets.newHashSet(); components.add(new InstantiatedComponent( getEventEffectiveFromTimeModel(configure), getEventTimeModelConfig(), "Event Time Model")); components.add(new InstantiatedComponent( getSystemEffectiveFromTimeModel(configure), getSystemTimeModelConfig(), "System Time Model")); return components; }
private void resetCurrentSystemTime() { long currentSystemTimeMillis = System.currentTimeMillis(); this.timestampTimeModel.configureCurrentSystemTime(currentSystemTimeMillis); this.eventEffectiveFromTimeModel.configureCurrentSystemTime(currentSystemTimeMillis); this.eventEffectiveToTimeModel.configureCurrentSystemTime(currentSystemTimeMillis); this.systemEffectiveFromTimeModel.configureCurrentSystemTime(currentSystemTimeMillis); this.systemEffectiveToTimeModel.configureCurrentSystemTime(currentSystemTimeMillis); this.currentSystemTimeRow = getCurrentSystemTimeRow(currentSystemTimeMillis); }
private Row carryForwardWhenNull(Row into, Row from) { if (!doesCarryForward()) { return into; } for (StructField field : into.schema().fields()) { String fieldName = field.name(); if (RowUtils.get(into, fieldName) == null && RowUtils.get(from, fieldName) != null) { into = RowUtils.set(into, fieldName, RowUtils.get(from, fieldName)); } } return into; }