ontomde-uml2-jpa 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,5 @@
1
+ == 1.0.0 / 2007-10-28
2
+
3
+ * 1 major enhancement
4
+ * Birthday!
5
+
data/Manifest.txt ADDED
@@ -0,0 +1,15 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/ontomde-uml2-jpa.rb
6
+ lib/ontomde-uml2-jpa/version.rb
7
+ lib/ontomde-uml2-jpa/configuration.rb
8
+ lib/ontomde-uml2-jpa/redefined.rb
9
+ lib/ontomde-uml2-jpa/locking.rb
10
+ lib/ontomde-uml2-jpa/mapping.rb
11
+ lib/ontomde-uml2-jpa/finder.rb
12
+ lib/ontomde-uml2-jpa/simulationAutoImplement.rb
13
+ lib/ontomde-uml2-jpa/jpa.rb
14
+ lib/ontomde-uml2-jpa/jpa.rdoc
15
+ test/test_ontomde-uml2-jpa.rb
data/README.txt ADDED
@@ -0,0 +1,41 @@
1
+ ontomde-uml2-jpa
2
+ by stephane (Pierre) Carrie
3
+ http://ontomde.rubyforge.org
4
+
5
+ == DESCRIPTION:
6
+
7
+ JPA annotation generator library.
8
+
9
+ Most users will used this library trough ontomde-java-frontend command line utility options.
10
+
11
+ == FEATURES/PROBLEMS:
12
+
13
+ == SYNOPSIS:
14
+
15
+ == REQUIREMENTS:
16
+
17
+ == INSTALL:
18
+
19
+ * (win) gem install ontomde-uml2-jpa
20
+ * (unix) sudo gem install ontomde-uml2-jpa
21
+
22
+ Additional information is available on ontoMDE web site :
23
+ http://ontomde.rubyforge.org/website/download.html
24
+ == LICENSE:
25
+
26
+ Copyright (C) 2008 Orange-labs
27
+ 38 rue General Leclerc
28
+ 92130 ISSY LES MOULINEAUX, France
29
+
30
+ This program is free software: you can redistribute it and/or modify
31
+ it under the terms of the GNU Affero General Public License as
32
+ published by the Free Software Foundation, either version 3 of the
33
+ License, or (at your option) any later version.
34
+
35
+ This program is distributed in the hope that it will be useful,
36
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
37
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38
+ GNU Affero General Public License for more details.
39
+
40
+ You should have received a copy of the GNU Affero General Public License
41
+ along with this program. If not, see http://www.gnu.org/licenses/.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/ontomde-uml2-jpa/version.rb'
6
+
7
+ Hoe.new('ontomde-uml2-jpa', Ontomde::Uml2::Jpa::VERSION) do |p|
8
+ p.rubyforge_name = 'ontomde'
9
+ p.author = 'Stephane (Pierre) Carrie'
10
+ p.email = 'stephanepierre.carrie@orange-ftgroup.com'
11
+ p.summary = 'OntoMDE JPA cartridge'
12
+ p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
13
+ p.url="http://ontomde.rubyforge.org"
14
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
15
+ p.extra_deps=[
16
+ ['ontomde-uml2-java',"= #{Ontomde::Uml2::Jpa::VERSION}"]
17
+ ]
18
+ p.spec_extras={ :required_ruby_version => '>=1.8.6',:required_rubygems_version => '>=1.0.0' }
19
+ end
20
+
21
+ # vim: syntax=Ruby
@@ -0,0 +1,176 @@
1
+ module Mrdf_Model
2
+
3
+ #Generates persistence configuration file
4
+ def db_generateConfiguration
5
+ jpa_generateConfiguration
6
+ end
7
+
8
+ #Generates hibernate configuration file
9
+ def jpa_generateConfiguration
10
+ if context[:struts_useSpring]
11
+ mtk_writeSession("#{context[:jpaConfigDir,context[:javaDir]]}/META-INF/persistence.xml") {
12
+ jpa_writeConfigurationForSpring
13
+ }
14
+ else
15
+ # empty
16
+ end
17
+
18
+ end
19
+
20
+ def jpa_writeConfigurationForSpring
21
+ write %{<?xml version="1.0" encoding="UTF-8"?>
22
+ <!-- This configuration file is for a spring enabled application. -->
23
+ <!-- For database settings, please see ApplicationContext-jpa.xml -->
24
+
25
+ <persistence xmlns="http://java.sun.com/xml/ns/persistence"
26
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
27
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
28
+ version="1.0">
29
+ #{mtk_stss{jpa_writeWebAppConfiguration}}
30
+
31
+ #{mtk_stss{jpa_writeDeploymentConfiguration}}
32
+ </persistence>
33
+ }
34
+ end
35
+
36
+ def jpa_writeWebAppConfiguration
37
+ write %{
38
+ <persistence-unit name="persistence-unit-test"
39
+ transaction-type="RESOURCE_LOCAL">
40
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
41
+ #{mtk_stss{jpa_writeConfigurationPersistentClasses}}
42
+ <properties>
43
+ #{mtk_stss{jpa_writeOptimizedHibernateProperties}}
44
+ </properties>
45
+ </persistence-unit>
46
+ }
47
+ end
48
+
49
+ def jpa_writeDeploymentConfiguration
50
+ write %{
51
+ <!-- This persistence unit is used only by hibernateTools in "deployBD.xml"
52
+ to generate tables. -->
53
+ <persistence-unit name="deployment-persistence-unit"
54
+ transaction-type="RESOURCE_LOCAL">
55
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
56
+ #{mtk_stss{jpa_writeConfigurationPersistentClasses}}
57
+ <properties>
58
+ #{mtk_stss{jpa_writeDBConnectionParameters}}
59
+ </properties>
60
+ </persistence-unit>
61
+ }
62
+ end
63
+
64
+
65
+
66
+ #writes jpa configuration file to current
67
+ def jpa_writeConfigurationStandard
68
+ write %{<?xml version="1.0" encoding="UTF-8"?>
69
+ <persistence
70
+ xmlns="http://java.sun.com/xml/ns/persistence"
71
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
72
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
73
+ version="1.0">
74
+ <persistence-unit
75
+ name="persistence-unit-test"
76
+ transaction-type="RESOURCE_LOCAL"
77
+ >
78
+ }
79
+ jpa_writeConfigurationPersistentClasses
80
+
81
+ write %{<properties>\n}
82
+ jpa_writeDBConnectionParameters
83
+ jpa_writeConnectionPool
84
+ write %{
85
+ <!-- Echo all executed SQL to stdout -->
86
+ <property name="hibernate.show_sql" value="false"/>
87
+ <!-- recreate schema ? validate | update | create | create-drop -->
88
+ <property name="hibernate.hbm2ddl.auto" value="#{context[:jpa_ddl_mode,"update"]}"/>
89
+ }
90
+
91
+ write %{</properties>\n</persistence-unit>\n</persistence>\n}
92
+ end
93
+
94
+ #writes configuration parameter for hibernate sgbd connection.
95
+ #Some parameter are extracted from context.
96
+ def jpa_default_db_url
97
+ #name=umlx_model.uml_name_one.tr('^a-zA-Z0-9','_')
98
+ return %{jdbc:mysql:///#{context[:db_schema_name,"testschema"]}}
99
+ end
100
+ def jpa_writeDBConnectionParameters
101
+ write %{<!-- TPL:HIB-2001 -->
102
+ <property name="hibernate.dialect" value="#{context[:hib_dialect,"org.hibernate.dialect.MySQL5InnoDBDialect"]}"/>
103
+ <property name="hibernate.connection.driver_class" value="#{context[:hib_connection_driver_class,"com.mysql.jdbc.Driver"]}"/>
104
+ <property name="hibernate.connection.url" value="#{context[:hib_connection_url,jpa_default_db_url]}"/>
105
+ <property name="hibernate.connection.username" value="#{context[:hib_connection_username,"testuser"]}"/>
106
+ <property name="hibernate.connection.password" value="#{context[:hib_connection_password,"testpwd"]}"/>
107
+ <!--
108
+ <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
109
+ <property name="hibernate.connection.username" value="sa"/>
110
+ <property name="hibernate.connection.password" value=""/>
111
+ <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost:1701"/>
112
+ <property name="hibernate.hbm2ddl.auto" value="update"/>
113
+ <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
114
+ -->
115
+ }
116
+ end
117
+
118
+
119
+ def jpa_writeOptimizedHibernateProperties
120
+ write %{
121
+ <property name="hibernate.show_sql" value="false" />
122
+ <property name="hibernate.hbm2ddl.auto" value="update" />
123
+
124
+ <!-- Set a maximum "depth" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one) -->
125
+ <property name="hibernate.max_fetch_depth" value="0" />
126
+
127
+ <!-- determines the JDBC fetch size (calls Statement.setFetchSize()) -->
128
+ <property name="hibernate.jdbc.fetch_size" value="4" />
129
+
130
+ <!-- makes Hibernate start faster (it does not try to build cglib-enhanced objects to access getter/setters) -->
131
+ <property name="hibernate.bytecode.use_reflection_optimizer" value="false" />
132
+ }
133
+ end
134
+
135
+ #writes configuration parameter for hibernate connection pool.
136
+ def jpa_writeConnectionPool
137
+ write %{
138
+ <!-- connection pool -->
139
+ <!-- cf: http://www.hibernate.org/214.html -->
140
+ <property name="hibernate.c3p0.min_size" value="5"/>
141
+ <property name="hibernate.c3p0.max_size" value="20"/>
142
+ <property name="hibernate.c3p0.timeout" value="1800"/> <!-- seconds -->
143
+ <property name="hibernate.c3p0.idle_test_period" value="100"/> <!-- seconds -->
144
+ <property name="hibernate.c3p0.max_statement" value="50"/>
145
+ }
146
+ end
147
+
148
+ #writes jpa configuration list of persistent class
149
+ def jpa_writeConfigurationPersistentClasses
150
+ write %{<!-- begin Persistent classes declaration -->\n}
151
+ uml_Class_all.each {|c|
152
+ next unless c.kind_of?(Muml_Class) && c.umlx_isReallyAClass?
153
+ c.jpa_writeConfiguration
154
+ }
155
+ #TODO: remove hack
156
+ # context[:db_additionalPersistentClass,["com.jbpm.wrapper.process.Process"]].each { |cl|
157
+ # write %{<class>#{cl}</class>\n}
158
+ # }
159
+ write %{<exclude-unlisted-classes>true</exclude-unlisted-classes>\n}
160
+ write %{<!-- end Persistent classes declaration -->\n}
161
+ end
162
+ end
163
+
164
+ module Muml_Class
165
+ #
166
+ #writes jpa entry for this class if this class is persistent.
167
+ def jpa_writeConfiguration()
168
+ ignoreExternal=false
169
+ return if java_ignoreMe?(ignoreExternal)
170
+ return unless umlx_owner_one.kind_of?(Muml_Package)
171
+ return unless jpa_isPersistent?
172
+ return if db_isTransient?
173
+ write %{<class>#{java_qualifiedName}</class>\n}
174
+ end
175
+ end
176
+
@@ -0,0 +1,72 @@
1
+ module Muml_Class
2
+ #adds a finder to eao
3
+ #self is supposed to be the bean and eao the "dao".
4
+ def jpa_addFindAll!(eao)
5
+ # java_NameBean is added to avoid name clash with inheritance
6
+ m=eao.umlx_createAndAddOperation(rdf_uri+"_findAll","findAll")#+self.java_NameBean)
7
+ m.uml_isStatic=RDF_TRUE
8
+ #m.uml_class=self
9
+ m.uml_visibility=Cuml_VisibilityKind::Public
10
+ #m.uml_isStatic=RDF_TRUE
11
+
12
+ #em=m.umlx_createAndAddParameter(m.rdf_uri+"_entityManager","entityManager")
13
+ #em.uml_type=umlx_getOrCreateClass(JPA::EntityManager)
14
+ #em.uml_direction=Cuml_ParameterDirectionKind::In
15
+ #em.uml_upperValue=umlx_literal(1)
16
+ #em.uml_lowerValue=umlx_literal(1)
17
+
18
+ rp=m.umlx_createAndAddParameter(m.rdf_uri+"_ret_param","return")
19
+ rp.uml_direction=Cuml_ParameterDirectionKind::Return
20
+ rp.uml_upperValue=umlx_literal(-1)
21
+ rp.uml_lowerValue=umlx_literal(0)
22
+ rp.uml_type=self
23
+ rp.uml_isOrdered=RDF_TRUE
24
+
25
+ #m.java_code="return (#{self.java_qualifiedName})entityManager.find( #{self.java_qualifiedName}.class, #{ip.uml_name});"
26
+
27
+ m.java_code=%{return (java.util.List<#{self.java_qualifiedName}>) getEntityManager().createQuery( "select Object(c) from #{java_Name} as c").getResultList();}
28
+ m.java_annotation_add(%{@SuppressWarnings("unchecked")})
29
+
30
+ # because A<-B is not Set<A> <- Set<B>
31
+ # we need to have an extra parameter
32
+ # so method overloading is OK.
33
+ # (this is not necessary when A is return)
34
+
35
+ if context[:db_useExtraTypeParameterForFindAll]
36
+ t=m.umlx_createAndAddParameter(m.rdf_uri+"_class","nullCast")
37
+ t.uml_type=self
38
+ end
39
+ return m
40
+ end
41
+ def jpa_addFindByPrimaryKey!(eao)
42
+ m=eao.umlx_createAndAddOperation(rdf_uri+"_finderop","find")
43
+ m.uml_isStatic=RDF_TRUE
44
+ #m.uml_class=self
45
+ m.uml_visibility=Cuml_VisibilityKind::Public
46
+ #m.uml_isStatic=RDF_TRUE
47
+
48
+ #em=m.umlx_createAndAddParameter(m.rdf_uri+"_entityManager","entityManager")
49
+ #em.uml_type=umlx_getOrCreateClass(JPA::EntityManager)
50
+ #em.uml_direction=Cuml_ParameterDirectionKind::In
51
+ #em.uml_upperValue=umlx_literal(1)
52
+ #em.uml_lowerValue=umlx_literal(1)
53
+
54
+ ip=m.umlx_createAndAddParameter(m.rdf_uri+"_id_param","primaryKey")
55
+ ip.uml_direction=Cuml_ParameterDirectionKind::In
56
+ ip.uml_upperValue=umlx_literal(1)
57
+ ip.uml_lowerValue=umlx_literal(1)
58
+ ip.uml_type=umlx_dataType_long
59
+ #ip.uml_isOrdered=RDF_FALSE
60
+
61
+ rp=m.umlx_createAndAddParameter(m.rdf_uri+"_ret_param","return")
62
+ rp.uml_direction=Cuml_ParameterDirectionKind::Return
63
+ rp.uml_upperValue=umlx_literal(1)
64
+ rp.uml_lowerValue=umlx_literal(0)
65
+ rp.uml_type=self
66
+ #rp.uml_isOrdered=RDF_FALSE
67
+
68
+ m.java_code="return (#{self.java_qualifiedName})getEntityManager().find( #{self.java_qualifiedName}.class, #{ip.uml_name});"
69
+
70
+ return m
71
+ end
72
+ end