mappum 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/.gitignore +4 -0
  2. data/LICENSE +15 -0
  3. data/README +53 -0
  4. data/Rakefile +48 -0
  5. data/VERSION +1 -0
  6. data/bin/mapserver.rb +4 -0
  7. data/java-api/pom.xml +63 -0
  8. data/java-api/src/main/java/pl/ivmx/mappum/JavaTransform.java +12 -0
  9. data/java-api/src/main/java/pl/ivmx/mappum/MappumApi.java +83 -0
  10. data/java-api/src/main/java/pl/ivmx/mappum/TreeElement.java +23 -0
  11. data/java-api/src/main/java/pl/ivmx/mappum/WorkdirLoader.java +12 -0
  12. data/java-api/src/test/java/iv/Client.java +237 -0
  13. data/java-api/src/test/java/iv/Person.java +261 -0
  14. data/java-api/src/test/java/pl/ivmx/mappum/MappumTest.java +122 -0
  15. data/java-api/src/test/resources/map/example_map.rb +88 -0
  16. data/lib/mappum.rb +46 -0
  17. data/lib/mappum/autoconv_catalogue.rb +43 -0
  18. data/lib/mappum/dsl.rb +255 -0
  19. data/lib/mappum/java_transform.rb +107 -0
  20. data/lib/mappum/map.rb +194 -0
  21. data/lib/mappum/mapserver/mapgraph.rb +192 -0
  22. data/lib/mappum/mapserver/mapserver.rb +213 -0
  23. data/lib/mappum/mapserver/maptable.rb +80 -0
  24. data/lib/mappum/mapserver/views/doc.erb +15 -0
  25. data/lib/mappum/mapserver/views/main.erb +39 -0
  26. data/lib/mappum/mapserver/views/maptable.erb +16 -0
  27. data/lib/mappum/mapserver/views/rubysource.erb +25 -0
  28. data/lib/mappum/mapserver/views/transform-ws.wsdl.erb +50 -0
  29. data/lib/mappum/mapserver/views/ws-error.erb +10 -0
  30. data/lib/mappum/open_xml_object.rb +68 -0
  31. data/lib/mappum/ruby_transform.rb +199 -0
  32. data/lib/mappum/xml_transform.rb +382 -0
  33. data/mappum.gemspec +117 -0
  34. data/sample/address_fixture.xml +11 -0
  35. data/sample/crm.rb +9 -0
  36. data/sample/crm_client.xsd +28 -0
  37. data/sample/erp.rb +7 -0
  38. data/sample/erp_person.xsd +44 -0
  39. data/sample/example_conversions.rb +12 -0
  40. data/sample/example_map.rb +92 -0
  41. data/sample/example_notypes.rb +77 -0
  42. data/sample/example_when.rb +13 -0
  43. data/sample/person_fixture.xml +23 -0
  44. data/sample/person_fixture_any.xml +26 -0
  45. data/sample/server/map/example_any.rb +28 -0
  46. data/sample/server/map/example_soap4r.rb +59 -0
  47. data/sample/server/mapserver.sh +1 -0
  48. data/sample/server/schema/crm_client.xsd +29 -0
  49. data/sample/server/schema/erp/erp_person.xsd +38 -0
  50. data/test/test_conversions.rb +24 -0
  51. data/test/test_example.rb +175 -0
  52. data/test/test_openstruct.rb +129 -0
  53. data/test/test_soap4r.rb +108 -0
  54. data/test/test_when.rb +35 -0
  55. data/test/test_xml_any.rb +62 -0
  56. metadata +164 -0
