Revision 46956

View differences:

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
41 41
import javax.json.JsonObject;
42 42
import org.apache.commons.lang3.ArrayUtils;
43 43
import org.apache.commons.lang3.StringUtils;
44
import org.apache.commons.lang3.tuple.Pair;
45 44
import org.cresques.cts.IProjection;
46 45
import org.gvsig.expressionevaluator.ExpressionUtils;
47 46
import org.gvsig.fmap.dal.DALLocator;
......
59 58
import org.gvsig.fmap.dal.feature.FeatureReference;
60 59
import org.gvsig.fmap.dal.feature.FeatureStore;
61 60
import org.gvsig.fmap.dal.feature.FeatureType;
62
import org.gvsig.fmap.dal.feature.ForeingKey;
63 61
import org.gvsig.fmap.dal.feature.exception.IllegalValueException;
64 62
import org.gvsig.fmap.dal.feature.exception.SetReadOnlyAttributeException;
65 63
import org.gvsig.fmap.dal.feature.impl.dynobjectutils.DynObjectFeatureFacade;
......
71 69
import org.gvsig.json.Json;
72 70
import org.gvsig.json.JsonArrayBuilder;
73 71
import org.gvsig.json.JsonObjectBuilder;
74
import org.gvsig.json.SupportToJson;
75 72
import org.gvsig.tools.ToolsLocator;
76 73
import org.gvsig.tools.dataTypes.Coercion;
77 74
import org.gvsig.tools.dataTypes.CoercionException;
78 75
import org.gvsig.tools.dataTypes.DataType;
79 76
import org.gvsig.tools.dataTypes.DataTypesManager;
77
import org.gvsig.tools.dispose.DisposeUtils;
80 78
import org.gvsig.tools.dynobject.DynField;
79
import static org.gvsig.tools.dynobject.DynField.RELATION_TYPE_AGGREGATE;
80
import static org.gvsig.tools.dynobject.DynField.RELATION_TYPE_COLLABORATION;
81 81
import static org.gvsig.tools.dynobject.DynField.RELATION_TYPE_COMPOSITION;
82 82
import org.gvsig.tools.dynobject.DynObject;
83 83
import org.gvsig.tools.evaluator.Evaluator;
......
1651 1651
        Geometry geom;
1652 1652
        FeatureType ft = this.getType();
1653 1653
        
1654
        boolean hasVisited = false;
1655
        if(visiteds != null){
1656
            FeatureReference ref = this.getReference();
1657
            String code = ref.getCode();
1658
            hasVisited = visiteds.contains(code);
1659
            if(hasVisited){
1660
               return this.featureReferenceToJson(ref);
1661
            }
1662
            visiteds.add(code);
1663
        }
1664
        
1654 1665
        for (FeatureAttributeDescriptor desc : ft) {
1655 1666
            if (desc.isComputed() ) { 
1656 1667
                if( !mode.isSetBits(TOJSON_MODE_COMPUTEDS) ) {
......
1659 1670
                    }
1660 1671
                }
1661 1672
            }
1662
            if(this.isNull(desc.getName())){
1673
            if(desc.getType() != DataTypes.LIST && this.isNull(desc.getName()) ){
1663 1674
                builder.addNull(desc.getName());
1664 1675
                continue;
1665 1676
            }
1666 1677
            if( desc.isForeingKey() && !desc.getForeingKey().isClosedList() && mode.isSetBits(TOJSON_MODE_DEEP) ) {
1667
                if( desc.getRelationType()==RELATION_TYPE_COMPOSITION ) { // --Ojo--
1678
                if( desc.getRelationType()==DynField.RELATION_TYPE_COLLABORATION_WITH_COMPOSITION) {
1668 1679
                    Object value = this.get(desc.getName());
1669 1680
                    Feature f = desc.getForeingKey().getFeature(null, value);
1670 1681
                    String x = f.getReference().getCode();
......
1674 1685
                        } else {
1675 1686
                            builder.add(desc.getName(), f.toJsonBuilder(props));
1676 1687
                        }
1688
                        continue;
1677 1689
                    } else if( !visiteds.contains(x) ) {
1678
                        visiteds.add(x);
1679 1690
                        if( f instanceof DefaultFeature ) {
1680 1691
                            builder.add(desc.getName(), ((DefaultFeature)f).toJsonBuilder(props, mode, visiteds));
1681 1692
                        } else {
1682 1693
                            builder.add(desc.getName(), f.toJsonBuilder(props));
1683 1694
                        }
1695
                        continue;
1684 1696
                    }
1685
                    continue;
1686 1697
                }
1687 1698
            }
