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.
- data/.gitignore +4 -0
- data/LICENSE +15 -0
- data/README +53 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/bin/mapserver.rb +4 -0
- data/java-api/pom.xml +63 -0
- data/java-api/src/main/java/pl/ivmx/mappum/JavaTransform.java +12 -0
- data/java-api/src/main/java/pl/ivmx/mappum/MappumApi.java +83 -0
- data/java-api/src/main/java/pl/ivmx/mappum/TreeElement.java +23 -0
- data/java-api/src/main/java/pl/ivmx/mappum/WorkdirLoader.java +12 -0
- data/java-api/src/test/java/iv/Client.java +237 -0
- data/java-api/src/test/java/iv/Person.java +261 -0
- data/java-api/src/test/java/pl/ivmx/mappum/MappumTest.java +122 -0
- data/java-api/src/test/resources/map/example_map.rb +88 -0
- data/lib/mappum.rb +46 -0
- data/lib/mappum/autoconv_catalogue.rb +43 -0
- data/lib/mappum/dsl.rb +255 -0
- data/lib/mappum/java_transform.rb +107 -0
- data/lib/mappum/map.rb +194 -0
- data/lib/mappum/mapserver/mapgraph.rb +192 -0
- data/lib/mappum/mapserver/mapserver.rb +213 -0
- data/lib/mappum/mapserver/maptable.rb +80 -0
- data/lib/mappum/mapserver/views/doc.erb +15 -0
- data/lib/mappum/mapserver/views/main.erb +39 -0
- data/lib/mappum/mapserver/views/maptable.erb +16 -0
- data/lib/mappum/mapserver/views/rubysource.erb +25 -0
- data/lib/mappum/mapserver/views/transform-ws.wsdl.erb +50 -0
- data/lib/mappum/mapserver/views/ws-error.erb +10 -0
- data/lib/mappum/open_xml_object.rb +68 -0
- data/lib/mappum/ruby_transform.rb +199 -0
- data/lib/mappum/xml_transform.rb +382 -0
- data/mappum.gemspec +117 -0
- data/sample/address_fixture.xml +11 -0
- data/sample/crm.rb +9 -0
- data/sample/crm_client.xsd +28 -0
- data/sample/erp.rb +7 -0
- data/sample/erp_person.xsd +44 -0
- data/sample/example_conversions.rb +12 -0
- data/sample/example_map.rb +92 -0
- data/sample/example_notypes.rb +77 -0
- data/sample/example_when.rb +13 -0
- data/sample/person_fixture.xml +23 -0
- data/sample/person_fixture_any.xml +26 -0
- data/sample/server/map/example_any.rb +28 -0
- data/sample/server/map/example_soap4r.rb +59 -0
- data/sample/server/mapserver.sh +1 -0
- data/sample/server/schema/crm_client.xsd +29 -0
- data/sample/server/schema/erp/erp_person.xsd +38 -0
- data/test/test_conversions.rb +24 -0
- data/test/test_example.rb +175 -0
- data/test/test_openstruct.rb +129 -0
- data/test/test_soap4r.rb +108 -0
- data/test/test_when.rb +35 -0
- data/test/test_xml_any.rb +62 -0
- 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
|