# File lib/puppet/type.rb, line 1719
1719:   def initialize(resource)
1720:     raise Puppet::DevError, "Got TransObject instead of Resource or hash" if resource.is_a?(Puppet::TransObject)
1721:     resource = self.class.hash2resource(resource) unless resource.is_a?(Puppet::Resource)
1722: 
1723:     # The list of parameter/property instances.
1724:     @parameters = {}
1725: 
1726:     # Set the title first, so any failures print correctly.
1727:     if resource.type.to_s.downcase.to_sym == self.class.name
1728:       self.title = resource.title
1729:     else
1730:       # This should only ever happen for components
1731:       self.title = resource.ref
1732:     end
1733: 
1734:     [:file, :line, :catalog, :exported, :virtual].each do |getter|
1735:       setter = getter.to_s + "="
1736:       if val = resource.send(getter)
1737:         self.send(setter, val)
1738:       end
1739:     end
1740: 
1741:     @tags = resource.tags
1742: 
1743:     @original_parameters = resource.to_hash
1744: 
1745:     set_name(@original_parameters)
1746: 
1747:     set_default(:provider)
1748: 
1749:     set_parameters(@original_parameters)
1750: 
1751:     self.validate if self.respond_to?(:validate)
1752:   end