00001
00018 #ifndef INC_SOA_ARCIMSCAPABILITIES_H
00019 #define INC_SOA_ARCIMSCAPABILITIES_H
00020
00021 #ifndef INC_MI32_MISTRINGLIST_H
00022 #include <mi32/mistringlist.h>
00023 #endif
00024
00025 #ifndef INC_MI32_SPATREF_H
00026 #include <mi32/spatref.h>
00027 #endif
00028
00029 #ifndef INC_MI32_RECT_H
00030 #include <mi32/rect.h>
00031 #endif
00032
00033 class XMLDOC;
00034 class XMLNODE;
00035 class HTTPMESSAGE;
00036 class SUBREGION2D;
00037
00038 namespace SOA {
00039 namespace ARCIMS {
00040
00041 class SERVICEINFO;
00042
00043
00044
00046 class FIELD {
00047 public:
00048
00050 enum TYPE {
00051 TYPE_ROWID = -99,
00052 TYPE_SHAPE = -98,
00053 TYPE_Bool = -7,
00054 TYPE_BigInt = -5,
00055 TYPE_Char = 1,
00056 TYPE_Int = 4,
00057 TYPE_SmallInt = 5,
00058 TYPE_Float = 6,
00059 TYPE_Double = 8,
00060 TYPE_VarChar = 12,
00061 TYPE_CBLOB = 13,
00062 TYPE_NVARCHAR = 14,
00063 TYPE_NCLOB = 15,
00064 TYPE_Date = 91
00065 };
00066
00068 FIELD();
00069
00071 ~FIELD();
00072
00074 const MISTRING& GetName (
00075 ) const { return m_Name; }
00076
00078 TYPE GetType (
00079 ) const { return m_Type; }
00080
00082 INT32 GetSize (
00083 ) const { return m_Size; }
00084
00086 INT32 GetPrecision (
00087 ) const { return m_Precision; }
00088
00090 ERRVALUE ParseXML (
00091 const XMLNODE* node
00092 );
00093 private:
00094 #ifndef GENERATING_DOXYGEN_OUTPUT
00095
00096 MISTRING m_Name;
00097 TYPE m_Type;
00098 INT32 m_Size;
00099 INT32 m_Precision;
00100 #endif
00101 };
00102
00103
00104
00106 class LAYER {
00107 public:
00108
00109 enum TYPE {
00110 TYPE_PointFeature,
00111 TYPE_LineFeature,
00112 TYPE_PolygonFeature,
00113 TYPE_Image,
00114 TYPE_Acetate
00115 };
00116
00118 LAYER ();
00119
00121 ~LAYER ();
00122
00124 ERRVALUE ComputeSubRegion (
00125 const SPATREF::COORDREFSYS& CoordRefSys,
00126 SUBREGION2D& SubRegion
00127 ) const;
00128
00131 const DRECT2D& GetBoundingBox (
00132 ) const;
00133
00136 const MISTRING& GetID (
00137 ) const { return (m_ID); }
00138
00142 double GetMaxScale (
00143 ) const { return (m_MaxScale); }
00144
00146 double GetMaxScaleDenominator (
00147 ) const;
00148
00152 double GetMinScale (
00153 ) const { return (m_MinScale); }
00154
00156 double GetMinScaleDenominator (
00157 ) const;
00158
00160 const MISTRING& GetName (
00161 ) const { return (m_Name); }
00162
00164 TYPE GetType (
00165 ) const { return (m_Type); }
00166
00168 bool HasMaxScale (
00169 ) const { return (m_bHasMaxScale); }
00170
00172 bool HasMinScale (
00173 ) const { return (m_bHasMinScale); }
00174
00176 bool IsVisible (
00177 ) const { return (m_bVisible); }
00178
00180 ERRVALUE ParseXML (
00181 SERVICEINFO *pParent,
00182 const XMLNODE *xmlnode
00183 );
00184
00185 private:
00186 #ifndef GENERATING_DOXYGEN_OUTPUT
00187
00188
00189 SERVICEINFO* m_pService;
00190 TYPE m_Type;
00191 MISTRING m_Name;
00192 bool m_bVisible, m_bHasMinScale, m_bHasMaxScale;
00193 MISTRING m_ID;
00194 double m_MinScale, m_MaxScale;
00195 DRECT2D m_Envelope;
00196 MILIST<FIELD> m_Fields;
00197
00198 ERRVALUE ParseFCLASS (
00199 const XMLNODE* node
00200 );
00201
00202 #endif
00203 };
00204
00205 typedef MILIST<LAYER> LAYERLIST;
00206
00207
00208
00210 class SERVICEINFO {
00211 public:
00212
00214 enum MAPUNITS {
00215 MAPUNIT_DecimalDegrees,
00216 MAPUNIT_Feet,
00217 MAPUNIT_Meters
00218 };
00219
00221 SERVICEINFO ();
00222
00224 void AddRef (
00225 ) { ++m_RefCount; }
00226
00229 const LAYER* FindLayerByID (
00230 const MISTRING& id
00231 ) const;
00232
00235 const LAYER* FindLayerByName (
00236 const MISTRING& name
00237 ) const;
00238
00240 double GetDPI (
00241 ) const { return (m_dpi); }
00242
00244 const SPATREF::COORDREFSYS& GetFeatureCRS (
00245 ) const { return (m_FeatureCRS); }
00246
00249 const SPATREF::COORDREFSYS& GetFilterCRS (
00250 ) const { return (m_FilterCRS); }
00251
00256 const DRECT2D& GetInitialExtent (
00257 ) const { return (m_Envelope); }
00258
00260 const LAYERLIST& GetLayers (
00261 ) const { return (m_Layers); }
00262
00264 MAPUNITS GetMapUnit (
00265 ) const { return (m_MapUnit); }
00266
00268 UINT32 GetMaxPixels (
00269 ) const { return (m_MaxPixels); }
00270
00272 const MISTRING& GetTitle (
00273 ) const { return (m_Title); }
00274
00276 const MISTRING& GetURL (
00277 ) const { return (m_URL); }
00278
00280 const XMLDOC& GetXML (
00281 ) const { return (*m_pXMLDoc); }
00282
00286 ERRVALUE SetXML (
00287 XMLDOC* xmldoc
00288 );
00289
00291 void Release (
00292 ) {
00293 if ((--m_RefCount) == 0) delete this;
00294 }
00295
00297 void SetURL (
00298 const MISTRING& url
00299 );
00300
00301 private:
00302 #ifndef GENERATING_DOXYGEN_OUTPUT
00303
00304 UINT32 m_RefCount;
00305 MISTRING m_Title;
00306 MISTRING m_URL;
00307 UINT32 m_MaxPixels;
00308 double m_dpi;
00309 DRECT2D m_Envelope;
00310 SPATREF::COORDREFSYS m_FeatureCRS;
00311 SPATREF::COORDREFSYS m_FilterCRS;
00312 MAPUNITS m_MapUnit;
00313 LAYERLIST m_Layers;
00314 XMLDOC* m_pXMLDoc;
00315
00316 ERRVALUE ParseEnvironment(const XMLNODE*);
00317 ERRVALUE ParseProperties(const XMLNODE*);
00318
00320 ~SERVICEINFO ();
00321
00322
00323 SERVICEINFO (const SERVICEINFO& rhs);
00324 SERVICEINFO& operator= (const SERVICEINFO& rhs);
00325
00326 friend class LAYER;
00327 #endif
00328 };
00329
00330
00331
00332 }
00333 }
00334
00335 #endif // INC_SOA_ARCIMSCAPABILITIES_H