From 2fc08152b1803bd6c3c71d312e7deed019149f51 Mon Sep 17 00:00:00 2001 From: alterdekim Date: Thu, 9 Jan 2025 20:22:51 +0300 Subject: [PATCH] Mapper added --- pom.xml | 2 +- .../flash/decompiler/mapper/FlashField.java | 12 +++++++ .../flash/decompiler/mapper/FlashMapper.java | 35 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java create mode 100644 src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java diff --git a/pom.xml b/pom.xml index f9c5a97..706907a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.alterdekim.game actionScriptDecompiler - 0.0.2 + 0.0.3 jar SWFDissect diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java new file mode 100644 index 0000000..09cd06d --- /dev/null +++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.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 FlashField { + 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 new file mode 100644 index 0000000..3eeb910 --- /dev/null +++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java @@ -0,0 +1,35 @@ +package com.alterdekim.flash.decompiler.mapper; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; + +@Slf4j +public class FlashMapper { + + public static T mapToObj(Map m, Class obj) { + try { + T result = obj.getDeclaredConstructor().newInstance(); + Arrays.stream(obj.getDeclaredFields()) + .filter(f -> m.containsKey(f.getName()) || (f.isAnnotationPresent(FlashField.class) && m.containsKey(f.getAnnotation(FlashField.class).name()))) + .map(f -> Pair.of(f, f.isAnnotationPresent(FlashField.class) ? f.getAnnotation(FlashField.class).name() : f.getName())) + .forEach(p -> { + try { + Field f = p.getLeft(); + String name = p.getRight(); + f.setAccessible(true); + f.set(result, m.get(name)); + } catch (IllegalAccessException e) { + log.error("FlashMapper valueSet error: {}", e.getMessage()); + } + }); + return result; + } catch (Exception e) { + log.error("FlashMapper error: {}", e.getMessage()); + } + return null; + } +}