Changeset 1906


Ignore:
Timestamp:
04/24/12 18:29:12 (12 years ago)
Author:
oschonef
Message:
  • optionally store header properties (hardcoded-switch)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • OAIHarvester/trunk/OAIHarvester/src/test/java/eu/clarin/cmdi/oai/harvester/HarvesterTest.java

    r1173 r1906  
    88import java.util.Date;
    99import java.util.List;
     10import java.util.Properties;
    1011import java.util.zip.ZipEntry;
    1112import java.util.zip.ZipException;
     
    1718import javax.xml.stream.XMLStreamWriter;
    1819
     20import org.joda.time.DateTime;
     21import org.joda.time.format.DateTimeFormatter;
     22import org.joda.time.format.ISODateTimeFormat;
     23
    1924import eu.clarin.cmdi.oai.harvester.impl.SimpleHarvester;
    2025import eu.clarin.cmdi.oai.harvester.util.XMLStreamCopier;
     
    2429    private static XMLOutputFactory factory =
    2530        XMLOutputFactory.newInstance();
     31    private static final DateTimeFormatter fmt =
     32            ISODateTimeFormat.basicDateTimeNoMillis().withZoneUTC();
    2633
    2734    private static class MyHarvestHandler extends HarvestHandlerAdapter {
    2835        private ZipOutputStream output;
     36        private boolean saveHeader;
    2937        private int reqNum;
    3038        private String prefix;
    3139        private byte[] buffer = new byte[8192];
    3240
    33         public MyHarvestHandler(File file) {
     41        public MyHarvestHandler(File file, boolean saveHeader) {
    3442            try {
     43                this.saveHeader = saveHeader;
    3544                FileOutputStream fos = new FileOutputStream(file);
    3645                output = new ZipOutputStream(fos);
     
    130139                System.err.println("    Sets: " + header.getSets());
    131140            }
    132             String filename = header.getIdentifier();
    133             filename = replaceBadChars(filename) + ".xml";
    134             if (prefix != null) {
    135                 filename = replaceBadChars(prefix) + "/" + filename;
    136             }
    137141            try {
    138                 ZipEntry entry = new ZipEntry(filename);
    139                 entry.setTime(header.getDatestamp().getTime());
    140                 output.putNextEntry(entry);
    141                 XMLStreamWriter writer =
    142                     factory.createXMLStreamWriter(output);
    143                 XMLStreamCopier.copy(reader, writer);
    144                 writer.flush();
    145                 writer.close();
    146                 output.closeEntry();
    147                 output.flush();
    148                 reader.close();
     142                if (!header.isDeleted()) {
     143                    String filename = makeFileName(header.getIdentifier(),
     144                            prefix, "xml");
     145                    ZipEntry entry = new ZipEntry(filename);
     146                    entry.setTime(header.getDatestamp().getTime());
     147                    output.putNextEntry(entry);
     148                    XMLStreamWriter writer =
     149                            factory.createXMLStreamWriter(output);
     150                    XMLStreamCopier.copy(reader, writer);
     151                    writer.flush();
     152                    writer.close();
     153                    output.closeEntry();
     154                    output.flush();
     155                    reader.close();
     156                }
     157
     158                if (saveHeader) {
     159                    String filename = makeFileName(header.getIdentifier(),
     160                            prefix, "oai");
     161                    ZipEntry entry = new ZipEntry(filename);
     162                    entry.setTime(header.getDatestamp().getTime());
     163                    output.putNextEntry(entry);
     164                    Properties props = new Properties();
     165                    props.put("datestamp",
     166                            fmt.print(new DateTime(header.getDatestamp())));
     167                    if (header.isDeleted()) {
     168                        props.put("isDeleted", "true");
     169                    }
     170                    if (header.getSets() != null) {
     171                        StringBuilder sb = new StringBuilder();
     172                        for (String set : header.getSets()) {
     173                            if (sb.length() > 0) {
     174                                sb.append(", ");
     175                            }
     176                            sb.append(set);
     177                        }
     178                        props.put("sets", sb.toString());
     179                    }
     180                    props.store(output, null);
     181                    output.closeEntry();
     182                    output.flush();
     183                }
    149184            } catch (Exception e) {
    150185                e.printStackTrace();
     
    180215        }
    181216
    182         private String replaceBadChars(String s) {
    183             return s.replace(':', '_').replace('.', '_').replace('\\', '_')
    184                     .replace('/', '_');
     217        private static String makeFileName(String identifier, String prefix,
     218                String extension) {
     219            StringBuilder sb = new StringBuilder();
     220            if (prefix != null) {
     221                sanitizedAppend(sb, prefix);
     222                sb.append('/');
     223            }
     224            sanitizedAppend(sb, identifier);
     225            sb.append('.');
     226            sb.append(extension);
     227            return sb.toString();
     228        }
     229
     230        private static void sanitizedAppend(StringBuilder sb, String s) {
     231            for (int i = 0; i < s.length(); i++ ) {
     232                char ch = s.charAt(i);
     233                switch (ch) {
     234                case ':':
     235                    /* FALL-THROUGH */
     236                case '.':
     237                    /* FALL-THROUGH */
     238                case '/':
     239                    /* FALL-THROUGH */
     240                case '\\':
     241                    sb.append("_");
     242                    break;
     243                default:
     244                    sb.append(ch);
     245                }
     246            }
    185247        }
    186248    };
    187    
     249
    188250    public void run(String[] args) {
    189251        if (args.length < 2) {
     
    192254        }
    193255        final String repos = args[0];
    194         MyHarvestHandler handler = new MyHarvestHandler(new File(args[1]));
     256        MyHarvestHandler handler =
     257                new MyHarvestHandler(new File(args[1]), false);
    195258
    196259        Harvester harvester = SimpleHarvester.newInstance();
Note: See TracChangeset for help on using the changeset viewer.