@@ -0,0 +1,261 @@
1
+ package iv;
2
+
3
+ import java.util.Date;
4
+
5
+ public class Person {
6
+ public static class Address {
7
+ private String street;
8
+ private String city;
9
+ /**
10
+ * @return the street
11
+ */
12
+ public String getStreet() {
13
+ return street;
14
+ }
15
+ /**
16
+ * @param street the street to set
17
+ */
18
+ public void setStreet(String street) {
19
+ this.street = street;
20
+ }
21
+ /**
22
+ * @return the city
23
+ */
24
+ public String getCity() {
25
+ return city;
26
+ }
27
+ /**
28
+ * @param city the city to set
29
+ */
30
+ public void setCity(String city) {
31
+ this.city = city;
32
+ }
33
+ }
34
+ public static class Phone {
35
+ private String number;
36
+ private String extension;
37
+ private String type;
38
+ public Phone(){
39
+ }
40
+ public Phone(String number){
41
+ this.number = number;
42
+ }
43
+ /**
44
+ * @return the number
45
+ */
46
+ public String getNumber() {
47
+ return number;
48
+ }
49
+ /**
50
+ * @param number the number to set
51
+ */
52
+ public void setNumber(String number) {
53
+ this.number = number;
54
+ }
55
+ /**
56
+ * @return the extension
57
+ */
58
+ public String getExtension() {
59
+ return extension;
60
+ }
61
+ /**
62
+ * @param extension the extension to set
63
+ */
64
+ public void setExtension(String extension) {
65
+ this.extension = extension;
66
+ }
67
+ /**
68
+ * @return the type
69
+ */
70
+ public String getType() {
71
+ return type;
72
+ }
73
+ /**
74
+ * @param type the type to set
75
+ */
76
+ public void setType(String type) {
77
+ this.type = type;
78
+ }
79
+ }
80
+ private String title;
81
+ private String type;
82
+ private String personId;
83
+ private String name;
84
+ private String surname;
85
+ private String sex;
86
+ private String email1;
87
+ private String email2;
88
+ private String email3;
89
+ private Phone mainPhone;
90
+ private Phone[] phones;
91
+ private Address address;
92
+ private String corporation;
93
+ private Person spouse;
94
+ private Date dateUpdated;
95
+
96
+ public String getCorporation() {
97
+ return corporation;
98
+ }
99
+ public void setCorporation(String corporation) {
100
+ this.corporation = corporation;
101
+ }
102
+ public Person getSpouse() {
103
+ return spouse;
104
+ }
105
+ public void setSpouse(Person spouse) {
106
+ this.spouse = spouse;
107
+ }
108
+ public Date getDateUpdated() {
109
+ return dateUpdated;
110
+ }
111
+ public void setDateUpdated(Date dateUpdated) {
112
+ this.dateUpdated = dateUpdated;
113
+ }
114
+ /**
115
+ * @return the title
116
+ */
117
+ public String getTitle() {
118
+ return title;
119
+ }
120
+ /**
121
+ * @param title the title to set
122
+ */
123
+ public void setTitle(String title) {
124
+ this.title = title;
125
+ }
126
+ /**
127
+ * @return the type
128
+ */
129
+ public String getType() {
130
+ return type;
131
+ }
132
+ /**
133
+ * @param type the type to set
134
+ */
135
+ public void setType(String type) {
136
+ this.type = type;
137
+ }
138
+
139
+ /**
140
+ * @return the personId
141
+ */
142
+ public String getPersonId() {
143
+ return personId;
144
+ }
145
+ /**
146
+ * @param personId the personId to set
147
+ */
148
+ public void setPersonId(String personId) {
149
+ this.personId = personId;
150
+ }
151
+ /**
152
+ * @return the name
153
+ */
154
+ public String getName() {
155
+ return name;
156
+ }
157
+ /**
158
+ * @param name the name to set
159
+ */
160
+ public void setName(String name) {
161
+ this.name = name;
162
+ }
163
+ /**
164
+ * @return the surname
165
+ */
166
+ public String getSurname() {
167
+ return surname;
168
+ }
169
+ /**
170
+ * @param surname the surname to set
171
+ */
172
+ public void setSurname(String surname) {
173
+ this.surname = surname;
174
+ }
175
+ /**
176
+ * @return the sex
177
+ */
178
+ public String getSex() {
179
+ return sex;
180
+ }
181
+ /**
182
+ * @param sex the sex to set
183
+ */
184
+ public void setSex(String sex) {
185
+ this.sex = sex;
186
+ }
187
+ /**
188
+ * @return the email1
189
+ */
190
+ public String getEmail1() {
191
+ return email1;
192
+ }
193
+ /**
194
+ * @param email1 the email1 to set
195
+ */
196
+ public void setEmail1(String email1) {
197
+ this.email1 = email1;
198
+ }
199
+ /**
200
+ * @return the email2
201
+ */
202
+ public String getEmail2() {
203
+ return email2;
204
+ }
205
+ /**
206
+ * @param email2 the email2 to set
207
+ */
208
+ public void setEmail2(String email2) {
209
+ this.email2 = email2;
210
+ }
211
+ /**
212
+ * @return the email3
213
+ */
214
+ public String getEmail3() {
215
+ return email3;
216
+ }
217
+ /**
218
+ * @param email3 the email3 to set
219
+ */
220
+ public void setEmail3(String email3) {
221
+ this.email3 = email3;
222
+ }
223
+ /**
224
+ * @return the mainPhone
225
+ */
226
+ public Phone getMainPhone() {
227
+ return mainPhone;
228
+ }
229
+ /**
230
+ * @param mainPhone the mainPhone to set
231
+ */
232
+ public void setMainPhone(Phone mainPhone) {
233
+ this.mainPhone = mainPhone;
234
+ }
235
+ /**
236
+ * @return the phones
237
+ */
238
+ public Phone[] getPhones() {
239
+ return phones;
240
+ }
241
+ /**
242
+ * @param phones the phones to set
243
+ */
244
+ public void setPhones(Phone[] phones) {
245
+ this.phones = phones;
246
+ }
247
+ /**
248
+ * @return the address
249
+ */
250
+ public Address getAddress() {
251
+ return address;
252
+ }
253
+ /**
254
+ * @param address the address to set
255
+ */
256
+ public void setAddress(Address address) {
257
+ this.address = address;
258
+ }
259
+
260
+ }
261
+
@@ -0,0 +1,122 @@
1
+ /**
2
+ *
3
+ */
4
+ package pl.ivmx.mappum;
5
+
6
+ import java.util.ArrayList;
7
+ import java.util.Calendar;
8
+ import java.util.List;
9
+
10
+ import iv.Client;
11
+ import iv.Person;
12
+ import junit.framework.TestCase;
13
+
14
+ /**
15
+ * @author Jan Topinski (jtopinski@ivmx.pl)
16
+ *
17
+ */
18
+ public class MappumTest extends TestCase {
19
+
20
+ /* (non-Javadoc)
21
+ * @see junit.framework.TestCase#setUp()
22
+ */
23
+ protected void setUp() throws Exception {
24
+ super.setUp();
25
+ }
26
+ public void testGetDefinedElementTrees(){
27
+
28
+ MappumApi mp = new MappumApi();
29
+ WorkdirLoader wl = mp.getWorkdirLoader("../sample/server/schema","../sample/server/map",null);
30
+ wl.generateAndRequire();
31
+ List<TreeElement> ls = wl.definedElementTrees();
32
+ TreeElement treeElement = ls.get(0);
33
+ assertEquals(null,treeElement.getClazz());
34
+ assertEquals("Client",treeElement.getName());
35
+ assertEquals(false,treeElement.getIsArray());
36
+ assertEquals(10,treeElement.getElements().size());
37
+ wl.cleanup();
38
+ }
39
+
40
+ public void testTransform(){
41
+ MappumApi mp = new MappumApi();
42
+ mp.loadMaps();
43
+ JavaTransform jt = mp.getJavaTransform();
44
+
45
+ Person per = newPerson();
46
+ Client cli = null;
47
+ Person person = null;
48
+
49
+ long time = System.currentTimeMillis();
50
+ for (int i = 0; i < 200; i++) {
51
+ cli = (Client) jt.transform(per);
52
+ person = (Person) jt.transform(cli);
53
+ }
54
+ time = System.currentTimeMillis()-time;
55
+ System.out.println(time);
56
+ assertEquals("2",cli.getSexId());
57
+ assertEquals("Skoryski",cli.getSurname());
58
+ assertEquals("M",person.getSex());
59
+ assertEquals("Skory",person.getName());
60
+ }
61
+ /**
62
+ * @return
63
+ */
64
+ private Person newPerson() {
65
+ Person per = new Person();
66
+ per.setTitle("sir");
67
+ per.setType("NaN");
68
+ per.setPersonId("asddsa");
69
+ per.setSex("M");
70
+ per.setName("Skory");
71
+ per.setEmail1("j@j.com");
72
+ per.setEmail2("k@k.com");
73
+ per.setEmail3("l@l.com");
74
+ per.setAddress(new Person.Address());
75
+ per.getAddress().setStreet("Victoria");
76
+ per.setPhones(new Person.Phone[]{new Person.Phone("21311231"), new Person.Phone("21311232")});
77
+ per.setMainPhone(new Person.Phone());
78
+ per.getMainPhone().setNumber("09876567");
79
+ per.getMainPhone().setType("mobile");
80
+ per.setCorporation("Corporation l.t.d.");
81
+ per.setDateUpdated(Calendar.getInstance().getTime());
82
+ per.setSpouse(new Person());
83
+ per.getSpouse().setName("Linda");
84
+ return per;
85
+ }
86
+ public void testParalel() throws InterruptedException{
87
+ int threads = 2;
88
+ final int loops = 100;
89
+
90
+ final MappumApi mp = new MappumApi();
91
+ mp.loadMaps();
92
+ final JavaTransform jt = mp.getJavaTransform();
93
+
94
+ Runnable task = new Runnable(){
95
+
96
+ public void run() {
97
+
98
+ Person per = newPerson();
99
+ for (int j = 0; j < loops; j++) {
100
+ Client cli = (Client) jt.transform(per);
101
+ Person person = (Person) jt.transform(cli);
102
+ }
103
+ }
104
+
105
+ };
106
+
107
+ List<Thread> tl = new ArrayList<Thread>();
108
+ for (int i = 0; i < threads; i++) {
109
+ Thread th = new Thread(task);
110
+ tl.add(th);
111
+ }
112
+ long time = System.currentTimeMillis();
113
+ for (Thread thread : tl) {
114
+ thread.start();
115
+ }
116
+ for (Thread thread : tl) {
117
+ thread.join();
118
+ }
119
+ time = System.currentTimeMillis()-time;
120
+ System.out.println(time);
121
+ }
122
+ }
@@ -0,0 +1,88 @@
1
+ # Example of map for given object domains CRM and ERP
2
+ require 'mappum'
3
+ require 'java'
4
+ import 'iv.Client'
5
+ import 'iv.Person'
6
+ require 'date'
7
+
8
+ Mappum.catalogue_add do
9
+
10
+ map Person,Client do |p, c|
11
+
12
+ #simple mapping
13
+ map p.title <=> c.title
14
+
15
+ #map with simple function call
16
+ map p.person_id << c.cid.downcase
17
+ map p.person_id.upcase >> c.cid
18
+
19
+ #dictionary use
20
+ map p.sex <=> c.sex_id, :dict => {"F" => "1", "M" => "2"}
21
+
22
+ #submaps
23
+ map p.address(Person::Address) <=> c.address(Client::Address) do |a, b|
24
+ map a.street <=> b.street
25
+ #etc.
26
+ end
27
+
28
+ #compicated finc call
29
+ map p.name >> c.surname do |name|
30
+ name + "ski"
31
+ end
32
+ map p.name << c.surname do |name|
33
+ if name =~ /ski/
34
+ name[0..-4]
35
+ else
36
+ name
37
+ end
38
+ end
39
+ #field to array and array to field
40
+ map p.email1 <=> c.emails[0]
41
+ map p.email2 <=> c.emails[1]
42
+ map p.email3 <=> c.emails[2]
43
+
44
+ map p.spouse(Person) <=> c.partners(Client::NameType)[0] do |ps,cp|
45
+ map ps.name <=> cp.name
46
+ "Wife" >> cp.type
47
+ end
48
+ map p.spouse(Person) <=> c.partners(Client::NameType)[1] do |ps,cp|
49
+ map ps.name <=> cp.name
50
+ "Friend" >> cp.type
51
+ end
52
+ map p.phones(Person::Phone)[] <=> c.phones[] do |a, b|
53
+ map a.number <=> b.self
54
+ end
55
+
56
+ #subobject to fields
57
+ map p.main_phone(Person::Phone) <=> c.self do |a, b|
58
+ map a.number <=> b.main_phone
59
+ map a.type <=> b.main_phone_type
60
+ end
61
+
62
+ #TODO one to many
63
+ #map p.name << [c.first_name, c.surname] do |fname, surname|
64
+ # fname + " " + surname
65
+ #end
66
+ #map p.name.split >> [c.first_name, c.surname]
67
+ # map p.corporation << c.self do |client|
68
+ # "#{client.company} #{client.company_suffix}" unless client.company.nil?
69
+ # end
70
+ # map p.corporation >> c.company do |corpo|
71
+ # corpo.split(" ")[0]
72
+ # end
73
+ # map p.corporation >> c.company_suffix do |corpo|
74
+ # corpo.split(" ")[1]
75
+ # end
76
+ #constants
77
+ map p.type << "NaN"
78
+ map "Last" >> c.order_by
79
+
80
+ #func
81
+ map p.date_updated << func do
82
+ Time.now
83
+ end
84
+ map func >> c.updated do
85
+ Time.now
86
+ end
87
+ end
88
+ end