Example usage for com.google.common.collect Range closed

List of usage examples for com.google.common.collect Range closed

Introduction

In this page you can find the example usage for com.google.common.collect Range closed.

Prototype

public static <C extends Comparable<?>> Range<C> closed(C lower, C upper) 

Source Link

Document

Returns a range that contains all values greater than or equal to lower and less than or equal to upper .

Usage

From source file:com.eucalyptus.compute.vpc.VpcManager.java

public CreateVpcResponseType createVpc(final CreateVpcType request) throws EucalyptusCloudException {
    final CreateVpcResponseType reply = request.getReply();
    final Context ctx = Contexts.lookup();
    final UserFullName userFullName = ctx.getUserFullName();
    final boolean createDefault = ctx.isAdministrator() && request.getCidrBlock().matches("[0-9]{12}");
    if (!Cidr.parse().apply(request.getCidrBlock()).transform(Cidr.prefix())
            .transform(Functions.forPredicate(Range.closed(16, 28))).or(createDefault)) {
        throw new ClientComputeException("InvalidVpcRange", "Cidr range invalid: " + request.getCidrBlock());
    }//from ww  w. j av a  2 s .c o m
    final Supplier<Vpc> allocator = new Supplier<Vpc>() {
        @Override
        public Vpc get() {
            try {
                final String vpcCidr;
                final AccountFullName vpcAccountFullName;
                final UserFullName vpcOwnerFullName;
                Vpc vpc = null;
                RouteTable routeTable = null;
                NetworkAcl networkAcl = null;
                if (createDefault) {
                    final UserPrincipal user = Accounts.lookupPrincipalByAccountNumber(request.getCidrBlock());
                    vpcCidr = Vpcs.DEFAULT_VPC_CIDR;
                    vpcAccountFullName = AccountFullName.getInstance(user.getAccountNumber());
                    vpcOwnerFullName = UserFullName.getInstance(user);

                    // check for existing vpc
                    try {
                        vpc = vpcs.lookupDefault(vpcAccountFullName, Functions.<Vpc>identity());
                        routeTable = routeTables.lookupMain(vpc.getDisplayName(),
                                Functions.<RouteTable>identity());
                        networkAcl = networkAcls.lookupDefault(vpc.getDisplayName(),
                                Functions.<NetworkAcl>identity());
                    } catch (final VpcMetadataNotFoundException e) {
                        // so create it
                    }
                } else {
                    vpcCidr = request.getCidrBlock();
                    vpcAccountFullName = userFullName.asAccountFullName();
                    vpcOwnerFullName = userFullName;
                }
                if (vpc == null) {
                    DhcpOptionSet options;
                    try {
                        options = dhcpOptionSets.lookupByExample(
                                DhcpOptionSet.exampleDefault(vpcAccountFullName), vpcAccountFullName, "default",
                                Predicates.alwaysTrue(), Functions.<DhcpOptionSet>identity());
                    } catch (VpcMetadataNotFoundException e) {
                        options = dhcpOptionSets.save(DhcpOptionSet.createDefault(vpcOwnerFullName,
                                Identifier.dopt.generate(), VmInstances.INSTANCE_SUBDOMAIN));
                    }
                    vpc = vpcs.save(Vpc.create(vpcOwnerFullName, Identifier.vpc.generate(), options, vpcCidr,
                            createDefault));
                    routeTable = routeTables.save(RouteTable.create(vpcOwnerFullName, vpc,
                            Identifier.rtb.generate(), vpc.getCidr(), true));
                    networkAcl = networkAcls
                            .save(NetworkAcl.create(vpcOwnerFullName, vpc, Identifier.acl.generate(), true));
                    final NetworkGroup group = NetworkGroup.create(vpcOwnerFullName, vpc,
                            ResourceIdentifiers.generateString(NetworkGroup.ID_PREFIX),
                            NetworkGroups.defaultNetworkName(), "default VPC security group");
                    final Collection<NetworkPeer> peers = Lists.newArrayList(NetworkPeer
                            .create(group.getOwnerAccountNumber(), group.getName(), group.getGroupId()));
                    group.addNetworkRules(Lists.newArrayList(
                            NetworkRule.create(null/*protocol name*/, -1, null/*low port*/, null/*high port*/,
                                    peers, null/*cidrs*/ ),
                            NetworkRule.createEgress(null/*protocol name*/, -1, null/*low port*/,
                                    null/*high port*/, null/*peers*/, Collections.singleton("0.0.0.0/0"))));
                    securityGroups.save(group);
                }
                if (createDefault && routeTable != null && networkAcl != null) {
                    // ensure there is an internet gateway for the vpc and a route in place
                    InternetGateway internetGateway;
                    try {
                        internetGateway = internetGateways.lookupByVpc(vpcAccountFullName, vpc.getDisplayName(),
                                Functions.<InternetGateway>identity());
                    } catch (final VpcMetadataNotFoundException e) {
                        internetGateway = internetGateways
                                .save(InternetGateway.create(vpcOwnerFullName, Identifier.igw.generate()));
                        internetGateway.setVpc(vpc);
                    }

                    final Optional<Route> defaultRoute = Iterables.tryFind(routeTable.getRoutes(),
                            CollectionUtils.propertyPredicate("0.0.0.0/0",
                                    RouteTables.RouteFilterStringFunctions.DESTINATION_CIDR));

                    if (!defaultRoute.isPresent()) {
                        routeTable.getRoutes().add(Route.create(routeTable, Route.RouteOrigin.CreateRouteTable,
                                "0.0.0.0/0", internetGateway));
                        routeTable.updateTimeStamps(); // ensure version of table increments also
                    }

                    // ensure there is a default subnet in each availability zone
                    final Set<String> cidrsInUse = Sets.newHashSet();
                    final Set<String> zonesWithoutSubnets = Sets.newTreeSet();
                    for (final String zone : Iterables.transform(Clusters.getInstance().listValues(),
                            CloudMetadatas.toDisplayName())) {
                        try {
                            cidrsInUse.add(subnets.lookupDefault(vpcAccountFullName, zone,
                                    Subnets.FilterStringFunctions.CIDR));
                        } catch (final VpcMetadataNotFoundException e) {
                            zonesWithoutSubnets.add(zone);
                        }
                    }
                    final List<String> subnetCidrs = Lists.newArrayList(
                            Iterables.transform(Cidr.parseUnsafe().apply(Vpcs.DEFAULT_VPC_CIDR).split(16),
                                    Functions.toStringFunction()));
                    subnetCidrs.removeAll(cidrsInUse);
                    for (final String zone : zonesWithoutSubnets) {
                        final Subnet subnet = subnets.save(Subnet.create(vpcOwnerFullName, vpc, networkAcl,
                                Identifier.subnet.generate(), subnetCidrs.remove(0), zone));
                        subnet.setDefaultForAz(true);
                        subnet.setMapPublicIpOnLaunch(true);
                    }
                }
                return vpc;
            } catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        }
    };
    reply.setVpc(allocate(allocator, Vpc.class, VpcType.class));
    invalidate(reply.getVpc().getVpcId());
    return reply;
}

