@Override public Number[][] getSparklinesXAndYNumbers(Object value) { IntervalMap intervalMap = (IntervalMap) value; ArrayList<Number> xValues = new ArrayList<>(); ArrayList<Number> yValues = new ArrayList<>(); if (intervalMap == null) { return new Number[2][0]; } Interval[] intervals = intervalMap.toKeysArray(); Object[] values = intervalMap.toValuesArray(); Number n; for (int i = 0; i < intervals.length; i++) { n = (Number) values[i]; if (n != null) { xValues.add(intervals[i].getLow()); yValues.add(n); } } return new Number[][]{xValues.toArray(new Number[0]), yValues.toArray(new Number[0])}; } }
@Override public Object get(Interval interval, Estimator estimator) { if (estimator == null) { return get(interval, (T) null); } if (!isSupported(estimator)) { throw new UnsupportedOperationException("Not supported estimator."); } switch (estimator) { case AVERAGE: return getAverage(interval); case MIN: return getMin(interval); case MAX: return getMax(interval); case FIRST: return getFirst(interval); case LAST: return getLast(interval); default: throw new UnsupportedOperationException("Not supported estimator."); } }
@Override public String toString() { return toString(TimeFormat.DOUBLE, null); } }
/** * For getting x and y values from a dynamic number Use the intervals start * time as X values */ private Number[][] getDynamicNumberNumbers(IntervalMap dynamicNumber) { ArrayList<Number> xValuesList = new ArrayList<Number>(); ArrayList<Number> yValuesList = new ArrayList<Number>(); if (dynamicNumber == null) { return new Number[2][0]; } Number n; for (Interval interval : dynamicNumber.toKeysArray()) { n = (Number) dynamicNumber.get(interval, null); if (n != null) { xValuesList.add(interval.getLow()); yValuesList.add(n); } } return new Number[][]{xValuesList.toArray(new Number[0]), yValuesList.toArray(new Number[0])}; } }
@Override public Iterable<Map.Entry> getWeights() { synchronized (this) { Object weightValue = attributes[GraphStoreConfiguration.EDGE_WEIGHT_INDEX]; if (weightValue instanceof Double) { throw new IllegalStateException("The weight is static, call getWeight() instead"); } TimeMap dynamicValue = (TimeMap) weightValue; Object[] values = dynamicValue.toValuesArray(); if (dynamicValue instanceof TimestampMap) { return new TimeAttributeIterable(((TimestampMap) dynamicValue).getTimestamps(), values); } else if (dynamicValue instanceof IntervalMap) { return new TimeAttributeIterable(((IntervalMap) dynamicValue).toKeysArray(), values); } } return TimeAttributeIterable.EMPTY_ITERABLE; }
private void serializeIntervalMap(final DataOutput out, final IntervalMap intervalMap) throws IOException { serialize(out, intervalMap.getIntervals()); Class mapClass = intervalMap.getClass(); if (mapClass.equals(IntervalBooleanMap.class)) { serialize(out, ((IntervalBooleanMap) intervalMap).toBooleanArray()); } else if (mapClass.equals(IntervalByteMap.class)) { serialize(out, ((IntervalByteMap) intervalMap).toByteArray()); } else if (mapClass.equals(IntervalCharMap.class)) { serialize(out, ((IntervalCharMap) intervalMap).toCharacterArray()); } else if (mapClass.equals(IntervalDoubleMap.class)) { serialize(out, ((IntervalDoubleMap) intervalMap).toDoubleArray()); } else if (mapClass.equals(IntervalFloatMap.class)) { serialize(out, ((IntervalFloatMap) intervalMap).toFloatArray()); } else if (mapClass.equals(IntervalIntegerMap.class)) { serialize(out, ((IntervalIntegerMap) intervalMap).toIntegerArray()); } else if (mapClass.equals(IntervalLongMap.class)) { serialize(out, ((IntervalLongMap) intervalMap).toLongArray()); } else if (mapClass.equals(IntervalShortMap.class)) { serialize(out, ((IntervalShortMap) intervalMap).toShortArray()); } else if (mapClass.equals(IntervalStringMap.class)) { serialize(out, intervalMap.toValuesArray()); } else { throw new RuntimeException("Unrecognized interval map class"); } }
@Override public String toString(TimeFormat timeFormat, DateTimeZone timeZone) { if (size == 0) { return FormattingAndParsingUtils.EMPTY_VALUE; } T[] values = toValuesArray(); StringBuilder sb = new StringBuilder(); sb.append('<'); for (int i = 0; i < size; i++) { sb.append('['); sb.append(AttributeUtils.printTimestampInFormat(array[i * 2], timeFormat, timeZone)); sb.append(", "); sb.append(AttributeUtils.printTimestampInFormat(array[i * 2 + 1], timeFormat, timeZone)); sb.append(", "); String stringValue = values[i].toString(); if (FormattingAndParsingUtils.containsDynamicSpecialCharacters(stringValue) || stringValue.trim().isEmpty()) { sb.append('"'); sb.append(stringValue.replace("\\", "\\\\").replace("\"", "\\\"")); sb.append('"'); } else { sb.append(stringValue); } sb.append(']'); if (i < size - 1) { sb.append("; "); } } sb.append('>'); return sb.toString(); }
@Override public void execute(Table table, Column column) { Class dynamicType = AttributeUtils.getIntervalMapType(column.getTypeClass()); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); Element[] rows = ac.getTableAttributeRows(table); Object[] values = new Object[rows.length]; Interval interval = new Interval(Double.parseDouble(start), Double.parseDouble(end)); for (int i = 0; i < values.length; i++) { try { IntervalMap val = (IntervalMap) dynamicType.newInstance(); val.put(interval, rows[i].getAttribute(column)); } catch (Exception e) { } } table.removeColumn(column); Column dynamicColumn = table.addColumn(column.getId(), column.getTitle(), dynamicType, null); for (int i = 0; i < values.length; i++) { rows[i].setAttribute(dynamicColumn, values[i]); } }
@Override public double getWeight(double timestamp) { synchronized (this) { Object weightValue = attributes[GraphStoreConfiguration.EDGE_WEIGHT_INDEX]; if (weightValue instanceof Double) { throw new IllegalStateException("The weight is static, call getWeight() instead"); } TimeMap dynamicValue = (TimeMap) weightValue; if (dynamicValue == null) { return DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING; } if (dynamicValue instanceof IntervalMap) { return (Double) ((IntervalMap) dynamicValue) .get(new Interval(timestamp, timestamp), DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING); } else { return (Double) dynamicValue.get(timestamp, DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING); } } }
@Override public boolean contains(Interval interval) { return getIndex(interval.getLow(), interval.getHigh()) >= 0; }
protected Object getAverage(final Interval interval) { BigDecimal average = getAverageBigDecimal(interval); return average != null ? average.doubleValue() : null; }
@Override public Iterable<Map.Entry> getWeights() { synchronized (this) { Object weightValue = attributes[GraphStoreConfiguration.EDGE_WEIGHT_INDEX]; if (weightValue instanceof Double) { throw new IllegalStateException("The weight is static, call getWeight() instead"); } TimeMap dynamicValue = (TimeMap) weightValue; Object[] values = dynamicValue.toValuesArray(); if (dynamicValue instanceof TimestampMap) { return new TimeAttributeIterable(((TimestampMap) dynamicValue).getTimestamps(), values); } else if (dynamicValue instanceof IntervalMap) { return new TimeAttributeIterable(((IntervalMap) dynamicValue).toKeysArray(), values); } } return TimeAttributeIterable.EMPTY_ITERABLE; }
private void serializeIntervalMap(final DataOutput out, final IntervalMap intervalMap) throws IOException { serialize(out, intervalMap.getIntervals()); Class mapClass = intervalMap.getClass(); if (mapClass.equals(IntervalBooleanMap.class)) { serialize(out, ((IntervalBooleanMap) intervalMap).toBooleanArray()); } else if (mapClass.equals(IntervalByteMap.class)) { serialize(out, ((IntervalByteMap) intervalMap).toByteArray()); } else if (mapClass.equals(IntervalCharMap.class)) { serialize(out, ((IntervalCharMap) intervalMap).toCharacterArray()); } else if (mapClass.equals(IntervalDoubleMap.class)) { serialize(out, ((IntervalDoubleMap) intervalMap).toDoubleArray()); } else if (mapClass.equals(IntervalFloatMap.class)) { serialize(out, ((IntervalFloatMap) intervalMap).toFloatArray()); } else if (mapClass.equals(IntervalIntegerMap.class)) { serialize(out, ((IntervalIntegerMap) intervalMap).toIntegerArray()); } else if (mapClass.equals(IntervalLongMap.class)) { serialize(out, ((IntervalLongMap) intervalMap).toLongArray()); } else if (mapClass.equals(IntervalShortMap.class)) { serialize(out, ((IntervalShortMap) intervalMap).toShortArray()); } else if (mapClass.equals(IntervalStringMap.class)) { serialize(out, intervalMap.toValuesArray()); } else { throw new RuntimeException("Unrecognized interval map class"); } }
@Override public String toString(TimeFormat timeFormat, DateTimeZone timeZone) { if (size == 0) { return FormattingAndParsingUtils.EMPTY_VALUE; } T[] values = toValuesArray(); StringBuilder sb = new StringBuilder(); sb.append('<'); for (int i = 0; i < size; i++) { sb.append('['); sb.append(AttributeUtils.printTimestampInFormat(array[i * 2], timeFormat, timeZone)); sb.append(", "); sb.append(AttributeUtils.printTimestampInFormat(array[i * 2 + 1], timeFormat, timeZone)); sb.append(", "); String stringValue = values[i].toString(); if (FormattingAndParsingUtils.containsDynamicSpecialCharacters(stringValue) || stringValue.trim().isEmpty()) { sb.append('"'); sb.append(stringValue.replace("\\", "\\\\").replace("\"", "\\\"")); sb.append('"'); } else { sb.append(stringValue); } sb.append(']'); if (i < size - 1) { sb.append("; "); } } sb.append('>'); return sb.toString(); }
throw new IllegalArgumentException("A value must be provided for each interval"); result.put(interval.getInterval(), interval.getValue());
@Override public double getWeight(double timestamp) { synchronized (this) { Object weightValue = attributes[GraphStoreConfiguration.EDGE_WEIGHT_INDEX]; if (weightValue instanceof Double) { throw new IllegalStateException("The weight is static, call getWeight() instead"); } TimeMap dynamicValue = (TimeMap) weightValue; if (dynamicValue == null) { return DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING; } if (dynamicValue instanceof IntervalMap) { return (Double) ((IntervalMap) dynamicValue) .get(new Interval(timestamp, timestamp), DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING); } else { return (Double) dynamicValue.get(timestamp, DEFAULT_DYNAMIC_EDGE_WEIGHT_WHEN_MISSING); } } }
@Override public boolean contains(Interval interval) { return getIndex(interval.getLow(), interval.getHigh()) >= 0; }
protected Object getAverage(final Interval interval) { BigDecimal average = getAverageBigDecimal(interval); return average != null ? average.doubleValue() : null; }