Skip to content

Commit e03d3df

Browse files
committed
Add behaviour to the beans
1 parent cb3a93b commit e03d3df

File tree

1 file changed

+68
-3
lines changed

1 file changed

+68
-3
lines changed

javaobj/deserialize/beans.py

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,18 @@ def __init__(self, handle: int, data: bytes):
104104
self.length: int = length
105105

106106
def __repr__(self) -> str:
107-
return "[String {0:x}: {1}]".format(self.handle, self.value)
107+
return repr(self.value)
108+
# "[String {0:x}: {1}]".format(self.handle, self.value)
108109

109110
def __str__(self):
110111
return self.value
111112

113+
def __hash__(self):
114+
return hash(self.value)
115+
116+
def __eq__(self, other):
117+
return self.value == other
118+
112119

113120
class JavaField:
114121
"""
@@ -197,6 +204,33 @@ def __str__(self):
197204

198205
__repr__ = __str__
199206

207+
@property
208+
def serialVersionUID(self):
209+
"""
210+
Mimics the javaobj API
211+
"""
212+
return self.serial_version_uid
213+
214+
@property
215+
def flags(self):
216+
"""
217+
Mimics the javaobj API
218+
"""
219+
return self.desc_flags
220+
@property
221+
def fields_names(self):
222+
"""
223+
Mimics the javaobj API
224+
"""
225+
return [field.name for field in self.fields]
226+
227+
@property
228+
def fields_types(self):
229+
"""
230+
Mimics the javaobj API
231+
"""
232+
return [field.type for field in self.fields]
233+
200234
def is_array_class(self) -> bool:
201235
"""
202236
Determines if this is an array type
@@ -265,6 +299,23 @@ def __str__(self):
265299

266300
__repr__ = __str__
267301

302+
def __getattr__(self, name):
303+
"""
304+
Returns the field with the given name
305+
"""
306+
for cd_fields in self.field_data.values():
307+
for field, value in cd_fields.items():
308+
if field.name == name:
309+
return value
310+
311+
raise AttributeError(name)
312+
313+
def get_class(self):
314+
"""
315+
Returns the class of this instance
316+
"""
317+
return self.classdesc
318+
268319
def load_from_blockdata(
269320
self, parser, reader: DataStreamReader, indent: int = 0
270321
) -> bool:
@@ -297,6 +348,13 @@ def __str__(self):
297348

298349
__repr__ = __str__
299350

351+
@property
352+
def name(self):
353+
"""
354+
Mimics the javaobj API
355+
"""
356+
return self.classdesc.name
357+
300358

301359
class JavaEnum(ParsedJavaContent):
302360
"""
@@ -308,14 +366,21 @@ def __init__(
308366
):
309367
super().__init__(ContentType.ENUM)
310368
self.handle = handle
311-
self.class_desc = class_desc
369+
self.classdesc = class_desc
312370
self.value = value
313371

314372
def __str__(self):
315373
return "[Enum 0x{0:x}: {1}]".format(self.handle, self.value)
316374

317375
__repr__ = __str__
318376

377+
@property
378+
def constant(self):
379+
"""
380+
Mimics the javaobj API
381+
"""
382+
return self.value
383+
319384

320385
class JavaArray(ParsedJavaContent):
321386
"""
@@ -331,7 +396,7 @@ def __init__(
331396
):
332397
super().__init__(ContentType.ARRAY)
333398
self.handle = handle
334-
self.class_desc = class_desc
399+
self.classdesc = class_desc
335400
self.field_type = field_type
336401
self.content = content
337402

0 commit comments

Comments
 (0)