@Override public boolean isNumber() { return AttributeUtils.isNumberType(typeClass); }
/** * Parses the given string using the type class provided and returns an * instance. * * Default time zone is used (UTC) for dynamic types (timestamps/intervals). * * @param str string to parse * @param typeClass class of the desired type * @return an instance of the type class, or null if <em>str</em> is null or * empty */ public static Object parse(String str, Class typeClass) { return parse(str, typeClass, null); }
private String convertToStringIfNotNull() { if (value != null) { return AttributeUtils.print(value, currentTimeFormat, dateTimeZone); } else { return null; } }
@Override public boolean init(Graph graph) { if (AttributeUtils.isNodeColumn(column)) { if (graph.getNodeCount() == 0) { return false; } } else if (AttributeUtils.isEdgeColumn(column)) { if (graph.getEdgeCount() == 0) { return false; } } return true; }
@Override public Number[] getRowNumbers(Element row, Column[] columns) { ArrayList<Number> numbers = new ArrayList<>(); Number number; for (Column column : columns) { Class type = column.getTypeClass(); if (!AttributeUtils.isNumberType(type)) { throw new IllegalArgumentException("The column has to be a number column"); } Object value = row.getAttribute(column); if (value != null) { if (!AttributeUtils.isDynamicType(type)) { if (type.isArray()) { numbers.addAll(getArrayNumbers(value)); } else { //Single number column: number = (Number) value; if (number != null) { numbers.add(number); } } } else { numbers.addAll(getDynamicNumberColumnNumbers(row, column)); } } } return numbers.toArray(new Number[0]); }
private void prepareRenderers() { for (Class<?> typeClass : AttributeUtils.getSupportedTypes()) { TableCellRenderer typeRenderer = null; boolean isNumberType = AttributeUtils.isNumberType(typeClass); boolean isDynamic = AttributeUtils.isDynamicType(typeClass); boolean isArray = typeClass.isArray();
public AttributeFunctionImpl(String id, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking, Interpolator interpolator) { super(id, null, AttributeUtils.isNodeColumn(column) ? Node.class : Edge.class, graph, column, transformer, transformerUI, null, ranking, interpolator); }
@Override public String getString(Object value) { String str = null; if (value != null) { str = AttributeUtils.printArray(value); } return str; } }
GraphModel graphModel = column.getTable().getGraph().getModel(); String stringValue = AttributeUtils.print(value, graphModel.getTimeFormat(), graphModel.getTimeZone()); value = AttributeUtils.parse(stringValue, targetType);//Try to convert to target type from string representation } catch (Exception ex) { return false;//Could not parse
@Override public boolean canManipulateColumn(Table at, Column c) { if (AttributeUtils.isNodeColumn(c)) { if (!c.isProperty()) { //Can't replace id or label column return AttributeUtils.getIntervalMapType(c.getTypeClass()) != null;//Is convertible to some dynamic type? } else { return false; } } else if (AttributeUtils.isEdgeColumn(c)) { if (!c.isProperty()) { //Can't replace id, label or weight column return AttributeUtils.getIntervalMapType(c.getTypeClass()) != null;//Is convertible to some dynamic type? } else { return false; } } else { return false; } }
@Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { TimeFormat timeFormat = graphModelProvider.getGraphModel().getTimeFormat(); DateTimeZone timeZone = graphModelProvider.getGraphModel().getTimeZone(); String valueStr; if (value == null) { valueStr = ""; } else if (isTimestampSetType) { valueStr = ((TimestampSet) value).toString(timeFormat, timeZone); } else if (isTimestampMapType) { valueStr = ((TimestampMap) value).toString(timeFormat, timeZone); } else if (isIntervalSetType) { valueStr = ((IntervalSet) value).toString(timeFormat, timeZone); } else if (isIntervalMapType) { valueStr = ((IntervalMap) value).toString(timeFormat, timeZone); } else if (isArrayType) { valueStr = AttributeUtils.printArray(value); } else { valueStr = AttributeUtils.print(value, timeFormat, timeZone); } textField.setBorder(originalBorder); textField.setEditable(true); textField.setText(valueStr); return textField; } }
@Override public boolean canConvertColumnToDynamic(Column column) { if (column.isReadOnly() || AttributeUtils.isDynamicType(column.getTypeClass())) { return false; } try { //Make sure the simple type can actually be part of a dynamic type of intervals/timestamps //For example array types cannot be converted to dynamic AttributeUtils.getIntervalMapType(column.getTypeClass()); AttributeUtils.getTimestampMapType(column.getTypeClass()); } catch (Exception e) { return false; } if (isNodeColumn(column) || isEdgeColumn(column)) { return !column.getTitle().equalsIgnoreCase("Label"); } else { return true; } }
valueSet = AttributeUtils.getIntervalMapType(value.getClass()).newInstance(); } else { valueSet = AttributeUtils.getTimestampMapType(value.getClass()).newInstance();
public static boolean isTypeAvailable(Class<?> type, TimeRepresentation timeRepresentation) { if (AttributeUtils.isDynamicType(type)) { switch (timeRepresentation) { case INTERVAL: return isIntervalType(type); case TIMESTAMP: return isTimestampType(type); default: throw new IllegalArgumentException("Unknown timeRepresentation"); } } else { return true; } }
private void checkSupportedIntervalTypes(Class type) { try { AttributeUtils.getIntervalMapType(type); } catch (Exception e) { throw new IllegalArgumentException("Unsupported dynamic type " + type.getName()); } }
/** * Used for obtaining a list of the numbers of row of a dynamic number column. * * @param row Row * @param column Column with dynamic type * @return list of numbers */ private List<Number> getDynamicNumberColumnNumbers(Element row, Column column) { Class type = column.getTypeClass(); if (!(AttributeUtils.isNumberType(type) && AttributeUtils.isDynamicType(type))) { throw new IllegalArgumentException("Column must be a dynamic number column"); } if (TimestampMap.class.isAssignableFrom(type)) {//Timestamp type: TimestampMap timestampMap = (TimestampMap) row.getAttribute(column); if (timestampMap == null) { return new ArrayList<>(); } Number[] dynamicNumbers = (Number[]) timestampMap.toValuesArray(); return Arrays.asList(dynamicNumbers); } else if (IntervalMap.class.isAssignableFrom(type)) {//Interval type: IntervalMap intervalMap = (IntervalMap) row.getAttribute(column); if (intervalMap == null) { return new ArrayList<>(); } Number[] dynamicNumbers = (Number[]) intervalMap.toValuesArray(); return Arrays.asList(dynamicNumbers); } else { throw new IllegalArgumentException("Unsupported dynamic type class " + type.getCanonicalName()); } }
public AttributeFunctionImpl(String id, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) { super(id, null, AttributeUtils.isNodeColumn(column) ? Node.class : Edge.class, graph, column, transformer, transformerUI, partition, null, null); }
@Override public String getTextFromValue(Object value) { if (value == null) { return null; } return AttributeUtils.printArray(value); }
@Override public boolean init(Graph graph) { if (AttributeUtils.isNodeColumn(column)) { if (graph.getNodeCount() == 0) { return false; } } else if (AttributeUtils.isEdgeColumn(column)) { if (graph.getEdgeCount() == 0) { return false; } } return true; }
valueSet = AttributeUtils.getIntervalMapType(value.getClass()).newInstance(); } else { valueSet = AttributeUtils.getTimestampMapType(value.getClass()).newInstance();