@Override
  public long getEntityOwnerId() {

    Volume volume = _entityMgr.findById(Volume.class, getVolumeId());
    if (volume == null) {
      throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId);
    }

    Account account = _accountService.getAccount(volume.getAccountId());
    // Can create templates for enabled projects/accounts only
    if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
      Project project = _projectService.findByProjectAccountId(volume.getAccountId());
      if (project.getState() != Project.State.Active) {
        throw new PermissionDeniedException(
            "Can't add resources to the project id="
                + project.getId()
                + " in state="
                + project.getState()
                + " as it's no longer active");
      }
    } else if (account.getState() == Account.State.disabled) {
      throw new PermissionDeniedException("The owner of template is disabled: " + account);
    }

    return volume.getAccountId();
  }
 @Override
 public void create() throws ResourceAllocationException {
   UserContext.current().setEventDetails("Project Name: " + getName());
   Project project =
       _projectService.createProject(getName(), getDisplayText(), getAccountName(), getDomainId());
   if (project != null) {
     this.setEntityId(project.getId());
   } else {
     throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project");
   }
 }
  @Override
  public long getEntityOwnerId() {
    final Long volumeId = getVolumeId();
    final Long snapshotId = getSnapshotId();
    final Account callingAccount = CallContext.current().getCallingAccount();
    if (volumeId != null) {
      final Volume volume = _entityMgr.findById(Volume.class, volumeId);
      if (volume != null) {
        _accountService.checkAccess(
            callingAccount, SecurityChecker.AccessType.UseEntry, false, volume);
      } else {
        throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId);
      }
    } else {
      final Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId);
      if (snapshot != null) {
        _accountService.checkAccess(
            callingAccount, SecurityChecker.AccessType.UseEntry, false, snapshot);
      } else {
        throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId);
      }
    }

    if (projectId != null) {
      final Project project = _projectService.getProject(projectId);
      if (project != null) {
        if (project.getState() == Project.State.Active) {
          final Account projectAccount = _accountService.getAccount(project.getProjectAccountId());
          _accountService.checkAccess(
              callingAccount, SecurityChecker.AccessType.UseEntry, false, projectAccount);
          return project.getProjectAccountId();
        } else {
          final PermissionDeniedException ex =
              new PermissionDeniedException(
                  "Can't add resources to the project with specified projectId in state="
                      + project.getState()
                      + " as it's no longer active");
          ex.addProxyObject(project.getUuid(), "projectId");
          throw ex;
        }
      } else {
        throw new InvalidParameterValueException("Unable to find project by id");
      }
    }

    return callingAccount.getId();
  }