InternetDomainName.java 5.78 KB
package com.google.common.net;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Ascii;
import com.google.common.base.CharMatcher;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.thirdparty.publicsuffix.PublicSuffixPatterns;
import java.util.List;
import javax.annotation.Nullable;

@Beta
@GwtCompatible
public final class InternetDomainName
{
  private static final CharMatcher a = CharMatcher.anyOf(".。.。");
  private static final Splitter b = Splitter.on('.');
  private static final Joiner c = Joiner.on('.');
  private static final CharMatcher g = CharMatcher.anyOf("-_");
  private static final CharMatcher h = CharMatcher.JAVA_LETTER_OR_DIGIT.or(g);
  private final String d;
  private final ImmutableList<String> e;
  private final int f;
  
  private InternetDomainName(String paramString)
  {
    String str = Ascii.toLowerCase(a.replaceFrom(paramString, '.'));
    paramString = str;
    if (str.endsWith(".")) {
      paramString = str.substring(0, str.length() - 1);
    }
    if (paramString.length() <= 253)
    {
      bool = true;
      Preconditions.checkArgument(bool, "Domain name too long: '%s':", new Object[] { paramString });
      this.d = paramString;
      this.e = ImmutableList.copyOf(b.split(paramString));
      if (this.e.size() > 127) {
        break label147;
      }
    }
    label147:
    for (boolean bool = true;; bool = false)
    {
      Preconditions.checkArgument(bool, "Domain has too many parts: '%s'", new Object[] { paramString });
      Preconditions.checkArgument(a(this.e), "Not a valid domain name: '%s'", new Object[] { paramString });
      this.f = a();
      return;
      bool = false;
      break;
    }
  }
  
  private int a()
  {
    int k = this.e.size();
    int i = 0;
    if (i < k)
    {
      Object localObject = c.join(this.e.subList(i, k));
      if (PublicSuffixPatterns.EXACT.containsKey(localObject)) {}
      label106:
      for (;;)
      {
        return i;
        if (PublicSuffixPatterns.EXCLUDED.containsKey(localObject)) {
          return i + 1;
        }
        localObject = ((String)localObject).split("\\.", 2);
        if ((localObject.length == 2) && (PublicSuffixPatterns.UNDER.containsKey(localObject[1]))) {}
        for (int j = 1;; j = 0)
        {
          if (j != 0) {
            break label106;
          }
          i += 1;
          break;
        }
      }
    }
    return -1;
  }
  
  private InternetDomainName a(int paramInt)
  {
    return from(c.join(this.e.subList(paramInt, this.e.size())));
  }
  
  private static boolean a(String paramString, boolean paramBoolean)
  {
    if ((paramString.length() <= 0) || (paramString.length() > 63)) {}
    String str;
    do
    {
      return false;
      str = CharMatcher.ASCII.retainFrom(paramString);
    } while ((!h.matchesAllOf(str)) || (g.matches(paramString.charAt(0))) || (g.matches(paramString.charAt(paramString.length() - 1))) || ((paramBoolean) && (CharMatcher.DIGIT.matches(paramString.charAt(0)))));
    return true;
  }
  
  private static boolean a(List<String> paramList)
  {
    int j = paramList.size() - 1;
    if (!a((String)paramList.get(j), true)) {
      return false;
    }
    int i = 0;
    while (i < j)
    {
      if (!a((String)paramList.get(i), false)) {
        return false;
      }
      i += 1;
    }
    return true;
  }
  
  public static InternetDomainName from(String paramString)
  {
    return new InternetDomainName((String)Preconditions.checkNotNull(paramString));
  }
  
  public static boolean isValid(String paramString)
  {
    try
    {
      from(paramString);
      return true;
    }
    catch (IllegalArgumentException paramString) {}
    return false;
  }
  
  public final InternetDomainName child(String paramString)
  {
    paramString = String.valueOf(String.valueOf((String)Preconditions.checkNotNull(paramString)));
    String str = String.valueOf(String.valueOf(this.d));
    return from(paramString.length() + 1 + str.length() + paramString + "." + str);
  }
  
  public final boolean equals(@Nullable Object paramObject)
  {
    if (paramObject == this) {
      return true;
    }
    if ((paramObject instanceof InternetDomainName))
    {
      paramObject = (InternetDomainName)paramObject;
      return this.d.equals(((InternetDomainName)paramObject).d);
    }
    return false;
  }
  
  public final boolean hasParent()
  {
    return this.e.size() > 1;
  }
  
  public final boolean hasPublicSuffix()
  {
    return this.f != -1;
  }
  
  public final int hashCode()
  {
    return this.d.hashCode();
  }
  
  public final boolean isPublicSuffix()
  {
    return this.f == 0;
  }
  
  public final boolean isTopPrivateDomain()
  {
    return this.f == 1;
  }
  
  public final boolean isUnderPublicSuffix()
  {
    return this.f > 0;
  }
  
  public final InternetDomainName parent()
  {
    Preconditions.checkState(hasParent(), "Domain '%s' has no parent", new Object[] { this.d });
    return a(1);
  }
  
  public final ImmutableList<String> parts()
  {
    return this.e;
  }
  
  public final InternetDomainName publicSuffix()
  {
    if (hasPublicSuffix()) {
      return a(this.f);
    }
    return null;
  }
  
  public final String toString()
  {
    return this.d;
  }
  
  public final InternetDomainName topPrivateDomain()
  {
    if (isTopPrivateDomain()) {
      return this;
    }
    Preconditions.checkState(isUnderPublicSuffix(), "Not under a public suffix: %s", new Object[] { this.d });
    return a(this.f - 1);
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/net/InternetDomainName.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */