Пример #1
0
  @Override
  @DB
  @ActionEvent(
      eventType = EventTypes.EVENT_NETWORK_ACL_ITEM_CREATE,
      eventDescription = "creating network ACL Item",
      create = true)
  public NetworkACLItem createNetworkACLItem(
      Integer portStart,
      Integer portEnd,
      String protocol,
      List<String> sourceCidrList,
      Integer icmpCode,
      Integer icmpType,
      NetworkACLItem.TrafficType trafficType,
      Long aclId,
      String action,
      Integer number) {
    NetworkACLItem.Action ruleAction = NetworkACLItem.Action.Allow;
    if ("deny".equalsIgnoreCase(action)) {
      ruleAction = NetworkACLItem.Action.Deny;
    }
    // If number is null, set it to currentMax + 1 (for backward compatibility)
    if (number == null) {
      number = _networkACLItemDao.getMaxNumberByACL(aclId) + 1;
    }

    Transaction txn = Transaction.currentTxn();
    txn.start();

    NetworkACLItemVO newRule =
        new NetworkACLItemVO(
            portStart,
            portEnd,
            protocol.toLowerCase(),
            aclId,
            sourceCidrList,
            icmpCode,
            icmpType,
            trafficType,
            ruleAction,
            number);
    newRule = _networkACLItemDao.persist(newRule);

    if (!_networkACLItemDao.setStateToAdd(newRule)) {
      throw new CloudRuntimeException("Unable to update the state to add for " + newRule);
    }
    CallContext.current().setEventDetails("ACL Item Id: " + newRule.getId());

    txn.commit();

    return getNetworkACLItem(newRule.getId());
  }