Search in sources :

Example 16 with ArrayRecord

use of com.revolsys.record.ArrayRecord in project com.revolsys.open by revolsys.

the class FieldCalculator method updateRecord.

@Override
protected void updateRecord(final LayerRecord record) {
    final Bindings bindings = newBindings();
    bindings.putAll(record);
    bindings.put("record", new ArrayRecord(record));
    try {
        final FieldDefinition fieldDefinition = getFieldDefinition();
        final String fieldName = fieldDefinition.getName();
        Object value = this.script.eval(bindings);
        value = fieldDefinition.toFieldValueException(value);
        record.setValue(fieldName, value);
    } catch (final ScriptException e) {
        Exceptions.throwUncheckedException(e);
    }
}
Also used : ScriptException(javax.script.ScriptException) ArrayRecord(com.revolsys.record.ArrayRecord) FieldDefinition(com.revolsys.record.schema.FieldDefinition) Bindings(javax.script.Bindings)

Example 17 with ArrayRecord

use of com.revolsys.record.ArrayRecord in project com.revolsys.open by revolsys.

the class FieldCalculator method validateExpression.

private void validateExpression() {
    boolean valid = true;
    final String scriptText = this.expressionField.getText();
    if (scriptText.isEmpty()) {
        valid = false;
    } else {
        try {
            this.script = this.scriptEngineCompiler.compile(scriptText);
            final Bindings bindings = newBindings();
            final AbstractRecordLayer layer = getLayer();
            final RecordDefinition recordDefinition = layer.getRecordDefinition();
            final Record record = new ArrayRecord(recordDefinition);
            for (final FieldDefinition field : layer.getFieldDefinitions()) {
                bindings.put(field.getName(), null);
            }
            bindings.put("record", record);
            this.script.eval(bindings);
            this.errorsField.setText(null);
        } catch (final Throwable e) {
            String errorMessage = e.getMessage();
            if (!Property.hasValue(errorMessage)) {
                errorMessage = "null pointer";
            }
            this.errorsField.setText(errorMessage);
            this.errorsField.setCaretPosition(0);
            valid = false;
            this.script = null;
        }
    }
    setFormValid(valid);
}
Also used : ArrayRecord(com.revolsys.record.ArrayRecord) FieldDefinition(com.revolsys.record.schema.FieldDefinition) AbstractRecordLayer(com.revolsys.swing.map.layer.record.AbstractRecordLayer) Record(com.revolsys.record.Record) ArrayRecord(com.revolsys.record.ArrayRecord) LayerRecord(com.revolsys.swing.map.layer.record.LayerRecord) Bindings(javax.script.Bindings) RecordDefinition(com.revolsys.record.schema.RecordDefinition)

Example 18 with ArrayRecord

use of com.revolsys.record.ArrayRecord in project com.revolsys.open by revolsys.

the class MergeRecordsDialog method run.

