| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.google.common.jimfs; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| |
| import java.io.IOException; |
| import java.nio.file.attribute.GroupPrincipal; |
| import java.nio.file.attribute.UserPrincipal; |
| import java.nio.file.attribute.UserPrincipalLookupService; |
| import java.nio.file.attribute.UserPrincipalNotFoundException; |
| |
| /** |
| * {@link UserPrincipalLookupService} implementation. |
| * |
| * @author Colin Decker |
| */ |
| final class UserLookupService extends UserPrincipalLookupService { |
| |
| private final boolean supportsGroups; |
| |
| public UserLookupService(boolean supportsGroups) { |
| this.supportsGroups = supportsGroups; |
| } |
| |
| @Override |
| public UserPrincipal lookupPrincipalByName(String name) { |
| return createUserPrincipal(name); |
| } |
| |
| @Override |
| public GroupPrincipal lookupPrincipalByGroupName(String group) throws IOException { |
| if (!supportsGroups) { |
| throw new UserPrincipalNotFoundException(group); // required by spec |
| } |
| return createGroupPrincipal(group); |
| } |
| |
| /** |
| * Creates a {@link UserPrincipal} for the given user name. |
| */ |
| static UserPrincipal createUserPrincipal(String name) { |
| return new JimfsUserPrincipal(name); |
| } |
| |
| /** |
| * Creates a {@link GroupPrincipal} for the given group name. |
| */ |
| static GroupPrincipal createGroupPrincipal(String name) { |
| return new JimfsGroupPrincipal(name); |
| } |
| |
| /** |
| * Base class for {@link UserPrincipal} and {@link GroupPrincipal} implementations. |
| */ |
| private abstract static class NamedPrincipal implements UserPrincipal { |
| |
| protected final String name; |
| |
| private NamedPrincipal(String name) { |
| this.name = checkNotNull(name); |
| } |
| |
| @Override |
| public final String getName() { |
| return name; |
| } |
| |
| @Override |
| public final int hashCode() { |
| return name.hashCode(); |
| } |
| |
| @Override |
| public final String toString() { |
| return name; |
| } |
| } |
| |
| /** |
| * {@link UserPrincipal} implementation. |
| */ |
| static final class JimfsUserPrincipal extends NamedPrincipal { |
| |
| private JimfsUserPrincipal(String name) { |
| super(name); |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| return obj instanceof JimfsUserPrincipal |
| && getName().equals(((JimfsUserPrincipal) obj).getName()); |
| } |
| } |
| |
| /** |
| * {@link GroupPrincipal} implementation. |
| */ |
| static final class JimfsGroupPrincipal extends NamedPrincipal implements GroupPrincipal { |
| |
| private JimfsGroupPrincipal(String name) { |
| super(name); |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| return obj instanceof JimfsGroupPrincipal && ((JimfsGroupPrincipal) obj).name.equals(name); |
| } |
| } |
| } |