/*******************************************************************************
* Copyright (C) 2013 JMaNGOS <http://jmangos.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
/**
*
*/
package org.jmangos.tools.dbc.service.impl;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jmangos.commons.entities.SpellEffectEntity;
import org.jmangos.commons.entities.SpellEntity;
import org.jmangos.commons.enums.SpellTarget;
import org.jmangos.tools.dbc.service.AbstractDbcService;
import org.jmangos.tools.dbc.struct.SpellEntry;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
* @author MinimaJack
*
*/
@Service
@Qualifier(value = "spellService")
public class SpellService extends AbstractDbcService<SpellEntity, SpellEntry> {
SpellService() {
super();
}
@PersistenceContext(unitName = "world")
private EntityManager entityManager;
@Override
public void save(final SpellEntity spellEntity) {
if (spellEntity.getId() == null) {
this.entityManager.persist(spellEntity);
} else {
this.entityManager.merge(spellEntity);
}
}
@Override
public void saveAll() {
this.entityManager.flush();
SpellEntry entry = getEntry();
do {
final SpellEntity se = new SpellEntity();
se.setId(entry.Id.get());
se.setCategory(entry.Category.get());
se.setDispel(entry.Dispel.get());
se.setMechanic(entry.Mechanic.get());
se.setAttributes(entry.Attributes.get());
se.setAttributesEx(entry.AttributesEx.get());
se.setAttributesEx2(entry.AttributesEx2.get());
se.setAttributesEx3(entry.AttributesEx3.get());
se.setAttributesEx4(entry.AttributesEx4.get());
se.setAttributesEx5(entry.AttributesEx5.get());
se.setAttributesEx6(entry.AttributesEx6.get());
se.setAttributesEx7(entry.AttributesEx7.get());
se.setStances(entry.Stances.get());
se.setStancesNot(entry.StancesNot.get());
se.setTargets(entry.Targets.get());
se.setTargetCreatureType(entry.TargetCreatureType.get());
se.setRequiresSpellFocus(entry.RequiresSpellFocus.get());
se.setFacingCasterFlags(entry.FacingCasterFlags.get());
se.setCasterAuraState(entry.CasterAuraState.get());
se.setTargetAuraState(entry.TargetAuraState.get());
se.setCasterAuraStateNot(entry.CasterAuraStateNot.get());
se.setTargetAuraStateNot(entry.TargetAuraStateNot.get());
se.setCasterAuraSpell(entry.casterAuraSpell.get());
se.setTargetAuraSpell(entry.targetAuraSpell.get());
se.setExcludeCasterAuraSpell(entry.excludeCasterAuraSpell.get());
se.setExcludeTargetAuraSpell(entry.excludeTargetAuraSpell.get());
se.setCastingTimeIndex(entry.CastingTimeIndex.get());
se.setRecoveryTime(entry.RecoveryTime.get());
se.setCategoryRecoveryTime(entry.CategoryRecoveryTime.get());
se.setInterruptFlags(entry.InterruptFlags.get());
se.setAuraInterruptFlags(entry.AuraInterruptFlags.get());
se.setChannelInterruptFlags(entry.ChannelInterruptFlags.get());
se.setProcFlags(entry.procFlags.get());
se.setProcChance(entry.procChance.get());
se.setProcCharges(entry.procCharges.get());
se.setMaxLevel(entry.maxLevel.get());
se.setBaseLevel(entry.baseLevel.get());
se.setSpellLevel(entry.spellLevel.get());
se.setDurationIndex(entry.DurationIndex.get());
se.setPowerType(entry.powerType.get());
se.setManaCost(entry.manaCost.get());
se.setManaCostPerlevel(entry.manaCostPerlevel.get());
se.setManaPerSecond(entry.manaPerSecond.get());
se.setManaPerSecondPerLevel(entry.manaPerSecondPerLevel.get());
se.setRangeIndex(entry.rangeIndex.get());
se.setSpeed(entry.speed.get());
se.setModalNextSpell(entry.modalNextSpell.get());
se.setStackAmount(entry.StackAmount.get());
se.setTotem1(entry.Totem[0].get());
se.setTotem2(entry.Totem[1].get());
for (int j = 0; j < 8; j++) {
se.setReagent(j, entry.Reagent[j].get());
se.setReagentCount(j, entry.ReagentCount[j].get());
}
se.setEquippedItemClass(entry.EquippedItemClass.get());
se.setEquippedItemSubClassMask(entry.EquippedItemSubClassMask.get());
se.setEquippedItemInventoryTypeMask(entry.EquippedItemInventoryTypeMask.get());
se.setSpellVisual1(entry.SpellVisual[0].get());
se.setSpellVisual2(entry.SpellVisual[1].get());
se.setSpellIconID(entry.SpellIconID.get());
se.setActiveIconID(entry.activeIconID.get());
se.setSpellPriority(entry.spellPriority.get());
se.setSpellName(entry.SpellName.get().trim());
se.setRank(entry.Rank.get());
se.setDescription(entry.Description.get());
se.setManaCostPercentage(entry.ManaCostPercentage.get());
se.setStartRecoveryCategory(entry.StartRecoveryCategory.get());
se.setStartRecoveryTime(entry.StartRecoveryTime.get());
se.setMaxTargetLevel(entry.MaxTargetLevel.get());
se.setSpellFamilyName(entry.SpellFamilyName.get());
se.setSpellFamilyFlags(entry.SpellFamilyFlags.get());
se.setSpellFamilyFlags2(entry.SpellFamilyFlags2.get());
se.setMaxAffectedTargets(entry.MaxAffectedTargets.get());
se.setDmgClass(entry.DmgClass.get());
se.setPreventionType(entry.PreventionType.get());
se.setStanceBarOrder(entry.StanceBarOrder.get());
se.setMinFactionId(entry.MinFactionId.get());
se.setMinReputation(entry.MinReputation.get());
se.setRequiredAuraVision(entry.RequiredAuraVision.get());
se.setTotemCategory(0, entry.TotemCategory[0].get());
se.setTotemCategory(1, entry.TotemCategory[1].get());
se.setAreaGroupId(entry.AreaGroupId.get());
se.setSchoolMask(entry.SchoolMask.get());
se.setRuneCostID(entry.runeCostID.get());
se.setSpellMissileID(entry.spellMissileID.get());
se.setPowerDisplayId(entry.PowerDisplayId.get());
se.setSpellDescriptionVariableID(entry.spellDescriptionVariableID.get());
se.setSpellDifficultyId(entry.SpellDifficultyId.get());
for (int j = 0; j < 3; j++) {
if (entry.Effect[j].get() > 0) {
final SpellEffectEntity spellEffect = new SpellEffectEntity();
spellEffect.setEffect(entry.Effect[j].get());
spellEffect.setEffectDieSides(entry.EffectDieSides[j].get());
Float f = entry.EffectRealPointsPerLeve[j].get();
if (!f.isNaN()) {
spellEffect.setEffectRealPointsPerLeve(f);
} else {
spellEffect.setEffectRealPointsPerLeve(0f);
}
spellEffect.setEffectBasePoints(entry.EffectBasePoints[j].get());
spellEffect.setEffectMechanic(entry.EffectMechanic[j].get());
spellEffect.setEffectImplicitTargetA(SpellTarget.get(entry.EffectImplicitTargetA[j].get()));
spellEffect.setEffectImplicitTargetB(SpellTarget.get(entry.EffectImplicitTargetB[j].get()));
spellEffect.setEffectRadiusIndex(entry.EffectRadiusIndex[j].get());
spellEffect.setEffectApplyAuraName(entry.EffectApplyAuraName[j].get());
spellEffect.setEffectAmplitude(entry.EffectAmplitude[j].get());
spellEffect.setEffectMultipleValue(entry.EffectMultipleValue[j].get());
spellEffect.setEffectChainTarget(entry.EffectChainTarget[j].get());
spellEffect.setEffectItemType(entry.EffectItemType[j].get());
spellEffect.setEffectMiscValue(entry.EffectMiscValue[j].get());
spellEffect.setEffectMiscValueB(entry.EffectMiscValueB[j].get());
spellEffect.setEffectTriggerSpell(entry.EffectTriggerSpell[j].get());
spellEffect.setEffectPointsPerComboPoint(entry.EffectPointsPerComboPoint[j].get());
spellEffect.setEffectSpellClassMaskA(entry.EffectSpellClassMaskA[j].get());
spellEffect.setEffectSpellClassMaskB(entry.EffectSpellClassMaskB[j].get());
spellEffect.setEffectSpellClassMaskC(entry.EffectSpellClassMaskC[j].get());
f = entry.DmgMultiplier[j].get();
if (!f.isNaN()) {
spellEffect.setDmgMultiplier(f);
} else {
spellEffect.setDmgMultiplier(0f);
}
se.getEffects().put(j, spellEffect);
}
}
this.entityManager.persist(se);
if ((entry.getCurrposition() % 10000) == 0) {
this.entityManager.flush();
this.entityManager.clear();
}
} while ((entry = entry.next()) != null);
this.entityManager.flush();
this.entityManager.clear();
}
@Override
public String getDbcPath() {
return "./../Realm/dbc/Spell.dbc";
}
}