1688 1699
            switch (desc.getType()) {
......
1748 1759
                    break;
1749 1760
                case DataTypes.LIST: 
1750 1761
                    if( mode.isSetBits(TOJSON_MODE_COLLECTIONS) ) {
1751
                        if( desc.getRelationType()==RELATION_TYPE_COMPOSITION ) {
1762
                        if( desc.getRelationType()== DynField.RELATION_TYPE_AGGREGATE_WITH_COMPOSITION) {
1752 1763
                            JsonArrayBuilder arraybuilder = Json.createArrayBuilder();
1753 1764
                            Object x = this.get(desc.getName());
1754 1765
                            if( x instanceof List ) {
1755 1766
                                for (Object v : (List)x) {
1756 1767
                                    if( v instanceof DefaultFeature ) {
1757
                                        arraybuilder.add(((DefaultFeature)v).toJsonBuilder(props, mode, visiteds));
1768
                                            arraybuilder.add(((DefaultFeature)v).toJsonBuilder(props, mode, visiteds));
1758 1769
                                    } else if( v instanceof Feature ) {
1759 1770
                                        arraybuilder.add(((Feature)v).toJsonBuilder(props));
1760 1771
                                    }
1761 1772
                                }
1762 1773
                            }
1774
                            DisposeUtils.disposeQuietly(x);
1763 1775
                            builder.add(desc.getName(), arraybuilder);
1764 1776
                        }
1765 1777
                    }
......
1771 1783
        }
1772 1784
        return builder;
1773 1785
    }
1786
    
1787
    private JsonObjectBuilder featureReferenceToJson(FeatureReference ref){
1788
        JsonObjectBuilder builder = Json.createObjectBuilder();
1789
        builder.add("$reference", ref.toJsonBuilder());
1790
        return builder;
1791
    }
1774 1792

  
1775 1793
    @Override
1776 1794
    public List<String> getKeys() {
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/featurereference/FeatureReferencePK.java
20 20
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
21 21
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
22 22
import org.gvsig.json.Json;
23
import org.gvsig.json.JsonArrayBuilder;
23 24
import org.gvsig.json.JsonObjectBuilder;
24 25
import org.gvsig.tools.persistence.Persistent;
25 26
import org.gvsig.tools.persistence.PersistentState;
......
132 133

  
133 134
    @Override
134 135
    public String getCode() {
135
        JsonObjectBuilder builder = Json.createObjectBuilder();
136
        builder.add("type", PK_TYPE);
137
        if (this.pk == null) {
138
            builder.add("size", -1);
139
            builder.addNull("names");
140
            builder.addNull("values");
141
        } else {
142
            builder.add("size", pkNames.length);
143
            builder.add("names", this.pkNames);
144
            builder.add("values", this.pk);
145
        }
146

  
147
        String s = builder.toString();
136
        String s = toJsonBuilder().toString();
148 137
        String r = Base64.getEncoder().encodeToString(s.getBytes());
149 138
        return r;
150 139
    }
......
235 224
        return myHashCode;
236 225
    }
237 226

  
227
    @Override
228
    public JsonObjectBuilder toJsonBuilder() {
229
        JsonObjectBuilder builder = Json.createObjectBuilder();
230
        builder.add("type", PK_TYPE);
231
        if (this.pk == null) {
232
            builder.addNull("names");
233
            builder.addNull("values");
234
        } else {
235
            JsonArrayBuilder arrayNames = Json.createArrayBuilder();
236
            JsonArrayBuilder arrayValues = Json.createArrayBuilder();
237
            for (int i = 0; i < pk.length; i++) {
238
                arrayNames.add(pkNames[i]);
239
                arrayValues.add(pk[i]);
240
            }
241
            builder.add("names", arrayNames);
242
            builder.add("values", arrayValues);
243
        }
244
        return builder;
245
    }
238 246
}
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/featurereference/FeatureReferenceOID.java
101 101

  
102 102
    @Override
103 103
    public String getCode() {
104
        JsonObjectBuilder builder = Json.createObjectBuilder();
105
        builder.add("type", OID_TYPE);
106
        builder.add("oid", this.oid);
107
        String s = builder.toString();
104
        String s = this.toJsonBuilder().toString();
108 105
        String r = Base64.getEncoder().encodeToString(s.getBytes());
109 106
        return r;
110 107
    }
......
161 158
        return -1;
162 159
    }
163 160

  
161
    @Override
162
    public JsonObjectBuilder toJsonBuilder() {
163
        JsonObjectBuilder builder = Json.createObjectBuilder();
164
        builder.add("type", OID_TYPE);
165
        builder.add("oid", this.oid);
166
        return builder;
167
    }
