content: // Licensed to the Apache Software Foundation (ASF) under one
  // or more contributor license agreements.  See the NOTICE file
  // distributed with this work for additional information
  // regarding copyright ownership.  The ASF licenses this file
  // to you under the Apache License, Version 2.0 (the
  // "License"); you may not use this file except in compliance
  // with the License.  You may obtain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing,
  // software distributed under the License is distributed on an
  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, either express or implied.  See the License for the
  // specific language governing permissions and limitations
  // under the License.
  package com.cloud.usage;
  
  import java.util.Date;
  import java.util.TimeZone;
  
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
  import javax.persistence.Id;
  import javax.persistence.Table;
  import javax.persistence.Temporal;
  import javax.persistence.TemporalType;
  
  import com.cloud.utils.DateUtil;
  import org.apache.cloudstack.api.InternalIdentity;
  import org.apache.cloudstack.usage.Usage;
  import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
  import org.apache.commons.lang3.StringUtils;
  
  @Entity
  @Table(name = "cloud_usage")
  public class UsageVO implements Usage, InternalIdentity {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "id")
      private Long id = null;
  
      @Column(name = "zone_id")
      private Long zoneId = null;
  
      @Column(name = "account_id")
      private Long accountId = null;
  
      @Column(name = "domain_id")
      private Long domainId = null;
  
      @Column(name = "description")
      private String description = null;
  
      @Column(name = "usage_display")
      private String usageDisplay = null;
  
      @Column(name = "usage_type")
      private int usageType;
  
      @Column(name = "raw_usage")
      private Double rawUsage = null;
  
      @Column(name = "vm_instance_id")
      private Long vmInstanceId;
  
      @Column(name = "vm_name")
      private String vmName = null;
  
      @Column(name = "cpu_cores")
      private Long cpuCores = null;
  
      @Column(name = "memory")
      private Long memory = null;
  
      @Column(name = "cpu_speed")
      private Long cpuSpeed = null;
  
      @Column(name = "offering_id")
      private Long offeringId = null;
  
      @Column(name = "template_id")
      private Long templateId = null;
  
      @Column(name = "usage_id")
      private Long usageId = null;
  
      @Column(name = "type")
      private String type = null;
  
      @Column(name = "size")
      private Long size = null;
  
      @Column(name = "virtual_size")
      private Long virtualSize;
  
      @Column(name = "network_id")
      private Long networkId = null;
  
      @Column(name = "start_date")
      @Temporal(value = TemporalType.TIMESTAMP)
      private Date startDate = null;
  
      @Column(name = "end_date")
      @Temporal(value = TemporalType.TIMESTAMP)
      private Date endDate = null;
  
      @Column(name = "quota_calculated")
      private Integer quotaCalculated = 0;
  
      @Column(name = "is_hidden")
      private boolean isHidden = false;
  
      @Column(name = "state")
      private String state;
  
      public Integer getQuotaCalculated() {
          return quotaCalculated;
      }
  
      public void setQuotaCalculated(Integer quotaCalculated) {
          this.quotaCalculated = quotaCalculated;
      }
  
      public UsageVO() {
      }
  
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long vmId, String vmName,
              Long offeringId, Long templateId, Long usageId, Long size, Date startDate, Date endDate) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.vmInstanceId = vmId;
          this.vmName = vmName;
          this.offeringId = offeringId;
          this.templateId = templateId;
          this.usageId = usageId;
          this.size = size;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long vmId, String vmName,
              Long offeringId, Long templateId, Long usageId, Long size, Long virtualSize, Date startDate, Date endDate) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.vmInstanceId = vmId;
          this.vmName = vmName;
          this.offeringId = offeringId;
          this.templateId = templateId;
          this.usageId = usageId;
          this.size = size;
          this.virtualSize = virtualSize;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long usageId, String type,
              Long networkId, Date startDate, Date endDate) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.usageId = usageId;
          this.type = type;
          this.networkId = networkId;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long vmId, String vmName,
              Long offeringId, Long templateId, Long usageId, Date startDate, Date endDate, String type) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.vmInstanceId = vmId;
          this.vmName = vmName;
          this.offeringId = offeringId;
          this.templateId = templateId;
          this.usageId = usageId;
          this.type = type;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long vmId, String vmName,
              Long cpuCores, Long cpuSpeed, Long memory, Long offeringId, Long templateId, Long usageId, Date startDate, Date endDate, String type) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.vmInstanceId = vmId;
          this.vmName = vmName;
          this.cpuCores = cpuCores;
          this.cpuSpeed = cpuSpeed;
          this.memory = memory;
          this.offeringId = offeringId;
          this.templateId = templateId;
          this.usageId = usageId;
          this.type = type;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      //IPAddress Usage
      public UsageVO(Long zoneId, Long accountId, Long domainId, String description, String usageDisplay, int usageType, Double rawUsage, Long usageId, long size,
              String type, Date startDate, Date endDate, boolean isHidden) {
          this.zoneId = zoneId;
          this.accountId = accountId;
          this.domainId = domainId;
          this.description = description;
          this.usageDisplay = usageDisplay;
          this.usageType = usageType;
          this.rawUsage = rawUsage;
          this.usageId = usageId;
          this.size = size;
          this.type = type;
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
          this.isHidden = isHidden;
      }
  
      @Override
      public long getId() {
          return id;
      }
  
      @Override
      public Long getZoneId() {
          return zoneId;
      }
  
      @Override
      public Long getAccountId() {
          return accountId;
      }
  
      @Override
      public Long getDomainId() {
          return domainId;
      }
  
      @Override
      public String getDescription() {
          return description;
      }
  
      @Override
      public String getUsageDisplay() {
          return usageDisplay;
      }
  
      @Override
      public int getUsageType() {
          return usageType;
      }
  
      @Override
      public Double getRawUsage() {
          return rawUsage;
      }
  
      @Override
      public Long getVmInstanceId() {
          return vmInstanceId;
      }
  
      @Override
      public String getVmName() {
          return vmName;
      }
  
      @Override
      public Long getCpuCores() {
          return cpuCores;
      }
  
      @Override
      public Long getCpuSpeed() {
          return cpuSpeed;
      }
  
      @Override
      public Long getMemory() {
          return memory;
      }
  
      @Override
      public Long getOfferingId() {
          return offeringId;
      }
  
      @Override
      public Long getTemplateId() {
          return templateId;
      }
  
      @Override
      public Long getUsageId() {
          return usageId;
      }
  
      @Override
      public String getType() {
          return type;
      }
  
      @Override
      public Long getNetworkId() {
          return networkId;
      }
  
      @Override
      public Long getSize() {
          return size;
      }
  
      @Override
      public Long getVirtualSize() {
          return virtualSize;
      }
  
      @Override
      public Date getStartDate() {
          return startDate  == null ? null : new Date(startDate.getTime());
      }
  
      @Override
      public Date getEndDate() {
          return endDate  == null ? null : new Date(endDate.getTime());
      }
  
      @Override
      public boolean isHidden() {
          return isHidden;
      }
  
      public void setId(Long id) {
          this.id = id;
      }
  
      public void setType(String type) {
          this.type = type;
      }
  
      public void setStartDate(Date startDate) {
          this.startDate = startDate  == null ? null : new Date(startDate.getTime());
      }
  
      public void setEndDate(Date endDate) {
          this.endDate = endDate  == null ? null : new Date(endDate.getTime());
      }
  
      public void setDomainId(Long domainId) {
          this.domainId = domainId;
      }
  
      public void setAccountId(Long accountId) {
          this.accountId = accountId;
      }
  
      public void setZoneId(Long zoneId) {
          this.zoneId = zoneId;
      }
  
      public void setUsageType(int usageType) {
          this.usageType = usageType;
      }
  
      public void setRawUsage(Double rawUsage) {
          this.rawUsage = rawUsage;
      }
  
      public void setSize(Long size) {
          this.size = size;
      }
  
      public void setVirtualSize(Long virtualSize) {
          this.virtualSize = virtualSize;
      }
  
      public void setHidden(boolean hidden) {
          this.isHidden = hidden;
      }
  
      public String getState() {
          return state;
      }
  
      public void setState(String state) {
          this.state = state;
      }
  
      @Override
      public String toString() {
          return ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, "id", "usageId", "usageType");
      }
  
      public String toString(TimeZone timeZone) {
          String startDateString = DateUtil.displayDateInTimezone(timeZone, getStartDate());
          String endDateString = DateUtil.displayDateInTimezone(timeZone, getEndDate());
          return String.format("%s,\"startDate\":\"%s\",\"endDate\":\"%s\"}", StringUtils.chop(this.toString()), startDateString, endDateString);
      }
  }
  