Revision 44190 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/DefaultFeatureType.java

View differences:

DefaultFeatureType.java
47 47
import org.gvsig.fmap.dal.feature.FeatureRules;
48 48
import org.gvsig.fmap.dal.feature.FeatureStore;
49 49
import org.gvsig.fmap.dal.feature.FeatureType;
50
import org.gvsig.tools.ToolsLocator;
50 51
import org.gvsig.tools.dynobject.DynClass;
51 52
import org.gvsig.tools.dynobject.DynField;
52 53
import org.gvsig.tools.dynobject.DynMethod;
......
55 56
import org.gvsig.tools.dynobject.DynStruct;
56 57
import org.gvsig.tools.dynobject.exception.DynMethodException;
57 58
import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
59
import org.gvsig.tools.persistence.PersistenceManager;
60
import org.gvsig.tools.persistence.Persistent;
61
import org.gvsig.tools.persistence.PersistentState;
62
import org.gvsig.tools.persistence.exception.PersistenceException;
58 63

  
59
public class DefaultFeatureType extends ArrayList<FeatureAttributeDescriptor> implements FeatureType,
60
		DynClass, org.gvsig.tools.lang.Cloneable {
64
public class DefaultFeatureType 
65
        extends ArrayList<FeatureAttributeDescriptor> 
66
        implements 
67
            FeatureType,
68
            Persistent,
69
            DynClass, 
70
            org.gvsig.tools.lang.Cloneable 
71
    {
61 72

  
62 73
	/**
63 74
	 *
......
81 92
        private WeakReference storeRef;
82 93
        private boolean requiredFields;
83 94

  
84
	protected DefaultFeatureType(FeatureStore store, String id) {
85
            if (StringUtils.isEmpty(id)) {
86
                id = "default";
87
            }
88
            if( store == null ) {
89
                this.storeRef = null; 
90
            } else {
91
                this.storeRef = new WeakReference(store);
92
            }
95
	public DefaultFeatureType() {
96
            // Usado en la persistencia.
93 97
            this.internalID = Integer.toHexString((int) (Math.random() * 100000)).toUpperCase();
94
            this.id = id;
98
            this.id = id = "default";
95 99
            this.rules = new DefaultFeatureRules();
96 100
            this.hasEvaluators = false;
97 101
            this.hasEmulators = false;
......
100 104
            this.defaultGeometryAttributeIndex = -1;
101 105
            this.defaultTimeAttributeIndex = -1;
102 106
            this.allowAtomaticValues = false;
107
        }
108
        
109
	protected DefaultFeatureType(FeatureStore store, String id) {
110
            this();
111
            if (StringUtils.isEmpty(id)) {
112
                id = "default";
113
            }
114
            this.id = id;
115
            setStore(store);
103 116
	}
104 117

  
105 118
	protected DefaultFeatureType(FeatureStore store) {
106
		this(store, (String)null);
119
            this(store, (String)null);
107 120
	}
108 121

  
109 122
	protected DefaultFeatureType(DefaultFeatureType other) {
110
		this(other.getStore(), (String)null);
111
		initialize(other, true);
123
            this(other.getStore(), (String)null);
124
            initialize(other, true);
112 125
	}
113 126

  
114 127
	protected DefaultFeatureType(DefaultFeatureType other,
115 128
			boolean copyAttributes) {
116
		this(other.getStore(), (String)null);
117
		initialize(other, copyAttributes);
129
            this(other.getStore(), (String)null);
130
            initialize(other, copyAttributes);
118 131
	}
119 132

  
120 133
	protected void initialize(DefaultFeatureType other, boolean copyAttributes) {
......
882 895
        }
883 896
        return (FeatureStore) this.storeRef.get();
884 897
    }
898
    
899
    public void setStore(FeatureStore store) {
900
        if( store == null ) {
901
            this.storeRef = null; 
902
        } else {
903
            this.storeRef = new WeakReference(store);
904
        }
905
    }
885 906

  
907
    @Override
908
    public void loadFromState(PersistentState state)
909
            throws PersistenceException {
910

  
911
//        FIXME: rules
912

  
913
        hasEvaluators = state.getBoolean("hasEvaluators");
914
        hasEmulators = state.getBoolean("hasEmulators");
915
        defaultGeometryAttributeName = state.getString("defaultGeometryAttributeName");
916
        defaultTimeAttributeName = state.getString("defaultTimeAttributeName");
917
        defaultGeometryAttributeIndex = state.getInt("defaultGeometryAttributeIndex");
918
        defaultTimeAttributeIndex = state.getInt("defaultTimeAttributeIndex");
919
        id = state.getString("id");
920
        hasOID = state.getBoolean("hasOID");
921
        allowAtomaticValues = state.getBoolean("allowAtomaticValues");
922

  
923
        requiredFields = state.getBoolean("requiredFields");
924
        internalID = state.getString("internalID");
925
        
926
        List<FeatureAttributeDescriptor> elements = state.getList("elements");
927
        for (FeatureAttributeDescriptor element : elements) {
928
            ((DefaultFeatureAttributeDescriptor)element).setFeatureType(this);
929
            super.add(element);
930
        }
931
        
932
        List<String> thePk = state.getList("pk");
933
        if( thePk==null ) {
934
            this.pk = null;
935
        } else {
936
            this.pk = new FeatureAttributeDescriptor[thePk.size()];
937
            for (int i = 0; i < pk.length; i++) {
938
                pk[i] = this.getAttributeDescriptor(thePk.get(i));
939
            }
940
        }
941
        this.fixAll();
942
    }
943

  
944
    @Override
945
    public void saveToState(PersistentState state) throws PersistenceException {
946

  
947
//        FIXME: rules
948

  
949
        state.set("hasEvaluators", hasEvaluators);
950
        state.set("hasEmulators", hasEmulators);
951
        state.set("defaultGeometryAttributeName", defaultGeometryAttributeName);
952
        state.set("defaultTimeAttributeName", defaultTimeAttributeName);
953
        state.set("defaultGeometryAttributeIndex", defaultGeometryAttributeIndex);
954
        state.set("defaultTimeAttributeIndex", defaultTimeAttributeIndex);
955
        state.set("id", id);
956
        state.set("hasOID", hasOID);
957
        state.set("allowAtomaticValues", allowAtomaticValues);
958

  
959
        List<String> thePk = null;
960
        if( this.pk!=null ) {
961
            thePk = new ArrayList<>();
962
            for (FeatureAttributeDescriptor attrdesc : this.pk) {
963
                thePk.add(attrdesc.getName());
964
            }
965
        }
966
        state.set("pk",thePk);
967

  
968
        state.set("requiredFields", requiredFields);
969
        state.set("internalID", internalID);
970
        
971
        List<FeatureAttributeDescriptor> elements = new ArrayList<>();
972
        elements.addAll(this);
973
        state.set("elements", elements);
974
        
975
        
976
    }
977
    
978
    private static final String FEATTYPE_PERSISTENCE_DEFINITION_NAME = "FeatureType";
979

  
980
    public static void registerPersistenceDefinition() {
981
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
982
        
983
        if (manager.getDefinition(FEATTYPE_PERSISTENCE_DEFINITION_NAME)
984
                == null) {
985
            DynStruct definition = manager.addDefinition(DefaultFeatureType.class,
986
                    FEATTYPE_PERSISTENCE_DEFINITION_NAME,
987
                    FEATTYPE_PERSISTENCE_DEFINITION_NAME
988
                        + " persistent definition",
989
                    null,
990
                    null
991
            );
992
//            definition.addDynFieldObject("rules");
993
            definition.addDynFieldBoolean("hasEvaluators");
994
            definition.addDynFieldBoolean("hasEmulators");
995
            definition.addDynFieldString("defaultGeometryAttributeName");
996
            definition.addDynFieldString("defaultTimeAttributeName");
997
            definition.addDynFieldInt("defaultGeometryAttributeIndex");
998
            definition.addDynFieldInt("defaultTimeAttributeIndex");
999
            definition.addDynFieldString("id");
1000
            definition.addDynFieldBoolean("hasOID");
1001
            definition.addDynFieldBoolean("allowAtomaticValues");
1002
            
1003
            definition.addDynFieldArray("pk")
1004
                    .setClassOfItems(String.class);
1005
            
1006
            definition.addDynFieldBoolean("requiredFields");
1007
            definition.addDynFieldString("internalID"); 
1008

  
1009
            definition.addDynFieldList("elements")
1010
                    .setClassOfItems(FeatureAttributeDescriptor.class); 
1011
        }
1012
    }
1013

  
1014

  
886 1015
}

Also available in: Unified diff