diff --git a/pom.xml b/pom.xml
index 9c95e85..5e54f64 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.alterdekim.game
actionScriptDecompiler
- 0.0.5
+ 0.0.6
jar
SWFDissect
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashClass.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashClass.java
new file mode 100644
index 0000000..1b9f827
--- /dev/null
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashClass.java
@@ -0,0 +1,12 @@
+package com.alterdekim.flash.decompiler.mapper;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface FlashClass {
+ String name() default "";
+}
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java
index cb6513c..ee925b2 100644
--- a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java
@@ -1,12 +1,16 @@
package com.alterdekim.flash.decompiler.mapper;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.Pair;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
@Slf4j
public class FlashMapper {
@@ -38,4 +42,58 @@ public class FlashMapper {
}
return null;
}
+
+ public static void mapToObj(Map o, List objs) {
+ for( OutputObject object : objs ) {
+ String entryName = object.getObjectClass().getAnnotation(FlashClass.class).name();
+ Map m = (Map) o.get(entryName);
+ if( object.getIsSimple() ) {
+ m.keySet().forEach(k -> {
+ try {
+ Object entry = object.getObjectClass().getDeclaredConstructor().newInstance();
+
+ Arrays.stream(object.getObjectClass().getDeclaredFields())
+ .filter(f -> f.isAnnotationPresent(FlashValue.class))
+ .forEach(f -> {
+ try {
+ f.setAccessible(true);
+ switch (f.getAnnotation(FlashValue.class).type()) {
+ case Id -> f.set(entry, Long.parseLong(k));
+ case Value -> f.set(entry, m.get(k));
+ }
+ } catch (IllegalAccessException e) {
+ log.error("FlashMapper valueSet error: {}", e);
+ }
+ });
+ object.getCallback().onOutputObjectReady(entry);
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
+ NoSuchMethodException e) {
+ log.error("FlashMapper class error: {}", e.getMessage());
+ }
+ });
+ continue;
+ }
+
+ m.keySet().forEach(k -> {
+ Long id = Long.parseLong(k);
+ Map obj = (Map) m.get(k);
+ Object entity = FlashMapper.mapToObj(obj, object.getObjectClass());
+ Optional f1 = Arrays.stream(object.getObjectClass().getDeclaredFields())
+ .filter(f -> f.isAnnotationPresent(FlashValue.class) && f.getAnnotation(FlashValue.class).type() == FlashValueType.Id)
+ .findFirst();
+ if( f1.isEmpty() ) {
+ log.error("FlashMapper valueSet error; can't find Id field for object.");
+ return;
+ }
+ f1.get().setAccessible(true);
+ try {
+ f1.get().set(entity, id);
+ } catch (IllegalAccessException e) {
+ log.error("FlashMapper valueSet error: {}", e);
+ return;
+ }
+ object.getCallback().onOutputObjectReady(entity);
+ });
+ }
+ }
}
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValue.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValue.java
new file mode 100644
index 0000000..b672d52
--- /dev/null
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValue.java
@@ -0,0 +1,12 @@
+package com.alterdekim.flash.decompiler.mapper;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface FlashValue {
+ FlashValueType type() default FlashValueType.Value;
+}
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValueType.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValueType.java
new file mode 100644
index 0000000..cc69b58
--- /dev/null
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashValueType.java
@@ -0,0 +1,6 @@
+package com.alterdekim.flash.decompiler.mapper;
+
+public enum FlashValueType {
+ Id,
+ Value;
+}
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObject.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObject.java
new file mode 100644
index 0000000..2e8e5a9
--- /dev/null
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObject.java
@@ -0,0 +1,12 @@
+package com.alterdekim.flash.decompiler.mapper;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public class OutputObject {
+ private final Class> objectClass;
+ private final Boolean isSimple;
+ private final OutputObjectCallback callback;
+}
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObjectCallback.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObjectCallback.java
new file mode 100644
index 0000000..651328f
--- /dev/null
+++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/OutputObjectCallback.java
@@ -0,0 +1,5 @@
+package com.alterdekim.flash.decompiler.mapper;
+
+public interface OutputObjectCallback {
+ void onOutputObjectReady(Object entity);
+}