001/* 002 * ==================================================================== 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 * ==================================================================== 020 * 021 * This software consists of voluntary contributions made by many 022 * individuals on behalf of the Apache Software Foundation. For more 023 * information on the Apache Software Foundation, please see 024 * <http://www.apache.org/>. 025 * 026 */ 027package org.apache.http.conn.util; 028 029import java.util.Collections; 030import java.util.List; 031 032import org.apache.http.annotation.Contract; 033import org.apache.http.annotation.ThreadingBehavior; 034import org.apache.http.util.Args; 035 036/** 037 * Public suffix is a set of DNS names or wildcards concatenated with dots. It represents 038 * the part of a domain name which is not under the control of the individual registrant 039 * <p> 040 * An up-to-date list of suffixes can be obtained from 041 * <a href="http://publicsuffix.org/">publicsuffix.org</a> 042 * 043 * @since 4.4 044 */ 045@Contract(threading = ThreadingBehavior.IMMUTABLE) 046public final class PublicSuffixList { 047 048 private final DomainType type; 049 private final List<String> rules; 050 private final List<String> exceptions; 051 052 /** 053 * @since 4.5 054 */ 055 public PublicSuffixList(final DomainType type, final List<String> rules, final List<String> exceptions) { 056 this.type = Args.notNull(type, "Domain type"); 057 this.rules = Collections.unmodifiableList(Args.notNull(rules, "Domain suffix rules")); 058 this.exceptions = Collections.unmodifiableList(exceptions != null ? exceptions : Collections.<String>emptyList()); 059 } 060 061 public PublicSuffixList(final List<String> rules, final List<String> exceptions) { 062 this(DomainType.UNKNOWN, rules, exceptions); 063 } 064 065 /** 066 * @since 4.5 067 */ 068 public DomainType getType() { 069 return type; 070 } 071 072 public List<String> getRules() { 073 return rules; 074 } 075 076 public List<String> getExceptions() { 077 return exceptions; 078 } 079 080}