@Override public DateTimeFormatter getFormatter(Formatter type) { GranularityType granularityType = GranularityType.fromPeriod(period); switch (type) { case DEFAULT: return DateTimeFormat.forPattern(granularityType.getDefaultFormat()); case HIVE: return DateTimeFormat.forPattern(granularityType.getHiveFormat()); case LOWER_DEFAULT: return DateTimeFormat.forPattern(granularityType.getLowerDefaultFormat()); default: throw new IAE("There is no format for type %s", type); } }
/** * For a select subset of granularites, users can specify them directly as string. * These are "predefined granularities" or "standard" granularities. * For all others, the users will have to use "Duration" or "Period" type granularities */ public static boolean isStandard(Granularity granularity) { final GranularityType[] values = GranularityType.values(); for (GranularityType value : values) { if (value.getDefaultGranularity().equals(granularity)) { return true; } } return false; }
@Override public DateTime toDate(String filePath, Formatter formatter) { Integer[] vals = getDateValues(filePath, formatter); GranularityType granularityType = GranularityType.fromPeriod(period); DateTime date = granularityType.getDateTime(vals); if (date != null) { return bucketStart(date); } return null; }
GranularityType(GranularityType granularityType, String period) { this( granularityType.getHiveFormat(), granularityType.getLowerDefaultFormat(), granularityType.getDefaultFormat(), granularityType.dateValuePositions, period ); }
@Override public void serialize(JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { // Retain the same behavior as before #3850. // i.e. when Granularity class was an enum. if (GranularityType.isStandard(this)) { jsonGenerator.writeString(GranularityType.fromPeriod(getPeriod()).toString()); } else { jsonGenerator.writeStartObject(); jsonGenerator.writeStringField("type", "period"); jsonGenerator.writeObjectField("period", getPeriod()); jsonGenerator.writeObjectField("timeZone", getTimeZone()); jsonGenerator.writeObjectField("origin", getOrigin()); jsonGenerator.writeEndObject(); } }
dimensionsSpec, metricsSpec, GranularityType.fromPeriod(interval.toPeriod()).getDefaultGranularity(), jsonMapper );
for (GranularityType granularityType : GranularityType.values()) { final Granularity granularity = granularityType.getDefaultGranularity(); mapper.readValue("\"" + StringUtils.toUpperCase(granularityType.name()) + "\"", Granularity.class) ); mapper.readValue("\"" + StringUtils.toLowerCase(granularityType.name()) + "\"", Granularity.class) ); "{\"type\":\"" + StringUtils.toLowerCase(granularityType.name()) + "\"}", mapper.writeValueAsString(granularity) ); } else { Assert.assertEquals( "\"" + StringUtils.toUpperCase(granularityType.name()) + "\"", mapper.writeValueAsString(granularity) );
@JsonCreator public static Granularity fromString(String str) { return GranularityType.valueOf(StringUtils.toUpperCase(str)).getDefaultGranularity(); }
public static List<Granularity> granularitiesFinerThan(final Granularity gran0) { final List<Granularity> retVal = new ArrayList<>(); final DateTime origin = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getOrigin() : null; final DateTimeZone tz = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getTimeZone() : null; for (GranularityType gran : GranularityType.values()) { /** * All and None are excluded b/c when asked to give all granularities finer * than "TEN_MINUTE", you want the answer to be "FIVE_MINUTE, MINUTE and SECOND" * it doesn't make sense to include ALL or None to be part of this. */ if (gran == GranularityType.ALL || gran == GranularityType.NONE) { continue; } final Granularity segmentGranularity = gran.create(origin, tz); final long segmentGranularityDurationMillis = segmentGranularity.bucket(DateTimes.EPOCH).toDurationMillis(); final long gran0DurationMillis = gran0.bucket(DateTimes.EPOCH).toDurationMillis(); if (segmentGranularityDurationMillis <= gran0DurationMillis) { retVal.add(segmentGranularity); } } retVal.sort((g1, g2) -> { long duration1 = g2.bucket(DateTimes.EPOCH).toDurationMillis(); long duration2 = g1.bucket(DateTimes.EPOCH).toDurationMillis(); return Longs.compare(duration1, duration2); }); return retVal; }
@Test public void testCustomNestedPeriodFail() { try { Period p = Period.years(6).withMonths(3).withSeconds(23); GranularityType.fromPeriod(p); Assert.fail("Complicated period creation should fail b/c of unsupported granularity type."); } catch (IAE e) { // pass } }
@Override public void serialize( JsonGenerator jsonGenerator, SerializerProvider serializerProvider ) throws IOException, JsonProcessingException { // Retain the same behavior as before #3850. // i.e. when Granularity class was an enum. if (GranularityType.isStandard(this)) { jsonGenerator.writeString(GranularityType.fromPeriod(getPeriod()).toString()); } else { jsonGenerator.writeStartObject(); jsonGenerator.writeStringField("type", "period"); jsonGenerator.writeObjectField("period", getPeriod()); jsonGenerator.writeObjectField("timeZone", getTimeZone()); jsonGenerator.writeObjectField("origin", getOrigin()); jsonGenerator.writeEndObject(); } }
GranularityType(GranularityType granularityType, String period) { this( granularityType.getHiveFormat(), granularityType.getLowerDefaultFormat(), granularityType.getDefaultFormat(), granularityType.dateValuePositions, period ); }
@JsonCreator public static Granularity fromString(String str) { return GranularityType.valueOf(StringUtils.toUpperCase(str)).getDefaultGranularity(); }
public static List<Granularity> granularitiesFinerThan(final Granularity gran0) { final List<Granularity> retVal = Lists.newArrayList(); final DateTime origin = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getOrigin() : null; final DateTimeZone tz = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getTimeZone() : null; for (GranularityType gran : GranularityType.values()) { /** * All and None are excluded b/c when asked to give all granularities finer * than "TEN_MINUTE", you want the answer to be "FIVE_MINUTE, MINUTE and SECOND" * it doesn't make sense to include ALL or None to be part of this. */ if (gran == GranularityType.ALL || gran == GranularityType.NONE) { continue; } final Granularity segmentGranularity = gran.create(origin, tz); final long segmentGranularityDurationMillis = segmentGranularity.bucket(DateTimes.EPOCH).toDurationMillis(); final long gran0DurationMillis = gran0.bucket(DateTimes.EPOCH).toDurationMillis(); if (segmentGranularityDurationMillis <= gran0DurationMillis) { retVal.add(segmentGranularity); } } retVal.sort((g1, g2) -> { long duration1 = g2.bucket(DateTimes.EPOCH).toDurationMillis(); long duration2 = g1.bucket(DateTimes.EPOCH).toDurationMillis(); return Longs.compare(duration1, duration2); }); return retVal; }
@Override public DateTimeFormatter getFormatter(Formatter type) { GranularityType granularityType = GranularityType.fromPeriod(period); switch (type) { case DEFAULT: return DateTimeFormat.forPattern(granularityType.getDefaultFormat()); case HIVE: return DateTimeFormat.forPattern(granularityType.getHiveFormat()); case LOWER_DEFAULT: return DateTimeFormat.forPattern(granularityType.getLowerDefaultFormat()); default: throw new IAE("There is no format for type %s", type); } }
/** * For a select subset of granularites, users can specify them directly as string. * These are "predefined granularities" or "standard" granularities. * For all others, the users will have to use "Duration" or "Period" type granularities */ public static boolean isStandard(Granularity granularity) { final GranularityType[] values = GranularityType.values(); for (GranularityType value : values) { if (value.getDefaultGranularity().equals(granularity)) { return true; } } return false; }
@Override public DateTime toDate(String filePath, Formatter formatter) { Integer[] vals = getDateValues(filePath, formatter); GranularityType granularityType = GranularityType.fromPeriod(period); DateTime date = granularityType.getDateTime(vals); if (date != null) { return bucketStart(date); } return null; }