From source file:org.apache.bookkeeper.mledger.impl.ManagedCursorImpl.java

boolean hasMoreEntries(PositionImpl position) {
    PositionImpl lastPositionInLedger = ledger.getLastPosition();
    if (position.compareTo(lastPositionInLedger) <= 0) {
        return getNumberOfEntries(Range.closed(position, lastPositionInLedger)) > 0;
    }//from  w  ww.  j a v a 2s  . com
    return false;
}

From source file:org.apache.bookkeeper.mledger.impl.ManagedCursorImpl.java

/**
 * Given a list of entries, filter out the entries that have already been individually deleted.
 *
 * @param entries//from  w  w  w . ja  v a2  s . com
 *            a list of entries
 * @return a list of entries not containing deleted messages
 */
List<Entry> filterReadEntries(List<Entry> entries) {
    lock.readLock().lock();
    try {
        Range<PositionImpl> entriesRange = Range.closed((PositionImpl) entries.get(0).getPosition(),
                (PositionImpl) entries.get(entries.size() - 1).getPosition());
        if (log.isDebugEnabled()) {
            log.debug("[{}] [{}] Filtering entries {} - alreadyDeleted: {}", ledger.getName(), name,
                    entriesRange, individualDeletedMessages);
        }

        if (individualDeletedMessages.isEmpty()
                || !entriesRange.isConnected(individualDeletedMessages.span())) {
            // There are no individually deleted messages in this entry list, no need to perform filtering
            if (log.isDebugEnabled()) {
                log.debug("[{}] [{}] No filtering needed for entries {}", ledger.getName(), name, entriesRange);
            }
            return entries;
        } else {
            // Remove from the entry list all the entries that were already marked for deletion
            return Lists.newArrayList(Collections2.filter(entries, entry -> {
                boolean includeEntry = !individualDeletedMessages.contains((PositionImpl) entry.getPosition());
                if (!includeEntry) {
                    if (log.isDebugEnabled()) {
                        log.debug("[{}] [{}] Filtering entry at {} - already deleted", ledger.getName(), name,
                                entry.getPosition());
                    }

                    entry.release();
                }
                return includeEntry;
            }));
        }
    } finally {
        lock.readLock().unlock();
    }
}

