ucsdlib/damspas

View on GitHub
lib/dams/dams_helper.rb

Summary

Maintainability
F
5 days
Test Coverage
require 'active_support/inflector'

module Dams
    module DamsHelper
        
      ## Title ######################################################################
      def subtitle
        title[0] ? title[0].subtitle : []
      end
      def subtitle=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            title.build if title[0] == nil
            title[0].subtitle = val
        end
      end

      def titleValue
        title.first.value if title.first
      end
      def titleValue=(s)
        title.build if title.first.nil?
        if(!s.nil? && s.length > 0)
          title.first.value = s
        end
      end
      def subtitle
        title.first.subtitle if title.first
      end
      def subtitle=(s)
        title.build if title.first.nil?
        title.first.subtitle = s
      end
      def titlePartName
        title.first != nil ? title.first.partName : nil
      end
      def titlePartName=(s)
        title.build if title.first.nil?
        title.first.partName = s
      end
      def titlePartNumber
        title.first != nil ? title.first.partNumber : nil
      end
      def titlePartNumber=(s)
        title.build if title.first.nil?
        title.first.partNumber = s
      end  

       def titleNonSort
        title.first != nil ? title.first.nonSort : nil
      end
      def titleNonSort=(s)
        title.build if title.first.nil?
        title.first.nonSort = s
      end

      def titleVariant
        title.first != nil ? title.first.variant : nil
      end
      def titleVariant=(s)
        title.build if title.first.nil?
        title.first.variant = s
      end
      
      def titleTranslationVariant
        title.first != nil ? title.first.translationVariant : nil
      end
      def titleTranslationVariant=(s)
        title.build if title.first.nil?
        title.first.translationVariant = s
      end 
      
      def titleAbbreviationVariant
        title.first != nil ? title.first.abbreviationVariant : nil
      end
      def titleAbbreviationVariant=(s)
        title.build if title.first.nil?
        title.first.abbreviationVariant = s
      end 
      
      def titleAcronymVariant
        title.first != nil ? title.first.acronymVariant : nil
      end
      def titleAcronymVariant=(s)
        title.build if title.first.nil?
        title.first.acronymVariant = s
      end 

      def titleExpansionVariant
        title.first != nil ? title.first.expansionVariant : nil
      end
      def titleExpansionVariant=(s)
        title.build if title.first.nil?
        title.first.expansionVariant = s
      end 
                     
      ## Subject ######################################################################
      #simple subject
      def subjectType
        @subType
      end
      def subjectType=(val)
        @subType = Array.new
        i = 0
        val.each do |v| 
            if(!v.nil? && v.length > 0)
                @subType << v     
            end
            i+=1
        end
      end

      def simpleSubjectURI
        if @simpleSubURI != nil
          @simpleSubURI
        end
      end 
      def simpleSubjectURI=(val)
        @simpleSubURI = Array.new
        val.each do |v|
            uri = v
            if(!v.include? Rails.configuration.id_namespace)
                uri = "#{Rails.configuration.id_namespace}#{v}"
            end
            if(!v.nil? && v.length > 0)
                @simpleSubURI << RDF::Resource.new(uri)     
            end
        end
      end


      ## complex subject  ###############################################################
        
      def subjectURI=(val)
        @subURI = Array.new
        @array_subject = Array.new
        val.each do |v|
            uri = v
            if(!v.include? Rails.configuration.id_namespace)
                uri = "#{Rails.configuration.id_namespace}#{v}"
            end
            if(!v.nil? && v.length > 0)
                @subURI << RDF::Resource.new(uri)     
                @array_subject << RDF::Resource.new(uri) 
            end
        end
            
        if(@subURI.size == 0)
            @subURI = nil
            @array_subject = nil
        end
      end
      
      def subjectURI
        if @subURI != nil
          @subURI
        end
      end  

      ## Name ###########################################################################
      def nameType
        @namesType
      end
      def nameType=(val)
        @namesType = Array.new
        i = 0
            val.each do |v| 
                if(!v.nil? && v.length > 0)
                     @namesType << v     
                end
                i+=1
            end
      end  

      def nameURI
        if @name_URI != nil
          @name_URI
        end
      end 
      def nameURI=(val)
        if val.class == Array
            val = val.first
        end
         if(!val.nil? && val.first.length > 0)
            @name_URI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")       
          end
      end

      #Creator
      def creatorURI
        if @creatorURI != nil
          @creatorURI
        end
      end 
      def creatorURI=(val)
      @creatorURI = Array.new
      val.each do |v|
        uri = v
        if(!v.include? Rails.configuration.id_namespace)
          uri = "#{Rails.configuration.id_namespace}#{v}"
        end
          if(!v.nil? && v.length > 0)
            @creatorURI << RDF::Resource.new(uri)   
          end
      end
      end
      
        
      ## Language ######################################################################  
      def languageURI
        if @langURI != nil
          @langURI
        end
      end 
      def languageURI=(val)
        if val.class == Array
            #    val = val.first
            @langURI = Array.new
            val.each do |v|
                uri = v
                if(!v.include? Rails.configuration.id_namespace)
                    uri = "#{Rails.configuration.id_namespace}#{v}"
                end
                if(!v.nil? && v.length > 0)
                    @langURI << RDF::Resource.new(uri)     
                end
            end      
        end
        if(@langURI.size == 1)
            @langURI = @langURI.first
        end
      end

      ## RelatedResource ######################################################################  
      def relResourceURI
        if @relResourceURI != nil
          @relResourceURI
        end
      end 
      def relResourceURI=(val)
        if val.class == Array
            #    val = val.first
            @relResourceURI = Array.new
            val.each do |v|
                uri = v
                if(!v.include? Rails.configuration.id_namespace)
                    uri = "#{Rails.configuration.id_namespace}#{v}"
                end
                if(!v.nil? && v.length > 0)
                    @relResourceURI << RDF::Resource.new(uri)     
                end
            end      
        end
        if(@relResourceURI.size == 1)
            @lrelResourceURI = @relResourceURI.first
        end
      end
           
      ## Unit ######################################################################
      def unitURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @unitURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def unitURI
        if @unitURI != nil
          @unitURI
        #else
        #  unitURI.first
        end
      end     

      ## Collection ######################################################################

      def assembledCollectionURI=(val)
      if val.class == Array
          # val = val.first
        @assembledCollURI = Array.new
        val.each do |v|
          uri = v
          if(!v.include? Rails.configuration.id_namespace)
            uri = "#{Rails.configuration.id_namespace}#{v}"
          end
            if(!v.nil? && v.length > 0)
              @assembledCollURI << RDF::Resource.new(uri)  
            end
        end   
      end
      if(@assembledCollURI.size == 1)
        @assembledCollURI = @assembledCollURI.first
      end
      end
      
      def assembledCollectionURI
        if @assembledCollURI != nil
          @assembledCollURI
        end
      end  

      def provenanceCollectionURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @provenanceCollURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def provenanceCollectionURI
        if @provenanceCollURI != nil
          @provenanceCollURI
       # else
       #   provenanceCollectionURI.first
        end
      end      
      
         def provenanceCollectionPartURI=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          @provenanceCollPartURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def provenanceCollectionPartURI
        if @provenanceCollPartURI != nil
          @provenanceCollPartURI
        
        end
      end     

      def provenanceHasCollPartURI=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          @provenanceHasPartURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def provenanceHasCollPartURI
        if @provenanceHasPartURI != nil
          @provenanceHasPartURI
        
        end
      end     

      ## Date ######################################################################
      def beginDate
        date[0] ? date[0].beginDate : []
      end
      def beginDate=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          date.build if date[0] == nil
          date[0].beginDate = val
        end
      end


      def endDate
        date[0] ? date[0].endDate : []
      end
      def endDate=(val)
        if val.class == Array
            val = val.first
        end  
        if(!val.nil? && val.length > 0)
            date.build if date[0] == nil
            date[0].endDate = val
        end
      end
      def dateValue
        date[0] ? date[0].value : []
      end
      def dateValue=(val)
        if val.class == Array
            val = val.first
        end  
        if(!val.nil? && val.length > 0)
            date.build if date[0] == nil
            date[0].value = val
        end
      end
      
      def permissionBeginDate
        permission_node[0] ? permission_node[0].beginDate : []
      end
      def permissionBeginDate=(val)
        if permission_node[0] == nil
          permission_node.build
        end
        permission_node[0].beginDate = val
      end
      def permissionEndDate
        permission_node[0] ? permission_node[0].endDate : []
      end
      def permissionEndDate=(val)
        if permission_node[0] == nil
          permission_node.build
        end
        permission_node[0].endDate = val
      end
      def permissionType
        permission_node[0] ? permission_node[0].type : []
      end
      def permissionType=(val)
        if permission_node[0] == nil
          permission_node.build
        end
        permission_node[0].type = val
      end

      def restrictionBeginDate
        restriction_node[0] ? restriction_node[0].beginDate : []
      end
      def restrictionBeginDate=(val)
        if restriction_node[0] == nil
          restriction_node.build
        end
        restriction_node[0].beginDate = val
      end
      def restrictionEndDate
        restriction_node[0] ? restriction_node[0].endDate : []
      end
      def restrictionEndDate=(val)
        if restriction_node[0] == nil
          restriction_node.build
        end
        restriction_node[0].endDate = val
      end
      def restrictionType
        restriction_node[0] ? restriction_node[0].type : []
      end
      def restrictionType=(val)
        if restriction_node[0] == nil
          restriction_node.build
        end
        restriction_node[0].type = val
      end  

      ## ElementListValue for MADS classes ######################################################################
      def getElementValue(type)
        elem = find_element type
        if elem != nil
          elem.elementValue.first
        else
          []
        end
      end
      
      def setElementValue(type,val)
        if val.class == Array
            val = val.first
        end

        if elementList[0] == nil
          elementList.build
        end

        existing_elem = find_element type

        #need to use eList.size to know where to insert/update the value
        if(existing_elem != nil )
          # set value of existing element
          existing_elem.elementValue = val
        else
          # create a new element of the correct type
          if type.include? "TopicElement"
            elem = MadsDatastream::List::TopicElement.new(elementList.first.graph)
          elsif type.include? "BuiltWorkPlaceElement"
            elem = DamsDatastream::List::BuiltWorkPlaceElement.new(elementList.first.graph)
          elsif type.include? "CulturalContextElement"
            elem = DamsDatastream::List::CulturalContextElement.new(elementList.first.graph)
          elsif type.include? "FunctionElement"
            elem = DamsDatastream::List::FunctionElement.new(elementList.first.graph)
          elsif type.include? "GenreFormElement"
            elem = MadsDatastream::List::GenreFormElement.new(elementList.first.graph)              
          elsif type.include? "GeographicElement"
            elem = MadsDatastream::List::GeographicElement.new(elementList.first.graph)
          elsif type.include? "IconographyElement"
            elem = DamsDatastream::List::IconographyElement.new(elementList.first.graph)
          elsif type.include? "StylePeriodElement"
            elem = DamsDatastream::List::StylePeriodElement.new(elementList.first.graph)
          elsif type.include? "ScientificNameElement"
            elem = MadsDatastream::List::ScientificNameElement.new(elementList.first.graph)
          elsif type.include? "TechniqueElement"
            elem = DamsDatastream::List::TechniqueElement.new(elementList.first.graph)
          elsif type.include? "TemporalElement"
            elem = MadsDatastream::List::TemporalElement.new(elementList.first.graph)     
          elsif type.include? "OccupationElement"
            elem = MadsDatastream::List::OccupationElement.new(elementList.first.graph)               
          elsif type.include? "DateNameElement"
            elem = Dams::MadsNameElements::MadsDateNameElement.new(elementList.first.graph)
          elsif type.include? "FamilyNameElement"
            elem = Dams::MadsNameElements::MadsFamilyNameElement.new(elementList.first.graph)
          elsif type.include? "FullNameElement"
            elem = Dams::MadsNameElements::MadsFullNameElement.new(elementList.first.graph)
          elsif type.include? "GivenNameElement"
            elem = Dams::MadsNameElements::MadsGivenNameElement.new(elementList.first.graph)
          elsif type.include? "TermsOfAddressNameElement"
            elem = Dams::MadsNameElements::MadsTermsOfAddressNameElement.new(elementList.first.graph)
          elsif type.include? "NameElement"
            elem = Dams::MadsNameElements::MadsNameElement.new(elementList.first.graph)
          elsif type.include? "LithologyElement"
            elem = DamsDatastream::List::LithologyElement.new(elementList.first.graph)
          elsif type.include? "SeriesElement"
            elem = DamsDatastream::List::SeriesElement.new(elementList.first.graph)
          elsif type.include? "CruiseElement"
            elem = DamsDatastream::List::CruiseElement.new(elementList.first.graph)    
        elsif type.include? "AnatomyElement"
            elem = DamsDatastream::List::AnatomyElement.new(elementList.first.graph)                                                                                  
          end
          elem.elementValue = val

          # add new element to the end of the list
          if elementList.first.nil?
            elementList.first.value = elem
          else
            elementList.first[elementList.first.size] = elem
          end
        end 
      end
      
      def find_element( type )
        chain = elementList.first
        elem = nil
        while  elem == nil && chain != nil do
          if chain.first.class.name.include? type
            elem = chain.first
          else
            chain = chain.tail
          end
        end
        elem
      end 
      
      ##  MADS Name classes ######################################################################
     
      def nameValue
        getElementValue "NameElement"
      end
      
      def nameValue=(s)
        setElementValue( "NameElement", s )
      end
       
      def fullNameValue
        getElementValue "FullNameElement"
      end
      
      def fullNameValue=(s)
        setElementValue( "FullNameElement", s )
      end  
      
      def familyNameValue
        getElementValue "FamilyNameElement"
      end
      
      def familyNameValue=(s)
        setElementValue( "FamilyNameElement", s )
      end    
      
      def givenNameValue
        getElementValue "GivenNameElement"
      end
      
      def givenNameValue=(s)
        setElementValue( "GivenNameElement", s )
      end    
      
      def dateNameValue
        getElementValue "DateNameElement"
      end
      
      def dateNameValue=(s)
        setElementValue( "DateNameElement", s )
      end    
      
      ##  Relationship ###################################################################### 
      
      def relationshipRoleURI
        relationship[0] ? relationship[0].role : []
      end 
      def relationshipRoleURI=(val)
          i = 0
          val.each do |v|
            uri = v
            if(!v.include? Rails.configuration.id_namespace)
              uri = "#{Rails.configuration.id_namespace}#{v}"
            end
            if(!v.nil? && v.length > 0)
              @roleURI = RDF::Resource.new(uri)
              if relationship[i] == nil
                   relationship.build
              end          

              relationship[i].role = @roleURI 
            end        
            i+=1
          end             
      end   
      
      def relationshipNameURI
        relationship[0] ? relationship[0].name : []
      end
      
      def relationshipNameURI=(val)
          i = 0
          val.each do |v|
            uri = v
            if(!v.include? Rails.configuration.id_namespace)
              uri = "#{Rails.configuration.id_namespace}#{v}"
            end
            if(!v.nil? && v.length > 0)
              relNameURI = RDF::Resource.new(uri)
              if relationship[i] == nil
                     relationship.build
              end
              if( !@relNameType.nil? && !@relNameType[i].nil? && (@relNameType[i].include? 'CorporateName')) 
                relationship[i].corporateName = relNameURI 
              elsif( !@relNameType.nil? && !@relNameType[i].nil? && (@relNameType[i].include? 'PersonalName')) 
                relationship[i].personalName = relNameURI
              elsif( !@relNameType.nil? && !@relNameType[i].nil? && (@relNameType[i].include? 'ConferenceName')) 
                relationship[i].conferenceName = relNameURI
              elsif( !@relNameType.nil? && !@relNameType[i].nil? && (@relNameType[i].include? 'FamilyName')) 
                relationship[i].familyName = relNameURI                             
              elsif( !@relNameType.nil? && !@relNameType[i].nil? && (@relNameType[i].include? 'Name')) 
                relationship[i].name = relNameURI                  
              end             
            end        
            i+=1
            end
      end   
      
      def relationshipNameType
        @relNameType
      end
      def relationshipNameType=(val)
        @relNameType = Array.new
        i = 0
        val.each do |v| 
            if(!v.nil? && v.length > 0)
                @relNameType << v     
            end
            i+=1
        end
      end
      
      ## Cartographics ######################################################################
      def cartographicPoint
        cartographics[0] ? cartographics[0].point : []
      end
      def cartographicPoint=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].point = val
        end
      end

      def cartographicLine
        cartographics[0] ? cartographics[0].line : []
      end
      def cartographicLine=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].line = val
        end
      end  
      
      def cartographicPolygon
        cartographics[0] ? cartographics[0].polygon : []
      end
      def cartographicPolygon=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].polygon = val
        end
      end  
      
      def cartographicProjection
        cartographics[0] ? cartographics[0].projection : []
      end
      def cartographicProjection=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].projection = val
        end
      end 
      
      def cartographicRefSystem
        cartographics[0] ? cartographics[0].referenceSystem : []
      end
      def cartographicRefSystem=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].referenceSystem = val
        end
      end
      
      def cartographicScale
        cartographics[0] ? cartographics[0].scale : []
      end
      def cartographicScale=(val)
        if val.class == Array
          val = val.first
        end
        if(!val.nil? && val.length > 0)
          cartographics.build if cartographics[0] == nil
          cartographics[0].scale = val
        end
      end      
      
      ## Rights
       ######################################################################
      def copyrightURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @rightURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def copyrightURI
        if @rightURI != nil
          @rightURI
        end
      end      

      def statuteURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @statURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def statuteURI
        if @statURI != nil
          @statURI
        end
      end 
      
      def otherRightsURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @otherCopyRightURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def otherRightsURI
        if @otherCopyRightURI != nil
          @otherCopyRightURI
        end
      end 
      
      def licenseURI=(val)
        if val.class == Array
            val = val.first
        end
        if(!val.nil? && val.length > 0)
            @licenURI = RDF::Resource.new("#{Rails.configuration.id_namespace}#{val}")
        end
      end
      def licenseURI
        if @licenURI != nil
          @licenURI
        end
      end 
      
      #RightsHolder ###################
      def rightsHolderURI=(val)
         @holderURI = Array.new
          val.each do |v|
            uri = v
            if(!v.include? Rails.configuration.id_namespace)
              uri = "#{Rails.configuration.id_namespace}#{v}"
            end
              if(!v.nil? && v.length > 0)
                @holderURI << RDF::Resource.new(uri)   
              end
          end
      end
      def rightsHolderURI
        if @holderURI != nil
          @holderURI
        end
      end   
    
      def rightsHolderType
        @rightsHolderType
      end
      def rightsHolderType=(val)
        @rightsHolderType = Array.new
        i = 0
        val.each do |v| 
            if(!v.nil? && v.length > 0)
                 @rightsHolderType << v     
            end
            i+=1
        end
      end      
  
    # Unload and reload a class to reset any broken mappings
    def reload( klazz )
      begin
        Object.send(:remove_const, klazz.to_s) if defined? klazz
        load "#{ActiveSupport::Inflector.underscore(klazz)}.rb"
      rescue Exception => ex
        puts "Error reloading class (#{klazz.to_s}): #{ex}"
      end
    end

  # helper method to load external class objects
  def loadRdfObjects (object, className, reload = true)
    objects = []
    if !object.first.nil?
      object.each do |o|
        o_pid = o.pid;
        if ( o_pid.nil? || o_pid.start_with?("_") || (o.respond_to?(:name) && !o.name.first.nil?) || (o.respond_to?(:value) && !o.value.first.nil?) )
          # inline records, use as-is
          objects << o
        else
          # unmapped records, fetch from repo
          begin
            o = className.find(o_pid)
            objects << o
          rescue => e
             logger.warn "Error loading #{o_pid} in class #{className.to_s}: #{e}. Reloading..."
             loadRdfObjects object, className, false if reload
          end
        end
      end
    end
    return objects
  end

  end
end