package test.util; import java.io.File; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.apache.log4j.Logger; import org.korsakow.domain.Settings; import org.korsakow.domain.command.ExportFlashProjectCommand; import org.korsakow.services.export.ExportOptions; import org.korsakow.services.export.Exporter; import org.korsakow.services.export.IVideoEncodingProfile; import org.korsakow.services.export.PropertiesVideoEncodingProfile; import org.korsakow.domain.interf.IImage; import org.korsakow.domain.interf.IMedia; import org.korsakow.domain.interf.IProject; import org.korsakow.domain.interf.ISettings; import org.korsakow.domain.interf.ISound; import org.korsakow.domain.interf.IText; import org.korsakow.domain.interf.IVideo; import org.korsakow.domain.mapper.input.SettingsInputMapper; import org.korsakow.domain.task.ITask; import org.korsakow.domain.task.IWorker; import org.korsakow.ide.resources.ResourceType; import org.korsakow.ide.task.UIWorker; import org.korsakow.ide.util.ResourceManager; public class ExportHelper { public static Exporter createExporter(File exportDir, IProject project) throws Exception { ISettings settings = SettingsInputMapper.find(); Collection<IMedia> media = project.getMedia(); Collection<ISound> sounds = new HashSet<ISound>(); Collection<IVideo> videos = new HashSet<IVideo>(); Collection<IImage> images = new HashSet<IImage>(); Collection<IText> texts = new HashSet<IText>(); for (IMedia medium : media) { switch (ResourceType.forId(medium.getType())) { case SOUND: sounds.add((ISound)medium); break; case VIDEO: videos.add((IVideo)medium); break; case IMAGE: images.add((IImage)medium); break; case TEXT: texts.add((IText)medium); break; default: Logger.getLogger(ExportFlashProjectCommand.class).error("media list contains unknown media: " + medium.getClass().getCanonicalName(), new Exception("just-for-stacktrace")); break; } } Exporter exporter = new Exporter(); ExportOptions exportOptions = exporter.getExportOptions(); synchronized (exportOptions) { exportOptions.overwriteExisting = false; } exporter.setExportFonts(settings.getBoolean(Settings.EXPORT_FONTS)); exporter.setProject(project); exporter.setSettings(settings); exporter.setSnus(project.getSnus()); exporter.setSounds(sounds); exporter.setImages(images); exporter.setVideos(videos); exporter.setInterfaces(project.getInterfaces()); exporter.setTexts(texts); IVideoEncodingProfile videoEncodingProfile = new PropertiesVideoEncodingProfile(ResourceManager.getResourceStream("encodingprofiles/" + "flv_low" + ".properties")); exporter.setVideoEncodingProfile(videoEncodingProfile); return exporter; } public static IWorker createExportWorker(File exportDir, IProject project) throws Throwable { Exporter exporter = ExportHelper.createExporter(exportDir, project); List<ITask> exportTasks = exporter.createExportTasks(exportDir); // I suppose we could just run the tasks directly since this is a test. There's no particular reason for my using a worker // other than thats how the Application itself does it currently. IWorker worker = new UIWorker(exportTasks); return worker; } public static void export(File exportDir, IProject project) throws Throwable { IWorker worker = createExportWorker(exportDir, project); worker.execute(); worker.waitFor(); if (worker.getException() != null) throw worker.getException(); } }