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
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