package org.ovirt.engine.ui.userportal.client.binders; import java.util.Map.Entry; import java.util.MissingResourceException; import org.ovirt.engine.core.common.businessentities.DiskImageBase; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.ui.uicompat.EnumTranslator; import org.ovirt.engine.ui.uicompat.Translator; public class ObjectNameIdResolverFactory { public static ObjectNameIdResolver getResolver(final Class<?> type) { if (type.isEnum()) { return new ObjectNameIdResolver() { @Override public String getItemName(Object o) { Translator translator = EnumTranslator.Create(type); String s; try { s = translator.get(o); } catch (MissingResourceException e) { s = ((Enum)o).name(); } return s; } @Override public String getItemId(Object o) { return ((Enum)(o)).name(); } }; } else if (type.equals(storage_pool.class)) { return new ObjectNameIdResolver() { public String getItemName(Object o) { return ((storage_pool)o).getname(); } public String getItemId(Object o) { return ((storage_pool)o).getId().toString(); } }; } else if (type.equals(VDSGroup.class)) { return new ObjectNameIdResolver() { public String getItemId(Object o) { if (o == null) return null; return ((VDSGroup)o).getID().toString(); } public String getItemName(Object o) { if (o == null) return null; return ((VDSGroup)o).getname(); } }; } else if (type.equals(VmTemplate.class)) { return new ObjectNameIdResolver() { public String getItemId(Object o) { if (o == null) return null; return ((VmTemplate)o).getId().toString(); } public String getItemName(Object o) { if (o == null) return null; return ((VmTemplate)o).getname(); } }; } else if (type.equals(Entry.class)) { // Will work ONLY with Entry<String,String> which is what the model works with, in any case of a different generics, the cast will throw an exception in runtime return new ObjectNameIdResolver() { public String getItemId(Object o) { if (o == null) return null; return ((Entry<String,String>)o).getKey(); } public String getItemName(Object o) { return ((Entry<String,String>)o).getValue(); } }; } else if (type.equals(Integer.class)) { return new ObjectNameIdResolver() { public String getItemId(Object o) { if (o == null) return null; return ((Integer)o).toString(); } public String getItemName(Object o) { if (o == null) return null; return ((Integer)o).toString(); } }; } else if (type.equals(VDS.class)) { return new ObjectNameIdResolver() { @Override public String getItemId(Object o) { if (o == null) return null; return ((VDS)o).getvds_id().toString(); } @Override public String getItemName(Object o) { if (o == null) return null; return ((VDS)o).getvds_name(); } }; } else if (type.equals(storage_domains.class)) { return new ObjectNameIdResolver() { public String getItemId(Object o) { if (o == null) return null; return ((storage_domains)o).getid().toString(); } public String getItemName(Object o) { if (o == null) return null; return ((storage_domains)o).getstorage_name(); } }; } else if (type.equals(String.class)) { return new ObjectNameIdResolver() { public String getItemId(Object o) { return (String)o; } public String getItemName(Object o) { return (String)o; } }; } else if (type.equals(network.class)) { return new ObjectNameIdResolver() { public String getItemName(Object o) { return (((network)o).getname()); } public String getItemId(Object o) { return (((network)o).getId().toString()); } }; } else if (type.equals(DiskImageBase.class)) { return new ObjectNameIdResolver() { public String getItemName(Object o) { return (((DiskImageBase)o).getdisk_type().name()); } public String getItemId(Object o) { return (((DiskImageBase)o).getdisk_type().name()); } }; } else { throw new RuntimeException("Could not find an Object name/id resolver for the class type " + type.getClass().getName()); } } }