11package edu .harvard .iq .dataverse .harvest .client ;
22
3+ import static java .util .logging .Level .INFO ;
4+ import static java .util .logging .Level .SEVERE ;
5+ import static java .util .logging .Logger .getLogger ;
6+ import static org .apache .commons .lang3 .StringUtils .isBlank ;
7+
38import java .io .File ;
49import java .io .IOException ;
510import java .text .SimpleDateFormat ;
611import java .util .Date ;
712import java .util .HashMap ;
813import java .util .Map ;
914import java .util .logging .FileHandler ;
10- import java .util .logging .Level ;
1115import java .util .logging .Logger ;
1216import java .util .logging .SimpleFormatter ;
1317
1923import javax .persistence .EntityManager ;
2024import javax .persistence .PersistenceContext ;
2125
22- import org .apache .commons .lang3 .StringUtils ;
23-
2426import com .google .gson .Gson ;
2527
2628import edu .harvard .iq .dataverse .engine .command .DataverseRequest ;
@@ -46,7 +48,7 @@ public class HarvesterServiceBean {
4648
4749 private final Map <HarvestType , Harvester <?>> harvesterMap = new HashMap <>();
4850
49- private static final Logger logger = Logger . getLogger ("edu.harvard.iq.dataverse.harvest.client.HarvesterServiceBean" );
51+ private static final Logger logger = getLogger (HarvesterServiceBean . class . getName () );
5052 private static final SimpleDateFormat logFormatter = new SimpleDateFormat ("yyyy-MM-dd'T'HH-mm-ss" );
5153
5254 public HarvesterServiceBean () {
@@ -57,103 +59,107 @@ public HarvesterServiceBean() {
5759
5860 @ PostConstruct
5961 public void postConstruct () {
60- harvesterMap .put (oaiHarvester .harvestType (), oaiHarvester );
61- harvesterMap .put (dataciteDOIHarvester .harvestType (), dataciteDOIHarvester );
62+ this . harvesterMap .put (this . oaiHarvester .harvestType (), this . oaiHarvester );
63+ this . harvesterMap .put (this . dataciteDOIHarvester .harvestType (), this . dataciteDOIHarvester );
6264 }
6365
6466 /**
6567 * Called to run an "On Demand" harvest.
6668 */
6769 @ Asynchronous
68- public void doAsyncHarvest (DataverseRequest dataverseRequest ,
69- HarvestingClient harvestingClient , HarvesterParams params ) {
70+ public void doAsyncHarvest (final DataverseRequest request ,
71+ final HarvestingClient client , final HarvesterParams params ) {
7072
7173 try {
72- doHarvest (dataverseRequest , harvestingClient .getId (), params );
73- } catch (Exception e ) {
74+ doHarvest (request , client .getId (), params );
75+ } catch (final Exception e ) {
7476 logger .info ("Caught exception running an asynchronous harvest (dataverse \" " +
75- harvestingClient .getName () + "\" )" );
77+ client .getName () + "\" )" );
7678 }
7779 }
7880
7981 /**
8082 * Run a harvest for an individual harvesting Dataverse
8183 *
82- * @param dataverseRequest
84+ * @param request
8385 * @param harvestingClientId
8486 * @throws IOException
8587 */
86- public <T extends HarvesterParams > void doHarvest (DataverseRequest dataverseRequest ,
87- Long harvestingClientId , HarvesterParams params ) throws IOException {
88- HarvestingClient client = harvestingClientService .find (harvestingClientId );
89-
88+ public <T extends HarvesterParams > void doHarvest (final DataverseRequest request ,
89+ final Long harvestingClientId , final HarvesterParams params )
90+ throws IOException {
91+
92+ final HarvestingClient client = harvestingClientService .find (harvestingClientId );
9093 if (client == null ) {
9194 throw new IOException ("No such harvesting client: id=" + harvestingClientId );
9295 }
9396
94- Dataverse harvestingDataverse = client .getDataverse ();
97+ final Dataverse harvestingDataverse = client .getDataverse ();
9598
96- String logTimestamp = logFormatter .format (new Date ());
97- Logger hdLogger = Logger .getLogger ("edu.harvard.iq.dataverse.harvest.client.HarvesterServiceBean." + harvestingDataverse .getAlias () + logTimestamp );
98- String logFileName = "../logs" + File .separator + "harvest_" + client .getName () + '_' + logTimestamp + ".log" ;
99- FileHandler fileHandler = new FileHandler (logFileName );
99+ final String logTimestamp = logFormatter .format (new Date ());
100+ Logger hdLogger = getLogger (HarvesterServiceBean .class .getName () + '.' +
101+ harvestingDataverse .getAlias () + logTimestamp );
102+ final String logFileName = "../logs" + File .separator + "harvest_" +
103+ client .getName () + '_' + logTimestamp + ".log" ;
104+ final FileHandler fileHandler = new FileHandler (logFileName );
100105 fileHandler .setFormatter (new SimpleFormatter ());
101106 hdLogger .setUseParentHandlers (false );
102107 hdLogger .addHandler (fileHandler );
103108
104- Date harvestStartTime = new Date ();
105-
106109 try {
107- boolean harvestingNow = client .isHarvestingNow ();
108-
109- if (harvestingNow ) {
110- hdLogger .log (Level .SEVERE , "Cannot begin harvesting, Dataverse " + harvestingDataverse .getName () + " is currently being harvested." );
110+ if (client .isHarvestingNow ()) {
111+ hdLogger .log (SEVERE , "Cannot begin harvesting, Dataverse " +
112+ harvestingDataverse .getName () + " is currently being harvested." );
111113
112114 } else {
113- harvestingClientService .resetHarvestInProgress (harvestingClientId );
114- harvestingClientService .setHarvestInProgress (harvestingClientId , harvestStartTime );
115-
116- Harvester <T > harvester = resolveHarvester (client );
117- HarvesterResult result = harvester .harvest (dataverseRequest , client , hdLogger , params .getParams (harvester .getParamsClass ()));
118-
119- harvestingClientService .setHarvestSuccess (harvestingClientId , new Date (), result .getNumHarvested (), result .getNumFailed (), result .getNumDeleted ());
120- hdLogger .log (Level .INFO , "COMPLETED HARVEST, server=" + client .getArchiveUrl () + ", metadataPrefix=" + client .getMetadataPrefix ());
121- hdLogger .log (Level .INFO , "Datasets created/updated: " + result .getNumHarvested () + ", datasets deleted: " + result .getNumDeleted () + ", datasets failed: " + result .getNumFailed ());
115+ this .harvestingClientService .resetHarvestInProgress (harvestingClientId );
116+ this .harvestingClientService .setHarvestInProgress (harvestingClientId , new Date ());
117+
118+ final Harvester <T > harvester = resolveHarvester (client );
119+ final HarvesterResult result = harvester .harvest (request ,
120+ client , hdLogger , params .getParams (harvester .getParamsClass ()));
121+
122+ this .harvestingClientService .setHarvestSuccess (harvestingClientId ,
123+ new Date (), result .getNumHarvested (), result .getNumFailed (),
124+ result .getNumDeleted ());
125+ hdLogger .log (INFO , "COMPLETED HARVEST, server=" + client .getArchiveUrl () +
126+ ", metadataPrefix=" + client .getMetadataPrefix ());
127+ hdLogger .log (INFO , "Datasets created/updated: " + result .getNumHarvested () +
128+ ", datasets deleted: " + result .getNumDeleted () +
129+ ", datasets failed: " + result .getNumFailed ());
122130 }
123131 } catch (Throwable e ) {
124- String message = "Exception processing harvest, server= " +
132+ final String message = "Exception processing harvest, server= " +
125133 client .getHarvestingUrl () + ",format=" +
126134 client .getMetadataPrefix () + ' ' + e .getClass ().getName ();
127- hdLogger .log (Level . SEVERE , message , e );
135+ hdLogger .log (SEVERE , message , e );
128136 //logException(e, hdLogger);
129- hdLogger .log (Level . INFO , "HARVEST NOT COMPLETED DUE TO UNEXPECTED ERROR." );
137+ hdLogger .log (INFO , "HARVEST NOT COMPLETED DUE TO UNEXPECTED ERROR." );
130138 // TODO:
131139 // even though this harvesting run failed, we may have had successfully
132140 // processed some number of datasets, by the time the exception was thrown.
133141 // We should record that number too. And the number of the datasets that
134142 // had failed, that we may have counted. -- L.A. 4.4
135- harvestingClientService .setHarvestFailure (harvestingClientId , new Date ());
143+ this . harvestingClientService .setHarvestFailure (harvestingClientId , new Date ());
136144
137145 } finally {
138- harvestingClientService .resetHarvestInProgress (harvestingClientId );
146+ this . harvestingClientService .resetHarvestInProgress (harvestingClientId );
139147 fileHandler .close ();
140148 hdLogger .removeHandler (fileHandler );
141149 }
142150 }
143151
144- public HarvesterParams parseParams (HarvestingClient client , String paramsJson ) {
145- if (StringUtils .isBlank (paramsJson )) {
146- return HarvesterParams .empty ();
147- }
148-
149- return new Gson ().fromJson (paramsJson , resolveHarvester (client ).getParamsClass ());
152+ public HarvesterParams parseParams (final HarvestingClient client , final String paramsJson ) {
153+ return isBlank (paramsJson )
154+ ? HarvesterParams .empty ()
155+ : new Gson ().fromJson (paramsJson , resolveHarvester (client ).getParamsClass ());
150156 }
151157
152158 // -------------------- PRIVATE --------------------
153159
154160 @ SuppressWarnings ("unchecked" )
155- private <T extends HarvesterParams > Harvester <T > resolveHarvester (HarvestingClient client ) {
156- Harvester <?> harvester = harvesterMap .get (client .getHarvestType ());
161+ private <T extends HarvesterParams > Harvester <T > resolveHarvester (final HarvestingClient client ) {
162+ final Harvester <?> harvester = this . harvesterMap .get (client .getHarvestType ());
157163 if (harvester == null ) {
158164 throw new IllegalStateException ("Unsupported harvest type" );
159165 }
0 commit comments