package org.ovirt.engine.ui.uicommonweb; import java.util.Collections; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.ui.frontend.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.core.common.businessentities.*; @SuppressWarnings("unused") public final class Cloner { public static Object clone(Object instance) { if (instance instanceof VM) { return CloneVM((VM)instance); } if (instance instanceof VDS) { return CloneVDS((VDS)instance); } if (instance instanceof VDSGroup) { return CloneVDSGroup((VDSGroup)instance); } if (instance instanceof storage_pool) { return CloneStorage_pool((storage_pool)instance); } if (instance instanceof network) { return CloneNetwork((network)instance); } if (instance instanceof vm_pools) { return CloneVmPool((vm_pools)instance); } if (instance instanceof storage_domain_static) { return CloneStorageDomainStatic((storage_domain_static)instance); } if (instance instanceof VmTemplate) { return CloneVmTemplate((VmTemplate)instance); } if (instance instanceof VmNetworkInterface) { return CloneVmNetworkInterface((VmNetworkInterface)instance); } if (instance instanceof VdsNetworkInterface) { return CloneVdsNetworkInterface((VdsNetworkInterface)instance); } if (instance instanceof VmStatic) { return CloneVmStatic((VmStatic)instance); } if (instance instanceof Version) { return CloneVersion((Version)instance); } //Throw exception to determine development needs. throw new NotImplementedException(); } private static Object CloneVM(VM instance) { if (instance == null) { return null; } VM vm = new VM(); vm.setacpi_enable(instance.getacpi_enable()); //TODO: this field is read only in serialization - not sure why it is cloned //vm.ActualDiskWithSnapshotsSize = instance.ActualDiskWithSnapshotsSize; vm.setapp_list(instance.getapp_list()); vm.setauto_startup(instance.getauto_startup()); vm.setboot_sequence(instance.getboot_sequence()); vm.setclient_ip(instance.getclient_ip()); vm.setcpu_per_socket(instance.getcpu_per_socket()); vm.setcpu_sys(instance.getcpu_sys()); vm.setcpu_user(instance.getcpu_user()); vm.setdedicated_vm_for_vds(instance.getdedicated_vm_for_vds()); vm.setdefault_boot_sequence(instance.getdefault_boot_sequence()); vm.setdefault_display_type(instance.getdefault_display_type()); //TODO: 1. DiskList is an array - CopyTo should be considered (if it can be converted to java, otherwise a simple loop is needed) //TODO: 2. it is also read only in serialization, so not sure why it is cloned. it is manipulated via addDriveToImageMap //vm.DiskList = instance.DiskList; vm.setDiskSize(instance.getDiskSize()); //TODO: this is also an object, so needs to be cloned as well. while it is only accessed via VM.DiskMap, which creates a dictionary // from it - actually the DiskImage's themselves are probably sharing the same reference... vm.setDiskValueObjectMap(instance.getDiskValueObjectMap()); vm.setdisplay(instance.getdisplay()); vm.setdisplay_ip(instance.getdisplay_ip()); vm.setdisplay_secure_port(instance.getdisplay_secure_port()); vm.setdisplay_type(instance.getdisplay_type()); vm.setelapsed_time(instance.getelapsed_time()); vm.setRoundedElapsedTime(instance.getRoundedElapsedTime()); vm.setExitMessage(instance.getExitMessage()); vm.setExitStatus(instance.getExitStatus()); vm.setfail_back(instance.getfail_back()); vm.setguest_cur_user_id(instance.getguest_cur_user_id()); vm.setguest_cur_user_name(instance.getguest_cur_user_name()); vm.setguest_last_login_time(instance.getguest_last_login_time()); vm.setguest_last_logout_time(instance.getguest_last_logout_time()); vm.setguest_os(instance.getguest_os()); vm.setguest_requested_memory(instance.getguest_requested_memory()); //TODO: Object, should be "cloned" (probably easiest via new Version(instance.GuestAgentVersion.ToString()) // pay attention NOT to use lower case version in UICommon code. vm.setGuestAgentVersion(instance.getGuestAgentVersion()); vm.setinitrd_url(instance.getinitrd_url()); //TODO: array - need to consider cloning of array, and of actual interfaces vm.setInterfaces(instance.getInterfaces()); vm.setis_auto_suspend(instance.getis_auto_suspend()); vm.setis_initialized(instance.getis_initialized()); vm.setis_stateless(instance.getis_stateless()); vm.setiso_path(instance.getiso_path()); vm.setkernel_params(instance.getkernel_params()); vm.setkernel_url(instance.getkernel_url()); vm.setkvm_enable(instance.getkvm_enable()); //TODO: Guid/NGuid is an object, but code should treat it as immutable, and not change it's uuid directly. // (quick skim of code shows this should be safe with current code) vm.setlast_vds_run_on(instance.getlast_vds_run_on()); vm.setmigrating_to_vds(instance.getmigrating_to_vds()); vm.setMigrationSupport(instance.getMigrationSupport()); vm.setnice_level(instance.getnice_level()); //TODO: this is readonly in java, since it is computed. // options: use calculation here in cloner, or still wrap this in VM instead of serializing it //vm.num_of_cpus = instance.num_of_cpus; vm.setnum_of_monitors(instance.getnum_of_monitors()); vm.setnum_of_sockets(instance.getnum_of_sockets()); vm.setorigin(instance.getorigin()); vm.setVmPauseStatus(instance.getVmPauseStatus()); vm.setpriority(instance.getpriority()); vm.setrun_on_vds(instance.getrun_on_vds()); vm.setrun_on_vds_name(instance.getrun_on_vds_name()); vm.setsession(instance.getsession()); //TODO: see version comment above vm.setSpiceDriverVersion(instance.getSpiceDriverVersion()); vm.setstatus(instance.getstatus()); vm.setstorage_pool_id(instance.getstorage_pool_id()); vm.setstorage_pool_name(instance.getstorage_pool_name()); vm.settime_zone(instance.gettime_zone()); vm.setTransparentHugePages(instance.getTransparentHugePages()); vm.setusage_cpu_percent(instance.getusage_cpu_percent()); vm.setusage_mem_percent(instance.getusage_mem_percent()); vm.setusage_network_percent(instance.getusage_network_percent()); vm.setusb_policy(instance.getusb_policy()); vm.setutc_diff(instance.getutc_diff()); vm.setvds_group_compatibility_version(instance.getvds_group_compatibility_version()); vm.setvds_group_id(instance.getvds_group_id()); vm.setvds_group_name(instance.getvds_group_name()); vm.setvm_creation_date(instance.getvm_creation_date()); vm.setvm_description(instance.getvm_description()); vm.setvm_domain(instance.getvm_domain()); vm.setvm_guid(instance.getvm_guid()); vm.setvm_host(instance.getvm_host()); vm.setvm_ip(instance.getvm_ip()); vm.setvm_last_boot_time(instance.getvm_last_boot_time()); vm.setvm_last_up_time(instance.getvm_last_up_time()); vm.setvm_mem_size_mb(instance.getvm_mem_size_mb()); vm.setvm_name(instance.getvm_name()); vm.setvm_os(instance.getvm_os()); vm.setvm_pid(instance.getvm_pid()); vm.setvm_type(instance.getvm_type()); vm.setVmPoolId(instance.getVmPoolId()); vm.setVmPoolName(instance.getVmPoolName()); vm.setvmt_guid(instance.getvmt_guid()); vm.setvmt_name(instance.getvmt_name()); return vm; } private static Object CloneVersion(Version instance) { return new Version(instance.toString()); } private static Object CloneVDS(VDS instance) { VDS obj = new VDS(); obj.sethost_name(instance.gethost_name()); obj.setManagmentIp(instance.getManagmentIp()); obj.setpm_enabled(instance.getpm_enabled()); obj.setPmOptionsMap(instance.getPmOptionsMap()); obj.setpm_password(instance.getpm_password()); obj.setpm_port(instance.getpm_port()); obj.setpm_type(instance.getpm_type()); obj.setpm_user(instance.getpm_user()); obj.setport(instance.getport()); obj.setserver_SSL_enabled(instance.getserver_SSL_enabled()); obj.setvds_group_id(instance.getvds_group_id()); obj.setvds_id(instance.getvds_id()); obj.setvds_name(instance.getvds_name()); obj.setvds_strength(instance.getvds_strength()); obj.setvds_type(instance.getvds_type()); obj.setUniqueId(instance.getUniqueId()); return obj; } private static storage_pool CloneStorage_pool(storage_pool instance) { storage_pool obj = new storage_pool(); obj.setdescription(instance.getdescription()); obj.setId(instance.getId()); obj.setname(instance.getname()); obj.setstorage_pool_type(instance.getstorage_pool_type()); obj.setstatus(instance.getstatus()); obj.setmaster_domain_version(instance.getmaster_domain_version()); obj.setLVER(instance.getLVER()); obj.setrecovery_mode(instance.getrecovery_mode()); obj.setspm_vds_id(instance.getspm_vds_id()); obj.setcompatibility_version(instance.getcompatibility_version()); return obj; } private static VDSGroup CloneVDSGroup(VDSGroup instance) { VDSGroup obj = new VDSGroup(); obj.setID(instance.getID()); obj.setname(instance.getname()); obj.setdescription(instance.getdescription()); obj.setcpu_name(instance.getcpu_name()); obj.setselection_algorithm(instance.getselection_algorithm()); obj.sethigh_utilization(instance.gethigh_utilization()); obj.setlow_utilization(instance.getlow_utilization()); obj.setcpu_over_commit_duration_minutes(instance.getcpu_over_commit_duration_minutes()); obj.sethypervisor_type(instance.gethypervisor_type()); obj.setcompatibility_version(instance.getcompatibility_version()); obj.setMigrateOnError(instance.getMigrateOnError()); obj.setTransparentHugepages(instance.getTransparentHugepages()); obj.setstorage_pool_id(instance.getstorage_pool_id()); obj.setmax_vds_memory_over_commit(instance.getmax_vds_memory_over_commit()); return obj; } private static network CloneNetwork(network instance) { network obj = new network(null); obj.setaddr(instance.getaddr()); obj.setdescription(instance.getdescription()); obj.setId(instance.getId()); obj.setname(instance.getname()); obj.setsubnet(instance.getsubnet()); obj.setgateway(instance.getgateway()); obj.settype(instance.gettype()); obj.setvlan_id(instance.getvlan_id()); obj.setstp(instance.getstp()); obj.setStatus(instance.getStatus()); obj.setstorage_pool_id(instance.getstorage_pool_id()); obj.setis_display(instance.getis_display()); return obj; } private static vm_pools CloneVmPool(vm_pools instance) { vm_pools obj = new vm_pools(); obj.setvm_pool_description(instance.getvm_pool_description()); obj.setvm_pool_id(instance.getvm_pool_id()); obj.setvm_pool_name(instance.getvm_pool_name()); obj.setvm_pool_type(instance.getvm_pool_type()); obj.setvds_group_id(instance.getvds_group_id()); obj.setvm_pool_type(instance.getvm_pool_type()); obj.setparameters(instance.getparameters()); obj.setDefaultEndTime(instance.getDefaultEndTime()); obj.setDefaultStartTime(instance.getDefaultStartTime()); obj.setDefaultTimeInDays(instance.getDefaultTimeInDays()); obj.setvds_group_name(instance.getvds_group_name()); obj.setvm_assigned_count(instance.getvm_assigned_count()); obj.setvm_pool_description(instance.getvm_pool_description()); obj.setvm_running_count(instance.getvm_running_count()); return obj; } private static storage_domain_static CloneStorageDomainStatic(storage_domain_static instance) { storage_domain_static obj = new storage_domain_static(); obj.setConnection(instance.getConnection()); obj.setId(instance.getId()); obj.setstorage(instance.getstorage()); obj.setstorage_domain_type(instance.getstorage_domain_type()); obj.setstorage_type(instance.getstorage_type()); obj.setstorage_name(instance.getstorage_name()); obj.setStorageFormat(instance.getStorageFormat()); return obj; } private static VmTemplate CloneVmTemplate(VmTemplate instance) { VmTemplate obj = new VmTemplate(); obj.setstorage_pool_id(instance.getstorage_pool_id()); obj.setstorage_pool_name(instance.getstorage_pool_name()); obj.setdefault_display_type(instance.getdefault_display_type()); obj.setpriority(instance.getpriority()); obj.setiso_path(instance.getiso_path()); obj.setorigin(instance.getorigin()); obj.setSizeGB(instance.getSizeGB()); //TODO: see comments above on DiskImageMap obj.setDiskImageMap(instance.getDiskImageMap()); obj.setInterfaces(instance.getInterfaces()); obj.setauto_startup(instance.getauto_startup()); obj.setchild_count(instance.getchild_count()); obj.setcpu_per_socket(instance.getcpu_per_socket()); obj.setcreation_date(instance.getcreation_date()); obj.setdefault_boot_sequence(instance.getdefault_boot_sequence()); obj.setdescription(instance.getdescription()); obj.setdomain(instance.getdomain()); obj.setfail_back(instance.getfail_back()); obj.sethypervisor_type(instance.gethypervisor_type()); obj.setis_auto_suspend(instance.getis_auto_suspend()); obj.setis_stateless(instance.getis_stateless()); obj.setmem_size_mb(instance.getmem_size_mb()); obj.setname(instance.getname()); obj.setnice_level(instance.getnice_level()); obj.setnum_of_monitors(instance.getnum_of_monitors()); obj.setnum_of_sockets(instance.getnum_of_sockets()); obj.setoperation_mode(instance.getoperation_mode()); obj.setstatus(instance.getstatus()); obj.settime_zone(instance.gettime_zone()); obj.setusb_policy(instance.getusb_policy()); obj.setvds_group_id(instance.getvds_group_id()); obj.setvds_group_name(instance.getvds_group_name()); obj.setvm_type(instance.getvm_type()); obj.setId(instance.getId()); return obj; } private static VmStatic CloneVmStatic(VmStatic instance) { VmStatic obj = new VmStatic(); obj.setfail_back(instance.getfail_back()); obj.setdefault_boot_sequence(instance.getdefault_boot_sequence()); obj.setvm_type(instance.getvm_type()); obj.setdefault_display_type(instance.getdefault_display_type()); obj.setpriority(instance.getpriority()); obj.setiso_path(instance.getiso_path()); obj.setorigin(instance.getorigin()); obj.setauto_startup(instance.getauto_startup()); obj.setcpu_per_socket(instance.getcpu_per_socket()); obj.setcreation_date(instance.getcreation_date()); obj.setdedicated_vm_for_vds(instance.getdedicated_vm_for_vds()); obj.setdescription(instance.getdescription()); obj.setdomain(instance.getdomain()); obj.setis_auto_suspend(instance.getis_auto_suspend()); obj.setis_initialized(instance.getis_initialized()); obj.setis_stateless(instance.getis_stateless()); obj.setmem_size_mb(instance.getmem_size_mb()); obj.setDiskSize(instance.getDiskSize()); obj.setnice_level(instance.getnice_level()); obj.setnum_of_monitors(instance.getnum_of_monitors()); obj.setnum_of_sockets(instance.getnum_of_sockets()); obj.settime_zone(instance.gettime_zone()); obj.setusb_policy(instance.getusb_policy()); obj.setvds_group_id(instance.getvds_group_id()); obj.setId(instance.getId()); obj.setvm_name(instance.getvm_name()); obj.setvmt_guid(instance.getvmt_guid()); return obj; } private static void CloneNetworkStatisticss(NetworkStatistics instance, NetworkStatistics obj) { obj.setId(instance.getId()); obj.setReceiveDropRate(instance.getReceiveDropRate()); obj.setReceiveRate(instance.getReceiveRate()); obj.setTransmitDropRate(instance.getTransmitDropRate()); obj.setTransmitRate(instance.getTransmitRate()); obj.setStatus(instance.getStatus()); } private static VdsNetworkStatistics CloneVdsNetworkStatistics(VdsNetworkStatistics instance) { VdsNetworkStatistics obj = new VdsNetworkStatistics(); CloneNetworkStatisticss(instance, obj); obj.setVdsId(instance.getVdsId()); return obj; } private static Object CloneVdsNetworkInterface(VdsNetworkInterface vdsNetworkInterface) { VdsNetworkInterface obj = new VdsNetworkInterface(); obj.setAddress(vdsNetworkInterface.getAddress()); obj.setBonded(vdsNetworkInterface.getBonded()); obj.setBondName(vdsNetworkInterface.getBondName()); obj.setBondOptions(vdsNetworkInterface.getBondOptions()); obj.setBondType(vdsNetworkInterface.getBondType()); obj.setBootProtocol(vdsNetworkInterface.getBootProtocol()); obj.setGateway(vdsNetworkInterface.getGateway()); obj.setId(vdsNetworkInterface.getId()); obj.setMacAddress(vdsNetworkInterface.getMacAddress()); obj.setName(vdsNetworkInterface.getName()); obj.setNetworkName(vdsNetworkInterface.getNetworkName()); obj.setSpeed(vdsNetworkInterface.getSpeed()); obj.setStatistics(CloneVdsNetworkStatistics((VdsNetworkStatistics)vdsNetworkInterface.getStatistics())); return obj; } private static VmNetworkStatistics CloneVmNetworkStatistics(VmNetworkStatistics instance) { VmNetworkStatistics obj = new VmNetworkStatistics(); CloneNetworkStatisticss(instance, obj); obj.setVmId(instance.getVmId()); return obj; } private static Object CloneVmNetworkInterface(VmNetworkInterface vmNetworkInterface) { VmNetworkInterface obj = new VmNetworkInterface(); obj.setId(vmNetworkInterface.getId()); obj.setMacAddress(vmNetworkInterface.getMacAddress()); obj.setName(vmNetworkInterface.getName()); obj.setNetworkName(vmNetworkInterface.getNetworkName()); obj.setSpeed(vmNetworkInterface.getSpeed()); obj.setType(vmNetworkInterface.getType()); obj.setVmId(vmNetworkInterface.getVmId()); obj.setVmName(vmNetworkInterface.getVmName()); obj.setVmTemplateId(vmNetworkInterface.getVmTemplateId()); obj.setStatistics(CloneVmNetworkStatistics((VmNetworkStatistics)vmNetworkInterface.getStatistics())); return obj; } }