From d6aca7c25ce1f422bc937b2e8be9e243d8812749 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Sun, 17 Sep 2017 23:46:54 -0400 Subject: [PATCH] refactor: changed copy methods to handle existing data. --- .../storage/graphdb/model/EffectData.java | 10 ++++++---- .../storage/graphdb/model/EquipmentData.java | 2 +- .../storage/graphdb/model/NpcData.java | 20 +++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java index e7cc275a..4638afb9 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java @@ -96,6 +96,8 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { } private StatData createApplyStatOnTickData() { + if (this.getApplyStatOnTickData() != null) + throw new IllegalStateException("Already has stats, can't create another"); StatData statData = this.createOrphanStats(); this.addApplyStatOnTickData(statData); return statData; @@ -123,14 +125,14 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { } private StatData createDurationStatData() { + if (this.getDurationStatData() != null) + throw new IllegalStateException("Already has stats, can't create another"); StatData statData = this.createOrphanStats(); this.addDurationStatData(statData); return statData; } private StatData createOrphanStats() { - if (this.getDurationStatData() != null) - throw new IllegalStateException("Already has stats, can't create another"); final StatData stats = this.getGraph().addFramedVertex(StatData.class); stats.setAgile(0); stats.setAim(0); @@ -156,8 +158,8 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { public static void copyEffect(EffectData dest, Effect src) { try { PropertyUtils.copyProperties(dest, src); - StatData.copyStats(dest.createApplyStatOnTickData(), src.getApplyStatsOnTick()); - StatData.copyStats(dest.createDurationStatData(), src.getDurationStats()); + StatData.copyStats((dest.getApplyStatOnTickData() != null ? dest.getApplyStatOnTickData() : dest.createApplyStatOnTickData()), src.getApplyStatsOnTick()); + StatData.copyStats((dest.getDurationStatData() != null ? dest.getDurationStatData() : dest.createDurationStatData()), src.getDurationStats()); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new IllegalStateException("Could not copy properties", e); } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java index 1bff49e2..06924124 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java @@ -87,7 +87,7 @@ public abstract class EquipmentData extends AbstractVertexFrame { public static void copyEquipment(EquipmentData dest, Equipment src) { try { PropertyUtils.copyProperties(dest, src); - StatData.copyStats(dest.getStatData(), src.getStats()); + StatData.copyStats((dest.getStatData() != null ? dest.getStatData() : dest.createStatData()), src.getStats()); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new IllegalStateException("Could not copy properties", e); } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java index 6750709e..278844e7 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java @@ -282,16 +282,32 @@ public abstract class NpcData extends AbstractInterceptingVertexFrame { public static void copyNpc(NpcData dest, Npc src) { try { PropertyUtils.copyProperties(dest, src); - LootData.copyLoot(dest.createLootData(), src.getLoot()); - StatData.copyStats(dest.createStatsData(), src.getStats()); + LootData.copyLoot((dest.getLootData() != null ? dest.getLootData() : dest.createLootData()), src.getLoot()); + StatData.copyStats((dest.getStatsData() != null ? dest.getStatsData() : dest.createStatsData()), src.getStats()); + + for(SpawnRuleData data : dest.getSpawnRuleDatas()) + data.remove(); for(SpawnRule spawnRule : src.getSpawnRules()) SpawnRuleData.copySpawnRule(dest.createSpawnRuleData(), spawnRule); + + for(AetherMudMessageData data : dest.getAttackMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getAttackMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createAttackMessageData(), message); + + + for(AetherMudMessageData data : dest.getBattleMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getBattleMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createBattleMessageData(), message); + + for(AetherMudMessageData data : dest.getCriticalAttackMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getCriticalAttackMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createCriticalAttackMessageData(), message); + + for(AetherMudMessageData data : dest.getIdleMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getIdleMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createIdleMessageData(), message); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { -- GitLab