package org.korsakow.ide.ui.controller;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.korsakow.domain.interf.IInterface;
import org.korsakow.domain.interf.IMedia;
import org.korsakow.domain.interf.IProject;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.k3.importer.K3Importer;
import org.korsakow.ide.ui.components.tree.FolderNode;
import org.korsakow.ide.ui.components.tree.KNode;
import org.korsakow.ide.ui.components.tree.ResourceNode;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTableModel;
/**
* One of the main reasons for orignially creating this class was that in order to create the folder structure we need to
* run through some DO's but we have this situation with the two sets of DO's so I isolated this code here.
* That said, this could be a good place to refactor controller-level import related code to.
*
* @author d
*
*/
public class ImportHelper
{
public static void createK3FolderStructure(ResourceTreeTableModel model, K3Importer importer)
{
Map<String, FolderNode> nodeMap = new HashMap<String, FolderNode>();
IProject project = importer.getProject();
Collection<IMedia> media = project.getMedia();
Collection<ISnu> snus = project.getSnus();
for (ISnu snu : snus)
{
media.remove(snu.getMainMedia());
createAndAddNode(nodeMap, model, snu.getMainMedia().getFilename(), snu);
}
for (IMedia medium : media)
{
createAndAddNode(nodeMap, model, medium.getFilename(), medium);
}
for (IInterface interf : project.getInterfaces())
{
model.appendNode( ResourceNode.create( interf ), model.getRoot() );
}
}
private static void createAndAddNode(Map<String, FolderNode> nodeMap, ResourceTreeTableModel model, String path, IResource resource)
{
FolderNode root = model.getRoot();
KNode resourceNode = model.findResource(resource.getId());
if (resourceNode == null)
resourceNode = ResourceNode.create(resource);
FolderNode parentFolder = null;
File file = new File(path);
File parentFile = file.getParentFile();
if (parentFile != null) {
parentFolder = nodeMap.get(parentFile.getAbsolutePath());
if (parentFolder == null) {
parentFolder = new FolderNode(parentFile.getName());
model.appendNode(parentFolder, root);
nodeMap.put(parentFile.getAbsolutePath(), parentFolder);
}
}
if (parentFolder == null)
parentFolder = root;
model.appendNode(resourceNode, parentFolder);
}
}