From 7e72045ecd0e1181fe311e62fb265885a63a96b6 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Mon, 25 Oct 2010 14:52:46 -0700 Subject: [PATCH 01/20] Merging the fix to bug 6680 to master branch by hand due to differences in the code between 2.1.x and master. The fix is for join conditions in GenericDaoBase, making sure to only add non-null / non-empty where clauses to the query string, and to recursively prepare all join parameters since there might be sub-join clauses in the query. --- .../com/cloud/utils/db/GenericDaoBase.java | 66 +++++++++---------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 52f73e79c1f..3f36d69789a 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -343,15 +343,9 @@ public abstract class GenericDaoBase implements Gene } if (joins != null) { - for (JoinBuilder> join : joins) { - for (final Pair value : join.getT().getValues()) { - prepareAttribute(++i, pstmt, value.first(), value.second()); - } - } - if (s_logger.isTraceEnabled()) { - s_logger.trace("join search statement is " + pstmt.toString()); - } + i = addJoinAttributes(i, pstmt, joins); } + if (s_logger.isDebugEnabled() && lock != null) { txn.registerLock(pstmt.toString()); } @@ -404,14 +398,7 @@ public abstract class GenericDaoBase implements Gene } if (joins != null) { - for (JoinBuilder> join : joins) { - for (final Pair value : join.getT().getValues()) { - prepareAttribute(++i, pstmt, value.first(), value.second()); - } - } - if (s_logger.isTraceEnabled()) { - s_logger.trace("join search statement is " + pstmt.toString()); - } + i = addJoinAttributes(i, pstmt, joins); } ResultSet rs = pstmt.executeQuery(); @@ -636,19 +623,21 @@ public abstract class GenericDaoBase implements Gene return (M)rs.getObject(index); } } - + @DB(txn=false) - protected int addJoinAttributes(int count, PreparedStatement pstmt, List, Attribute, Attribute>> joins) throws SQLException { - for (Ternary, Attribute, Attribute> join : joins) { - for (final Pair value : join.first().getValues()) { + protected int addJoinAttributes(int count, PreparedStatement pstmt, Collection>> joins) throws SQLException { + for (JoinBuilder> join : joins) { + for (final Pair value : join.getT().getValues()) { prepareAttribute(++count, pstmt, value.first(), value.second()); } } - for (Ternary, Attribute, Attribute> join : joins) { - if (join.first().getJoins() != null) { - count = addJoinAttributes(count, pstmt, joins); + + for (JoinBuilder> join : joins) { + if (join.getT().getJoins() != null) { + count = addJoinAttributes(count, pstmt, join.getT().getJoins()); } } + if (s_logger.isTraceEnabled()) { s_logger.trace("join search statement is " + pstmt.toString()); } @@ -1015,31 +1004,38 @@ public abstract class GenericDaoBase implements Gene return sql; } - @DB(txn=false) + + @DB(txn = false) protected void addJoins(StringBuilder str, Collection>> joins) { int fromIndex = str.lastIndexOf("WHERE"); if (fromIndex == -1) { - fromIndex = str.length(); + fromIndex = str.length(); str.append(" WHERE "); } else { str.append(" AND "); } - for (JoinBuilder> join : joins) { - StringBuilder onClause = new StringBuilder(); - onClause.append(" ").append(join.getType().getName()).append(" ").append(join.getSecondAttribute().table).append(" ON ").append(join.getFirstAttribute().table).append(".").append(join.getFirstAttribute().columnName).append("=").append(join.getSecondAttribute().table).append(".").append(join.getSecondAttribute().columnName).append(" "); - str.insert(fromIndex, onClause); - str.append(" (").append(join.getT().getWhereClause()).append(") AND "); - fromIndex+=onClause.length(); - } - - str.delete(str.length() - 4, str.length()); + for (JoinBuilder> join : joins) { + StringBuilder onClause = new StringBuilder(); + onClause.append(" ").append(join.getType().getName()).append(" ").append(join.getSecondAttribute().table) + .append(" ON ").append(join.getFirstAttribute().table).append(".").append(join.getFirstAttribute().columnName) + .append("=").append(join.getSecondAttribute().table).append(".").append(join.getSecondAttribute().columnName) + .append(" "); + str.insert(fromIndex, onClause); + String whereClause = join.getT().getWhereClause(); + if ((whereClause != null) && !"".equals(whereClause)) { + str.append(" (").append(whereClause).append(") AND"); + } + fromIndex += onClause.length(); + } + + str.delete(str.length() - 4, str.length()); + for (JoinBuilder> join : joins) { if (join.getT().getJoins() != null) { addJoins(str, join.getT().getJoins()); } } - } @Override @DB(txn=false) From 18f6d67121a0024ef230dd4a09bc0dd7c5cddefb Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Mon, 25 Oct 2010 14:56:57 -0700 Subject: [PATCH 02/20] bug 6705, 6708: use the UserVmResponse for changeServiceForVirtualMachine API (UpgradeVMCmd) since the response is a vm. There was no need for a specific UpgradeVmResponse which had scalars instead of objects and the serializer skips null, but will serialize scalars with their default values, in this case 0 for id and host id. status 6750, 6708: resolved fixed --- .../com/cloud/api/commands/UpgradeVMCmd.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/server/src/com/cloud/api/commands/UpgradeVMCmd.java b/server/src/com/cloud/api/commands/UpgradeVMCmd.java index ee11b9b4792..cfb2b091b59 100644 --- a/server/src/com/cloud/api/commands/UpgradeVMCmd.java +++ b/server/src/com/cloud/api/commands/UpgradeVMCmd.java @@ -17,6 +17,8 @@ */ package com.cloud.api.commands; +import java.text.DecimalFormat; + import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; @@ -25,7 +27,7 @@ import com.cloud.api.BaseCmd.Manager; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.response.UpgradeVmResponse; +import com.cloud.api.response.UserVmResponse; import com.cloud.offering.ServiceOffering; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.VMTemplateVO; @@ -76,13 +78,14 @@ public class UpgradeVMCmd extends BaseCmd { } @Override @SuppressWarnings("unchecked") - public UpgradeVmResponse getResponse() { + public UserVmResponse getResponse() { UserVmVO userVm = (UserVmVO)getResponseObject(); - UpgradeVmResponse response = new UpgradeVmResponse(); + UserVmResponse response = new UserVmResponse(); if (userVm != null) { Account acct = ApiDBUtils.findAccountById(userVm.getAccountId()); - response.setAccount(acct.getAccountName()); + response.setId(userVm.getId()); + response.setAccountName(acct.getAccountName()); ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); response.setCpuSpeed(offering.getSpeed()); @@ -94,17 +97,26 @@ public class UpgradeVMCmd extends BaseCmd { } response.setServiceOfferingId(userVm.getServiceOfferingId()); - + + //stats calculation + DecimalFormat decimalFormat = new DecimalFormat("#.##"); + String cpuUsed = null; VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId()); if (vmStats != null) { - response.setCpuUsed((long) vmStats.getCPUUtilization()); - response.setNetworkKbsRead((long) vmStats.getNetworkReadKBs()); - response.setNetworkKbsWrite((long) vmStats.getNetworkWriteKBs()); + float cpuUtil = (float) vmStats.getCPUUtilization(); + cpuUsed = decimalFormat.format(cpuUtil) + "%"; + response.setCpuUsed(cpuUsed); + + long networkKbRead = (long)vmStats.getNetworkReadKBs(); + response.setNetworkKbsRead(networkKbRead); + + long networkKbWrite = (long)vmStats.getNetworkWriteKBs(); + response.setNetworkKbsWrite(networkKbWrite); } response.setCreated(userVm.getCreated()); response.setDisplayName(userVm.getDisplayName()); - response.setDomain(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); + response.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); response.setDomainId(acct.getDomainId()); response.setHaEnable(userVm.isHaEnabled()); From d229877cd8fafa50c3b2c4a3b7465568be4abf1d Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Mon, 25 Oct 2010 14:58:31 -0700 Subject: [PATCH 03/20] bug 6710: rebootRouter was supposed to return the rebooted router, not success/failure status 6710: resolved fixed --- .../cloud/api/commands/RebootRouterCmd.java | 49 ++++++++++++++----- .../src/com/cloud/network/NetworkManager.java | 4 +- .../com/cloud/network/NetworkManagerImpl.java | 8 +-- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/server/src/com/cloud/api/commands/RebootRouterCmd.java b/server/src/com/cloud/api/commands/RebootRouterCmd.java index b1a68483a90..3a48cf809bd 100644 --- a/server/src/com/cloud/api/commands/RebootRouterCmd.java +++ b/server/src/com/cloud/api/commands/RebootRouterCmd.java @@ -22,12 +22,10 @@ import org.apache.log4j.Logger; import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; -import com.cloud.api.BaseCmd; import com.cloud.api.BaseCmd.Manager; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.api.response.SuccessResponse; +import com.cloud.api.response.DomainRouterResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.vm.DomainRouterVO; @@ -82,16 +80,45 @@ public class RebootRouterCmd extends BaseAsyncCmd { } @Override @SuppressWarnings("unchecked") - public SuccessResponse getResponse() { - SuccessResponse response = new SuccessResponse(); - Boolean responseObject = (Boolean)getResponseObject(); + public DomainRouterResponse getResponse() { + DomainRouterResponse response = new DomainRouterResponse(); + DomainRouterVO router = (DomainRouterVO)getResponseObject(); - if (responseObject != null) { - response.setSuccess(responseObject); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reboot router"); - } + response.setId(router.getId()); + response.setZoneId(router.getDataCenterId()); + response.setZoneName(ApiDBUtils.findZoneById(router.getDataCenterId()).getName()); + response.setDns1(router.getDns1()); + response.setDns2(router.getDns2()); + response.setNetworkDomain(router.getDomain()); + response.setGateway(router.getGateway()); + response.setName(router.getName()); + response.setPodId(router.getPodId()); + if (router.getHostId() != null) { + response.setHostId(router.getHostId()); + response.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName()); + } + + response.setPrivateIp(router.getPrivateIpAddress()); + response.setPrivateMacAddress(router.getPrivateMacAddress()); + response.setPrivateNetmask(router.getPrivateNetmask()); + response.setPublicIp(router.getPublicIpAddress()); + response.setPublicMacAddress(router.getPublicMacAddress()); + response.setPublicNetmask(router.getPublicNetmask()); + response.setGuestIpAddress(router.getGuestIpAddress()); + response.setGuestMacAddress(router.getGuestMacAddress()); + response.setGuestNetmask(router.getGuestNetmask()); + response.setTemplateId(router.getTemplateId()); + response.setCreated(router.getCreated()); + response.setState(router.getState()); + + Account accountTemp = ApiDBUtils.findAccountById(router.getAccountId()); + if (accountTemp != null) { + response.setAccountName(accountTemp.getAccountName()); + response.setDomainId(accountTemp.getDomainId()); + response.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + response.setResponseName(getName()); return response; } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index a17bef17278..1f0823a3a13 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -144,10 +144,10 @@ public interface NetworkManager extends Manager { /** * Reboots domain router * @param cmd the command specifying router's id - * @return success or failure + * @return the rebooted router * @throws InvalidParameterValueException, PermissionDeniedException */ - boolean rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + DomainRouterVO rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; /** * @param hostId get all of the virtual machine routers on a host. * @return collection of VirtualMachineRouter diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 1d5a270075d..ab8f755254d 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -422,16 +422,16 @@ public class NetworkManagerImpl implements NetworkManager, DomainRouterService { public boolean rebootRouter(final long routerId, long startEventId) { return _routerMgr.rebootRouter(routerId, startEventId); } - + @Override - public boolean rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException{ - return _routerMgr.rebootRouter(cmd); + public DomainRouterVO rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException{ + _routerMgr.rebootRouter(cmd); + return _routerMgr.getRouter(cmd.getId()); } @Override public boolean associateIP(final DomainRouterVO router, final List ipAddrList, final boolean add, long vmId) { Commands cmds = new Commands(OnError.Continue); - int i=0; boolean sourceNat = false; for (final String ipAddress: ipAddrList) { if (ipAddress.equalsIgnoreCase(router.getPublicIpAddress())) From 83e4922b942989a80d14ffca23b2444ca7473d3e Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Mon, 25 Oct 2010 15:01:34 -0700 Subject: [PATCH 04/20] bug 6703, 6704: use the correct method signatures for invoking updateTemplate/updateIso and updateTemplatePermissions/updateIsoPermissions APIs. It's possible that the reflection should just use 'isAssignableFrom' when getting methods since the manager methods were using a base class as the parameter rather than UpdateTemplateCmd/UpdateIsoCmd and UpdateTemplatePermissions/UpdateIsoPermissions, but for now the explicit methods are added for simplicity. status 6703, 6704: resolved fixed --- .../api/commands/UpdateTemplateOrIsoCmd.java | 7 ++- .../com/cloud/server/ManagementServer.java | 14 +++--- .../cloud/server/ManagementServerImpl.java | 43 ++++++++++++++----- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java index 322c412a900..2a368d458f2 100644 --- a/server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java +++ b/server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java @@ -43,7 +43,7 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { private Long id; @Parameter(name="name", type=CommandType.STRING, description="the name of the image file") - private String isoName; + private String templateName; @Parameter(name="ostypeid", type=CommandType.LONG, description="the ID of the OS type that best represents the OS of this image.") private Long osTypeId; @@ -70,8 +70,8 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { return id; } - public String isoName() { - return isoName; + public String getTemplateName() { + return templateName; } public Long getOsTypeId() { @@ -85,5 +85,4 @@ public abstract class UpdateTemplateOrIsoCmd extends BaseCmd { public String getFormat() { return format; } - } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index f6278a5686e..e6d189d26c1 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -89,8 +89,10 @@ import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateAccountCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateIPForwardingRuleCmd; -import com.cloud.api.commands.UpdateTemplateOrIsoCmd; -import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; +import com.cloud.api.commands.UpdateIsoCmd; +import com.cloud.api.commands.UpdateIsoPermissionsCmd; +import com.cloud.api.commands.UpdateTemplateCmd; +import com.cloud.api.commands.UpdateTemplatePermissionsCmd; import com.cloud.api.commands.UpdateUserCmd; import com.cloud.api.commands.UpdateVMGroupCmd; import com.cloud.api.commands.UploadCustomCertificateCmd; @@ -595,10 +597,11 @@ public interface ManagementServer { /** * Creates a new template * @param cmd - * @return success/failure + * @return updated template * @throws InvalidParameterValueException, PermissionDeniedException */ - boolean updateTemplate(UpdateTemplateOrIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + VMTemplateVO updateTemplate(UpdateIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + VMTemplateVO updateTemplate(UpdateTemplateCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; /** * Copies a template from one secondary storage server to another @@ -1173,7 +1176,8 @@ public interface ManagementServer { boolean checkLocalStorageConfigVal(); boolean updateUser(UpdateUserCmd cmd) throws InvalidParameterValueException; - boolean updateTemplatePermissions(UpdateTemplateOrIsoPermissionsCmd cmd)throws InvalidParameterValueException, PermissionDeniedException,InternalErrorException; + boolean updateTemplatePermissions(UpdateTemplatePermissionsCmd cmd)throws InvalidParameterValueException, PermissionDeniedException,InternalErrorException; + boolean updateTemplatePermissions(UpdateIsoPermissionsCmd cmd)throws InvalidParameterValueException, PermissionDeniedException,InternalErrorException; String[] createApiKeyAndSecretKey(RegisterCmd cmd); VolumeVO findVolumeByInstanceAndDeviceId(long instanceId, long deviceId); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 0bf1a5591b8..0fe1e29d75a 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -128,7 +128,9 @@ import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateAccountCmd; import com.cloud.api.commands.UpdateDomainCmd; import com.cloud.api.commands.UpdateIPForwardingRuleCmd; +import com.cloud.api.commands.UpdateIsoCmd; import com.cloud.api.commands.UpdateIsoPermissionsCmd; +import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.UpdateTemplatePermissionsCmd; @@ -222,8 +224,6 @@ import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSVO; import com.cloud.storage.LaunchPermissionVO; import com.cloud.storage.Snapshot; -import com.cloud.storage.Upload; -import com.cloud.storage.Volume; import com.cloud.storage.Snapshot.SnapshotType; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotVO; @@ -236,7 +236,7 @@ import com.cloud.storage.StorageStats; import com.cloud.storage.Upload.Type; import com.cloud.storage.UploadVO; import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.Volume.VolumeType; +import com.cloud.storage.Volume; import com.cloud.storage.VolumeStats; import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.DiskOfferingDao; @@ -252,7 +252,6 @@ import com.cloud.storage.dao.UploadDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.download.DownloadMonitor; import com.cloud.storage.preallocatedlun.PreallocatedLunVO; import com.cloud.storage.preallocatedlun.dao.PreallocatedLunDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; @@ -3423,9 +3422,18 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public boolean updateTemplate(UpdateTemplateOrIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + public VMTemplateVO updateTemplate(UpdateIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + return updateTemplateOrIso(cmd); + } + + @Override + public VMTemplateVO updateTemplate(UpdateTemplateCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + return updateTemplateOrIso(cmd); + } + + private VMTemplateVO updateTemplateOrIso(UpdateTemplateOrIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { Long id = cmd.getId(); - String name = cmd.getName(); + String name = cmd.getTemplateName(); String displayText = cmd.getDisplayText(); String format = cmd.getFormat(); Long guestOSId = cmd.getOsTypeId(); @@ -3462,7 +3470,7 @@ public class ManagementServerImpl implements ManagementServer { boolean updateNeeded = !(name == null && displayText == null && format == null && guestOSId == null && passwordEnabled == null && bootable == null); if (!updateNeeded) { - return true; + return template; } template = _templateDao.createForUpdate(id); @@ -3504,7 +3512,9 @@ public class ManagementServerImpl implements ManagementServer { template.setBootable(bootable); } - return _templateDao.update(id, template); + _templateDao.update(id, template); + + return _templateDao.findById(id); } @Override @@ -5178,7 +5188,7 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("accountId", accountId); } else if (domainId != null) { DomainVO domain = _domainDao.findById((Long)domainId); - SearchCriteria joinSearch = sc.getJoin("accountSearch"); + SearchCriteria joinSearch = sc.getJoin("accountSearch"); joinSearch.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); } @@ -5216,9 +5226,20 @@ public class ManagementServerImpl implements ManagementServer { (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN)); } - @Override + @Override @DB + public boolean updateTemplatePermissions(UpdateTemplatePermissionsCmd cmd) throws InvalidParameterValueException, + PermissionDeniedException, InternalErrorException { + return updateTemplateOrIsoPermissions(cmd); + } + + @Override @DB + public boolean updateTemplatePermissions(UpdateIsoPermissionsCmd cmd) throws InvalidParameterValueException, + PermissionDeniedException, InternalErrorException { + return updateTemplateOrIsoPermissions(cmd); + } + @DB - public boolean updateTemplatePermissions(UpdateTemplateOrIsoPermissionsCmd cmd) throws InvalidParameterValueException, + protected boolean updateTemplateOrIsoPermissions(UpdateTemplateOrIsoPermissionsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException { Transaction txn = Transaction.currentTxn(); From 31a5c776924baff23e34b816da455cd4f7d0c5c0 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 25 Oct 2010 15:28:27 -0700 Subject: [PATCH 05/20] new UI - VLAN page - Direct VLAN and Virtual VLAN share the same template. --- ui/new/jsp/resource.jsp | 39 ++++++-------------------- ui/new/scripts/cloud.core2.resource.js | 22 +++++++-------- 2 files changed, 19 insertions(+), 42 deletions(-) diff --git a/ui/new/jsp/resource.jsp b/ui/new/jsp/resource.jsp index a5e7b4a9ded..f7d73abf6dd 100644 --- a/ui/new/jsp/resource.jsp +++ b/ui/new/jsp/resource.jsp @@ -1000,12 +1000,12 @@ -
-
-
+ - -
+ + -
-
- +
+
- - - - + diff --git a/ui/new/scripts/cloud.core2.resource.js b/ui/new/scripts/cloud.core2.resource.js index 823a1236573..e517d5de401 100644 --- a/ui/new/scripts/cloud.core2.resource.js +++ b/ui/new/scripts/cloud.core2.resource.js @@ -402,11 +402,11 @@ function zoneJsonToNetworkTab(jsonObj) { for (var i = 0; i < items.length; i++) { var item = items[i]; - var $template1; - if(item.forvirtualnetwork == "false") - $template1 = $("#direct_vlan_template").clone(); - else - $template1 = $("#virtual_vlan_template").clone(); + var $template1 = $("#vlan_template").clone(); + if(item.forvirtualnetwork == false) //direct + $template1.find("#vlan_type_icon").removeClass("virtual").addClass("direct"); + else //virtual + $template1.find("#vlan_type_icon").removeClass("direct").addClass("virtual"); vlanJsonToTemplate(item, $template1); $vlanContainer.append($template1.show()); @@ -884,12 +884,12 @@ function initAddVLANButton($midmenuAdd2Link) { var netmask = trim(thisDialog.find("#add_publicip_vlan_netmask").val()); var startip = trim(thisDialog.find("#add_publicip_vlan_startip").val()); var endip = trim(thisDialog.find("#add_publicip_vlan_endip").val()); - - var $template1; - if(type == "false") //direct - $template1 = $("#direct_vlan_template").clone(); - else //public - $template1 = $("#virtual_vlan_template").clone(); + + var $template1 = $("#vlan_template").clone(); + if(type == "false") //direct + $template1.find("#vlan_type_icon").removeClass("virtual").addClass("direct"); + else //virtual + $template1.find("#vlan_type_icon").removeClass("direct").addClass("virtual"); if($vlanContainer != null) $vlanContainer.prepend($template1.show()); From 9bbac6ee7672e41327fa5d008a4a94b661a33184 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 25 Oct 2010 15:52:25 -0700 Subject: [PATCH 06/20] new UI - resources page - zone page - always show Add Host, Add VLAN, Add Secondary Storage when clicking through different tabs. --- ui/new/index.jsp | 8 ++++ ui/new/scripts/cloud.core2.js | 3 +- ui/new/scripts/cloud.core2.resource.js | 65 +++++++++++++++----------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/ui/new/index.jsp b/ui/new/index.jsp index ae777103bba..6b023749c45 100644 --- a/ui/new/index.jsp +++ b/ui/new/index.jsp @@ -225,6 +225,14 @@ long milliseconds = new Date().getTime(); <%=t.t("add")%> +