/* * Copyright (C) 2010 Medo <smaxein@googlemail.com> * * This file is part of GmkSplitter. * GmkSplitter is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package com.ganggarrison.gmdec.files; import java.io.File; import java.io.FileFilter; import java.io.IOException; import org.lateralgm.file.GmFile; import org.lateralgm.resources.GmObject; import org.lateralgm.resources.sub.Event; import org.lateralgm.resources.sub.MainEvent; import com.ganggarrison.gmdec.DeferredReferenceCreatorNotifier; import com.ganggarrison.gmdec.EventNamer; import com.ganggarrison.gmdec.ResourceTreeEntry; import com.ganggarrison.gmdec.xml.EventXmlFormat; import com.ganggarrison.gmdec.xml.GmObjectXmlFormat; public class ObjectFormat extends ResourceFormat<GmObject> { @Override public GmObject read(File path, ResourceTreeEntry entry, DeferredReferenceCreatorNotifier drcn) throws IOException { GmObject gmObject = new GmObjectXmlFormat().read(getXmlFile(path, entry), drcn); gmObject.setName(entry.name); File subdir = new File(path, baseFilename(entry) + ".events"); if (subdir.isDirectory()) { File[] xmlFiles = subdir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isFile() && pathname.getName().toLowerCase().endsWith(".xml"); } }); for (File file : xmlFiles) { Event event = new EventXmlFormat().read(file, drcn); try { gmObject.mainEvents.get(event.mainId).events.add(event); } catch (IndexOutOfBoundsException e) { throw new IOException("Unknown main event type: " + event.mainId, e); } } } return gmObject; } @Override public void write(File path, GmObject gmObject, GmFile gmf) throws IOException { new GmObjectXmlFormat().write(gmObject, getXmlFile(path, gmObject)); File subdir = new File(path, baseFilename(gmObject) + ".events"); boolean subdirCreated = false; for (MainEvent me : gmObject.mainEvents) { for (Event e : me.events) { if (!subdirCreated) { if (!subdir.mkdir()) { throw new IOException("Directory " + subdir + " already exists."); } subdirCreated = true; } String eventName = EventNamer.createName(e, gmf); File eventFile = new File(subdir, eventName + ".xml"); new EventXmlFormat().write(e, eventFile); } } } }