public void run() {
    try {
        final List<LayerRecord> originalRecords = this.layer.getMergeableSelectedRecords();
        String errorMessage = "";
        final DataType geometryType = this.layer.getGeometryType();
        this.mergedRecords = new HashMap<>();
        if (originalRecords.size() < 2) {
            errorMessage = " at least two records must be selected to merge.";
        } else if (!DataTypes.LINE_STRING.equals(geometryType) && !DataTypes.MULTI_LINE_STRING.equals(geometryType)) {
            errorMessage = "Merging " + geometryType + " not currently supported";
        } else {
            final RecordGraph graph = new RecordGraph();
            for (final LayerRecord originalRecord : originalRecords) {
                Geometry geometry = originalRecord.getGeometry();
                if (geometry != null && !geometry.isEmpty()) {
                    geometry = this.layer.getGeometryFactory().geometry(LineString.class, geometry);
                    if (geometry instanceof LineString) {
                        final Record mergeableRecord = new ArrayRecord(originalRecord);
                        mergeableRecord.setGeometryValue(geometry);
                        this.mergeableToOiginalRecordMap.put(mergeableRecord, originalRecord);
                        graph.addEdge(mergeableRecord);
                    }
                }
            }
            for (final Node<Record> node : graph.nodes()) {
                if (node != null) {
                    final List<Edge<Record>> edges = node.getEdges();
                    if (edges.size() == 2) {
                        final Edge<Record> edge1 = edges.get(0);
                        final Record record1 = edge1.getObject();
                        final Edge<Record> edge2 = edges.get(1);
                        final Record record2 = edge2.getObject();
                        if (record1 != record2) {
                            final Record mergedRecord = this.layer.getMergedRecord(node, record1, record2);
                            graph.addEdge(mergedRecord);
                            edge1.remove();
                            edge2.remove();
                            final Set<LayerRecord> sourceRecords = new LinkedHashSet<>();
                            // TODO verify orientation to ensure they are in the correct
                            // order
                            // and see if they are reversed
                            CollectionUtil.addIfNotNull(sourceRecords, this.mergeableToOiginalRecordMap.get(record1));
                            CollectionUtil.addAllIfNotNull(sourceRecords, this.mergedRecords.remove(record1));
                            CollectionUtil.addIfNotNull(sourceRecords, this.mergeableToOiginalRecordMap.get(record2));
                            CollectionUtil.addAllIfNotNull(sourceRecords, this.mergedRecords.remove(record2));
                            this.mergedRecords.put(mergedRecord, sourceRecords);
                            replaceRecord(mergedRecord, record1);
                            replaceRecord(mergedRecord, record2);
                        }
                    }
                }
            }
        }
        final String message = errorMessage;
        Invoke.later(() -> setMergedRecords(message, this.mergedRecords));
    } catch (final Throwable e) {
        Logs.error(this, "Error " + this, e);
    }
}
Also used : RecordGraph(com.revolsys.geometry.graph.RecordGraph) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet) Set(java.util.Set) ArrayRecord(com.revolsys.record.ArrayRecord) Node(com.revolsys.geometry.graph.Node) LineString(com.revolsys.geometry.model.LineString) Geometry(com.revolsys.geometry.model.Geometry) LineString(com.revolsys.geometry.model.LineString) DataType(com.revolsys.datatype.DataType) Record(com.revolsys.record.Record) ArrayRecord(com.revolsys.record.ArrayRecord) LayerRecord(com.revolsys.swing.map.layer.record.LayerRecord) List(java.util.List) LayerRecord(com.revolsys.swing.map.layer.record.LayerRecord) Edge(com.revolsys.geometry.graph.Edge)

Example 19 with ArrayRecord

use of com.revolsys.record.ArrayRecord in project com.revolsys.open by revolsys.

the class RecordWriterGeometryWriter method write.

@Override
public void write(final Geometry geometry) {
    final RecordDefinition recordDefinition = Records.newGeometryRecordDefinition();
    final Record object = new ArrayRecord(recordDefinition);
    object.setGeometryValue(geometry);
    this.writer.write(object);
}
Also used : ArrayRecord(com.revolsys.record.ArrayRecord) Record(com.revolsys.record.Record) ArrayRecord(com.revolsys.record.ArrayRecord) RecordDefinition(com.revolsys.record.schema.RecordDefinition)

Aggregations

ArrayRecord (com.revolsys.record.ArrayRecord)19 Record (com.revolsys.record.Record)15 Geometry (com.revolsys.geometry.model.Geometry)5 FieldDefinition (com.revolsys.record.schema.FieldDefinition)5 RecordDefinition (com.revolsys.record.schema.RecordDefinition)5 DataType (com.revolsys.datatype.DataType)4 LineString (com.revolsys.geometry.model.LineString)2 RecordReader (com.revolsys.record.io.RecordReader)2 RecordDefinitionImpl (com.revolsys.record.schema.RecordDefinitionImpl)2 LayerRecord (com.revolsys.swing.map.layer.record.LayerRecord)2 File (java.io.File)2 ArrayList (java.util.ArrayList)2 NoSuchElementException (java.util.NoSuchElementException)2 Bindings (javax.script.Bindings)2 MapEx (com.revolsys.collection.map.MapEx)1 Edge (com.revolsys.geometry.graph.Edge)1 Node (com.revolsys.geometry.graph.Node)1 RecordGraph (com.revolsys.geometry.graph.RecordGraph)1 ClockDirection (com.revolsys.geometry.model.ClockDirection)1 Point (com.revolsys.geometry.model.Point)1