mappum 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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