1515*/
1616package com .geosiris .etp .utils ;
1717
18- import Energistics .Etp .v12 .Datatypes .AnyArray ;
19- import Energistics .Etp .v12 .Datatypes .AnyLogicalArrayType ;
18+ import Energistics .Etp .v12 .Datatypes .*;
2019import Energistics .Etp .v12 .Datatypes .DataArrayTypes .*;
2120import Energistics .Etp .v12 .Datatypes .Object .*;
2221import Energistics .Etp .v12 .Protocol .DataArray .*;
@@ -384,7 +383,7 @@ public static Map<String, List<Number>> getMultipleDataArrays(ETPClient client,
384383 ).build ()
385384 );
386385 GetDataSubarrays gdsa = GetDataSubarrays .newBuilder ()
387- .setDataSubarrays (mapSubArr ).build ();
386+ .setDataSubarrays (mapSubArr ).build ();
388387 long msgId = client .send (gdsa );
389388 msgIdsToWaitSubArray .put (msgId , e_subArray .getKey ());
390389
@@ -451,16 +450,16 @@ public static Map<String, List<Number>> getMultipleDataArrays(ETPClient client,
451450 .flatMap(List::stream).collect(Collectors.toList());
452451 result.put(sub_arr_r.getKey(),numbers);*/
453452 List <Number > das = sub_arr_r .getValue ().stream ()
454- .sorted (Comparator .comparingLong (m0 -> m0 .getHeader ().getMessageId ()))
455- .map (m -> ((GetDataSubarraysResponse ) m .getBody ()).getDataSubarrays ().values ())
456- .flatMap (Collection ::stream )
457- .map (e -> {
458- try {
459- return (List <Number >) ETPUtils .getAttributeValue (e .getData ().getItem (), "values" );
460- } catch (Exception ex ) {
461- throw new RuntimeException (ex );
462- }
463- }).filter (Objects ::nonNull )
453+ .sorted (Comparator .comparingLong (m0 -> m0 .getHeader ().getMessageId ()))
454+ .map (m -> ((GetDataSubarraysResponse ) m .getBody ()).getDataSubarrays ().values ())
455+ .flatMap (Collection ::stream )
456+ .map (e -> {
457+ try {
458+ return (List <Number >) ETPUtils .getAttributeValue (e .getData ().getItem (), "values" );
459+ } catch (Exception ex ) {
460+ throw new RuntimeException (ex );
461+ }
462+ }).filter (Objects ::nonNull )
464463 .flatMap (List ::stream )
465464 .collect (Collectors .toList ());
466465 result .put (sub_arr_r .getKey (), das );
@@ -548,6 +547,78 @@ public static List<Message> sendGetDataArray_withSubArray(ETPClient etpClient, S
548547 return result ;
549548 }
550549
550+ public static void sendPutDataArray (ETPClient etpClient , String uri , String pathInResource , List <?> dataFlat , List <Long > dimensions , AnyLogicalArrayType alat , AnyArrayType aat , int maxSize ){
551+ Map <CharSequence , PutDataSubarraysType > map = new HashMap <>();
552+ PutUninitializedDataArrays pud = PutUninitializedDataArrays .newBuilder ()
553+ .setDataArrays (
554+ Map .of (
555+ "0" , PutUninitializedDataArrayType .newBuilder ()
556+ .setUid (DataArrayIdentifier .newBuilder ()
557+ .setPathInResource (pathInResource )
558+ .setUri (uri )
559+ .build ()
560+ ).setMetadata (
561+ DataArrayMetadata .newBuilder ()
562+ .setDimensions (dimensions )
563+ .setStoreCreated (new Date ().getTime ())
564+ .setStoreLastWrite (new Date ().getTime ())
565+ .setLogicalArrayType (alat )
566+ .setCustomData (new HashMap <>())
567+ .setTransportArrayType (aat )
568+ .build ()
569+ ).build ()
570+ )
571+ ).build ();
572+ long pud_id = etpClient .send (pud );
573+ List <Message > pud_resp = etpClient .getEtpClientSession ().waitForResponse (pud_id , 50000 );
574+
575+ long nbBitPerElt = getBitSize (alat );
576+ Long nbEltPerLine = dimensions .subList (1 , dimensions .size ()).stream ().reduce (1L , (a , b ) -> a * b );
577+ Long nbLinePerSplit = maxSize / (nbEltPerLine * nbBitPerElt );
578+
579+ final long nbLineInData = dataFlat .size () / nbEltPerLine ;
580+
581+ for (long li =0 ; li <nbLineInData ; li +=nbLinePerSplit ) {
582+ long first = (li *nbEltPerLine );
583+ long last = Math .min (dataFlat .size (), (int ) ((li + nbLinePerSplit )*nbEltPerLine ));
584+
585+ List <Long > counts = new ArrayList <>();
586+ counts .add ((last - first ) / nbEltPerLine );
587+ counts .addAll (dimensions .subList (1 , dimensions .size ()));
588+
589+ List <Long > starts = new ArrayList <>();
590+ starts .add (li );
591+ for (int di =1 ; di <dimensions .size (); di ++){
592+ starts .add (0L );
593+ }
594+
595+ System .out .print ("starts [" );
596+ starts .forEach (s -> System .out .print (s + ", " ));
597+ System .out .print ("]\n " );
598+ System .out .print ("counts[" );
599+ counts .forEach (s -> System .out .print (s + ", " ));
600+ System .out .print ("]\n " );
601+ AnyArray aa = constructArray (dataFlat .subList ((int ) (li *nbEltPerLine ), Math .min (dataFlat .size (), (int ) ((li + nbLinePerSplit )*nbEltPerLine ))));
602+ DataArrayIdentifier dai = DataArrayIdentifier .newBuilder ()
603+ .setUri (uri )
604+ .setPathInResource (pathInResource )
605+ .build ();
606+ map .put (String .valueOf (map .size ()), PutDataSubarraysType .newBuilder ()
607+ .setUid (dai )
608+ .setData (aa )
609+ .setStarts (starts )
610+ .setCounts (counts )
611+ .build ()
612+ );
613+ }
614+ PutDataSubarrays msg = PutDataSubarrays .newBuilder ()
615+ .setDataSubarrays (map ).build ();
616+ long msg_id = etpClient .send (msg );
617+ logger .info ("Exporting : PP " + uri + " " + pathInResource + " msg id : " + msg_id + "\n " );
618+
619+ List <Message > pdar = etpClient .getEtpClientSession ().waitForResponse (msg_id , 50000 );
620+ }
621+
551622 public static Long sendGetDataSubArray_nowait (ETPClient etpClient , String uri , String pathInHDF5 , Long [] start , Long [] count ){
552623 DataArrayIdentifier identifier = DataArrayIdentifier .newBuilder ()
553624 .setUri (uri )
@@ -672,20 +743,26 @@ public static List<Number> sendGetDataArray_prettier(ETPClient etpClient, String
672743 /* PutDataArray */
673744
674745 public static PutDataArrays buildPutDataArray (String uri , List <Pair <String , DataArray >> das ){
675- Map <CharSequence , PutDataArraysType > map = new HashMap <>();
676- for (Pair <String , DataArray > pathAndDa : das ) {
677- DataArrayIdentifier dai = DataArrayIdentifier .newBuilder ()
678- .setUri (uri )
679- .setPathInResource (pathAndDa .l ())
680- .build ();
681- map .put (String .valueOf (map .size ()), PutDataArraysType .newBuilder ()
682- .setUid (dai )
683- .setArray (pathAndDa .r ())
684- .build ()
685- );
746+ try {
747+ Map <CharSequence , PutDataArraysType > map = new HashMap <>();
748+ for (Pair <String , DataArray > pathAndDa : das ) {
749+ DataArrayIdentifier dai = DataArrayIdentifier .newBuilder ()
750+ .setUri (uri )
751+ .setPathInResource (pathAndDa .l ())
752+ .build ();
753+ map .put (String .valueOf (map .size ()), PutDataArraysType .newBuilder ()
754+ .setUid (dai )
755+ .setArray (pathAndDa .r ())
756+ .setCustomData (new HashMap <>())
757+ .build ()
758+ );
759+ }
760+ return PutDataArrays .newBuilder ()
761+ .setDataArrays (map ).build ();
762+ }catch (Exception e ){
763+ e .printStackTrace ();
686764 }
687- return PutDataArrays .newBuilder ()
688- .setDataArrays (map ).build ();
765+ return null ;
689766 }
690767
691768 public static List <Message > sendPutDataArray (ETPClient etpClient , String uri , String pathInHDF5 , DataArray da , int timeoutMS ){
@@ -705,6 +782,51 @@ public static List<Message> sendPutDataArray(ETPClient etpClient, String uri, St
705782 return etpClient .getEtpClientSession ().waitForResponse (msg_id , timeoutMS );
706783 }
707784
785+ public static AnyArray constructArray (List <?> data ){
786+ if (data .get (0 ).getClass ().equals (Double .class )) {
787+ return AnyArray .newBuilder ()
788+ .setItem (ArrayOfDouble .newBuilder ()
789+ .setValues ((List <Double >) data )
790+ .build ()
791+ ).build ();
792+ } else if (data .get (0 ).getClass ().equals (Integer .class )) {
793+ return AnyArray .newBuilder ()
794+ .setItem (ArrayOfInt .newBuilder ()
795+ .setValues ((List <Integer >) data )
796+ .build ()
797+ ).build ();
798+ } else if (data .get (0 ).getClass ().equals (Long .class )) {
799+ return AnyArray .newBuilder ()
800+ .setItem (ArrayOfLong .newBuilder ()
801+ .setValues ((List <Long >) data )
802+ .build ()
803+ ).build ();
804+ } else if (data .get (0 ).getClass ().equals (Float .class )) {
805+ return AnyArray .newBuilder ()
806+ .setItem (ArrayOfFloat .newBuilder ()
807+ .setValues ((List <Float >) data )
808+ .build ()
809+ ).build ();
810+ } else if (data .get (0 ).getClass ().equals (String .class )) {
811+ return AnyArray .newBuilder ()
812+ .setItem (ArrayOfString .newBuilder ()
813+ .setValues ((List <CharSequence >) data )
814+ .build ()
815+ ).build ();
816+ } else if (data .get (0 ).getClass ().equals (Boolean .class )) {
817+ return AnyArray .newBuilder ()
818+ .setItem (ArrayOfBoolean .newBuilder ()
819+ .setValues ((List <Boolean >) data )
820+ .build ()
821+ ).build ();
822+ }
823+ logger .error ("Not supported type for any array {}" , data );
824+ if (!data .isEmpty ())
825+ logger .error ("\t " + data .get (0 ));
826+ return null ;
827+
828+ }
829+
708830 public static void main (String [] argv ){
709831 String xml = "<?xml version=\" 1.0\" encoding=\" UTF-8\" standalone=\" yes\" ?><ns2:TriangulatedSetRepresentation xmlns=\" http://www.energistics.org/energyml/data/commonv2\" xmlns:ns2=\" http://www.energistics.org/energyml/data/resqmlv2\" uuid=\" f9a85fba-7f74-401f-99a2-03ff00a50086\" schemaVersion=\" 2.2\" objectVersion=\" 0\" ><Citation><Title>null[Simplified]</Title><Creation>2023-10-27T17:04:25.403+02:00</Creation><LastUpdate>2023-10-27T17:04:25.404+02:00</LastUpdate><Description>A simplification of the representation null realised by Jerboa (a tool from University of Poitiers [FRANCE])</Description></Citation><ns2:TrianglePatch><ns2:NodeCount>10755</ns2:NodeCount><ns2:Triangles xmlns:xsi=\" http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\" IntegerExternalArray\" ><NullValue>0</NullValue><CountPerValue>1</CountPerValue><Values><ExternalDataArrayPart><PathInExternalFile>RESQML/f9a85fba-7f74-401f-99a2-03ff00a50086triangle_patch0</PathInExternalFile></ExternalDataArrayPart></Values></ns2:Triangles><ns2:Geometry><ns2:Points xmlns:xsi=\" http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\" ns2:Point3dExternalArray\" ><ns2:Coordinates><ExternalDataArrayPart><PathInExternalFile>RESQML/f9a85fba-7f74-401f-99a2-03ff00a50086point_patch0</PathInExternalFile></ExternalDataArrayPart></ns2:Coordinates></ns2:Points></ns2:Geometry></ns2:TrianglePatch> </ns2:TriangulatedSetRepresentation>" ;
710832 Document xmlDoc = null ;
0 commit comments