protected static DcsEntity fromSolr(SolrDocument doc) throws IOException {
    String type = get(doc, EntityField.TYPE);
    if (type == null) {
      throw new IOException("Missing field: " + EntityField.TYPE.solrName());
    }

    if (type.equals(EntityTypeValue.COLLECTION.solrValue())) {
      return getCollection(doc);
    } else if (type.equals(EntityTypeValue.DELIVERABLE_UNIT.solrValue())) {
      return getDeliverableUnit(doc);
    } else if (type.equals(EntityTypeValue.FILE.solrValue())) {
      return getFile(doc);
    } else if (type.equals(EntityTypeValue.MANIFESTATION.solrValue())) {
      return getManifestation(doc);
    } else if (type.equals(EntityTypeValue.EVENT.solrValue())) {
      return getEvent(doc);
    } else {
      throw new IOException("Unknown type: " + type);
    }
  }
  private static SolrInputDocument toSolr(SeadFile file, ArchiveStore store) throws IOException {
    SolrInputDocument doc = new SolrInputDocument();
    add(doc, EntityField.ID, file.getId());
    add(doc, EntityField.TYPE, EntityTypeValue.FILE.solrValue());

    add(doc, FileField.NAME, file.getName());
    add(doc, FileField.SOURCE, file.getSource());
    add(doc, FileField.SIZE, file.getSizeBytes());

    if (file.getMetadataUpdateDate() == null || file.getMetadataUpdateDate().length() == 0)
      add(
          doc,
          SeadSolrField.EntityField.MDUPDATE_DATE,
          toIso8601(now())); // file.getMetadataUpdateDate());
    else add(doc, SeadSolrField.EntityField.MDUPDATE_DATE, file.getMetadataUpdateDate());

    if (file.getValid() != null) {
      doc.addField(FileField.VALID.solrName(), file.getValid());
    }

    doc.addField(FileField.EXTANT.solrName(), file.isExtant());

    addFixitySet(doc, file.getFixity());
    addFormatSet(doc, file.getFormats());
    addResourceIdentifierSet(doc, file.getAlternateIds());

    SeadDataLocation primaryDataLocation = new SeadDataLocation();
    primaryDataLocation.setLocation(file.getPrimaryLocation().getLocation());
    primaryDataLocation.setName(file.getPrimaryLocation().getName());
    primaryDataLocation.setType(file.getPrimaryLocation().getType());
    addPrimaryDataLocation(doc, primaryDataLocation);
    addSecondaryDataLocationSet(doc, file.getSecondaryDataLocations());

    addMetadataSet(doc, file.getMetadata());
    addMetadataRefSet(doc, file.getMetadataRef(), EntityField.METADATA_REF, store);

    return doc;
  }