Sha256: 0d79e4aff82e9dd8eb31f1b107b966515c0c3b32808f72d709a836d0f60fec5f

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

module FedoraMigrate
  class RelsExtDatastreamMover < Mover
    RELS_EXT_DATASTREAM = "RELS-EXT".freeze

    def migrate
      migrate_statements
      target.ldp_source.update
      update_index
      super
    end

    def post_initialize
      @target ||= ActiveFedora::Base.find(id_component)
    rescue ActiveFedora::ObjectNotFoundError
      raise FedoraMigrate::Errors::MigrationError, "Target object was not found in Fedora 4. Did you migrate it?"
    end

    private

      def migrate_statements
        statements.each do |statement|
          triple = [target.rdf_subject, migrate_predicate(statement.predicate), migrate_object(statement.object)]
          target.ldp_source.graph << triple
          report << triple.join("--")
        end
      end

      def update_index
        target.reload
        target.update_index
      end

      def graph
        @graph ||= RDF::Graph.new { |g| g.from_rdfxml(source.datastreams[RELS_EXT_DATASTREAM].content) }
      end

      # Override this if any predicate transformation is needed
      def migrate_predicate(fc3_uri)
        fc3_uri
      end

      def migrate_object(fc3_uri)
        RDF::URI.new(ActiveFedora::Base.id_to_uri(id_component(fc3_uri)))
      end

      def missing_object?(statement)
        return false if ActiveFedora::Base.exists?(id_component(statement.object))
        report << "could not migrate relationship #{statement.predicate} because #{statement.object} doesn't exist in Fedora 4"
        true
      end

      # All the graph statements except hasModel and those with missing objects
      def statements
        graph.statements.reject { |stmt| stmt.predicate == ActiveFedora::RDF::Fcrepo::Model.hasModel || missing_object?(stmt) }
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fedora-migrate-0.5.0 lib/fedora_migrate/rels_ext_datastream_mover.rb
fedora-migrate-0.4.0 lib/fedora_migrate/rels_ext_datastream_mover.rb