Revision 44655 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeature.java

View differences:

DefaultFeature.java
24 24
package org.gvsig.fmap.dal.feature.impl;
25 25

  
26 26
import java.lang.ref.WeakReference;
27
import java.time.format.DateTimeFormatter;
27 28
import java.util.ArrayList;
28 29
import java.util.Date;
29 30
import java.util.Iterator;
30 31
import java.util.List;
31 32
import java.util.Map;
33
import java.util.Objects;
34
import javax.json.Json;
35
import javax.json.JsonObject;
36
import javax.json.JsonObjectBuilder;
32 37
import org.apache.commons.lang3.StringUtils;
33 38
import org.cresques.cts.IProjection;
34 39
import org.gvsig.fmap.dal.DALLocator;
......
1099 1104
        return this.data.getExtraValue(index);
1100 1105
    }
1101 1106

  
1107
    public JsonObject toJSON() {
1108
        JsonObjectBuilder builder = Json.createObjectBuilder();
1109
        
1110
        FeatureType ft = this.getType();
1111
        for (FeatureAttributeDescriptor desc : ft) {
1112
            if (desc.isComputed()) {
1113
                continue;
1114
            }
1115
            switch(desc.getType()) {
1116
                case DataTypes.GEOMETRY:
1117
                    {
1118
                        try {
1119
                            builder.add(desc.getName(), this.getGeometry(desc.getIndex()).convertToWKT());
1120
                        } catch (Exception ex) {
1121
                            throw new RuntimeException("Can't convert geometry to WKT.", ex);
1122
                        }
1123
                    }
1124
                    break;
1125
                case DataTypes.BOOLEAN:
1126
                    builder.add(desc.getName(), this.getBoolean(desc.getIndex()));
1127
                    break;
1128
                case DataTypes.BYTE:
1129
                    builder.add(desc.getName(), this.getByte(desc.getIndex()));
1130
                    break;
1131
                case DataTypes.INT:
1132
                    builder.add(desc.getName(), this.getInt(desc.getIndex()));
1133
                    break;
1134
                case DataTypes.LONG:
1135
                    builder.add(desc.getName(), this.getLong(desc.getIndex()));
1136
                    break;
1137
                case DataTypes.DOUBLE:
1138
                    builder.add(desc.getName(), this.getDouble(desc.getIndex()));
1139
                    break;
1140
                case DataTypes.FLOAT:
1141
                    builder.add(desc.getName(), this.getFloat(desc.getIndex()));
1142
                    break;
1143
                case DataTypes.DATE:
1144
                    // Format date as ISO 8601
1145
                    Date date = this.getDate(desc.getIndex());
1146
                    String value = DateTimeFormatter.ISO_DATE_TIME.format(date.toInstant());
1147
                    builder.add(desc.getName(), value);
1148
                    break;
1149
                default:
1150
                    builder.add(desc.getName(), Objects.toString(this.get(desc.getIndex()),""));
1151
            }
1152
        }        
1153
        return builder.build();
1154
    }
1102 1155

  
1103 1156
}

Also available in: Unified diff