You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by do...@apache.org on 2013/09/27 00:59:40 UTC

svn commit: r1526732 - in /buildr/trunk: CHANGELOG lib/buildr/ide/idea.rb

Author: donaldp
Date: Thu Sep 26 22:59:40 2013
New Revision: 1526732

URL: http://svn.apache.org/r1526732
Log:
Auto-detect jpa provider in Intellij IDEA facet generation if persistence.xml file is present and provider not specified.

Modified:
    buildr/trunk/CHANGELOG
    buildr/trunk/lib/buildr/ide/idea.rb

Modified: buildr/trunk/CHANGELOG
URL: http://svn.apache.org/viewvc/buildr/trunk/CHANGELOG?rev=1526732&r1=1526731&r2=1526732&view=diff
==============================================================================
--- buildr/trunk/CHANGELOG (original)
+++ buildr/trunk/CHANGELOG Thu Sep 26 22:59:40 2013
@@ -1,4 +1,6 @@
 1.4.13 (Pending)
+* Added:  Auto-detect jpa provider in Intellij IDEA facet generation if
+          persistence.xml file is present and provider not specified.
 * Added:  Auto-detect jruby version in Intellij IDEA facet generation if
           .ruby-version file is present.
 * Added:  Improve support for auto-detection of ejb and web descriptors

Modified: buildr/trunk/lib/buildr/ide/idea.rb
URL: http://svn.apache.org/viewvc/buildr/trunk/lib/buildr/ide/idea.rb?rev=1526732&r1=1526731&r2=1526732&view=diff
==============================================================================
--- buildr/trunk/lib/buildr/ide/idea.rb (original)
+++ buildr/trunk/lib/buildr/ide/idea.rb Thu Sep 26 22:59:40 2013
@@ -353,25 +353,46 @@ module Buildr #:nodoc:
 
       def add_jpa_facet(options = {})
         name = options[:name] || "JPA"
+
+        source_roots = [buildr_project.compile.sources, buildr_project.resources.sources].flatten
+        default_deployment_descriptors = []
+        ['orm.xml', 'persistence.xml'].
+          each do |descriptor|
+          source_roots.each do |path|
+            d = "#{path}/META-INF/#{descriptor}"
+            default_deployment_descriptors << d if File.exist?(d)
+          end
+        end
+        deployment_descriptors = options[:deployment_descriptors] || default_deployment_descriptors
+
         factory_entry = options[:factory_entry] || buildr_project.name.to_s
         validation_enabled = options[:validation_enabled].nil? ? true : options[:validation_enabled]
-        provider_enabled = options[:provider_enabled] || 'Hibernate'
-        default_persistence_xml = buildr_project._(:source, :main, :resources, "META-INF/persistence.xml")
-        persistence_xml = options[:persistence_xml] || default_persistence_xml
-        default_orm_xml = buildr_project._(:source, :main, :resources, "META-INF/orm.xml")
-        orm_xml = options[:orm_xml] || default_orm_xml
+        if options[:provider_enabled]
+          provider = options[:provider_enabled]
+        else
+          provider = nil
+          {'org.hibernate.ejb.HibernatePersistence' => 'Hibernate',
+           'org.eclipse.persistence.jpa.PersistenceProvider' => 'EclipseLink'}.
+            each_pair do |match, candidate_provider|
+            deployment_descriptors.each do |descriptor|
+              if File.exist?(descriptor) && /#{Regexp.escape(match)}/ =~ IO.read(descriptor)
+                provider = candidate_provider
+              end
+            end
+          end
+        end
+
         add_facet(name, "jpa") do |f|
           f.configuration do |c|
-            c.setting :name => "validation-enabled", :value => validation_enabled
-            c.setting :name => "provider-name", :value => provider_enabled
+            if provider
+              c.setting :name => "validation-enabled", :value => validation_enabled
+              c.setting :name => "provider-name", :value => provider
+            end
             c.tag!('datasource-mapping') do |ds|
               ds.tag!('factory-entry', :name => factory_entry)
             end
-            if File.exist?(persistence_xml) || default_persistence_xml != persistence_xml
-              c.deploymentDescriptor :name => 'persistence.xml', :url => file_path(persistence_xml)
-            end
-            if File.exist?(orm_xml) || default_orm_xml != orm_xml
-              c.deploymentDescriptor :name => 'orm.xml', :url => file_path(orm_xml)
+            deployment_descriptors.each do |descriptor|
+              c.deploymentDescriptor :name => File.basename(descriptor), :url => file_path(descriptor)
             end
           end
         end