package org.korsakow.domain.command;
import java.util.HashMap;
import java.util.Map;
import org.dsrg.soenea.domain.MapperException;
import org.dsrg.soenea.domain.command.CommandException;
import org.korsakow.domain.interf.IImage;
import org.korsakow.domain.interf.IInterface;
import org.korsakow.domain.interf.IPattern;
import org.korsakow.domain.interf.IProject;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.interf.IRule;
import org.korsakow.domain.interf.ISettings;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.interf.ISound;
import org.korsakow.domain.interf.IText;
import org.korsakow.domain.interf.IVideo;
import org.korsakow.domain.mapper.input.ResourceInputMapper;
public class DeleteResourceCommand extends AbstractCommand{
public static final String ID = "id";
private static Map<Class<?>, Class<? extends AbstractCommand>> map = new HashMap<Class<?>, Class<? extends AbstractCommand>>();
private static Class<? extends AbstractCommand> getCommand(Class<?> clazz) throws CommandException
{
if (!map.containsKey(clazz)) {
if (IImage.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteImageCommand.class);
} else
if (ISound.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteSoundCommand.class);
} else
if (IVideo.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteVideoCommand.class);
} else
if (IText.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteTextCommand.class);
} else
if (IPattern.class.isAssignableFrom(clazz)) {
map.put(clazz, DeletePatternCommand.class);
} else
if (ISnu.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteSnuCommand.class);
} else
if (IInterface.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteInterfaceCommand.class);
} else
if (IRule.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteRuleCommand.class);
} else
if (IProject.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteProjectCommand.class);
} else
if (ISettings.class.isAssignableFrom(clazz)) {
map.put(clazz, DeleteSettingsCommand.class);
} else
throw new CommandException("Don't know how to delete: " + clazz.getCanonicalName());
}
return map.get(clazz);
}
public DeleteResourceCommand(Helper request, Helper response) {
super(request, response);
}
public void execute() throws CommandException
{
IResource resource;
try {
resource = ResourceInputMapper.map(request.getLong(ID));
} catch (NumberFormatException e) {
throw new CommandException(e);
} catch (MapperException e) {
throw new CommandException(e);
}
final Class<? extends IResource> resourceClass = resource.getClass();
Class<? extends AbstractCommand> commandClass = getCommand(resourceClass);
forward(commandClass);
}
}