Edit D:\app\Administrator\product\11.2.0\dbhome_1\md\jlib\oracle\spatial\csw\CSWAdmin.class
?? 1? ?-./01 2 3 4567 ?8 ?9 ?:;< => -? @A BCDEFGHIJKLMNOPQRSTU V WX ,YZ[\ 0] ^ ,_`a ,bcdefghijklmnopqrs :tu %vwxy %z ,{|} ,~???? V??? V?? %???????????????????????????? x-? x? x?? x???????? V??? V?? V?? V? x?? V? V????????????? ??? ????????????? ? ??? ?? ?????????????? V???/??/?? ?? ?2 ?3 ?? ?4?????? c????? c? ??? ??? ? ? ? ? 0 - !"#$% ?=&' ?= ?() * :+ :, :- x./0 1 2345 6 78 9:; <=>0?@ABCD EFG?4HIJKLM ?NO PQRSTUVWXYZ[\]^_ :`abc d ef ghijklmnopqrstuvwxyz{ |} S~ S? S? ? ?? ??? :?? :?? |???? c-? c? ???? cV ????????? P???? ??? P?? P?? P?? P??????? :? :??????? P? ??? ??? ?? ,?????? ???????? ?? ??? ???? ????????????????? S? S?? P??? ?-? ?- ?? ?? P? P??????????? :? :?? P????? ????? ?? ??? ?-? ????? ?? ?????? ? ,- , , ? 0= ? , , ? ?!"#$%&'( ?)*+,-./0 ?1234567 ?89:;<=>?@ABCD %-E ?FG %HIJKL ?M ?N ?O P4QRSTU ?VWXYZ[ V] V\ V] V^ V_` Vabc F= Fd Vef Vgh Vijklmnopq ?rst ?_ ?uv ?wxy ?z ?{|} |~ ?? |??????????????????????????????????????? ?? ???????????????????????????? ??? debug Z BTREE Ljava/lang/String; ConstantValue UNIQUE <init> ()V Code LineNumberTable grantRecordTypeToUser W(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V Exceptions revokeRecordTypeFromUser grantMDAccessToUser 3(Loracle/jdbc/OracleConnection;Ljava/lang/String;)V revokeMDAccessFromUser publishRecordType4(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;)V Signature?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;)Vs(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable;ZLjava/util/ArrayList;)Va(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;>;ZLjava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable;ZLjava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Z)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;>;ZLjava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<[Ljava/lang/String;>;Z)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable;ZLjava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;ZZ)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;>;ZLjava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<[Ljava/lang/String;>;ZZ)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable;ZLjava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;ZZLoracle/spatial/ws/CollectionPathInfo;)V(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;>;ZLjava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<[Ljava/lang/String;>;ZZLoracle/spatial/ws/CollectionPathInfo;)V?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable;ZLjava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;ZZLoracle/spatial/ws/CollectionPathInfo;Z)V(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Loracle/xdb/XMLType;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/GeomMetaInfo;>;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/util/Hashtable<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;>;ZLjava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<[Ljava/lang/String;>;ZZLoracle/spatial/ws/CollectionPathInfo;Z)V bindInputParams =(Loracle/jdbc/OraclePreparedStatement;Ljava/util/ArrayList;)V dropRecordType E(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;)V createURL "(Ljava/lang/String;)Ljava/net/URL; print (Ljava/lang/String;)V setDomainInfo R(Ljava/sql/Connection;ILjava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;)V f(Ljava/sql/Connection;ILjava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;)V deleteDomainInfo +(Ljava/sql/Connection;ILjava/lang/String;)V setRecordViewMap t(Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Loracle/xdb/XMLType;Ljava/lang/String;)V deleteRecordViewMap `(Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V setCapabilitiesInfo -(Ljava/sql/Connection;ILoracle/xdb/XMLType;)V registerTypePluginMap N(Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V getRecordTypeId <(Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;)I enableVersioning disableVersioning setXMLTableIndexInfo p(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Z)V? ?(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Loracle/spatial/ws/PathInfo;>;Ljava/util/ArrayList<[Ljava/lang/String;>;Z)V getIsXMLTableIndexCreated E(Loracle/jdbc/OracleConnection;Ljava/lang/String;Ljava/lang/String;)Z createXMLTableIndex dropXMLTableIndex getAliasedColList A(Ljava/util/Hashtable;Ljava/util/ArrayList;)Ljava/util/ArrayList; isAttributeExtendedPath (Ljava/lang/String;)Z isAttributeAliasedPath isNotNullNSHt (Ljava/util/Hashtable;)Z generateCreateXMLTableIndex b(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;)Ljava/lang/String; generateXMLTableIndex removeRoot &(Ljava/lang/String;)Ljava/lang/String; getNsUrlSegment getNameSegment populatePathsNode [(Lorg/w3c/dom/Node;Loracle/spatial/ws/PathInfo;Ljava/util/ArrayList;Ljava/util/Hashtable;)V populateValListNode f(Lorg/w3c/dom/Node;Ljava/util/ArrayList;Ljava/util/Hashtable;Ljava/util/ArrayList;Ljava/lang/String;)V populateDomainInfo T(Lorg/w3c/dom/Node;Ljava/util/Hashtable;Ljava/util/ArrayList;Ljava/util/Hashtable;)V getTextNodeValue i(Loracle/xml/parser/v2/XMLDocument;Ljava/lang/String;Loracle/xml/parser/v2/XMLElement;)Ljava/lang/String;? getBooleanNodeValue X(Loracle/xml/parser/v2/XMLDocument;Ljava/lang/String;Loracle/xml/parser/v2/XMLElement;)Z processIdxPathTypes '(Lorg/w3c/dom/Node;)[Ljava/lang/String; getNodeValue &(Lorg/w3c/dom/Node;)Ljava/lang/String; printGeomInfo #(Loracle/spatial/ws/GeomMetaInfo;)V processPathSeparator Q(Lorg/w3c/dom/Node;Ljava/util/ArrayList;Ljava/util/Hashtable;)[Ljava/lang/String; expandNSPathAsStr b(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/Hashtable;Lorg/w3c/dom/Node;)Ljava/lang/String; expandNSPath h(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/Hashtable;Lorg/w3c/dom/Node;)Loracle/spatial/ws/Path; extractNSRoot 8(Loracle/xml/parser/v2/XMLElement;)Ljava/util/ArrayList; extractNSHt *(Lorg/w3c/dom/Node;Ljava/util/Hashtable;)V 5(Loracle/jdbc/OracleConnection;Loracle/xdb/XMLType;)V processGeomMetaInfo 4(Lorg/w3c/dom/Node;)Loracle/spatial/ws/GeomMetaInfo; processRecordViewMap C(Ljava/sql/Connection;Lorg/w3c/dom/NodeList;Ljava/util/ArrayList;)V n(Ljava/sql/Connection;Lorg/w3c/dom/NodeList;Ljava/util/ArrayList<Ljava/util/ArrayList<Ljava/lang/Object;>;>;)V populateCollectionPathInfoNode prepareForExportAllRecordTypes 2(Loracle/jdbc/OracleConnection;)Ljava/lang/String; 3(Loracle/jdbc/OracleConnection;Z)Ljava/lang/String; prepareForExportUserRecordTypes prepareForExportRecordTypes G(Loracle/jdbc/OracleConnection;Ljava/util/ArrayList;)Ljava/lang/String; \(Loracle/jdbc/OracleConnection;Ljava/util/ArrayList<[Ljava/lang/String;>;)Ljava/lang/String; H(Loracle/jdbc/OracleConnection;Ljava/util/ArrayList;Z)Ljava/lang/String; ](Loracle/jdbc/OracleConnection;Ljava/util/ArrayList<[Ljava/lang/String;>;Z)Ljava/lang/String; initializeAfterImport !(Loracle/jdbc/OracleConnection;)V "(Loracle/jdbc/OracleConnection;Z)V generateCreateXMLTableIndexImp u(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;I)Ljava/lang/String; generateXMLTableIndexImp <clinit> SourceFile CSWAdmin.java?? B begin mdsys.sdo_csw_process.grantRecordTypeToUser(?, ?, ?); end; ??? #oracle/jdbc/OraclePreparedStatement?????? E begin mdsys.sdo_csw_process.revokeRecordTypeFromUser(?, ?, ?); end; : begin mdsys.sdo_csw_process.grantMDAccessToUser(?); end; = begin mdsys.sdo_csw_process.revokeMDAccessFromUser(?); end; ?????? java/lang/StringBuffer ?? java/util/ArrayList ?egin delete from mdsys.CSW_rtXSDInfo$ where rtXSDRefId = ?; insert into mdsys.CSW_rtXSDInfo$ values(?,?); exception when others then null; end; ?? declare ?? 2spatialCols mdsys.StringList:= mdsys.StringList(); 2docIds mdsys.StringList:= mdsys.StringList(); /numPaths mdsys.StringList:= mdsys.StringList(); .idxCols mdsys.StringList:= mdsys.StringList(); 2idxColTypes mdsys.StringList:= mdsys.StringList(); 2tsCols mdsys.StringList:= mdsys.StringList(); 3srsCols mdsys.StringList:= mdsys.StringList(); ;collPathInfo mdsys.StringListList:= mdsys.StringListList(); "collPathInfoItem mdsys.StringList; :spGeomPInfo mdsys.StringListList:= mdsys.StringListList(); !spGeomPInfoItem mdsys.StringList; =spArrGeomPInfo mdsys.StringListList:= mdsys.StringListList(); $spArrGeomPInfoItem mdsys.StringList; recordTypeId number ; dmlStr varchar2(4000); currUser varchar2(30); begin 9 select mdsys.rt_sq$.nextval into recordTypeId from dual; % select user into currUser from dual;???? oracle/spatial/ws/PathInfo?? spatialCols.EXTEND; spatialCols(?) := ?; java/lang/Integer?????? tsCols.EXTEND; tsCols(?) := ?;?? docIds := null; docIds.EXTEND; docIds(?) := ?; java/lang/String srsCols := null; srsCols.EXTEND; srsCols(?) := ?; numPaths := null; numPaths.EXTEND; numPaths(?) := ?; idxCols := null; idxColTypes := null; idxCols.EXTEND; idxCols(?) := ?; [Ljava/lang/String; idxColTypes.EXTEND; idxColTypes(?) := ?;?? idxColTypes(?) := null;?? collPathInfo := null; collPathInfo.EXTEND; 'collPathInfoItem := MDSYS.STRINGLIST();???? collPathInfoItem.EXTEND; collPathInfoItem(?) := ?;?? #collPathInfo(?):= collPathInfoItem; spGeomPInfo.EXTEND; &spGeomPInfoItem := MDSYS.STRINGLIST(); oracle/spatial/ws/GeomMetaInfo spGeomPInfoItem.EXTEND;?? spGeomPInfoItem(?) := ?; spGeomPInfoItem(?) := null;?? !spGeomPInfo(?):= spGeomPInfoItem;?? spArrGeomPInfo.EXTEND; )spArrGeomPInfoItem := MDSYS.STRINGLIST(); spArrGeomPInfoItem.EXTEND; spArrGeomPInfoItem(?) := ?; spArrGeomPInfoItem(?) := null; 'spArrGeomPInfo(?):= spArrGeomPInfoItem; spGeomPInfo := null; spArrGeomPInfo := null; ? insert into MDSYS.CSW_Record_Types$ values(recordTypeId,?, ?, ?, currUser || '.CSW_RT_'||recordTypeId||'$', docIds, spatialCols, tsCols, sysdate, ?, null, ?, null, srsCols, numPaths, null, idxCols, idxColTypes, null, null, ?, Y null, ?, ? null . , collPathInfo, spGeomPInfo, spArrGeomPInfo); ? dmlStr := 'create table '|| currUser || '.CSW_RT_'||recordTypeId || '$(RecordId varchar2(4000) primary key, DATACOL XMLTYPE, '; java/lang/StringBuilder !dmlStr := dmlStr || ', SPATIALCOL???? MDSYS.SDO_GEOMETRY'; ?? dmlStr:= dmlStr || ' SPATIALCOL MDSYS.SDO_GEOMETRY '; , dmlStr := dmlStr || ', type varchar2(20))'; execute immediate dmlStr; H dmlStr := ' drop sequence '||currUser ||'.rt_'||recordTypeId ||'_sq$ '; ' EXCEPTION WHEN OTHERS THEN null; END; _ dmlStr := ' create sequence '||currUser ||'.rt_'||recordTypeId ||'_sq$ START WITH 1 NOCACHE';?? ? dmlStr := 'begin mdsys.sdo_meta.change_all_sdo_geom_metadata('''||currUser||''', ''CSW_RT_'||recordTypeId || '$'', ''SPATIALCOL '', MDSYS.SDO_DIM_ARRAY(?? MDSYS.SDO_DIM_ELEMENT(''?? '',???? ,???? ) , ), ); end;'; ),null); end;'; O dmlStr := ' drop index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_spatialCol '; S dmlStr := ' create index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_spatialCol ; on '|| currUser ||'.csw_rt_'||recordTypeId||'$(spatialCol %) indextype is mdsys.spatial_index'; L dmlStr := ' drop index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_idx '; dmlStr := ?? ;?? 1 dmlStr := ' begin dbms_xmlindex.dropparameter('' ''); end; '; 1 K dmlStr := ' drop index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n N dmlStr := ' create index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n < on '|| currUser ||'.csw_rt_'||recordTypeId||'$_RV(indexCol ) '; 0 U dmlStr := ' create unique index '|| currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n ` dmlStr := 'grant all on '|| currUser ||'.CSW_RT_'||recordTypeId ||'$ to spatial_csw_admin '; end;?? dbStr : ????declare rtId number; currUser varchar2(30); dmlStr varchar2(4000); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where typeName = ? and typeNameNS = ?; dmlStr := ' create table '||currUser||'.csw_rt_'|| rtId||'_cl ?$( PKCOL varchar2(4000) references '||currUser||'.csw_rt_'|| rtId ||'$(recordId) on delete cascade , collection_path varchar2(4000), collection_item SDO_GEOMETRY)' ; execute immediate dmlStr; end;<declare rtId number; currUser varchar2(30); dmlStr varchar2(4000); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where typeName = ? and typeNameNS = ?; dmlStr := 'begin mdsys.sdo_meta.change_all_sdo_geom_metadata('''||currUser||''', ''CSW_RT_'||rtId|| '_cl .$'', ''collection_item'', MDSYS.SDO_DIM_ARRAY( ), ); end;'; :declare rtId number; dmlStr varchar2(4000); currUser varchar2(30); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where typeName = ? and typeNameNS = ?; dmlStr := 'begin mdsys.sdo_meta.change_all_sdo_geom_metadata('''||currUser||''', ''CSW_RT_'||rtId|| '_cl ),null); end;'; ; dmlStr := ' drop index '||currUser||'.csw_rt_'||rtId||'_cl $_spatialCol '; > dmlStr := ' create index '||currUser||'.csw_rt_'||rtId||'_cl 4$_spatialCol on '||currUser ||'.csw_rt_'||rtId||'_cl Q$(collection_item) indextype is mdsys.spatial_index parameters (''sdo_indx_dims=?? '')'; coll command: ?? ?eclare rtId number; dmlStr varchar2(4000); begin select recordTypeId into rtId from mdsys.CSW_Record_Types$ where TYPENAME = ? and TYPENAMENS = ?; dmlStr := ' create role csw_typerole_'|| rtId; execute immediate dmlStr; ? := rtId; end;?? #oracle/jdbc/OracleCallableStatement????? declare rtId number; dmlStr varchar2(4000); currUser varchar2(30); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where TYPENAME = ? and TYPENAMENS = ?; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$ to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.rt_'||rtId||'_sq$ to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$ to spatial_csw_admin_usr'; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.rt_'||rtId||'_sq$ to spatial_csw_admin_usr'; execute immediate dmlStr; end; declare rtId number; dmlStr varchar2(4000); currUser varchar2(30); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where typeName = ? and typeNameNS = ?; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'_cl r$ to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'_cl ;$ to spatial_csw_admin_usr'; execute immediate dmlStr; end;? declare rtId number; dmlStr varchar2(4000); currUser varchar2(30); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where TYPENAME = ? and TYPENAMENS = ?; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to spatial_csw_admin_usr'; execute immediate dmlStr; end; Fbegin mdsys.sdo_csw_process.genRecordTypeProcessingLogic(? , ?) ; end; ???? oracle/xdb/XMLType?? java/sql/SQLException?? ?? ? java.lang.String java.lang.Integer?? oracle.xdb.XMLType $ declare l_table_name varchar2(30); l_user_name varchar2(30); l_dataPointer varchar2(60); 'l_spatialArrList mdsys.StringListList; dmlStr varchar2(4000); l_recordTypeId number; ? select dataPointer, recordTypeId, spatialArrList into l_dataPointer, l_recordTypeId , l_spatialArrList from mdsys.csw_record_types$ where TypeName = ? and TypeNameNS = ?; M l_user_name := upper(substr(l_dataPointer, 1, instr(l_dataPointer, '.')-1)); L l_table_name := upper(substr(l_dataPointer, instr(l_dataPointer, '.')+1)); J delete from mdsys.csw_record_Types$ where recordTypeId = l_recordTypeId; l delete from mdsys.sdo_geom_metadata_table where sdo_owner = l_user_name and sdo_table_name = l_table_name; ? delete from mdsys.sdo_geom_metadata_table where sdo_owner = l_user_name and sdo_table_name like 'CSW_RT_'||l_recordTypeId||'_CL%$'; ' if(l_spatialArrList is not null) then = for i in l_spatialArrList.first..l_spatialArrList.last loop R dmlStr := 'drop table '||l_user_name||'.csw_rt_'||l_recordTypeId||'_cl'||i||'$'; execute immediate dmlStr; end loop; end if; " exception when others then null; end; H dmlStr := 'drop table '||l_user_name||'.csw_rt_'||l_recordTypeId||'$'; J dmlStr := 'drop sequence '||l_user_name||'.rt_'||l_recordTypeId||'_sq$'; 6 dmlStr := 'drop role csw_typerole_'||l_recordTypeId; O dmlStr := 'drop package '||l_user_name||'.csw_rt_'||l_recordTypeId||'_proc'; java/net/URL java/net/MalformedURLException java/io/File? file.separator??? file:// Cannot create url for: ?? oracle/sql/Datum oracle/sql/CHAR? MDSYS.STRINGLIST !" oracle/sql/ARRAY?# 2insert into mdsys.CSW_DomainInfo$ values (?,?,?,?)$ O delete from mdsys.CSW_DomainInfo$ where recordTypeId = ? and parameterName = ? ? begin delete from mdsys.CSW_RecordViewMap$ where RECORDTYPENS = ? and VIEWSRCNAME = ? and TARGETTYPENAME = ?; insert into mdsys.CSW_RecordViewMap$ values (?,?,?,?,?) ; end; v delete from mdsys.CSW_RecordViewMap$ where recordTypeNs = ? and viewSrcMap = ? and targetTypeName = ? and mapType = ? sbegin delete from mdsys.CSW_CapabilitiesInfo$ ; insert into mdsys.CSW_CapabilitiesInfo$ values (?,?,sysdate); end; ?egin delete from mdsys.csw_plugin_map$ where typens = ? and typename = ?; insert into mdsys.csw_plugin_map$ values (?,?,?); end; Vselect recordTypeId from mdsys.csw_record_types$ where TYPENAMENS = ? and TYPENAME = ?%& oracle/jdbc/OracleResultSet'? declare l_dataPointer varchar2(61); dmlStr varchar2(4000); k select dataPointer into l_dataPointer from mdsys.csw_record_Types$ where typename = ? and TYPENAMENS = ?; K dmlStr := 'begin dbms_wm.enableVersioning('''||l_dataPointer||'''); end;'; L dmlStr := 'begin dbms_wm.disableVersioning('''||l_dataPointer||'''); end;';?? CSW-1029()* l_recordTypeId number ; & select user into currUser from dual; l select recordTypeId into l_recordTypeId from mdsys.csw_record_types$ where typeName = ? and typeNameNS = ?; ! recordTypeId := l_recordTypeId; ? update MDSYS.CSW_Record_Types$ set idxPaths = idxCols , idxPathTypes = idxColTypes , xtidxCreated = ? where recordTypeId = l_recordTypeId; ? update MDSYS.CSW_Record_Types$ set idxPaths = idxCols , idxPathTypes = idxColTypes , xtidxCreated = null where recordTypeId = l_recordTypeId; L dmlStr := ' drop index '||currUser ||'.csw_rt_'||l_recordTypeId ||'$_idx '; K dmlStr := ' drop index '||currUser ||'.csw_rt_'||l_recordTypeId ||'$_idx_n N dmlStr := ' create index '||currUser ||'.csw_rt_'||l_recordTypeId ||'$_idx_n < on '||currUser ||'.csw_rt_'||l_recordTypeId||'$_RV(indexCol U dmlStr := ' create unique index '||currUser ||'.csw_rt_'||l_recordTypeId ||'$_idx_n? declare rtId number; currUser varchar2(30); dmlStr varchar2(4000); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where TYPENAME = ? and TYPENAMENS = ?; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to spatial_csw_admin_usr'; execute immediate dmlStr; end; Vselect xtIdxCreated from mdsys.csw_record_Types$ where typeName = ? and typeNameNS = ?+?,? ~select idxPaths, idxPathTypes, xtidxCreated, recordTypeId from mdsys.csw_record_Types$ where TypeName = ? and typeNameNS = ? -? Index col not null./01 array size: +? Index col types not null declare recordTypeId number ; currUser varchar2(30); recordTypeId := ?; J dmlStr := ' drop index '||currUser ||'.csw_rt_'||recordTypeId ||'$_idx '; I dmlStr := ' drop index '||currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n L dmlStr := ' create index '||currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n : on '||currUser ||'.csw_rt_'||recordTypeId||'$_RV(indexCol S dmlStr := ' create unique index '||currUser ||'.csw_rt_'||recordTypeId ||'$_idx_n L update mdsys.CSW_Record_Types$ set xtIdxCreated = ? where recordTypeId = ?; Index stmt: ? declare rtId number; dmlStr varchar2(4000); currUser varchar2(30); begin select user into currUser from dual; select recordTypeId into rtId from mdsys.CSW_Record_Types$ where TypeName = ? and typeNameNS = ?; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to csw_typerole_'|| rtId; execute immediate dmlStr; dmlStr := ' grant all on '||currUser||'.CSW_RT_'||rtId||'$_RV to spatial_csw_admin_usr'; execute immediate dmlStr; end; l_recordTypeId number ; l select recordTypeId into l_recordTypeId from mdsys.csw_record_Types$ where TypeName = ? and typeNameNS= ?; execute immediate dmlStr; _ update mdsys.csw_record_Types$ set xtIdxCreated = null where recordTypeId = l_recordTypeId; end; drop index Str : java/util/StringTokenizer23??4????56? @78 :9? /:? ?' create index '||currUser ||'.csw_rt_' || recordTypeId || '$_idx on '||currUser ||'.csw_rt_'|| recordTypeId ||'$ p (p.datacol) indextype is xdb.xmlindex parameters (''param '')' java/util/Hashtable xtns;<?? *' begin dbms_xmlindex.registerparameter('' 0'', '' xmltable csw_rt_'|| recordTypeId ||'$_RV ?? XMLNamespaces ( '''' as " " ), '''' COLUMNS =? indexcol varchar2( ) PATH ?? /text()''''>? char(?? timestamp(6) PATH @? timestamp with time zone PATH A? DATE PATH PATH ( ) ''); end; '9B7?CDEFG?HIJK pathVal: pathContent:L?MN valContent: DescribeRecord.typeName GetRecords.typeName GetRecords.outputRecType GetRecords.ElementName O? domainValue parameterName parameterName : valueList??PQ oracle/xml/parser/v2/XMLElementRS?? TRUE pathTypeName pathTypeFormat indexType dimName[ ]= lb[ ub[ tolerance[ srID : startArrayIndex nextArrayIndex separatorPathT?U? xmlns:VW CSW-1030 oracle/spatial/ws/Path oracle/spatial/ws/PathElementX4?YZ[\]^_ attrNode Name : `? attrNode Value : a?b? java/lang/Objectcd xmlnsef org/w3c/dom/Elementgf java/lang/Exception CSW-1031hi oracle/xml/parser/v2/XMLDocument cswNSResolvejk http://www.w3.org/2000/xmlns/ xmlns:sdows http://sdo.oracle.com/sdowslm '/sdows:recordTypeMd/sdows:typeNS/text() typeNS : )/sdows:recordTypeMd/sdows:typeName/text() typeName: 3/sdows:recordTypeMd/sdows:idPaths/sdows:path/text()nf idPath : 5/sdows:recordTypeMd/sdows:spatialPaths/sdows:pathInfo spatialPaths:-o?p? paths?? pathInfoType CHOICE pathInfoType: numOfOccurence numOfOccurence: pathSeparatorArr pathSeparator pathSepInfo: Str[0] : pathSepInfo: Str[1] : pathSepInfo: Str[2] : qr 0/sdows:recordTypeMd/sdows:tsPaths/sdows:pathInfo tsPaths:- pathType pathType : s? 4/sdows:recordTypeMd/sdows:srsPaths/sdows:path/text() srsPath : 0/sdows:recordTypeMd/sdows:idExtractorType/text() idExtractorType : 4/sdows:recordTypeMd/sdows:sdoMetaInfo/sdows:metaInfo sdoMetaInfo:- &/sdows:recordTypeMd/sdows:srsNS/text() srsNS : +/sdows:recordTypeMd/sdows:srsNSAlias/text() srsNSAlias : +/sdows:recordTypeMd/sdows:ftXSDRefId/text() rtXSDRefId: 0/sdows:recordTypeMd/sdows:genSpatialIndex/text() genSpatialIndex: true genSpatialIndex: false ./sdows:recordTypeMd/sdows:setDomainInfo/text() setDomainInfo: true setDomainInfo: false domainInfo: $/sdows:recordTypeMd/sdows:domainInfo?? 1/sdows:recordTypeMd/sdows:numPaths/sdows:pathInfo numPaths:- 1/sdows:recordTypeMd/sdows:idxPaths/sdows:pathInfo idxPaths:- 8/sdows:recordTypeMd/sdows:idxPathTypes/sdows:idxPathType idxPathTypes:- dataType: dataTypeFormat: indexType : ,/sdows:recordTypeMd/sdows:genXMLIndex/text() genXMLIndex : true genXMLIndex : false '/sdows:recordTypeMd/sdows:isGML3/text() isGML3 : true isGML3 : false I/sdows:recordTypeMd/sdows:collectionPathInfo/sdows:collectionPathInfoItem collectionPaths:- $oracle/spatial/ws/CollectionPathInfo pathInfoItem? sdoMetaInfoItemtu 1/sdows:recordTypeMd/sdows:hasMultipleSRSNS/text() hasMultipleSRSNS : true hasMultipleSRSNS : false */sdows:recordTypeMd/sdows:schemaUrl/text()??vwxyz 2/sdows:recordTypeMd/sdows:fullToBriefMapUrl/text() 4/sdows:recordTypeMd/sdows:fullToSummaryMapUrl/text() 1/sdows:recordTypeMd/sdows:fullToDcmiMapUrl/text() 1/sdows:recordTypeMd/sdows:setRecordViewMap/text() C/sdows:recordTypeMd/sdows:recordViewMapList/sdows:recordViewMapItem srId dimElem sdoIndexDimension srsNs srsNsAlias{?|?}?~? dimName? lowerBound java/lang/Double???? upperBound?? tolerance?? recordViewMapItem recordTypeNS viewSrcName targetTypeName mapInfoUrl mapType java/io/IOException path A begin ? := mdsys.sdo_csw_process.prepare_for_export_all(?); end; FALSE C begin ? := mdsys.sdo_csw_process.prepare_for_export_user(?) ; end;" MDSYS.STRINGLISTLIST D begin ? := mdsys.sdo_csw_process.prepare_for_export_fts(?, ?); end;??$& : begin mdsys.sdo_csw_process.initialize_after_import; end; ? select recordTypeId, idxPaths, idxPathTypes, xtidxCreated, TypeName, TypeNameNS, dataPointer, spatialArrList from CSW_Record_Types_exp$ ????? .?? & declare dmlStr varchar2(4000); begin 4 dmlStr := ' grant create table, create sequence to '; startCounter number; 5 type cursor_type is REF CURSOR; ' query_crs cursor_type ; V select last_number into startCounter from all_sequences_exp$ where SEQUENCE_OWNER = ' ' and sequence_name ='RT_ _SQ$'; dmlStr := ' drop sequence .rt_ _sq$ '; dmlStr := ' create sequence 0_sq$ START WITH ' || startCounter|| ' NOCACHE'; J dmlStr := ' select * from all_sdo_geom_metadata_exp$ where owner = '' '' and table_name = ''CSW_RT_ $'' '; OPEN query_crs FOR dmlStr; LOOP declare l_OWNER VARCHAR2(32); l_TABLE_NAME VARCHAR2(32); l_COLUMN_NAME VARCHAR2(1024); l_CNT NUMBER; l_DIMINFO MDSYS.SDO_DIM_ARRAY; l_SRID NUMBER; O FETCH query_crs into l_OWNER, l_TABLE_NAME, l_COLUMN_NAME, l_DIMINFO, l_SRID; EXIT when query_crs%NOTFOUND ; h mdsys.sdo_meta.change_all_sdo_geom_metadata(l_OWNER, l_TABLE_NAME, l_COLUMN_NAME, l_DIMINFO, l_SRID); l_CNT := l_DIMINFO.count; O dmlStr := ' drop index '|| l_OWNER ||'.'|| l_TABLE_NAME ||'_'||l_COLUMN_NAME ; ? dmlStr := ' create index '|| l_OWNER ||'.'|| l_TABLE_NAME ||'_'||l_COLUMN_NAME || ' on ' || l_OWNER ||'.'|| l_TABLE_NAME || '(' || l_COLUMN_NAME || ') indextype is mdsys.spatial_index parameters (''sdo_indx_dims='|| l_CNT || ''')'; END; END LOOP; CLOSE query_crs; dmlStr := ' drop index .csw_rt_ $_idx ';)('( $_idx_n dmlStr := ' create index on $_RV(indexCol " dmlStr := ' create unique index dmlStr := ' grant all on .CSW_RT_ $ to mdsys with grant option'; Ndeclare dmlStr varchar2(4000); begin begin dmlStr := ' drop role csw_typerole_ i'; execute immediate dmlStr; exception when others then null; end; dmlStr := ' create role csw_typerole_ !'; execute immediate dmlStr; end; @ declare dmlStr varchar2(4000); begin dmlStr := ' grant all on $ to csw_typerole_ 6'; execute immediate dmlStr; dmlStr := ' grant all on _sq$ to csw_typerole_ P$ to spatial_csw_admin_usr'; execute immediate dmlStr; dmlStr := ' grant all on >_sq$ to spatial_csw_admin_usr'; execute immediate dmlStr; end; A declare dmlStr varchar2(4000); begin dmlStr := ' grant all on _cl @ declare dmlStr varchar2(4000); begin dmlStr := ' grant all on $_RV to csw_typerole_ 7'; execute immediate dmlStr; dmlStr := ' grant all on >$_RV to spatial_csw_admin_usr'; execute immediate dmlStr; end; ' create index $_idx on >$ p (p.datacol) indextype is xdb.xmlindex parameters (''param ?? oracle/spatial/csw/CSWAdmin oracle/spatial/csw/CSWException !oracle/xml/parser/v2/XSLException oracle/jdbc/OracleConnection prepareStatement 0(Ljava/lang/String;)Ljava/sql/PreparedStatement; setString (ILjava/lang/String;)V execute ()Z close setObject (ILjava/lang/Object;)V append ,(Ljava/lang/String;)Ljava/lang/StringBuffer; size ()I get (I)Ljava/lang/Object; getNumOfOccurrences (I)V add (Ljava/lang/Object;)Z getPathContent ()Ljava/lang/String; getPathType equals getPathInfos ()Ljava/util/ArrayList; getPathInfo (I)Loracle/spatial/ws/PathInfo; getCollectionPathContentSize getCollectionPathContent (I)Ljava/lang/String; getSRSNS getSRSNSAlias getGeomMetaInfo #(I)Loracle/spatial/ws/GeomMetaInfo; -(Ljava/lang/String;)Ljava/lang/StringBuilder; (I)Ljava/lang/StringBuilder; toString getSRID getNumOfDimensions getDimName getLB (I)D (D)Ljava/lang/StringBuilder; getUB getTolerance executeUpdate getSpatialIndexDimension commit prepareCall 0(Ljava/lang/String;)Ljava/sql/CallableStatement; registerOutParameter (II)V getInt (I)I keys ()Ljava/util/Enumeration; java/util/Enumeration hasMoreElements nextElement ()Ljava/lang/Object; &(Ljava/lang/Object;)Ljava/lang/Object; java/lang/System out Ljava/io/PrintStream; printStackTrace (Ljava/io/PrintStream;)V getClass ()Ljava/lang/Class; java/lang/Class getName intValue setInt getAbsolutePath getProperty length charAt (I)C replace (CC)Ljava/lang/String; (C)Ljava/lang/StringBuilder; exit java/io/PrintStream println DEFAULT_CHARSET Loracle/sql/CharacterSet; .(Ljava/lang/String;Loracle/sql/CharacterSet;)V oracle/sql/ArrayDescriptor createDescriptor E(Ljava/lang/String;Ljava/sql/Connection;)Loracle/sql/ArrayDescriptor; F(Loracle/sql/ArrayDescriptor;Ljava/sql/Connection;Ljava/lang/Object;)V java/sql/Connection executeQuery ()Ljava/sql/ResultSet; next oracle/spatial/csw/CSWProcessor throwCSWException <(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Exception;)V getString toUpperCase getObject getDescriptor ()Loracle/sql/ArrayDescriptor; getOracleArray ()[Loracle/sql/Datum; &oracle/spatial/ws/cache/CacheConstants SPATIALPATHELEMSEP '(Ljava/lang/String;Ljava/lang/String;)V oracle/spatial/csw/CSWConstants NULL indexOf (Ljava/lang/String;)I substring NS_SEP put 8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; isTypeVarChar isTypeChar isTypeTs isTypeTsTz isTypeDate (II)Ljava/lang/String; org/w3c/dom/Node getChildNodes ()Lorg/w3c/dom/NodeList; org/w3c/dom/NodeList getLength item (I)Lorg/w3c/dom/Node; canIgnoreNode (Lorg/w3c/dom/Node;)Z getValue addPath (Loracle/spatial/ws/Path;)V getLocalName getDocumentElement ()Lorg/w3c/dom/Element; selectNodes K(Ljava/lang/String;Loracle/xml/parser/v2/NSResolver;)Lorg/w3c/dom/NodeList; hasMoreTokens nextToken resolveNSValue M(Ljava/util/Hashtable;Lorg/w3c/dom/Node;Ljava/lang/String;)Ljava/lang/String; set "(Loracle/spatial/ws/PathElement;)V processRootAttrs populateNameSpaceDefnList ,(Ljava/util/ArrayList;)Ljava/util/ArrayList; getAttributes ()Lorg/w3c/dom/NamedNodeMap; org/w3c/dom/NamedNodeMap getNodeName trim startsWith getPathQualifiedName 8(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Ljava/lang/String; getFirstChild ()Lorg/w3c/dom/Node; getNextSibling getDocument ()Lorg/w3c/dom/Document; createElement )(Ljava/lang/String;)Lorg/w3c/dom/Element; setAttributeNS 9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V getParentNode setNumOfOccurrences addPathInfoType setPathSepInfo (Ljava/util/ArrayList;)V addPathType addPathInfo ?(Loracle/spatial/ws/PathInfo;Loracle/spatial/ws/GeomMetaInfo;)V openStream ()Ljava/io/InputStream; createXML @(Ljava/sql/Connection;Ljava/io/InputStream;)Loracle/xdb/XMLType; java/io/InputStream setSRID setSpatialIndexDimension setSRSNS setSRSNSAlias setDimName doubleValue ()D setLB (ID)V setUB setTolerance setARRAY (ILoracle/sql/ARRAY;)V TypeNameMaxLen I oracle/spatial/util/Util checkSQLName '(Ljava/lang/String;I)Ljava/lang/String; ObjNameMaxLen !?? ?? ?? ? ? ?? ? ? A ?? ? *? ? ? L ?? ? ? T:*? ? :+? ,? -? ? W? ? ? :? ? ? 3 B B D B ? . c g i j "