164 168

  
169

  
165 170
}
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/featurereference/FeatureReferenceCounter.java
6 6
package org.gvsig.fmap.dal.feature.impl.featurereference;
7 7

  
8 8
import java.lang.ref.WeakReference;
9
import java.math.BigDecimal;
9 10
import java.util.Base64;
10 11
import javax.json.JsonObject;
11 12
import org.gvsig.fmap.dal.exception.DataException;
......
116 117

  
117 118
    @Override
118 119
    public String getCode() {
119
        JsonObjectBuilder builder = Json.createObjectBuilder();
120
        builder.add("type", COUNTER_TYPE);
121
        builder.add("oid", this.oid);
122
        String s = builder.toString();
120
        String s = this.toJsonBuilder().toString();
123 121
        String r = Base64.getEncoder().encodeToString(s.getBytes());
124 122
        return r;
125 123
    }
......
176 174
        return false;
177 175
    }
178 176

  
177
    @Override
178
    public JsonObjectBuilder toJsonBuilder() {
179
        JsonObjectBuilder builder = Json.createObjectBuilder();
180
        builder.add("type", COUNTER_TYPE);
181
        builder.add("oid", this.oid);
182
        return builder;
183
    }
179 184

  
185

  
180 186
}
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/featurereference/FeatureReferenceUID.java
116 116

  
117 117
    @Override
118 118
    public String getCode() {
119
        JsonObjectBuilder builder = Json.createObjectBuilder();
120
        builder.add("type", UID_TYPE);
121
        builder.add("uid", this.uid);
122
        String s = builder.toString();
119
        String s = this.toJsonBuilder().toString();
123 120
        String r = Base64.getEncoder().encodeToString(s.getBytes());
124 121
        return r;
125 122
    }
......
165 162
        }
166 163
        return -1;
167 164
    }
165

  
166
    @Override
167
    public JsonObjectBuilder toJsonBuilder() {
168
        JsonObjectBuilder builder = Json.createObjectBuilder();
169
        builder.add("type", UID_TYPE);
170
        builder.add("uid", this.uid);
171
        return builder;
172
    }
168 173
    
169 174
}
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/featurereference/DefaultFeatureReference.java
38 38
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
39 39
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
40 40
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
41
import org.gvsig.json.JsonObjectBuilder;
41 42
import org.gvsig.tools.ToolsLocator;
42 43
import org.gvsig.tools.dynobject.DynStruct;
43 44
import org.gvsig.tools.persistence.Persistent;
......
47 48
import org.json.JSONObject;
48 49

  
49 50
@SuppressWarnings("UseSpecificCatch")
51
@Deprecated
50 52
public class DefaultFeatureReference implements
51 53
		FeatureReferenceProviderServices, Persistent {
52 54

  
......
456 458
        return builder.toString();
457 459
	}
458 460

  
461
    @Override
462
    public JsonObjectBuilder toJsonBuilder() {
463
        throw new UnsupportedOperationException("Not supported yet.");
464
    }
465

  
459 466
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureAttributePanel.java
383 383
//            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Identity_1_1"),DynField.RELATION_TYPE_IDENTITY));
384 384
//            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1_without_composition"),DynField.RELATION_TYPE_COLLABORATION));
385 385
//            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Collaboration_1_1_with_composition"),DynField.RELATION_TYPE_COLLABORATION_WITH_COMPOSITION));
386
            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N_without_composition"),DynField.RELATION_TYPE_AGGREGATE_WITH_COMPOSITION));
387
            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N_with_composition"),DynField.RELATION_TYPE_AGGREGATE));
386
            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N_with_composition"),DynField.RELATION_TYPE_AGGREGATE_WITH_COMPOSITION));
387
            relationTypeModel.addElement(new ListElement<>(i18n.getTranslation("_Aggregate_1_N_without_composition"),DynField.RELATION_TYPE_AGGREGATE));
388 388
            this.cboRelationType.setModel(relationTypeModel);
389 389
        
390 390
            this.pickerMyField = dataSwingManager.createAttributeDescriptorPickerController(cboMyField);
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureReference.java
24 24
package org.gvsig.fmap.dal.feature;
25 25

  
26 26
import org.gvsig.fmap.dal.exception.DataException;
27
import org.gvsig.json.SupportToJson;
27 28

  
28 29
/**
29 30
 * A FeatureReference is a lightweight unique identifier for a
......
32 33
 * memory needs.
33 34
 * 
34 35
 */
35
public interface FeatureReference {
36
public interface FeatureReference extends SupportToJson{
36 37

  
37 38
	/**
38 39
	 * Returns the referenced {@link Feature}

Also available in: Unified diff