@@ -57,6 +57,7 @@ static enum IngestStatsItems implements StatsItemEnum {
5757 LicenseFileStats (StatsItem .makeEnumStatsItem (FileStats .class , "License File Status" ).setWidth (120 )),
5858 ContentsFileStats (StatsItem .makeEnumStatsItem (MetaStats .class , "Contents File Status" ).setWidth (120 )),
5959 DublinCoreFileStats (StatsItem .makeEnumStatsItem (MetaStats .class , "Dublin Core File Status" ).setWidth (120 )),
60+ CollectionsFileStats (StatsItem .makeEnumStatsItem (MetaStats .class , "Collections File Status" ).setWidth (120 )),
6061 OtherSchemas (StatsItem .makeStringStatsItem ("Other Schemas" )),
6162 OtherMetadataFileStats (StatsItem .makeEnumStatsItem (MetaStats .class , "Other Metadata File Status" ).setWidth (120 )),
6263 Message (StatsItem .makeStringStatsItem ("Message" , 300 ).setExport (false ))
@@ -129,12 +130,16 @@ private enum status {INIT,PASS,WARN,FAIL}
129130 NumberFormat nf ;
130131 MetadataRegPropFile metadataPropFile ;
131132
132- public static final String REUSABLE_THUMBNAIL = "Reusable Thumbnail" ;
133+ public static final String COLLECTIONS = "collections" ;
134+ public static final String CONTENTS = "contents" ;
135+ public static final String DUBLINCORE = "dublin_core.xml" ;
136+
137+ public static final String REUSABLE_THUMBNAIL = "Reusable Thumbnail" ;
133138 public static final String REUSABLE_LICENSE = "Reusable License" ;
134139 public static final String P_AUTONAME = "Add User and Date to Ingest Folder" ;
135140 public static final String P_ZIP = "Create Zip File of Ingest Folders" ;
136141 public static enum FIXED {
137- FOLDER (0 ), ITEM (1 ), THUMB (2 ), LICENSE (3 );
142+ FOLDER (0 ), ITEM (1 ), THUMB (2 ), LICENSE (3 ), COLLECTIONS ( 4 ) ;
138143 int index ;
139144 FIXED (int i ) {index = i ;}
140145 }
@@ -169,15 +174,16 @@ public String getDescription() {
169174 "\t 2) Item file name - required, a file with that name must exist relative to the imported spreadsheet\n " +
170175 "\t 3) Thumbnail file name - optional, file must exist if present\n " +
171176 "\t 4) License file name - optional, file must exist if present\n " +
172- "\t Addition columns should have a dublin core field name in their header. Columns without a 'dc.' header will be ignored\n " +
177+ "\t 5*) Collections (*if column header is \" collections\" ) - optional, if non blank, a collections file will be written.\n " +
178+ "Addition columns should have a dublin core field name in their header. Columns without a 'dc.' header will be ignored\n " +
173179 validateRowDescription ();
174180 }
175181 public String getShortName () {
176182 return "Ingest Folder" ;
177183 }
178184
179185 public void createMetadataFile (File dir , Stats stats , Vector <String > cols , String schema ) {
180- String filename = "dublin_core.xml" ;
186+ String filename = DUBLINCORE ;
181187 IngestStatsItems index = IngestStatsItems .DublinCoreFileStats ;
182188
183189 if (!schema .equals ("dc" )) {
@@ -240,7 +246,27 @@ public void createItem(Stats stats, File selectedFile, Vector<String> cols) {
240246 createMetadataFile (dir , stats , cols , schema );
241247 }
242248
243- File f = new File (dir , "contents" );
249+ if (hasCollections ) {
250+ String collections = cols .get (FIXED .COLLECTIONS .index );
251+ if (!collections .isEmpty ()) {
252+ File cf = new File (dir , COLLECTIONS );
253+ if (cf .exists ()) {
254+ stats .setVal (IngestStatsItems .CollectionsFileStats , MetaStats .OVERWRITTEN );
255+ } else {
256+ stats .setVal (IngestStatsItems .CollectionsFileStats , MetaStats .CREATED );
257+ }
258+
259+ try (BufferedWriter bw = new BufferedWriter (new FileWriter (cf ));) {
260+ bw .write (collections );
261+ } catch (IOException e ) {
262+ stats .setVal (IngestStatsItems .Status , status .FAIL );
263+ stats .setVal (IngestStatsItems .CollectionsFileStats , MetaStats .ERROR );
264+ stats .setVal (IngestStatsItems .Message , e .getMessage ());
265+ }
266+ }
267+ }
268+
269+ File f = new File (dir , CONTENTS );
244270 if (f .exists ()) {
245271 stats .setVal (IngestStatsItems .ContentsFileStats , MetaStats .OVERWRITTEN );
246272 } else {
@@ -279,6 +305,7 @@ public void createItem(Stats stats, File selectedFile, Vector<String> cols) {
279305 stats .setVal (IngestStatsItems .ContentsFileStats , MetaStats .ERROR );
280306 stats .setVal (IngestStatsItems .Message , e1 .getMessage ());
281307 }
308+
282309 }
283310
284311
@@ -330,7 +357,7 @@ public boolean accept(File dir, String name) {
330357 return new File (parent , name );
331358 }
332359
333-
360+ public boolean hasCollections = false ;
334361 public ActionResult importFile (File selectedFile ) throws IOException {
335362 currentIngestDir = getCurrentIngestDir (selectedFile );
336363 Timer timer = new Timer ();
@@ -349,6 +376,14 @@ public ActionResult importFile(File selectedFile) throws IOException {
349376 addColumn (new column (FIXED .THUMB .index , InventoryStatsItems .ThumbFile .si ().header , true ));
350377 addColumn (new column (FIXED .LICENSE .index , InventoryStatsItems .LicenseFile .si ().header , true ));
351378
379+ if (colheads .size () > FIXED .COLLECTIONS .index ) {
380+ hasCollections = false ;
381+ if (colheads .get (FIXED .COLLECTIONS .index ).equals (COLLECTIONS )) {
382+ addColumn (new column (FIXED .COLLECTIONS .index , COLLECTIONS , true ));
383+ hasCollections = true ;
384+ }
385+ }
386+
352387 for (int i =colHeaderDefs .size (); i < colheads .size (); i ++) {
353388 String colh = colheads .get (i );
354389 addColumn (new column (i , colh ));
0 commit comments