Skip to content

Commit e17a05f

Browse files
committed
some Un-/Marshal functions added
1 parent 6cd7242 commit e17a05f

File tree

2 files changed

+66
-35
lines changed

2 files changed

+66
-35
lines changed
Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
2-
Tests gibt es noch nicht, ich denke mein Ansatz dient erst mal der Orientierung und Diskussion.
1+
Tests gibt es noch nicht, ich denke mein Ansatz dient erst mal der Orientierung und Diskussion. Wenn es alles so weit OK ist, können wir bestehende Tests auf TS umstellen.
32

43
Die Definitiondatei war ürsprünglich nicht systematisch erstellt, sondern hat sich aus den Anforderungen ergeben, die ich ad hoc beim Verwenden von Jsonix ergeben haben. Dazu hatte ich mir ursprünglich den Context rekursiv (begrenzt auf eine gewisse Tiefe) als JSON.stringify ausgeben lassen und dann bearbeitet, was natürlich nicht so gut die Class-Hierarchie trifft.
54

6-
Da ich kein professionelles UML-Tool besitze (und schon gar keins, was TS erzeugt, falls es so etwas überhaupt gibt), bin ich auf Java ausgewichen.
5+
Da ich kein professionelles UML-Tool besitze (und schon gar keins, was TS erzeugt, falls es so etwas überhaupt gibt (StarUML und TS-Plugin bekomme ich nicht zum laufen)), bin ich auf Java ausgewichen.
76
Die Klassen, die in Java erzeugt werden "ähneln" den Design-Pattern von TS, so dass man Ende mit ein paar regulären Ausrücken, den Code umwandeln kann (zu den Interfaces komme ich später. Man könnte das natürlich auch via xmi lösen, das fände ich zum gegenwärtigen Zeitpunkt aber etwas übertrieben.
87

98
Die Klassenhierarchie aus
@@ -20,17 +19,6 @@ In der Java Uml habe ich einfach Interfaces benutzt, was nicht ganz korrekt ist,
2019

2120
In TS und plain-JS, was d.ts benutzt gibt es keinen wirklich funktionierende instanceof Implementierung. Das generierte JS weiß quasi nichts von den Klassen, die in TS definiert sind. Der Code "weiß", wenn er eine TypeInfo verarbeitet nicht, ob es nicht vielleicht eine ClassInfo ist. Jsonix benutzt hier in jeder Klasse ein CLASS_NAME Feld, das konnte ich in die Interfaces nicht aufnehmen, da sie keinen Initializer besitzten dürfen (das Problem sollte aber erledigt sein, wenn man Klassen definiert, die ein CLASS_NAME Feld besitzen können).
2221

22+
Ich hätte gerne Generics eingebaut, leider geht das wegen der gekapselten factory nicht. Hier könnte man eine Funktion in Jsonix ergänzen, dann sollte es gehen:
2323

24-
25-
26-
27-
28-
29-
30-
31-
32-
33-
34-
35-
36-
24+
createUnmarshaller<T>(type: T): Unmarshaller<T>;

typescript/src/main/typescript/Jsonix.d.ts

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,113 @@
11
/**
22
* (description)
3-
*
3+
*
44
* @interface Unmarshaller
55
*/
6-
interface Unmarshaller {
6+
interface Unmarshaller { //TODO: <T> @see createUnmarshaller
77
/**
88
* (description)
9-
*
9+
*
1010
* @param {string} arg (description)
1111
* @returns {Object} (description)
1212
*/
1313
unmarshalString(arg: string): Object;
14+
15+
/**
16+
* (description)
17+
*
18+
* @param {string} fileName (description)
19+
* @param {(unmarshalled:Object)=> void} callback (description)
20+
* @param {Object} options (description)
21+
*/
22+
unmarshalFile(fileName: string, callback: (unmarshalled: Object) => void, options: Object): void;
23+
24+
1425
/**
1526
* (description)
1627
*
17-
* @param {File} arg (description)
28+
* @param {string} url (description)
29+
* @param {(unmarshalled:Object)=> void} callback (description)
30+
* @param {Object} options (description)
31+
*/
32+
unmarshalURL(url: string, callback: (unmarshalled: Object) => void, options: Object): void;
33+
34+
/**
35+
* (description)
36+
*
37+
* @param {Element} doc (description)
38+
* @param {string} scope (description)
1839
* @returns {Object} (description)
1940
*/
20-
unmarshalFile(arg: File): Object;
41+
unmarshalDocument(doc: Element, scope: string): Object;
2142
}
2243
/**
2344
* (description)
24-
*
45+
*
2546
* @interface Marshaller
2647
*/
27-
interface Marshaller {
48+
interface Marshaller { // TODO: generics like marshalString(object:T):string;
49+
/**
50+
* (description)
51+
*
52+
* @param {Object} object (description)
53+
* @returns {string} (description)
54+
*/
55+
marshalString(object: Object): string;
2856

57+
/**
58+
* (description)
59+
*
60+
* @param {Object} object (description)
61+
* @returns {Element} (description)
62+
*/
63+
marshalDocument(object: Object): Element;
2964
}
3065

3166
declare module Jsonix {
3267
export class Context {
3368
/**
3469
* Creates an instance of Context.
35-
*
70+
*
3671
* @param {any[]} s (description)
3772
*/
3873
constructor(s: any[]);
74+
3975
/**
4076
* (description)
41-
*
77+
*
4278
* @param {string} name (description)
4379
* @returns {TypeInfo} (description)
4480
*/
4581
getTypeInfoByName(name: string): TypeInfo;
82+
4683
/**
4784
* (description)
48-
*
85+
*
4986
* @param {string} typeName (description)
5087
* @returns {TypeInfo} (description)
5188
*/
5289
getTypeInfoByTypeName(typeName: string): TypeInfo;
90+
5391
/**
5492
* (description)
55-
*
93+
*
5694
* @param {string} typeNameKey (description)
5795
* @returns {TypeInfo} (description)
5896
*/
5997
getTypeInfoByTypeNameKey(typeNameKey: string): TypeInfo;
98+
6099
getElementInfo(name: string, scope: string): any;
100+
61101
getSubstitutionMembers(name: string): any;
62102

63103
createMarshaller(): Marshaller;
104+
64105
createUnmarshaller(): Unmarshaller;
65106

107+
//TODO: createUnmarshaller<T>(type: T): Unmarshaller<T>;
108+
66109
getNamespaceURI(prefix: string): any;
110+
67111
getPrefix(namespaceURI: string, defaultPrefix: string): any;
68112

69113
builtinTypeInfos: {
@@ -134,7 +178,7 @@ declare module Jsonix {
134178

135179
/**
136180
* (description)
137-
*
181+
*
138182
* @interface Styled
139183
*/
140184
interface Styled {
@@ -145,7 +189,7 @@ interface Styled {
145189
//TODO: package Schema.XSD
146190
/**
147191
* (description)
148-
*
192+
*
149193
* @interface QName
150194
*/
151195
interface QName {
@@ -159,7 +203,7 @@ interface QName {
159203
//TODO: package mapping
160204
/**
161205
* (description)
162-
*
206+
*
163207
* @interface TypeInfo
164208
*/
165209
interface TypeInfo {
@@ -169,7 +213,7 @@ interface TypeInfo {
169213

170214
/**
171215
* (description)
172-
*
216+
*
173217
* @interface PropertyInfo
174218
*/
175219
interface PropertyInfo {
@@ -183,7 +227,7 @@ interface PropertyInfo {
183227

184228
/**
185229
* (description)
186-
*
230+
*
187231
* @interface AbstractElementPropertyInfo
188232
* @extends {PropertyInfo}
189233
*/
@@ -197,7 +241,7 @@ interface AbstractElementPropertyInfo extends PropertyInfo {
197241

198242
/**
199243
* (description)
200-
*
244+
*
201245
* @interface ElementPropertyInfo
202246
* @extends {AbstractElementPropertyInfo}
203247
*/
@@ -209,7 +253,7 @@ interface ElementPropertyInfo extends AbstractElementPropertyInfo {
209253

210254
/**
211255
* (description)
212-
*
256+
*
213257
* @interface ClassInfo
214258
* @extends {TypeInfo}
215259
* @extends {Styled}
@@ -254,5 +298,4 @@ interface ClassInfo extends TypeInfo, Styled {
254298
value: { v }
255299
}
256300

257-
258301
}

0 commit comments

Comments
 (0)