From fec3b1f8650b2397e68b4aa917f5e36cd041beef Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Thu, 8 May 2014 15:36:25 -0700 Subject: [PATCH] CLOUDSTACK-6530: Make Network and Volume implement Displayable interface. Iterate over all first class entities in the context to decide the display property for event display. (cherry picked from commit da0545ff869682181cf3a6d54d9459d70fe8e93d) Conflicts: api/src/org/apache/cloudstack/api/BaseCmd.java --- api/src/com/cloud/network/Network.java | 6 ++++- api/src/com/cloud/network/NetworkProfile.java | 5 ++++ .../com/cloud/network/rules/FirewallRule.java | 4 ++- api/src/com/cloud/storage/Volume.java | 6 ++++- .../apache/cloudstack/api/BaseAsyncCmd.java | 24 ----------------- .../org/apache/cloudstack/api/BaseCmd.java | 26 +++++++------------ .../user/network/CreateNetworkCmd.java | 8 ++++++ .../api/command/user/vm/UpdateVMCmd.java | 10 ------- .../api/command/user/vm/UpgradeVMCmd.java | 5 ---- .../command/user/volume/CreateVolumeCmd.java | 8 ++++++ .../command/user/volume/DeleteVolumeCmd.java | 5 ---- .../src/com/cloud/network/dao/NetworkVO.java | 5 ++++ .../src/com/cloud/storage/VolumeVO.java | 9 +++++++ .../storage/volume/VolumeObject.java | 5 ++++ 14 files changed, 62 insertions(+), 64 deletions(-) diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index ef3bcdf51c4..885bffef98e 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.api.Displayable; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -34,7 +35,7 @@ import com.cloud.utils.fsm.StateObject; /** * owned by an account. */ -public interface Network extends ControlledEntity, StateObject, InternalIdentity, Identity, Serializable { +public interface Network extends ControlledEntity, StateObject, InternalIdentity, Identity, Serializable, Displayable { public enum GuestType { Shared, Isolated @@ -327,8 +328,11 @@ public interface Network extends ControlledEntity, StateObject, I boolean getSpecifyIpRanges(); + @Deprecated boolean getDisplayNetwork(); + boolean isDisplay(); + String getGuruName(); /** diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java index db3cba56e1a..1b806d56de9 100644 --- a/api/src/com/cloud/network/NetworkProfile.java +++ b/api/src/com/cloud/network/NetworkProfile.java @@ -248,6 +248,11 @@ public class NetworkProfile implements Network { return displayNetwork; } + @Override + public boolean isDisplay(){ + return displayNetwork; + } + @Override public Long getVpcId() { return vpcId; diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index b02257b7c89..4346e2f665d 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -19,10 +19,11 @@ package com.cloud.network.rules; import java.util.List; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.api.Displayable; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -public interface FirewallRule extends ControlledEntity, Identity, InternalIdentity { +public interface FirewallRule extends ControlledEntity, Identity, InternalIdentity, Displayable { enum Purpose { Firewall, PortForwarding, LoadBalancing, Vpn, StaticNat, NetworkACL, } @@ -87,6 +88,7 @@ public interface FirewallRule extends ControlledEntity, Identity, InternalIdenti */ TrafficType getTrafficType(); + @Override boolean isDisplay(); } diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 304dbcfe342..a78049b5c99 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -19,6 +19,7 @@ package com.cloud.storage; import java.util.Date; import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.api.Displayable; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; @@ -26,7 +27,7 @@ import com.cloud.template.BasedOn; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; -public interface Volume extends ControlledEntity, Identity, InternalIdentity, BasedOn, StateObject { +public interface Volume extends ControlledEntity, Identity, InternalIdentity, BasedOn, StateObject, Displayable { enum Type { UNKNOWN, ROOT, SWAP, DATADISK, ISO }; @@ -191,5 +192,8 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba Integer getHypervisorSnapshotReserve(); + @Deprecated boolean isDisplayVolume(); + + boolean isDisplay(); } diff --git a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java index 82886aa1b4a..6b83d39dc9e 100644 --- a/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseAsyncCmd.java @@ -17,8 +17,6 @@ package org.apache.cloudstack.api; -import com.cloud.event.EventTypes; -import org.apache.cloudstack.context.CallContext; import org.apache.log4j.Logger; /** @@ -95,26 +93,4 @@ public abstract class BaseAsyncCmd extends BaseCmd { return job; } - @Override - public boolean isDisplay(){ - - // Get entity Class from the event name. Eg. - Volume.class - final CallContext ctx = CallContext.current(); - Class entityClass = EventTypes.getEntityClassForEvent(getEventType()); - boolean isDisplay = true; - - try{ - // If the entity Class implements Displayable interface then see the flag from VO - if (entityClass != null && Displayable.class.isAssignableFrom(entityClass)){ - Object objVO =_entityMgr.findById(entityClass, (Long)ctx.getContextParameter(entityClass.getName())); - isDisplay = ((Displayable)objVO).isDisplay(); - ctx.setEventDisplayEnabled(isDisplay); - } - }catch (Exception e){ - s_logger.trace("Caught exception while finding the display property, defaulting to true and moving on " +e); - } - - return isDisplay; - } - } diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index ac9a20866af..ed7e9839813 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -371,7 +371,7 @@ public abstract class BaseCmd { Object key = entry.getKey(); Class clz = Class.forName((String)key); if(Displayable.class.isAssignableFrom(clz)){ - final Object objVO = getEntityVO(clz, entry.getValue()); + final Object objVO = _entityMgr.findById(clz, getInternalId(entry.getValue())); isDisplay = ((Displayable) objVO).isDisplay(); } @@ -388,25 +388,17 @@ public abstract class BaseCmd { } - private Object getEntityVO(Class entityType, Object entityId){ + private static Long getInternalId(Object internalIdObj){ + Long internalId = null; - // entityId can be internal db id or UUID so accordingly call findbyId or findByUUID - - if (entityId instanceof Long){ - // Its internal db id - use findById - return _entityMgr.findById(entityType, (Long)entityId); - } else if(entityId instanceof String){ - try{ - // In case its an async job the internal db id would be a string because of json deserialization - Long internalId = Long.valueOf((String) entityId); - return _entityMgr.findById(entityType, internalId); - } catch (NumberFormatException e){ - // It is uuid - use findByUuid` - return _entityMgr.findByUuid(entityType, (String)entityId); - } + // In case its an async job the value would be a string because of json deserialization + if(internalIdObj instanceof String){ + internalId = Long.valueOf((String) internalIdObj); + }else if (internalIdObj instanceof Long){ + internalId = (Long) internalIdObj; } - return null; + return internalId; } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 364ba3a78ec..8390b7525be 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -213,6 +213,14 @@ public class CreateNetworkCmd extends BaseCmd { return displayNetwork; } + @Override + public boolean isDisplay() { + if(displayNetwork == null) + return true; + else + return displayNetwork; + } + public Long getZoneId() { Long physicalNetworkId = getPhysicalNetworkId(); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index b437305134b..7938c566715 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -150,16 +150,6 @@ public class UpdateVMCmd extends BaseCustomIdCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - @Override - public boolean isDisplay(){ - UserVm userVm = _entityMgr.findById(UserVm.class, getId()); - if (userVm != null) { - return userVm.isDisplayVm(); - } - - return true; // no info means true - } - @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException { CallContext.current().setEventDetails("Vm Id: " + getId()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index dec924358a8..b10555556bd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -117,11 +117,6 @@ public class UpgradeVMCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - @Override - public boolean isDisplay(){ - return _userVmService.isDisplayResourceEnabled(getId()); - } - @Override public void execute() throws ResourceAllocationException { CallContext.current().setEventDetails("Vm Id: " + getId()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 6666e0748b3..1e3c01cec9e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -157,6 +157,14 @@ public class CreateVolumeCmd extends BaseAsyncCreateCustomIdCmd { return displayVolume; } + @Override + public boolean isDisplay() { + if(displayVolume == null) + return true; + else + return displayVolume; + } + public Long getVirtualMachineId() { return virtualMachineId; } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 3e267b94e10..0b0c1b73039 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -79,11 +79,6 @@ public class DeleteVolumeCmd extends BaseCmd { return Account.ACCOUNT_ID_SYSTEM; // no account info given, parent this command to SYSTEM so ERROR events are tracked } - @Override - public boolean isDisplay(){ - return _volumeService.isDisplayResourceEnabled(getId()); - } - @Override public void execute() throws ConcurrentOperationException { CallContext.current().setEventDetails("Volume Id: " + getId()); diff --git a/engine/schema/src/com/cloud/network/dao/NetworkVO.java b/engine/schema/src/com/cloud/network/dao/NetworkVO.java index 319434533b9..8c0466fbfa7 100644 --- a/engine/schema/src/com/cloud/network/dao/NetworkVO.java +++ b/engine/schema/src/com/cloud/network/dao/NetworkVO.java @@ -577,6 +577,11 @@ public class NetworkVO implements Network { this.displayNetwork = displayNetwork; } + @Override + public boolean isDisplay(){ + return displayNetwork; + } + @Override public void setNetworkACLId(Long networkACLId) { this.networkACLId = networkACLId; diff --git a/engine/schema/src/com/cloud/storage/VolumeVO.java b/engine/schema/src/com/cloud/storage/VolumeVO.java index 9f27c231f0d..50b235e6c98 100755 --- a/engine/schema/src/com/cloud/storage/VolumeVO.java +++ b/engine/schema/src/com/cloud/storage/VolumeVO.java @@ -552,6 +552,15 @@ public class VolumeVO implements Volume { return displayVolume; } + @Override + public boolean isDisplay(){ + return displayVolume; + } + + public void setDisplay(boolean display){ + this.displayVolume = display; + } + public void setDisplayVolume(boolean displayVolume) { this.displayVolume = displayVolume; } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java index 385f8e63e96..0e7d5cc3687 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java @@ -167,6 +167,11 @@ public class VolumeObject implements VolumeInfo { return volumeVO.isDisplayVolume(); } + @Override + public boolean isDisplay() { + return volumeVO.isDisplay(); + } + public long getVolumeId() { return volumeVO.getId(); }