/* * This file is part of aion-emu <aion-emu.com>. * * aion-emu 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 3 of the License, or * (at your option) any later version. * * aion-emu 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 aion-emu. If not, see <http://www.gnu.org/licenses/>. */ package admincommands; import java.io.File; import java.util.List; import javax.xml.XMLConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.apache.log4j.Logger; import org.xml.sax.SAXException; import com.aionemu.gameserver.configs.administration.AdminConfig; import com.aionemu.gameserver.dataholders.SpawnsData; import com.aionemu.gameserver.dataholders.WorldMapsData; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.templates.WorldMapTemplate; import com.aionemu.gameserver.model.templates.spawn.SpawnGroup; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; import com.google.inject.Inject; /** * @author Luno * @author ATracer (xml version) * */ public class SaveSpawnData extends AdminCommand { private static Logger log = Logger.getLogger(SaveSpawnData.class); @Inject private SpawnsData spawnsData; @Inject private WorldMapsData worldMapsData; public SaveSpawnData() { super("save_spawn"); } @Override public void executeCommand(Player admin, String[] params) { if(admin.getAccessLevel() < AdminConfig.COMMAND_SAVESPAWNDATA) { PacketSendUtility.sendMessage(admin, "You dont have enough rights to execute this command"); return; } Schema schema = null; SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); try { schema = sf.newSchema(new File("./data/static_data/spawns/spawns.xsd")); } catch(SAXException e1) { log.error(e1.getCause()); PacketSendUtility.sendMessage(admin, "Unexpected error occured during saving"); return; } boolean isAllSave = params.length == 1 && "all".equalsIgnoreCase(params[0]); for(WorldMapTemplate template : worldMapsData) { List<SpawnGroup> spawnsForWorld = null; if(isAllSave) spawnsForWorld = spawnsData.getSpawnsForWorld(template.getMapId()); else spawnsForWorld = spawnsData.getNewSpawnsForWorld(template.getMapId()); if(spawnsForWorld != null && spawnsForWorld.size() > 0) { SpawnsData data = new SpawnsData(); data.getSpawnGroups().addAll(spawnsForWorld); File xml = new File("./data/static_data/spawns/new/" + template.getMapId() + ".xml"); JAXBContext jc; Marshaller marshaller; try { jc = JAXBContext.newInstance(SpawnsData.class); marshaller = jc.createMarshaller(); marshaller.setSchema(schema); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(data, xml); } catch(JAXBException e) { log.error(e.getCause()); PacketSendUtility.sendMessage(admin, "Unexpected error occured during saving"); return; } } } PacketSendUtility.sendMessage(admin, "Spawn data was saved into /static_data/spawns/new folder"); } }