# File lib/puppet/type.rb, line 1879
1879:     def initialize(resource)
1880:         raise Puppet::DevError, "Got TransObject instead of Resource or hash" if resource.is_a?(Puppet::TransObject)
1881:         resource = self.class.hash2resource(resource) unless resource.is_a?(Puppet::Resource)
1882: 
1883:         # The list of parameter/property instances.
1884:         @parameters = {}
1885: 
1886:         # Set the title first, so any failures print correctly.
1887:         if resource.type.to_s.downcase.to_sym == self.class.name
1888:             self.title = resource.title
1889:         else
1890:             # This should only ever happen for components
1891:             self.title = resource.ref
1892:         end
1893: 
1894:         [:file, :line, :catalog, :exported, :virtual].each do |getter|
1895:             setter = getter.to_s + "="
1896:             if val = resource.send(getter)
1897:                 self.send(setter, val)
1898:             end
1899:         end
1900: 
1901:         @tags = resource.tags
1902: 
1903:         @original_parameters = resource.to_hash
1904: 
1905:         set_name(@original_parameters)
1906: 
1907:         set_default(:provider)
1908: 
1909:         set_parameters(@original_parameters)
1910: 
1911:         self.validate if self.respond_to?(:validate)
1912:     end