Commit 78c2f505d48140de9ebba9213d17beba62a1f81f
1 parent
67a4e0da
Exists in
master
and in
112 other branches
Improve granules and services grids
Showing
4 changed files
with
485 additions
and
426 deletions
Show diff stats
.gitignore
generic_data/EpnTapData/EpnTapServices.json deleted
... | ... | @@ -1,184 +0,0 @@ |
1 | -[ | |
2 | - { | |
3 | - "accessurl": "http://voparis-tap-helio.obspm.fr/__system__/tap/run/tap", | |
4 | - "title": "Heliophysics Feature Catalog active regions", | |
5 | - "shortname": "HFC1AR", | |
6 | - "schema": "hfc1ar", | |
7 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,reference,service_title,target_region,institut,code,version,feature_name,enc_met,person,contact,observat,instrume,telescop,obsinst_key,units,wavemin,wavemax,wavename,waveunit,spectral_domain,obs_type,obs_cat,date_obs,date_end,jdint,jdfrac,c_rotation,filename,url,cdelt1,cdelt2,naxis1,naxis2,center_x,center_y,r_sun,bitpix,bscale,bzero,exp_time,file_format,data_type,qclk_url,qclk_fname,id_ar,noaa_number,feat_x_pix,feat_y_pix,feat_x_arcsec,feat_y_arcsec,feat_hg_long_deg,feat_hg_lat_deg,feat_carr_long_deg,feat_carr_lat_deg,br_x0_pix,br_y0_pix,br_x1_pix,br_y1_pix,br_x2_pix,br_y2_pix,br_x3_pix,br_y3_pix,br_x0_arcsec,br_y0_arcsec,br_x1_arcsec,br_y1_arcsec,br_x2_arcsec,br_y2_arcsec,br_x3_arcsec,br_y3_arcsec,br_hg_long0_deg,br_hg_lat0_deg,br_hg_long1_deg,br_hg_lat1_deg,br_hg_long2_deg,br_hg_lat2_deg,br_hg_long3_deg,br_hg_lat3_deg,br_carr_long0_deg,br_carr_lat0_deg,br_carr_long1_deg,br_carr_lat1_deg,br_carr_long2_deg,br_carr_lat2_deg,br_carr_long3_deg,br_carr_lat3_deg,feat_area_pix,feat_area_deg2,feat_area_mm2,feat_max_int,feat_min_int,feat_mean_int,feat_mean2qsun,feat_min_bz,feat_max_bz,feat_mean_bz,feat_mean_grad,feat_median_grad,feat_max_grad,feat_length_nl,feat_length_sg,cc_x_pix,cc_y_pix,cc_x_arcsec,cc_y_arcsec,cc,cc_length,snapshot,track_id,phenom,ref_feat,track_lvl_trust,release_date,creation_date,modification_date,s_region" | |
8 | - }, | |
9 | - { | |
10 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
11 | - "title": "Extrasolar Planets Encyclopaedia", | |
12 | - "shortname": "ExoPlanet", | |
13 | - "schema": "exoplanet", | |
14 | - "columns": "granule_gid,granule_uid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,spatial_origin,local_time_min,local_time_max,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,release_date,creation_date,modification_date,service_title,target_region,species,detection_type,publication_status,mass,mass_error_min,mass_error_max,radius,radius_error_min,radius_error_max,semi_major_axis,semi_major_axis_error_min,semi_major_axis_error_max,period,period_error_min,period_error_max,eccentricity,eccentricity_error_min,eccentricity_error_max,periastron,periastron_error_min,periastron_error_max,tzero_tr,tzero_tr_error_min,tzero_tr_error_max,tzero_vr,tzero_vr_error_min,tzero_vr_error_max,t_peri,t_peri_error_min,t_peri_error_max,t_conj,t_conj_error_min,t_conj_error_max,inclination,inclination_error_min,inclination_error_max,tzero_tr_sec,tzero_tr_sec_error_min,tzero_tr_sec_error_max,lambda_angle,lambda_angle_error_min,lambda_angle_error_max,discovered,updated,remarks,other_web,detect_mode,angular_distance,temp_calculated,temp_measured,hot_point_lon,log_g,albedo,albedo_error_min,albedo_error_max,mass_detection_type,radius_detection_type,mass_sin_i,mass_sin_i_error_min,mass_sin_i_error_max,impact_parameter,impact_parameter_error_min,impact_parameter_error_max,k,k_error_min,k_error_max,alt_target_name,star_name,star_distance,star_spec_type,mag_v,mag_i,mag_j,mag_h,mag_k,star_metallicity,star_mass,star_radius,star_age,star_teff,magnetic_field,detected_disc" | |
15 | - }, | |
16 | - { | |
17 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
18 | - "title": "Main characteristics of solar system planets", | |
19 | - "shortname": "planets", | |
20 | - "schema": "planets", | |
21 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_scale,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,spatial_origin,s_region,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,semi_major_axis,mean_radius,mean_radius_uncertainty,equatorial_radius,equatorial_radius_uncertainty,polar_radius,polar_radius_uncertainty,rms_deviation,elevation_min,elevation_max,mass,sideral_rotation_period,bib_reference,creation_date,modification_date,release_date,service_title,processing_level" | |
22 | - }, | |
23 | - { | |
24 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
25 | - "title": "M4AST - Modeling for Asteroids", | |
26 | - "shortname": "M4AST", | |
27 | - "schema": "m4ast", | |
28 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c2min,c3min,c1max,c2max,c3max,c1_resol_min,c2_resol_min,c3_resol_min,c1_resol_max,c2_resol_max,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,reference,processing_level,service_title,release_date,creation_date,modification_date,thumbnail_url,alt_target_name,s_region" | |
29 | - }, | |
30 | - { | |
31 | - "accessurl": "http://voparis-tap-helio.obspm.fr/__system__/tap/run/tap", | |
32 | - "title": "Heliophysics Feature Catalog type 3 radio bursts", | |
33 | - "shortname": "HFC1T3", | |
34 | - "schema": "hfc1t3", | |
35 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,reference,service_title,target_region,institut,code,version,feature_name,enc_met,person,contact,observat,instrume,telescop,obsinst_key,units,wavemin,wavemax,wavename,waveunit,freqmin,freqmax,frequnit,spectral_domain,obs_type,obs_cat,date_obs,date_end,jdint,jdfrac,c_rotation,filename,url,cdelt1,cdelt2,naxis1,naxis2,center_x,center_y,file_format,data_type,qclk_url,qclk_fname,id_type_iii,feat_max_int,feat_mean_int,multiple,feat_filename,snapshot,cc_x_pix,cc_y_pix,cc_x_utc,cc_y_mhz,cc,cc_length,ske_cc_x_pix,ske_cc_y_pix,ske_cc_x_utc,ske_cc_y_mhz,ske_cc,ske_cc_length,br_x0_pix,br_y0_pix,br_x1_pix,br_y1_pix,br_x2_pix,br_y2_pix,br_x3_pix,br_y3_pix,br_x0_utc,br_y0_mhz,br_x1_utc,br_y1_mhz,br_x2_utc,br_y2_mhz,br_x3_utc,br_y3_mhz,time_start,time_end,drift_start,drift_end,fit_a0,fit_a1,lvl_trust,release_date,creation_date,modification_date,s_region" | |
36 | - }, | |
37 | - { | |
38 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
39 | - "title": "IR spectroscopy of comet Halley", | |
40 | - "shortname": "IKS", | |
41 | - "schema": "iks", | |
42 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,alt_target_name,target_class,acquisition_id,target_distance_min,target_distance_max,sun_distance_min,sun_distance_max,earth_distance_min,earth_distance_max,time_min,time_max,target_time_min,target_time_max,time_scale,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,s_region,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,thumbnail_url,file_name,bib_reference,creation_date,modification_date,release_date,service_title,processing_level" | |
43 | - }, | |
44 | - { | |
45 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
46 | - "title": "Vertical Profiles in Titan Middle Atmosphere", | |
47 | - "shortname": "Titan", | |
48 | - "schema": "titan", | |
49 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,bib_reference,service_title,target_region,species,solar_longitude,local_time_min,local_time_max,time_scale,release_date,creation_date,modification_date,s_region,thumbnail_url" | |
50 | - }, | |
51 | - { | |
52 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
53 | - "title": "Base de Donnรฉes d'Images Planรฉtaires", | |
54 | - "shortname": "BDIP", | |
55 | - "schema": "bdip", | |
56 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,service_title,ra,dec,release_date,creation_date,modification_date,s_region,thumbnail_url" | |
57 | - }, | |
58 | - { | |
59 | - "accessurl": "http://vogate.obs-nancay.fr/__system__/tap/run/tap", | |
60 | - "title": "Jupiter Routine Observations", | |
61 | - "shortname": "RoutineJupiter", | |
62 | - "schema": "nda_routine", | |
63 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,bib_reference,service_title,target_region,release_date,creation_date,modification_date,s_region,thumbnail_url" | |
64 | - }, | |
65 | - { | |
66 | - "accessurl": "http://ia2-tap.oats.inaf.it:8080/epntap", | |
67 | - "title": "INAF-IAPS RDB NASA dust catalogue TAP service", | |
68 | - "shortname": "nasadustcat", | |
69 | - "schema": "nasadustcat", | |
70 | - "columns": "" | |
71 | - }, | |
72 | - { | |
73 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
74 | - "title": "The Nanรงay Cometary Database", | |
75 | - "shortname": "BASECOM", | |
76 | - "schema": "basecom", | |
77 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,bib_reference,service_title,release_date,creation_date,modification_date,target_region,species,alt_target_name,tperihelion,dsun0,comettype,obsqual,status,tepoch,tstart,tend,freq,pola,dgeo,dsun,rdot,inv1,inv2,tbg,line_area,aerr,slin,serr,vo,voerr,dvo,dvoerr,q1oh,q1err,q2oh,q2err,file_name,ra,offra,dec,offdec,snr,thumbnail_url" | |
78 | - }, | |
79 | - { | |
80 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
81 | - "title": "Auroral Planetary Imaging and Spectroscopy", | |
82 | - "shortname": "APIS", | |
83 | - "schema": "apis", | |
84 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,reference,service_title,target_region,ra,dec,release_date,creation_date,modification_date,s_region,thumbnail_url" | |
85 | - }, | |
86 | - { | |
87 | - "accessurl": "http://thebe.gp.tohoku.ac.jp/__system__/tap/run/tap", | |
88 | - "title": "Iitate HF data", | |
89 | - "shortname": "Iitate", | |
90 | - "schema": "iitate", | |
91 | - "columns": "dataproduct_type,target_name,target_class,feature_name,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,spatial_origin,spatial_coordinate_description,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,solar_longitude_min,solar_longitude_max,local_time_min,local_time_max,target_distance_min,target_distance_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,publisher,bib_reference,service_title,target_region,instrument_type,time_scale,granule_uid,granule_gid,obs_id,thumbnail_url,release_date,creation_date,modification_date,s_region" | |
92 | - }, | |
93 | - { | |
94 | - "accessurl": "http://epn-tap.oeaw.ac.at/__system__/tap/run/tap", | |
95 | - "title": "IMPEx Simulation Data", | |
96 | - "shortname": "IMPEx_EPN20", | |
97 | - "schema": "impex_epn20", | |
98 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_estsize,access_url,access_format,file_name,publisher" | |
99 | - }, | |
100 | - { | |
101 | - "accessurl": "http://epn-tap.oeaw.ac.at/__system__/tap/run/tap", | |
102 | - "title": "Venus-Express Magnetometer Data", | |
103 | - "shortname": "VExMag_EPN20", | |
104 | - "schema": "vexmag_epn20", | |
105 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,file_name,bib_reference,time_scale,publisher,target_region,target_distance_min,target_distance_max" | |
106 | - }, | |
107 | - { | |
108 | - "accessurl": "http://epn1.epn-vespa.jacobs-university.de/__system__/tap/run/tap", | |
109 | - "title": "CRISM data from Earth Server 2", | |
110 | - "shortname": "CRISM", | |
111 | - "schema": "crism", | |
112 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,thumbnail_url,counter,activity,activity_macro,sensor_id,filetype,version,e,n,subgranule_url,f_region" | |
113 | - }, | |
114 | - { | |
115 | - "accessurl": "http://epn1.epn-vespa.jacobs-university.de/__system__/tap/run/tap", | |
116 | - "title": "Martian Impact Craters", | |
117 | - "shortname": "Mars_Craters", | |
118 | - "schema": "mars_craters", | |
119 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,bib_reference,diameter,depth,crater_name,degradation_state,crater_morphology_1,crater_morphology_2,crater_morphology_3,ejecta_morphology_1,ejecta_morphology_2" | |
120 | - }, | |
121 | - { | |
122 | - "accessurl": "http://epn1.epn-vespa.jacobs-university.de/__system__/tap/run/tap", | |
123 | - "title": "USGS WMS", | |
124 | - "shortname": "USGS_WMS", | |
125 | - "schema": "usgs_wms", | |
126 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,thumbnail_url,preview_url" | |
127 | - }, | |
128 | - { | |
129 | - "accessurl": "http://sery.lmd.jussieu.fr/__system__/tap/run/tap", | |
130 | - "title": "EPN-TAP access to the MCD database", | |
131 | - "shortname": "MCD", | |
132 | - "schema": "mcd", | |
133 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,spatial_coordinate_description,solar_longitude_min,solar_longitude_max,local_time_min,local_time_max,time_scale" | |
134 | - }, | |
135 | - { | |
136 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
137 | - "title": "RadioJOVE Data Archive", | |
138 | - "shortname": "RadioJOVE", | |
139 | - "schema": "radiojove", | |
140 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,processing_level,target_region,target_element,instrument_type,observer_name,observatory_location,observatory_longitude,observatory_latitude,n_channel,dipole_orientation_angle,thumbnail_url,release_date,creation_date,modification_date,s_region,service_title" | |
141 | - }, | |
142 | - { | |
143 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
144 | - "title": "VIRTIS Venus Express nominal mission (demo)", | |
145 | - "shortname": "VVEx", | |
146 | - "schema": "vvex", | |
147 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,target_distance_min,target_distance_max,time_min,time_max,target_time_min,target_time_max,time_scale,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,s_region,local_time_min,local_time_max,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_mode,sc_pointing_mode,ra,dec,instrument_host_name,instrument_name,measurement_type,access_url,access_format,access_estsize,thumbnail_url,file_name,bib_reference,creation_date,modification_date,release_date,service_title,processing_level" | |
148 | - }, | |
149 | - { | |
150 | - "accessurl": "http://vo.projet.latmos.ipsl.fr/__system__/tap/run/tap", | |
151 | - "title": "SIPCAM Mars Atmospheric Vertical Distribution", | |
152 | - "shortname": "SPICAM", | |
153 | - "schema": "spicam", | |
154 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,spatial_coordinate_description,solar_longitude_min,solar_longitude_max,local_time_min,local_time_max,time_scale" | |
155 | - }, | |
156 | - { | |
157 | - "accessurl": "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap", | |
158 | - "title": "TNOs are Cool", | |
159 | - "shortname": "tnosarecool", | |
160 | - "schema": "tnosarecool", | |
161 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,alt_target_name,bib_reference,target_distance_min,target_distance_max,publisher,time_scale,sun_distance_min,sun_distance_max,flux,flux_sigma_plus,flux_sigma_minus,color_indicator,magnitude,magnitude_sigma_plus,magnitude_sigma_minus,diameter,diameter_sigma_plus,diameter_sigma_minus,albedo,albedo_sigma_plus,albedo_sigma_minus,reference_band,eta,eta_sigma_plus,eta_sigma_minus,code_eta,comment,dynamical_type,taxonomy_code,semi_major_axis,inclination,eccentricity" | |
162 | - }, | |
163 | - { | |
164 | - "accessurl": "http://vespa-ae.oma.be/__system__/tap/run/tap", | |
165 | - "title": "Profiles from SPICAV-SOIR/VEx", | |
166 | - "shortname": "BIRA-IASB TAP", | |
167 | - "schema": "soir", | |
168 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,access_estsize,access_md5,thumbnail_url,file_name,species,target_region,feature_name,bib_reference,ra,dec,solar_longitude_min,solar_longitude_max,local_time_min,local_time_max,target_distance_min,target_distance_max,target_time_min,target_time_max,publisher,spatial_coordinate_description,spatial_origin,time_origin,time_scale" | |
169 | - }, | |
170 | - { | |
171 | - "accessurl": "http://spectrum.iaa.es/__system__/tap/run/tap", | |
172 | - "title": "Data for numerical modeling of planetary atmospheres", | |
173 | - "shortname": "abs_cs", | |
174 | - "schema": "abs_cs", | |
175 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,measurement_type,processing_level,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,service_title,release_date,creation_date,modification_date,access_format,access_url,access_estsize,species,formula,cas_number,comments,molecule_group,bibreferences,s_region,thumbnail_url" | |
176 | - }, | |
177 | - { | |
178 | - "accessurl": "http://climso.irap.omp.eu/__system__/tap/run/tap", | |
179 | - "title": "CLIMSO coronagraphs at pic du midi de Bigorre", | |
180 | - "shortname": "CLIMSO", | |
181 | - "schema": "climso", | |
182 | - "columns": "granule_uid,granule_gid,obs_id,dataproduct_type,target_name,target_class,time_min,time_max,time_sampling_step_min,time_sampling_step_max,time_exp_min,time_exp_max,spectral_range_min,spectral_range_max,spectral_sampling_step_min,spectral_sampling_step_max,spectral_resolution_min,spectral_resolution_max,c1min,c1max,c2min,c2max,c3min,c3max,s_region,c1_resol_min,c1_resol_max,c2_resol_min,c2_resol_max,c3_resol_min,c3_resol_max,spatial_frame_type,incidence_min,incidence_max,emergence_min,emergence_max,phase_min,phase_max,instrument_host_name,instrument_name,measurement_type,processing_level,creation_date,modification_date,release_date,service_title,access_url,access_format,thumbnail_url" | |
183 | - } | |
184 | -] |
js/app/controllers/EpnTapModule.js
... | ... | @@ -24,6 +24,44 @@ function loadTextFileAjaxSync(filePath, mimeType) { |
24 | 24 | } |
25 | 25 | } |
26 | 26 | |
27 | +function prettify(name) { | |
28 | + return name.charAt(0).toUpperCase() + name.replace(/_/g, ' ').substr(1).toLowerCase(); | |
29 | +} | |
30 | + | |
31 | +function all_prettify(name) { | |
32 | + return 'All ' + (name[name.length-1] == 's' ? name : name + 's').replace(/_/g, ' ').toLowerCase(); | |
33 | +} | |
34 | + | |
35 | +function is_latest(new_str_date, old_str_date) { | |
36 | + if (new_str_date === null) { | |
37 | + return false; | |
38 | + } | |
39 | + if (old_str_date === null) { | |
40 | + return true; | |
41 | + } | |
42 | + | |
43 | + var new_date = new_str_date.split('/'); | |
44 | + var old_date = old_str_date.split('/'); | |
45 | + | |
46 | + if(new_date[2]>old_date[2]) { | |
47 | + return true; | |
48 | + } else if(new_date[2]<old_date[2]) { | |
49 | + return false; | |
50 | + } | |
51 | + if(new_date[1]>old_date[1]) { | |
52 | + return true; | |
53 | + } else if(new_date[1]<old_date[1]) { | |
54 | + return false; | |
55 | + } | |
56 | + if(new_date[0]>old_date[0]) { | |
57 | + return true; | |
58 | + } else { | |
59 | + return false; | |
60 | + } | |
61 | +} | |
62 | + | |
63 | + | |
64 | + | |
27 | 65 | Ext.define('amdaDesktop.EpnTapModule', { |
28 | 66 | |
29 | 67 | extend: 'amdaDesktop.AmdaModule', |
... | ... | @@ -41,55 +79,113 @@ Ext.define('amdaDesktop.EpnTapModule', { |
41 | 79 | /** The name of the documentation file related to the module. */ |
42 | 80 | helpFile : 'epnTapHelp', |
43 | 81 | |
44 | - width : 800, | |
82 | + /** Window dimentions. */ | |
83 | + width : 1000, | |
45 | 84 | height: 550, |
46 | 85 | |
47 | - dpt_dic: { "im": "Image", "ma": "Map", "sp": "Spectrum", "ds": "Dynamic spectrum", "sc": "Spectral cube", "pr": "Profile", | |
48 | - "vo": "Volume", "mo": "Movie", "cu": "Cube", "ts": "Time series", "ca": "Catalogue", "ci": "Catalogue item" }, | |
86 | + onWindowLoaded: function() { | |
87 | + this.dpt_cb = Ext.getCmp('productTypeCB'); | |
88 | + this.tc_cb = Ext.getCmp('targetClassCB'); | |
89 | + this.tn_cb = Ext.getCmp('targetNameCB'); | |
90 | + this.sp_grid = Ext.getCmp('servicesGrid'); | |
91 | + this.gp_grid = Ext.getCmp('granulesGrid'); | |
49 | 92 | |
50 | - prettify: function(name) { | |
51 | - return name.charAt(0).toUpperCase() + name.replace(/_/g, ' ').substr(1).toLowerCase(); | |
52 | - }, | |
93 | + this.dpt_cb.getStore().removeAll(); | |
94 | + this.tc_cb.getStore().removeAll(); | |
95 | + this.tn_cb.getStore().removeAll(); | |
96 | + this.tc_cb.disable(); | |
97 | + this.tn_cb.disable(); | |
98 | + | |
99 | + this.dpt_cb.getStore().add({'id': 'all', 'name': 'All data product types'}); | |
100 | + this.tc_cb.getStore().add({'id': 'all', 'name': 'All target names'}); | |
101 | + this.tn_cb.getStore().add({'id': 'all', 'name': 'All target classes'}); | |
53 | 102 | |
54 | - all_prettify: function(name) { | |
55 | - return 'All ' + (name[name.length-1] == 's' ? name : name + 's').replace(/_/g, ' ').toLowerCase(); | |
103 | + for (var dpt_id in this.metadata) { | |
104 | + if (dpt_id in this.dpt_dic) { | |
105 | + this.dpt_cb.getStore().add({'id': dpt_id, 'name': prettify(this.dpt_dic[dpt_id])}); | |
106 | + } else { | |
107 | + console.log('Unknown data product type "' + dpt_id + '"'); | |
108 | + } | |
109 | + } | |
110 | + this.dpt_cb.select('all'); | |
111 | + this.tc_cb.select('all'); | |
112 | + this.tn_cb.select('all'); | |
56 | 113 | }, |
57 | 114 | |
58 | 115 | update_services: function() { |
59 | 116 | this.sp_grid.getStore().removeAll(); |
60 | 117 | this.gp_grid.getStore().removeAll(); |
61 | 118 | |
119 | + var service = null; | |
120 | + var time_min_arr = null; | |
121 | + var time_max_arr = null; | |
122 | + var time_min = null; | |
123 | + var time_max = null; | |
124 | + | |
62 | 125 | var filter_dic = new Array(); |
63 | - if(this.dpt_cb.value == 'all') { | |
126 | + if(this.dataproduct_type == 'all') { | |
64 | 127 | for (var dpt in this.metadata) { |
65 | 128 | for (var tc in this.metadata[dpt]) { |
66 | 129 | for (tn in this.metadata[dpt][tc]) { |
67 | 130 | for (serv in this.metadata[dpt][tc][tn]) { |
68 | - filter_dic[serv] = this.metadata[dpt][tc][tn][serv][0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
131 | + service = this.metadata[dpt][tc][tn][serv]; | |
132 | + time_min_arr = service[1].split('/'); | |
133 | + filter_dic[serv] = service[0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
134 | + if (is_latest(service[1], time_min)) { | |
135 | + time_min = service[1]; | |
136 | + } | |
137 | + if (is_latest(service[2], time_max)) { | |
138 | + time_max = service[2]; | |
139 | + } | |
69 | 140 | } |
70 | 141 | } |
71 | 142 | } |
72 | 143 | } |
73 | - } else if (this.tc_cb.value == 'all') { | |
74 | - for (var tc in this.metadata[this.dpt_cb.value]) { | |
75 | - for (tn in this.metadata[this.dpt_cb.value][tc]) { | |
76 | - for (serv in this.metadata[this.dpt_cb.value][tc][tn]) { | |
77 | - filter_dic[serv] = this.metadata[this.dpt_cb.value][tc][tn][serv][0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
144 | + } else if (this.target_class == 'all') { | |
145 | + for (var tc in this.metadata[this.dataproduct_type]) { | |
146 | + for (tn in this.metadata[this.dataproduct_type][tc]) { | |
147 | + for (serv in this.metadata[this.dataproduct_type][tc][tn]) { | |
148 | + service = this.metadata[this.dataproduct_type][tc][tn][serv]; | |
149 | + filter_dic[serv] = service[0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
150 | + if (is_latest(service[1], time_min)) { | |
151 | + time_min = service[1]; | |
152 | + } | |
153 | + if (is_latest(service[2], time_max)) { | |
154 | + time_max = service[2]; | |
155 | + } | |
78 | 156 | } |
79 | 157 | } |
80 | 158 | } |
81 | 159 | } else if (this.tn_cb.value == 'all') { |
82 | - for (tn in this.metadata[this.dpt_cb.value][this.tc_cb.value]) { | |
83 | - for (serv in this.metadata[this.dpt_cb.value][this.tc_cb.value][tn]) { | |
84 | - filter_dic[serv] = this.metadata[this.dpt_cb.value][this.tc_cb.value][tn][serv][0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
160 | + for (tn in this.metadata[this.dataproduct_type][this.target_class]) { | |
161 | + for (serv in this.metadata[this.dataproduct_type][this.target_class][tn]) { | |
162 | + service = this.metadata[this.dataproduct_type][this.target_class][tn][serv]; | |
163 | + filter_dic[serv] = service[0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
164 | + if (is_latest(service[1], time_min)) { | |
165 | + time_min = service[1]; | |
166 | + } | |
167 | + if (is_latest(service[2], time_max)) { | |
168 | + time_max = service[2]; | |
169 | + } | |
85 | 170 | } |
86 | 171 | } |
87 | 172 | } else { |
88 | - for (serv in this.metadata[this.dpt_cb.value][this.tc_cb.value][this.tn_cb.value]) { | |
89 | - filter_dic[serv] = this.metadata[this.dpt_cb.value][this.tc_cb.value][this.tn_cb.value][serv][0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
173 | + for (serv in this.metadata[this.dataproduct_type][this.target_class][this.tn_cb.value]) { | |
174 | + service = this.metadata[this.dataproduct_type][this.target_class][this.tn_cb.value][serv]; | |
175 | + filter_dic[serv] = service[0] + (serv in filter_dic ? filter_dic[serv] : 0); | |
176 | + if (is_latest(service[1], time_min)) { | |
177 | + time_min = service[1]; | |
178 | + } | |
179 | + if (is_latest(service[2], time_max)) { | |
180 | + time_max = service[2]; | |
181 | + } | |
90 | 182 | } |
91 | 183 | } |
92 | 184 | |
185 | + console.log('times min/max: [' + time_min + ' ; ' + time_max + ']'); | |
186 | + // TODO: charger times min/max dans formulaire | |
187 | + // TODO: dans formulaire, mettre ร jour duration avec times min/max | |
188 | + | |
93 | 189 | var filter = Object.keys(filter_dic).map(function(key) { |
94 | 190 | return [key, filter_dic[key]]; |
95 | 191 | }); |
... | ... | @@ -97,63 +193,31 @@ Ext.define('amdaDesktop.EpnTapModule', { |
97 | 193 | return second[1] - first[1]; |
98 | 194 | }); |
99 | 195 | for (var s = 0; s < filter.length; s++) { |
100 | - this.sp_grid.getStore().add({'id': filter[s][0], 'nb_results': filter[s][1]}); | |
101 | - } | |
102 | - }, | |
103 | - | |
104 | - onWindowLoaded: function(services) { | |
105 | - this.metadata = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/metadata.json', "application/json")); | |
106 | - this.services = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/EpnTapServices.json', "application/json")); | |
107 | - console.log(Object.keys(this.metadata).length + " dataproduct_type rรฉpertoriรฉs."); | |
108 | - | |
109 | - this.dpt_cb = Ext.getCmp('productTypeCB'); | |
110 | - this.tc_cb = Ext.getCmp('targetClassCB'); | |
111 | - this.tn_cb = Ext.getCmp('targetNameCB'); | |
112 | - this.sp_grid = Ext.getCmp('servicesPanel'); | |
113 | - this.gp_grid = Ext.getCmp('granulesPanel'); | |
114 | - | |
115 | - this.dpt_cb.getStore().removeAll(); | |
116 | - this.tc_cb.getStore().removeAll(); | |
117 | - this.tn_cb.getStore().removeAll(); | |
118 | - this.tc_cb.disable(); | |
119 | - this.tn_cb.disable(); | |
120 | - | |
121 | - this.dpt_cb.getStore().add({'id': 'all', 'name': 'All data product types'}); | |
122 | - this.tc_cb.getStore().add({'id': 'all', 'name': 'All target names'}); | |
123 | - this.tn_cb.getStore().add({'id': 'all', 'name': 'All target classes'}); | |
124 | - | |
125 | - for (var dpt_id in this.metadata) { | |
126 | - if (dpt_id in this.dpt_dic) { | |
127 | - this.dpt_cb.getStore().add({'id': dpt_id, 'name': this.prettify(this.dpt_dic[dpt_id])}); | |
128 | - } else { | |
129 | - console.log("Unknown data product type '" + dpt_id + "'"); | |
130 | - } | |
196 | + var service = this.services[filter[s][0]]; | |
197 | + this.sp_grid.getStore().add({'id': filter[s][0], 'nb_results': filter[s][1], 'shortname': service['shortname'], 'title': service['title'], 'accessurl': service['accessurl']}); | |
131 | 198 | } |
132 | - this.dpt_cb.select('all'); | |
133 | - this.tc_cb.select('all'); | |
134 | - this.tn_cb.select('all'); | |
135 | - this.update_services(); | |
136 | 199 | }, |
137 | 200 | |
138 | - onProductTypeCB: function() { | |
201 | + onProductTypeCB: function(dataproduct_type) { | |
202 | + this.dataproduct_type = dataproduct_type; | |
139 | 203 | this.tc_cb.getStore().removeAll(); |
140 | 204 | this.tn_cb.getStore().removeAll(); |
141 | 205 | this.tn_cb.disable(); |
142 | 206 | |
143 | - if (this.dpt_cb.value == 'all') { | |
207 | + if (this.dataproduct_type == 'all') { | |
144 | 208 | this.tc_cb.disable(); |
145 | 209 | } else { |
146 | - var target_classes = this.metadata[this.dpt_cb.value]; | |
210 | + var target_classes = this.metadata[this.dataproduct_type]; | |
147 | 211 | |
148 | 212 | if (Object.keys(target_classes).length == 1) { |
149 | - this.tc_cb.getStore().add({'id': Object.keys(target_classes)[0], 'name': this.prettify(Object.keys(target_classes)[0])}); | |
213 | + this.tc_cb.getStore().add({'id': Object.keys(target_classes)[0], 'name': prettify(Object.keys(target_classes)[0])}); | |
150 | 214 | this.tc_cb.disable(); |
151 | 215 | this.tc_cb.select(this.tc_cb.getStore().getAt(0)['internalId']); |
152 | 216 | this.onTargetClassCB(); |
153 | 217 | } else { |
154 | - this.tc_cb.getStore().add({'id': 'all', 'name': this.all_prettify(this.dpt_dic[this.dpt_cb.value])}); | |
218 | + this.tc_cb.getStore().add({'id': 'all', 'name': all_prettify(this.dpt_dic[this.dataproduct_type])}); | |
155 | 219 | for (var tc_id in target_classes) { |
156 | - this.tc_cb.getStore().add({'id': tc_id, 'name': this.prettify(tc_id)}); | |
220 | + this.tc_cb.getStore().add({'id': tc_id, 'name': prettify(tc_id)}); | |
157 | 221 | } |
158 | 222 | this.tc_cb.select('all'); |
159 | 223 | this.tc_cb.enable(); |
... | ... | @@ -164,24 +228,26 @@ Ext.define('amdaDesktop.EpnTapModule', { |
164 | 228 | this.update_services(); |
165 | 229 | }, |
166 | 230 | |
167 | - onTargetClassCB: function() { | |
231 | + onTargetClassCB: function(target_class) { | |
232 | + this.target_class = target_class; | |
168 | 233 | this.tn_cb.getStore().removeAll(); |
169 | 234 | |
170 | - if (this.tc_cb.value == 'all') { | |
235 | + if (this.target_class == 'all') { | |
171 | 236 | this.tn_cb.getStore().add({'id': 'all', 'name': 'All target names'}); |
172 | 237 | this.tn_cb.select('all'); |
173 | 238 | this.tn_cb.disable(); |
174 | 239 | } else { |
175 | - var target_names = this.metadata[this.dpt_cb.value][this.tc_cb.value]; | |
240 | + var target_names = this.metadata[this.dataproduct_type][this.target_class]; | |
241 | + console.log('target_names: ', target_names) | |
176 | 242 | |
177 | 243 | if (Object.keys(target_names).length == 1) { |
178 | - this.tn_cb.getStore().add({'id': Object.keys(target_names)[0], 'name': this.prettify(Object.keys(target_names)[0])}); | |
244 | + this.tn_cb.getStore().add({'id': Object.keys(target_names)[0], 'name': prettify(Object.keys(target_names)[0])}); | |
179 | 245 | this.tn_cb.select(this.tn_cb.getStore().getAt(0)['internalId']); |
180 | 246 | this.tn_cb.disable(); |
181 | 247 | } else { |
182 | - this.tn_cb.getStore().add({'id': 'all', 'name': this.all_prettify(this.tc_cb.value)}); | |
248 | + this.tn_cb.getStore().add({'id': 'all', 'name': all_prettify(this.target_class)}); | |
183 | 249 | for (var tn_id in target_names) { |
184 | - this.tn_cb.getStore().add({'id': tn_id, 'name': this.prettify(tn_id)}); | |
250 | + this.tn_cb.getStore().add({'id': tn_id, 'name': prettify(tn_id)}); | |
185 | 251 | } |
186 | 252 | this.tn_cb.select('all'); |
187 | 253 | this.tn_cb.enable(); |
... | ... | @@ -190,40 +256,87 @@ Ext.define('amdaDesktop.EpnTapModule', { |
190 | 256 | this.update_services(); |
191 | 257 | }, |
192 | 258 | |
193 | - onTargetNameCB: function() { | |
259 | + onTargetNameCB: function(target_name) { | |
260 | + this.target_name = target_name; | |
194 | 261 | this.update_services(); |
195 | 262 | }, |
196 | 263 | |
197 | - onSearchBtnClicked: function() { | |
198 | - // console.log("onSearchBtnClicked"); | |
264 | + fillGranules: function(granules) { | |
265 | + if (granules == null) { | |
266 | + console.log("There is no granules to add."); | |
267 | + } else { | |
268 | + try { | |
269 | + // console.log('Added granules:', granules); | |
270 | + Ext.getCmp('granulesGrid').getStore().removeAll(); | |
271 | + Ext.getCmp('granulesGrid').getStore().add(granules); | |
272 | + } catch( e ) { | |
273 | + console.log('Can not add granules: ' + e); | |
274 | + } | |
275 | + } | |
276 | + }, | |
277 | + | |
278 | + updatePage: function(nb_rows) { | |
279 | + this.nb_rows = nb_rows; | |
280 | + | |
281 | + var rows_per_page = Ext.getCmp('rowsPerPageNf').value; | |
282 | + var nb_pages = Math.ceil(nb_rows / rows_per_page); | |
283 | + this.current_page = 1; | |
284 | + Ext.getCmp('pageLb').setText('1/' + nb_pages); | |
285 | + Ext.getCmp('previousPageBtn').setDisabled(true); | |
286 | + Ext.getCmp('firstPageBtn').setDisabled(true); | |
287 | + if (nb_pages==1) { | |
288 | + Ext.getCmp('nextPageBtn').setDisabled(true); | |
289 | + Ext.getCmp('lastPageBtn').setDisabled(true); | |
290 | + } else { | |
291 | + Ext.getCmp('nextPageBtn').setDisabled(false); | |
292 | + Ext.getCmp('lastPageBtn').setDisabled(false); | |
293 | + } | |
199 | 294 | }, |
200 | 295 | |
201 | - fillGranules: function(granules) { | |
202 | - console.log(granules); | |
203 | 296 | |
204 | - Ext.getCmp('granulesPanel').getStore().removeAll(); | |
205 | - Ext.getCmp('granulesPanel').getStore().add(granules); | |
297 | + onFirstPageBtnClicked: function() { | |
298 | + var limit = Ext.getCmp('rowsPerPageNf').value; | |
299 | + AmdaAction.epnTapGetGranules(service['id'], this.url, this.filter, this.select, limit, offset, this.fillGranules); | |
300 | + }, | |
301 | + | |
302 | + onPreviousPageBtnClicked: function() { | |
303 | + AmdaAction.epnTapGetGranules(service['id'], this.url, this.filter, this.select, limit, offset, this.fillGranules); | |
304 | + }, | |
305 | + | |
306 | + onNextPageBtnClicked: function() { | |
307 | + AmdaAction.epnTapGetGranules(service['id'], this.url, this.filter, this.select, limit, offset, this.fillGranules); | |
308 | + }, | |
309 | + | |
310 | + onLastPageBtnClicked: function() { | |
311 | + AmdaAction.epnTapGetGranules(service['id'], this.url, this.filter, this.select, limit, offset, this.fillGranules); | |
206 | 312 | }, |
207 | 313 | |
208 | 314 | onServiceSelected: function(service) { |
209 | - var select = Array(); | |
210 | - for (var i_s = 0 ; i_s < this.services.length ; i_s++) { | |
211 | - if (this.services[i_s]['schema'] === service['id']) { | |
212 | - var columns = this.services[i_s]['columns'].split(','); | |
213 | - for (var i_c=0 ; i_c<this.gp_grid.columns.length ; i_c++) { | |
214 | - if (columns.indexOf(this.gp_grid.columns[i_c].dataIndex) != -1) | |
215 | - select.push(this.gp_grid.columns[i_c].dataIndex) | |
216 | - } | |
217 | - var filter = Array( | |
218 | - this.dpt_cb.value !== 'all' ? this.dpt_cb.value : null, | |
219 | - this.tn_cb.value !== 'all' ? this.dpt_cb.value : null, | |
220 | - Ext.getCmp('startTimeDF').rawValue !== '' ? this.dpt_cb.value : null, | |
221 | - Ext.getCmp('stopTimeDF').rawValue !== '' ? this.dpt_cb.value : null); | |
222 | - break; | |
315 | + this.select = Array(); | |
316 | + if (! service['id'] in this.services) { | |
317 | + throw service['id'] + ' not found in the list of services.'; | |
318 | + return; | |
319 | + } | |
320 | + | |
321 | + var columns = this.services[service['id']]['columns'].split(','); | |
322 | + for (var i_c=0 ; i_c<this.gp_grid.columns.length ; i_c++) { | |
323 | + if (columns.indexOf(this.gp_grid.columns[i_c].dataIndex) != -1) { | |
324 | + this.select.push(this.gp_grid.columns[i_c].dataIndex); | |
223 | 325 | } |
224 | 326 | } |
225 | - console.log("Getting granules of " + service['id'] + "..."); | |
226 | - AmdaAction.epnTapGetGranules(service['id'], this.services[i_s]['accessurl'], filter, select, this.fillGranules); | |
327 | + this.filter = Array( | |
328 | + this.dataproduct_type !== 'all' ? this.dataproduct_type : null, // dataproduct type | |
329 | + this.tn_cb.value !== 'all' ? this.tn_cb.value : null, // target name | |
330 | + Ext.getCmp('startTimeDF').getRawValue() !== '' ? Ext.getCmp('startTimeDF').getRawValue() : null, // start time | |
331 | + Ext.getCmp('stopTimeDF').getRawValue() !== '' ? Ext.getCmp('stopTimeDF').getRawValue() : null // stop time | |
332 | + ); | |
333 | + | |
334 | + this.url = this.services[service['id']]['accessurl']; | |
335 | + this.db_name = service['id']; | |
336 | + var limit = Ext.getCmp('rowsPerPageNf').value; | |
337 | + | |
338 | + AmdaAction.epnTapGetGranules(this.db_name, this.url, this.filter, this.select, limit, 0, this.fillGranules); | |
339 | + AmdaAction.epnTapGetNbRows(this.db_name, this.url, this.filter, this.updatePage); | |
227 | 340 | }, |
228 | 341 | |
229 | 342 | onGranuleSelected: function(granule) { |
... | ... | @@ -232,6 +345,24 @@ Ext.define('amdaDesktop.EpnTapModule', { |
232 | 345 | |
233 | 346 | /** @class Module initialisation. */ |
234 | 347 | init: function() { |
348 | + this.metadata = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/metadata.json', 'application/json')); | |
349 | + this.services = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/services.json', 'application/json')); | |
350 | + this.dpt_dic = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/dataproduct_types.json', 'application/json')); | |
351 | + this.mimetype_dic = JSON.parse(loadTextFileAjaxSync('../../generic_data/EpnTapData/mimetypes.json', 'application/json')); | |
352 | + | |
353 | + console.log(Object.keys(this.metadata).length + ' dataproduct types rรฉpertoriรฉs.'); | |
354 | + | |
355 | + this.current_page = 0; | |
356 | + this.nb_rows = 0; | |
357 | + this.select = Array(); | |
358 | + this.filter = Array(); | |
359 | + this.url = ''; | |
360 | + this.db_name = ''; | |
361 | + | |
362 | + this.dataproduct_type = 'all'; | |
363 | + this.target_name = 'all'; | |
364 | + | |
365 | + | |
235 | 366 | this.launcher = { |
236 | 367 | text: this.title, |
237 | 368 | iconCls: this.icon, |
... | ... |
js/app/views/EpnTapUI.js
... | ... | @@ -25,7 +25,7 @@ Ext.create('Ext.data.Store', { |
25 | 25 | |
26 | 26 | Ext.create('Ext.data.Store', { |
27 | 27 | storeId: 'services_store', |
28 | - fields: ['id', 'nb_results'] | |
28 | + fields: ['id', 'nb_results', 'shortname', 'title', 'accessurl'] | |
29 | 29 | }); |
30 | 30 | |
31 | 31 | Ext.create('Ext.data.Store', { |
... | ... | @@ -33,19 +33,130 @@ Ext.create('Ext.data.Store', { |
33 | 33 | fields:['dataproduct_type', 'target_name', 'time_min', 'time_max', 'access_format', 'granule_uid', 'access_estsize', 'access_url', 'thumbnail_url'] |
34 | 34 | }); |
35 | 35 | |
36 | -var serviceFilterPanel = { | |
37 | - id: 'serviceFilterPanel', | |
38 | - xtype: 'panel', | |
39 | - region : 'north', | |
40 | - layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
41 | - defaults: { margin: 5 }, | |
42 | - items: [{ // Left part | |
43 | - xtype : 'container', | |
44 | - layout: 'form', | |
45 | - flex: 2, | |
46 | - items: [{ | |
36 | +Ext.define('amdaUI.EpnTapUI', { | |
37 | + extend: 'Ext.container.Container', | |
38 | + alias: 'widget.panelEpnTap', | |
39 | + | |
40 | + txt_render: function(val) { | |
41 | + return '<p style="white-space: normal;">' + val + '</p>'; | |
42 | + }, | |
43 | + link_render: function(val) { | |
44 | + return '<a href="' + val + '">data</a>'; | |
45 | + }, | |
46 | + img_render: function(val) { | |
47 | + return '<img src="' + val + '">'; | |
48 | + }, | |
49 | + dpt_render: function(val) { | |
50 | + var dpt_dic = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).dpt_dic; | |
51 | + return (val in dpt_dic) ? '<p style="white-space: normal;">' + dpt_dic[val] + '</p>' : '<em>' + val + '</em>'; | |
52 | + }, | |
53 | + format_render: function(val) { | |
54 | + var mimetype_dic = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).mimetype_dic; | |
55 | + return (val in mimetype_dic) ? mimetype_dic[val] : '<em style="white-space: normal;">' + val + '</em>'; | |
56 | + }, | |
57 | + size_render: function(val) { | |
58 | + var size = parseInt(val); | |
59 | + if (isNaN(size)) { | |
60 | + return ''; | |
61 | + } else if (size >= 1024*1024) { | |
62 | + return (size/(1024*1024)).toPrecision(3) + 'Go'; | |
63 | + } else if (size >= 1024) { | |
64 | + return (size/1024).toPrecision(3) + 'Mo'; | |
65 | + } else { | |
66 | + return size + 'Ko'; | |
67 | + } | |
68 | + }, | |
69 | + | |
70 | + constructor: function(config) { | |
71 | + this.init(config); | |
72 | + this.callParent(arguments); | |
73 | + }, | |
74 | + | |
75 | + | |
76 | + init: function(config) { | |
77 | + | |
78 | + // *** Grids *** | |
79 | + | |
80 | + this.servicesGrid = new Ext.grid.Panel({ | |
81 | + id: 'servicesGrid', | |
82 | + title: 'Services', | |
83 | + store: Ext.data.StoreManager.lookup('services_store'), | |
84 | + flex: 1, | |
85 | + columns: [ | |
86 | + {text: 'Name', dataIndex: 'id', flex: 3}, | |
87 | + {text: 'Results', dataIndex: 'nb_results', flex: 2} | |
88 | + ], | |
89 | + renderer: function(value, metadata,record) { return getExpandableImage(value, metadata,record); }, | |
90 | + listeners: { | |
91 | + 'cellclick': function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) { | |
92 | + myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onServiceSelected(record.data); | |
93 | + } | |
94 | + }, | |
95 | + renderTo: Ext.getBody() | |
96 | + }); | |
97 | + | |
98 | + var servicesGridView = this.servicesGrid.getView(); | |
99 | + this.serviceTooltip = new Ext.tip.ToolTip({ | |
100 | + id: 'serviceTooltip', | |
101 | + target: servicesGridView.el, | |
102 | + delegate: servicesGridView.itemSelector, | |
103 | + trackMouse: true, | |
104 | + listeners: { | |
105 | + beforeshow: function updateTipBody(tooltip) { | |
106 | + var service = servicesGridView.getRecord(tooltip.triggerElement); | |
107 | + var tt_content = '<h3>' + service.get('shortname') + '</h3>'; | |
108 | + tt_content += '<p>' + service.get('title') + '</p>'; | |
109 | + tt_content += '<p>' + service.get('accessurl') + '</p>'; | |
110 | + tooltip.update(tt_content); | |
111 | + } | |
112 | + }, | |
113 | + renderTo: Ext.getBody() | |
114 | + }); | |
115 | + | |
116 | + this.granulesGrid = new Ext.grid.Panel({ | |
117 | + id: 'granulesGrid', | |
118 | + title: 'Granules', | |
119 | + store: Ext.data.StoreManager.lookup('granules_store'), | |
120 | + flex: 5, | |
121 | + cls: 'epntap_granules', | |
122 | + columns: [ | |
123 | + { text: 'Type', dataIndex: 'dataproduct_type', flex: 2, renderer: this.dpt_render }, | |
124 | + { text: 'Target', dataIndex: 'target_name', flex: 2, renderer: this.txt_render }, | |
125 | + { text: 'Time min', dataIndex: 'time_min', flex: 2, renderer: this.txt_render }, | |
126 | + { text: 'Time max', dataIndex: 'time_max', flex: 2, renderer: this.txt_render }, | |
127 | + { text: 'Format', dataIndex: 'access_format', flex: 2, renderer: this.format_render }, | |
128 | + { text: 'uid', dataIndex: 'granule_uid', flex: 2, renderer: this.txt_render }, | |
129 | + { text: 'Size', dataIndex: 'access_estsize', flex: 1, renderer: this.size_render }, | |
130 | + { text: 'URL', dataIndex: 'access_url', flex: 1, renderer: this.link_render }, | |
131 | + { text: 'Thumb.', dataIndex: 'thumbnail_url', flex: 1, renderer: this.img_render} | |
132 | + ], | |
133 | + listeners: { | |
134 | + 'cellclick': function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) { | |
135 | + myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onGranuleSelected(record.data); | |
136 | + } | |
137 | + }, | |
138 | + renderTo: Ext.getBody() | |
139 | + }); | |
140 | + | |
141 | + var granulesGridView = this.granulesGrid.getView(); | |
142 | + this.granuleTooltip = new Ext.tip.ToolTip({ | |
143 | + id: 'granuleTooltip', | |
144 | + target: granulesGridView.el, | |
145 | + delegate: granulesGridView.itemSelector, | |
146 | + trackMouse: true, | |
147 | + listeners: { | |
148 | + beforeshow: function updateTipBody(tooltip) { | |
149 | + var thumb = granulesGridView.getRecord(tooltip.triggerElement).get('thumbnail_url'); | |
150 | + tooltip.update('<img src="' + thumb + '">'); | |
151 | + } | |
152 | + }, | |
153 | + renderTo: Ext.getBody() | |
154 | + }); | |
155 | + | |
156 | + // *** Service filter elements, left part *** | |
157 | + | |
158 | + this.productTypeCB = new Ext.form.field.ComboBox({ | |
47 | 159 | id: 'productTypeCB', |
48 | - xtype: 'combobox', | |
49 | 160 | fieldLabel: 'Product type', |
50 | 161 | store: Ext.data.StoreManager.lookup('productTypes_store'), |
51 | 162 | queryMode: 'local', |
... | ... | @@ -55,13 +166,12 @@ var serviceFilterPanel = { |
55 | 166 | editable: false, |
56 | 167 | listeners: { |
57 | 168 | scope: window, |
58 | - 'select': function(store, records) { | |
59 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onProductTypeCB(); | |
60 | - } | |
169 | + 'change': function(cb) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onProductTypeCB(cb.value); } | |
61 | 170 | } |
62 | - }, { | |
171 | + }); | |
172 | + | |
173 | + this.targetClassCB = new Ext.form.field.ComboBox({ | |
63 | 174 | id: 'targetClassCB', |
64 | - xtype: 'combobox', | |
65 | 175 | fieldLabel: 'Target class', |
66 | 176 | store: Ext.data.StoreManager.lookup('targetClasses_store'), |
67 | 177 | queryMode: 'local', |
... | ... | @@ -71,13 +181,12 @@ var serviceFilterPanel = { |
71 | 181 | editable: false, |
72 | 182 | listeners: { |
73 | 183 | scope: window, |
74 | - 'select': function(store, records) { | |
75 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onTargetClassCB(); | |
76 | - } | |
184 | + 'select': function(store, records) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onTargetClassCB(records[0]['internalId']); } | |
77 | 185 | } |
78 | - }, { | |
186 | + }); | |
187 | + | |
188 | + this.targetNameCB = new Ext.form.field.ComboBox({ | |
79 | 189 | id: 'targetNameCB', |
80 | - xtype: 'combobox', | |
81 | 190 | fieldLabel: 'Target name', |
82 | 191 | store: Ext.data.StoreManager.lookup('targetNames_store'), |
83 | 192 | queryMode: 'local', |
... | ... | @@ -91,149 +200,153 @@ var serviceFilterPanel = { |
91 | 200 | forceSelection: true, |
92 | 201 | listeners: { |
93 | 202 | scope: window, |
94 | - 'select': function(store, records) { | |
95 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onTargetNameCB(); | |
96 | - } | |
203 | + 'select': function(store, records) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onTargetNameCB(records[0]['internalId']);} | |
97 | 204 | } |
98 | - }] | |
99 | - }, { // Right part | |
100 | - xtype : 'container', | |
101 | - layout: 'form', | |
102 | - flex: 2, | |
103 | - items: [{ | |
205 | + }); | |
206 | + | |
207 | + // *** Service filter elements, right part *** | |
208 | + | |
209 | + this.startTimeDF = new Ext.form.field.Date({ | |
104 | 210 | id: 'startTimeDF', |
105 | - xtype: 'datefield', | |
106 | 211 | fieldLabel: 'Start time', |
107 | - name: 'start_time', | |
108 | - allowBlank:false | |
109 | - }, { | |
212 | + format: 'Y/m/d H:i:s', | |
213 | + width: 100 | |
214 | + }); | |
215 | + | |
216 | + this.stopTimeDF = new Ext.form.field.Date({ | |
110 | 217 | id: 'stopTimeDF', |
111 | - xtype: 'datefield', | |
112 | 218 | fieldLabel: 'Stop time', |
113 | - name: 'stop_time', | |
114 | - allowBlank:false | |
115 | - }, { | |
116 | - id: 'searchServicesBtn', | |
117 | - xtype: 'button', | |
118 | - text: 'Search services', | |
119 | - handler: function() { | |
120 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onSearchBtnClicked(); | |
219 | + format: 'Y/m/d H:i:s', | |
220 | + width: 100 | |
221 | + }); | |
222 | + | |
223 | + this.durationPanel = new Ext.panel.Panel({ | |
224 | + id: 'duration', | |
225 | + layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
226 | + border: false, | |
227 | + defaults: { width: 60, margin: '0, 5, 0, 5', xtype: 'numberfield'}, | |
228 | + items: [{ | |
229 | + id: 'days', | |
230 | + margin: '0, 5, 0, 0', | |
231 | + fieldLabel: 'Duration', | |
232 | + emptyText: 'Days', | |
233 | + width: 170 | |
234 | + }, { | |
235 | + id: 'hours', | |
236 | + emptyText: 'Hours' | |
237 | + }, { | |
238 | + id: 'minutes', | |
239 | + emptyText: 'Min.' | |
240 | + }, { | |
241 | + id: 'seconds', | |
242 | + emptyText: 'Sec.' | |
243 | + }] | |
244 | + }); | |
245 | + | |
246 | + this.rowPerPageNf = new Ext.form.field.Number({ | |
247 | + id: 'rowsPerPageNf', | |
248 | + fieldLabel: 'Rows per page', | |
249 | + margin: '4 0 4 0', | |
250 | + width: 160, | |
251 | + height: 20, | |
252 | + value: 20, | |
253 | + minValue: 1, | |
254 | + maxValue: 500, | |
255 | + listeners: { | |
256 | + 'change': function(newValue, oldValue) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).updateRowsPerPage(newValue); } | |
121 | 257 | } |
122 | - }] | |
123 | - }] | |
124 | -} | |
125 | - | |
126 | -var servicesPanel = { | |
127 | - id: 'servicesPanel', | |
128 | - xtype : 'grid', | |
129 | - title: 'Services', | |
130 | - multiSelect: true, | |
131 | - store: Ext.data.StoreManager.lookup('services_store'), | |
132 | - flex: 1, | |
133 | - columns: [ | |
134 | - {text: 'Name', dataIndex: 'id', flex: 1}, | |
135 | - {text: 'Results', dataIndex: 'nb_results', flex: 1} | |
136 | - ], | |
137 | - renderer: function(value, metadata,record) { | |
138 | - return getExpandableImage(value, metadata,record); | |
139 | - }, | |
140 | - listeners: { | |
141 | - 'cellclick': function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) { | |
142 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onServiceSelected(record.data); | |
143 | - } | |
144 | - } | |
145 | -} | |
146 | - | |
147 | -var txt_render = function(val) { return '<p style="white-space: normal;">' + val + '</p>'; }; | |
148 | -var link_render = function(val) { return '<a href="' + val + '">get</a>'; }; | |
149 | -var img_render = function(val) { return '<img src="' + val + '">' }; | |
150 | - | |
151 | -var granulesPanel = Ext.create('Ext.grid.Panel', { | |
152 | - id: 'granulesPanel', | |
153 | - title: 'Granules', | |
154 | - store: Ext.data.StoreManager.lookup('granules_store'), | |
155 | - flex: 3, | |
156 | - cls: 'epntap_granules', | |
157 | - columns: [ | |
158 | - { text: 'Type', dataIndex: 'dataproduct_type', flex: 1, renderer: txt_render }, | |
159 | - { text: 'Target', dataIndex: 'target_name', flex: 2, renderer: txt_render }, | |
160 | - { text: 'Time min', dataIndex: 'time_min', flex: 2, renderer: txt_render }, | |
161 | - { text: 'Time max', dataIndex: 'time_max', flex: 2, renderer: txt_render }, | |
162 | - { text: 'Format', dataIndex: 'access_format', flex: 2, renderer: txt_render }, | |
163 | - { text: 'uid', dataIndex: 'granule_uid', flex: 2, renderer: txt_render }, | |
164 | - { text: 'Size', dataIndex: 'access_estsize', flex: 2, renderer: txt_render }, | |
165 | - { text: 'URL', dataIndex: 'access_url', flex: 1, renderer: link_render }, | |
166 | - { text: 'Thumbnail', dataIndex: 'thumbnail_url', flex: 2, renderer: img_render} | |
167 | - ], | |
168 | - listeners: { | |
169 | - 'cellclick': function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) { | |
170 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onGranuleSelected(record.data); | |
171 | - } | |
172 | - }, | |
173 | - renderTo: Ext.getBody() | |
174 | -}); | |
258 | + }); | |
175 | 259 | |
176 | -var tooltip = Ext.create('Ext.tip.ToolTip', { | |
177 | - target: granulesPanel.getView().el, | |
178 | - delegate: granulesPanel.getView().itemSelector, | |
179 | - trackMouse: true, | |
180 | - renderTo: Ext.getBody(), | |
181 | - listeners: { | |
182 | - beforeshow: function updateTipBody(tip) { | |
183 | - var thumb = granulesPanel.getView().getRecord(tooltip.triggerElement).get('thumbnail_url'); | |
184 | - tooltip.update('<img src="' + thumb + '">'); | |
185 | - } | |
186 | - } | |
187 | -}); | |
260 | + // *** Panels *** | |
188 | 261 | |
189 | -var mainPanel = { | |
190 | - id: 'mainPanel', | |
191 | - xtype: 'panel', | |
192 | - region: 'center', | |
193 | - height: 350, | |
194 | - layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
195 | - items: [ servicesPanel, granulesPanel ], | |
196 | - listeners: { | |
197 | - afterrender: function() { | |
198 | - myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onWindowLoaded(); | |
199 | - } | |
200 | - } | |
201 | -} | |
202 | - | |
203 | -var infoPanel = { | |
204 | - id: 'infoPanel', | |
205 | - xtype : 'panel', | |
206 | - region: 'south', | |
207 | - title: 'Information', | |
208 | - collapsible: true, | |
209 | - flex: 0, | |
210 | - height: 100, | |
211 | - autoHide: false, | |
212 | - bodyStyle: 'padding: 5px', | |
213 | - iconCls: 'icon-information', | |
214 | - loader: { autoLoad: true, url: helpDir + 'epnTapHOWTO' } | |
215 | -} | |
262 | + this.pageSelectPanel = new Ext.panel.Panel({ | |
263 | + id: 'pageSelect', | |
264 | + border: false, | |
265 | + margin: '2 0 2 50', | |
266 | + defaults: { margin: '0 5 0 5', width: 20, xtype: 'button', disabled: true}, | |
267 | + items: [{ | |
268 | + xtype: 'label', | |
269 | + text: 'Page:' | |
270 | + }, { | |
271 | + id: 'previousPageBtn', | |
272 | + text: '|<', | |
273 | + handler: function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onFirstPageBtnClicked(); } | |
274 | + }, { | |
275 | + id: 'firstPageBtn', | |
276 | + text: '<', | |
277 | + handler: function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onPreviousPageBtnClicked(); } | |
278 | + }, { | |
279 | + xtype: 'label', | |
280 | + id: 'pageLb', | |
281 | + text: '0/0' | |
282 | + }, { | |
283 | + id: 'nextPageBtn', | |
284 | + text: '>', | |
285 | + handler: function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onNextPageBtnClicked(); } | |
286 | + }, { | |
287 | + id: 'lastPageBtn', | |
288 | + text: '>|', | |
289 | + handler: function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onLastPageBtnClicked(); } | |
290 | + }] | |
291 | + }); | |
216 | 292 | |
217 | -Ext.define('amdaUI.EpnTapUI', { | |
218 | - extend: 'Ext.container.Container', | |
219 | - alias: 'widget.panelEpnTap', | |
293 | + this.granulePagePanel = new Ext.panel.Panel({ | |
294 | + id: 'granulePagePanel', | |
295 | + layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
296 | + border: false, | |
297 | + items: [this.rowPerPageNf, this.pageSelectPanel] | |
298 | + }); | |
220 | 299 | |
221 | - constructor: function(config) { | |
222 | - this.init(config); | |
223 | - this.callParent(arguments); | |
224 | - }, | |
300 | + this.serviceFilterPanel = new Ext.panel.Panel({ | |
301 | + id: 'serviceFilterPanel', | |
302 | + region : 'north', | |
303 | + layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
304 | + defaults: { margin: 5 }, | |
305 | + items: [{ // Left part | |
306 | + xtype : 'container', | |
307 | + layout: 'form', | |
308 | + flex: 2, | |
309 | + items: [ this.productTypeCB, this.targetClassCB, this.targetNameCB ] | |
310 | + }, { // Right part | |
311 | + xtype : 'container', | |
312 | + layout: 'form', | |
313 | + flex: 2, | |
314 | + items: [ this.startTimeDF, this.stopTimeDF, this.durationPanel, this.granulePagePanel ] | |
315 | + }] | |
316 | + }); | |
317 | + | |
318 | + this.gridsPanel = new Ext.panel.Panel({ | |
319 | + id: 'gridsPanel', | |
320 | + region: 'center', | |
321 | + height: 350, | |
322 | + layout: { type: 'hbox', pack: 'start', align: 'stretch' }, | |
323 | + items: [ this.servicesGrid, this.granulesGrid ], | |
324 | + listeners: { | |
325 | + afterrender: function() { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.epntap.id).onWindowLoaded(); } | |
326 | + } | |
327 | + }); | |
328 | + | |
329 | + this.infoPanel = new Ext.panel.Panel({ | |
330 | + id: 'infoPanel', | |
331 | + region: 'south', | |
332 | + title: 'Information', | |
333 | + collapsible: true, | |
334 | + flex: 0, | |
335 | + height: 100, | |
336 | + autoHide: false, | |
337 | + bodyStyle: 'padding: 5px', | |
338 | + iconCls: 'icon-information', | |
339 | + loader: { autoLoad: true, url: helpDir + 'epnTapHOWTO' } | |
340 | + }); | |
225 | 341 | |
226 | - init : function(config) { | |
227 | 342 | var myConf = { |
228 | - width: 800, | |
343 | + width: 1000, | |
229 | 344 | height: 550, |
230 | 345 | layout: 'border', |
231 | - items: [ | |
232 | - serviceFilterPanel, | |
233 | - mainPanel, | |
234 | - infoPanel | |
235 | - ] | |
346 | + items: [ this.serviceFilterPanel, this.gridsPanel, this.infoPanel ] | |
236 | 347 | }; |
348 | + | |
237 | 349 | Ext.apply(this, Ext.apply(arguments, myConf)); |
350 | + | |
238 | 351 | } |
239 | 352 | }); |
... | ... |