@@ -318,16 +318,72 @@ public void exportAllFormats(Dataset dataset) throws ExportException {
318318 }
319319
320320 }
321+
322+ public void exportFormats (Dataset dataset , List <String > formatNames ) throws ExportException {
323+ try {
324+ if (formatNames == null ) {
325+ clearAllCachedFormats (dataset );
326+ } else {
327+ clearCachedFormats (dataset , formatNames );
328+ }
329+ } catch (IOException ex ) {
330+ Logger .getLogger (ExportService .class .getName ()).log (Level .SEVERE , null , ex );
331+ }
321332
322- public void clearAllCachedFormats (Dataset dataset ) throws IOException {
323333 try {
334+ DatasetVersion releasedVersion = dataset .getReleasedVersion ();
335+ if (releasedVersion == null ) {
336+ throw new ExportException ("No released version for dataset " + dataset .getGlobalId ().toString ());
337+ }
338+ InternalExportDataProvider dataProvider = new InternalExportDataProvider (releasedVersion );
324339
325340 for (Exporter e : exporterMap .values ()) {
326341 String formatName = e .getFormatName ();
327- clearCachedExport (dataset , formatName );
342+ if (formatNames == null || formatNames .contains (formatName )) {
343+ if (e .getPrerequisiteFormatName ().isPresent ()) {
344+ String prereqFormatName = e .getPrerequisiteFormatName ().get ();
345+ try (InputStream preReqStream = getExport (dataset .getReleasedVersion (), prereqFormatName )) {
346+ dataProvider .setPrerequisiteInputStream (preReqStream );
347+ cacheExport (dataset , dataProvider , formatName , e );
348+ dataProvider .setPrerequisiteInputStream (null );
349+ } catch (IOException ioe ) {
350+ throw new ExportException ("Could not get prerequisite " + e .getPrerequisiteFormatName () + " to create " + formatName + "export for dataset " + dataset .getId (), ioe );
351+ }
352+ } else {
353+ cacheExport (dataset , dataProvider , formatName , e );
354+ }
355+ }
328356 }
357+ // Finally, if we have been able to successfully export in all available
358+ // formats, we'll increment the "last exported" time stamp:
359+ dataset .setLastExportTime (new Timestamp (new Date ().getTime ()));
360+
361+ } catch (ServiceConfigurationError serviceError ) {
362+ throw new ExportException ("Service configuration error during export. " + serviceError .getMessage ());
363+ } catch (RuntimeException e ) {
364+ logger .log (Level .FINE , e .getMessage (), e );
365+ throw new ExportException (
366+ "Unknown runtime exception exporting metadata. " + (e .getMessage () == null ? "" : e .getMessage ()));
367+ }
368+ }
329369
330- dataset .setLastExportTime (null );
370+ public void clearAllCachedFormats (Dataset dataset ) throws IOException {
371+ List <String > formatNames = new ArrayList <>();
372+
373+ for (Exporter e : exporterMap .values ()) {
374+ String formatName = e .getFormatName ();
375+ formatNames .add (formatName );
376+ clearCachedExport (dataset , formatName );
377+ }
378+ clearCachedFormats (dataset , formatNames );
379+ dataset .setLastExportTime (null );
380+ }
381+
382+ public void clearCachedFormats (Dataset dataset , List <String > formatNames ) throws IOException {
383+ try {
384+ for (String formatName : formatNames ) {
385+ clearCachedExport (dataset , formatName );
386+ }
331387 } catch (IOException ex ) {
332388 // not fatal
333389 }
0 commit comments