Revision 29326 branches/v2_0_0_prep/libraries/libFMap_daldb/src/org/gvsig/fmap/dal/store/jdbc/JDBCStoreProvider.java
JDBCStoreProvider.java | ||
---|---|---|
61 | 61 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
62 | 62 |
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices; |
63 | 63 |
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider; |
64 |
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider; |
|
65 |
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices; |
|
66 | 64 |
import org.gvsig.fmap.dal.resource.Resource; |
67 | 65 |
import org.gvsig.fmap.dal.resource.exception.ResourceBeginException; |
68 | 66 |
import org.gvsig.fmap.dal.resource.spi.ResourceProvider; |
67 |
import org.gvsig.fmap.dal.spi.DataStoreProviderServices; |
|
69 | 68 |
import org.gvsig.fmap.dal.store.jdbc.exception.InvalidResultSetIdException; |
70 | 69 |
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCException; |
71 | 70 |
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCExecuteSQLException; |
... | ... | |
74 | 73 |
import org.gvsig.fmap.geom.operation.towkb.ToWKB; |
75 | 74 |
import org.gvsig.fmap.geom.primitive.Envelope; |
76 | 75 |
import org.gvsig.tools.ToolsLocator; |
77 |
import org.gvsig.tools.dynobject.DelegatedDynObject; |
|
78 | 76 |
import org.gvsig.tools.dynobject.DynClass; |
77 |
import org.gvsig.tools.dynobject.DynObject; |
|
79 | 78 |
import org.gvsig.tools.dynobject.DynObjectManager; |
80 | 79 |
import org.gvsig.tools.exception.BaseException; |
81 | 80 |
import org.slf4j.Logger; |
... | ... | |
101 | 100 |
|
102 | 101 |
private long mlsecondsToZombie = 1000 * 60 * 10; // 10 Min |
103 | 102 |
|
104 |
protected JDBCStoreParameters params; |
|
105 | 103 |
protected JDBCHelper helper; |
106 | 104 |
|
107 | 105 |
protected boolean directSQLMode; |
... | ... | |
109 | 107 |
private Long totalCount = null; |
110 | 108 |
|
111 | 109 |
|
112 |
public JDBCStoreProvider() { |
|
113 |
super(); |
|
114 |
resulsetList = new ArrayList(10); |
|
110 |
public JDBCStoreProvider(JDBCStoreParameters params, |
|
111 |
DataStoreProviderServices storeServices) throws InitializeException { |
|
112 |
this(params, storeServices, ToolsLocator.getDynObjectManager() |
|
113 |
.createDynObject(DYNCLASS)); |
|
115 | 114 |
} |
116 | 115 |
|
117 |
public JDBCStoreProvider(JDBCStoreParameters params) |
|
116 |
protected JDBCStoreProvider(JDBCStoreParameters params, |
|
117 |
DataStoreProviderServices storeServices, DynObject metadata) |
|
118 | 118 |
throws InitializeException { |
119 |
this(); |
|
120 |
this.init(params); |
|
119 |
super(params, storeServices, metadata); |
|
120 |
|
|
121 |
resulsetList = new ArrayList(10); |
|
122 |
|
|
123 |
helper = createHelper(); |
|
124 |
if (params.getSQL() != null && (params.getSQL()).trim().length() > 0) { |
|
125 |
directSQLMode = true; |
|
126 |
} |
|
127 |
|
|
128 |
|
|
129 |
this.setDynValue("DefaultSRS", null); |
|
130 |
this.setDynValue("Envelope", null); |
|
131 |
this.initFeatureType(); |
|
121 | 132 |
} |
122 | 133 |
|
123 | 134 |
|
135 |
|
|
136 |
protected JDBCStoreParameters getJDBCParameters() { |
|
137 |
return (JDBCStoreParameters) this.getParameters(); |
|
138 |
} |
|
139 |
|
|
140 |
|
|
124 | 141 |
protected static void registerDynClass() { |
125 | 142 |
DynObjectManager dynman = ToolsLocator.getDynObjectManager(); |
126 | 143 |
DynClass dynClass; |
... | ... | |
448 | 465 |
return filter; |
449 | 466 |
} |
450 | 467 |
|
451 |
public void init(JDBCStoreParameters params) throws InitializeException { |
|
452 |
this.params = params; |
|
453 |
helper = createHelper(); |
|
454 |
if (params.getSQL() != null && (params.getSQL()).trim().length() > 0) { |
|
455 |
directSQLMode = true; |
|
456 |
} |
|
457 |
|
|
458 |
this.metadata = (DelegatedDynObject) ToolsLocator |
|
459 |
.getDynObjectManager().createDynObject(DYNCLASS); |
|
460 |
|
|
461 |
this.metadata.setDynValue("DefaultSRS", null); |
|
462 |
this.metadata.setDynValue("Envelope", null); |
|
463 |
|
|
464 |
} |
|
465 |
|
|
466 | 468 |
protected JDBCHelper createHelper() throws InitializeException { |
467 |
return new JDBCHelper(this, params);
|
|
469 |
return new JDBCHelper(this, getJDBCParameters());
|
|
468 | 470 |
} |
469 | 471 |
|
470 | 472 |
protected JDBCHelper getHelper() { |
... | ... | |
528 | 530 |
|
529 | 531 |
public FeatureProvider getFeatureProviderByReference( |
530 | 532 |
FeatureReferenceProviderServices reference) throws DataException { |
531 |
return getFeatureProviderByReference(reference, store
|
|
533 |
return getFeatureProviderByReference(reference, getFeatureStore()
|
|
532 | 534 |
.getDefaultFeatureType()); |
533 | 535 |
} |
534 | 536 |
|
... | ... | |
539 | 541 |
resourceBegin(); |
540 | 542 |
try { |
541 | 543 |
StringBuilder filter = new StringBuilder(); |
542 |
FeatureAttributeDescriptor[] pk = store.getFeatureType(
|
|
544 |
FeatureAttributeDescriptor[] pk = getFeatureStore().getFeatureType(
|
|
543 | 545 |
featureType.getId()).getPrimaryKey(); |
544 | 546 |
|
545 | 547 |
List values = new ArrayList(); |
... | ... | |
588 | 590 |
|
589 | 591 |
EditableFeatureType edFType = null; |
590 | 592 |
try { |
591 |
edFType = this.store.createFeatureType();
|
|
593 |
edFType = this.getStoreServices().createFeatureType();
|
|
592 | 594 |
|
593 |
helper.loadFeatureType(edFType, params);
|
|
595 |
helper.loadFeatureType(edFType, getJDBCParameters());
|
|
594 | 596 |
|
595 | 597 |
} catch (DataException e) { |
596 | 598 |
throw new InitializeException(this.getName(), e); |
... | ... | |
599 | 601 |
FeatureType defaultType = edFType.getNotEditableCopy(); |
600 | 602 |
List types = new ArrayList(1); |
601 | 603 |
types.add(defaultType); |
602 |
this.store.setFeatureTypes(types, defaultType);
|
|
604 |
this.getStoreServices().setFeatureTypes(types, defaultType);
|
|
603 | 605 |
try { |
604 | 606 |
loadMetadata(); |
605 | 607 |
} catch (DataException e) { |
... | ... | |
692 | 694 |
// Select |
693 | 695 |
StringBuilder sql = new StringBuilder(); |
694 | 696 |
sql.append("Select count("); |
695 |
String[] pkFields = params.getPkFields();
|
|
697 |
String[] pkFields = getJDBCParameters().getPkFields();
|
|
696 | 698 |
if (pkFields != null && pkFields.length == 1) { |
697 | 699 |
sql.append(helper.escapeFieldName(pkFields[0])); |
698 | 700 |
} else { |
... | ... | |
703 | 705 |
|
704 | 706 |
sql.append("from "); |
705 | 707 |
|
706 |
sql.append(params.tableID());
|
|
708 |
sql.append(getJDBCParameters().tableID());
|
|
707 | 709 |
sql.append(' '); |
708 | 710 |
|
709 | 711 |
appendWhere(sql, filter); |
... | ... | |
713 | 715 |
|
714 | 716 |
protected void appendWhere(StringBuilder sql, String filter) { |
715 | 717 |
filter = fixFilter(filter); |
716 |
String initialFilter = params.getInitialFilter();
|
|
718 |
String initialFilter = getJDBCParameters().getInitialFilter();
|
|
717 | 719 |
if ((initialFilter != null && initialFilter.length() != 0) |
718 | 720 |
|| (filter != null && filter.length() != 0)) { |
719 | 721 |
sql.append("where ("); |
... | ... | |
738 | 740 |
} |
739 | 741 |
|
740 | 742 |
protected void loadMetadata() throws DataException { |
741 |
IProjection srs = params.getSRS();
|
|
743 |
IProjection srs = getJDBCParameters().getSRS();
|
|
742 | 744 |
|
743 | 745 |
if (srs == null) { |
744 |
srs = store.getDefaultFeatureType().getDefaultSRS();
|
|
746 |
srs = getFeatureStore().getDefaultFeatureType().getDefaultSRS();
|
|
745 | 747 |
} |
746 | 748 |
|
747 |
this.metadata.setDynValue("DefaultSRS", srs);
|
|
749 |
this.setDynValue("DefaultSRS", srs); |
|
748 | 750 |
|
749 |
String defGeomName = this.store.getDefaultFeatureType()
|
|
751 |
String defGeomName = this.getFeatureStore().getDefaultFeatureType()
|
|
750 | 752 |
.getDefaultGeometryAttributeName(); |
751 | 753 |
Envelope env = null; |
752 | 754 |
if (defGeomName != null && defGeomName.length() > 0) { |
753 |
env = this.helper.getFullEnvelopeOfField(this.params, defGeomName,
|
|
754 |
this.params.getWorkingArea());
|
|
755 |
env = this.helper.getFullEnvelopeOfField(this.getJDBCParameters(),
|
|
756 |
defGeomName, this.getJDBCParameters().getWorkingArea());
|
|
755 | 757 |
|
756 | 758 |
} |
757 |
this.metadata.setDynValue("Envelope", env);
|
|
759 |
this.setDynValue("Envelope", env); |
|
758 | 760 |
|
759 | 761 |
} |
760 | 762 |
|
... | ... | |
769 | 771 |
|
770 | 772 |
public Envelope getEnvelope() throws DataException { |
771 | 773 |
this.open(); |
772 |
return (Envelope) this.metadata.getDynValue("Envelope");
|
|
774 |
return (Envelope) this.getDynValue("Envelope"); |
|
773 | 775 |
} |
774 | 776 |
|
775 | 777 |
public void resourceChanged(ResourceProvider resource) { |
776 |
this.store.notifyChange(DataStoreNotification.RESOURCE_CHANGED, |
|
778 |
this.getStoreServices().notifyChange( |
|
779 |
DataStoreNotification.RESOURCE_CHANGED, |
|
777 | 780 |
resource); |
778 | 781 |
} |
779 | 782 |
|
780 | 783 |
protected void clearMetadata() { |
781 |
this.metadata.setDynValue("DefaultSRS", null);
|
|
782 |
this.metadata.setDynValue("Envelope", null);
|
|
784 |
this.setDynValue("DefaultSRS", null); |
|
785 |
this.setDynValue("Envelope", null); |
|
783 | 786 |
} |
784 | 787 |
|
785 | 788 |
public boolean allowAutomaticValues() { |
... | ... | |
789 | 792 |
public DataServerExplorer getExplorer() throws ReadException { |
790 | 793 |
DataManager manager = DALLocator.getDataManager(); |
791 | 794 |
JDBCServerExplorerParameters exParams; |
795 |
JDBCStoreParameters params = getJDBCParameters(); |
|
792 | 796 |
try { |
793 | 797 |
exParams = (JDBCServerExplorerParameters) manager |
794 | 798 |
.createServerExplorerParameters(JDBCServerExplorer.NAME); |
... | ... | |
818 | 822 |
super.dispose(); |
819 | 823 |
} |
820 | 824 |
|
821 |
public FeatureStoreProvider initialize(FeatureStoreProviderServices store) |
|
822 |
throws InitializeException { |
|
823 |
super.initialize(store); |
|
824 |
this.initFeatureType(); |
|
825 |
return this; |
|
826 |
} |
|
827 |
|
|
828 | 825 |
public Object createNewOID() { |
829 | 826 |
return null; |
830 | 827 |
} |
... | ... | |
832 | 829 |
public String compoundSelect(FeatureType type, String filter, String order, |
833 | 830 |
long limit, long offset) throws DataException { |
834 | 831 |
StringBuilder sql = new StringBuilder(); |
832 |
JDBCStoreParameters params = getJDBCParameters(); |
|
835 | 833 |
if (directSQLMode) { |
836 | 834 |
if (filter != null || order != null) { |
837 | 835 |
// FIXME Exception |
... | ... | |
852 | 850 |
sql.append(helper.getSqlFieldName(fields[fields.length - 1])); |
853 | 851 |
sql.append(' '); |
854 | 852 |
|
855 |
FeatureAttributeDescriptor[] pkFields = store
|
|
853 |
FeatureAttributeDescriptor[] pkFields = getStoreServices()
|
|
856 | 854 |
.getProviderFeatureType(type.getId()).getPrimaryKey(); |
857 | 855 |
|
858 | 856 |
if (pkFields != null && pkFields.length > 0) { |
... | ... | |
913 | 911 |
return NAME; |
914 | 912 |
} |
915 | 913 |
|
916 |
public Iterator getChilds() { |
|
917 |
return null; |
|
918 |
} |
|
919 |
|
|
920 | 914 |
public boolean hasGeometrySupport() { |
921 | 915 |
return false; |
922 | 916 |
} |
... | ... | |
928 | 922 |
} |
929 | 923 |
|
930 | 924 |
public Object getSourceId() { |
931 |
return this.params.getSourceId();
|
|
925 |
return this.getJDBCParameters().getSourceId();
|
|
932 | 926 |
} |
933 | 927 |
|
934 | 928 |
} |
Also available in: Unified diff