class PackageName {

    public static PackageName of(String value) {
        Preconditions.checkNotNull(value);
        String sanitizedValue = sanitize(value);
        Preconditions.checkArgument(!hasEmptyParts(sanitizedValue),
            "PackageName can not contain empty parts: " + sanitizedValue);

        return new PackageName(sanitizedValue);
    }

    private  PackageName(String name);

}