From source file:com.eucalyptus.compute.vpc.VpcManager.java

public ReplaceNetworkAclEntryResponseType replaceNetworkAclEntry(final ReplaceNetworkAclEntryType request)
        throws EucalyptusCloudException {
    final ReplaceNetworkAclEntryResponseType reply = request.getReply();
    final Context ctx = Contexts.lookup();
    final AccountFullName accountFullName = ctx.getUserFullName().asAccountFullName();
    final String networkAclId = Identifier.acl.normalize(request.getNetworkAclId());
    final String cidr = request.getCidrBlock();
    final Optional<Cidr> cidrOptional = Cidr.parse().apply(cidr);
    if (!cidrOptional.isPresent()) {
        throw new ClientComputeException("InvalidParameterValue", "Cidr invalid: " + cidr);
    }/*  ww  w  .j av  a 2s .c  o  m*/
    final Optional<Integer> protocolOptional = protocolNumber(request.getProtocol());
    if (!protocolOptional.isPresent()) {
        throw new ClientComputeException("InvalidParameterValue", "Protocol invalid: " + request.getProtocol());
    }
    if (!Range.closed(1, 32766).apply(request.getRuleNumber())) {
        throw new ClientComputeException("InvalidParameterValue",
                "Rule number invalid: " + request.getRuleNumber());
    }
    try {
        networkAcls.updateByExample(NetworkAcl.exampleWithName(accountFullName, networkAclId), accountFullName,
                request.getNetworkAclId(), new Callback<NetworkAcl>() {
                    @Override
                    public void fire(final NetworkAcl networkAcl) {
                        if (RestrictedTypes.filterPrivileged().apply(networkAcl))
                            try {
                                final List<NetworkAclEntry> entries = networkAcl.getEntries();
                                final Optional<NetworkAclEntry> oldEntry = Iterables.tryFind(entries,
                                        entryPredicate(request.getEgress(), request.getRuleNumber()));

                                if (!oldEntry.isPresent()) {
                                    throw new ClientComputeException("InvalidNetworkAclEntry.NotFound",
                                            "Entry not found for rule number: " + request.getRuleNumber());
                                }

                                final NetworkAclEntry entry;
                                switch (protocolOptional.get()) {
                                case 1:
                                    entry = NetworkAclEntry.createIcmpEntry(networkAcl, request.getRuleNumber(),
                                            Enums.valueOfFunction(NetworkAclEntry.RuleAction.class)
                                                    .apply(request.getRuleAction()),
                                            request.getEgress(), cidr, request.getIcmpTypeCode().getCode(),
                                            request.getIcmpTypeCode().getType());
                                    break;
                                case 6:
                                case 17:
                                    entry = NetworkAclEntry.createTcpUdpEntry(networkAcl,
                                            request.getRuleNumber(), protocolOptional.get(),
                                            Enums.valueOfFunction(NetworkAclEntry.RuleAction.class)
                                                    .apply(request.getRuleAction()),
                                            request.getEgress(), cidr, request.getPortRange().getFrom(),
                                            request.getPortRange().getTo());
                                    break;
                                default:
                                    entry = NetworkAclEntry
                                            .createEntry(networkAcl, request.getRuleNumber(),
                                                    protocolOptional.get(),
                                                    Enums.valueOfFunction(NetworkAclEntry.RuleAction.class)
                                                            .apply(request.getRuleAction()),
                                                    request.getEgress(), cidr);
                                }

                                entries.set(entries.indexOf(oldEntry.get()), entry);
                                networkAcl.updateTimeStamps(); // ensure version of table increments also
                            } catch (Exception e) {
                                throw Exceptions.toUndeclared(e);
                            }
                        else {
                            throw Exceptions.toUndeclared(new ClientUnauthorizedComputeException(
                                    "Not authorized to replace network ACL entry"));
                        }
                    }
                });
        invalidate(networkAclId);
    } catch (Exception e) {
        throw handleException(e);
    }
    return reply;
}

From source file:com.eucalyptus.compute.vpc.VpcManager.java

private static Optional<Integer> protocolNumber(final String protocol) {
    switch (Objects.toString(protocol, "-1").toLowerCase()) {
    case "tcp":
    case "6":
        return Optional.of(6);
    case "udp":
    case "17":
        return Optional.of(17);
    case "icmp":
    case "1":
        return Optional.of(1);
    default:/*from w ww  .  j a  va2 s.  c  o  m*/
        return Iterables.tryFind(Optional.fromNullable(Ints.tryParse(protocol)).asSet(), Range.closed(-1, 255));
    }
}