| /* |
| * 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 com.google.common.collect.ImmutableMap; |
| import com.google.common.collect.ImmutableSet; |
| import java.io.IOException; |
| import java.nio.file.attribute.BasicFileAttributeView; |
| import java.nio.file.attribute.FileAttributeView; |
| import java.nio.file.attribute.FileTime; |
| import java.util.HashMap; |
| import java.util.Map; |
| import org.checkerframework.checker.nullness.compatqual.NullableDecl; |
| |
| /** @author Colin Decker */ |
| public final class TestAttributeProvider extends AttributeProvider { |
| |
| private static final ImmutableSet<String> ATTRIBUTES = ImmutableSet.of("foo", "bar", "baz"); |
| |
| @Override |
| public String name() { |
| return "test"; |
| } |
| |
| @Override |
| public ImmutableSet<String> inherits() { |
| return ImmutableSet.of("basic"); |
| } |
| |
| @Override |
| public ImmutableSet<String> fixedAttributes() { |
| return ATTRIBUTES; |
| } |
| |
| @Override |
| public ImmutableMap<String, ?> defaultValues(Map<String, ?> userDefaults) { |
| Map<String, Object> result = new HashMap<>(); |
| |
| Long bar = 0L; |
| Integer baz = 1; |
| if (userDefaults.containsKey("test:bar")) { |
| bar = checkType("test", "bar", userDefaults.get("test:bar"), Number.class).longValue(); |
| } |
| if (userDefaults.containsKey("test:baz")) { |
| baz = checkType("test", "baz", userDefaults.get("test:baz"), Integer.class); |
| } |
| |
| result.put("test:bar", bar); |
| result.put("test:baz", baz); |
| return ImmutableMap.copyOf(result); |
| } |
| |
| @Override |
| public void set(File file, String view, String attribute, Object value, boolean create) { |
| switch (attribute) { |
| case "bar": |
| checkNotCreate(view, attribute, create); |
| file.setAttribute( |
| "test", "bar", checkType(view, attribute, value, Number.class).longValue()); |
| break; |
| case "baz": |
| file.setAttribute("test", "baz", checkType(view, attribute, value, Integer.class)); |
| break; |
| default: |
| throw unsettable(view, attribute, create); |
| } |
| } |
| |
| @Override |
| public Object get(File file, String attribute) { |
| if (attribute.equals("foo")) { |
| return "hello"; |
| } |
| return file.getAttribute("test", attribute); |
| } |
| |
| @Override |
| public Class<TestAttributeView> viewType() { |
| return TestAttributeView.class; |
| } |
| |
| @Override |
| public TestAttributeView view( |
| FileLookup lookup, ImmutableMap<String, FileAttributeView> inheritedViews) { |
| return new View(lookup, (BasicFileAttributeView) inheritedViews.get("basic")); |
| } |
| |
| @Override |
| public Class<TestAttributes> attributesType() { |
| return TestAttributes.class; |
| } |
| |
| @Override |
| public TestAttributes readAttributes(File file) { |
| return new Attributes(file); |
| } |
| |
| static final class View implements TestAttributeView { |
| |
| private final FileLookup lookup; |
| private final BasicFileAttributeView basicView; |
| |
| public View(FileLookup lookup, BasicFileAttributeView basicView) { |
| this.lookup = checkNotNull(lookup); |
| this.basicView = checkNotNull(basicView); |
| } |
| |
| @Override |
| public String name() { |
| return "test"; |
| } |
| |
| @Override |
| public Attributes readAttributes() throws IOException { |
| return new Attributes(lookup.lookup()); |
| } |
| |
| @Override |
| public void setTimes( |
| @NullableDecl FileTime lastModifiedTime, |
| @NullableDecl FileTime lastAccessTime, |
| @NullableDecl FileTime createTime) |
| throws IOException { |
| basicView.setTimes(lastModifiedTime, lastAccessTime, createTime); |
| } |
| |
| @Override |
| public void setBar(long bar) throws IOException { |
| lookup.lookup().setAttribute("test", "bar", bar); |
| } |
| |
| @Override |
| public void setBaz(int baz) throws IOException { |
| lookup.lookup().setAttribute("test", "baz", baz); |
| } |
| } |
| |
| static final class Attributes implements TestAttributes { |
| |
| private final Long bar; |
| private final Integer baz; |
| |
| public Attributes(File file) { |
| this.bar = (Long) file.getAttribute("test", "bar"); |
| this.baz = (Integer) file.getAttribute("test", "baz"); |
| } |
| |
| @Override |
| public String foo() { |
| return "hello"; |
| } |
| |
| @Override |
| public long bar() { |
| return bar; |
| } |
| |
| @Override |
| public int baz() { |
| return baz; |
| } |
| |
| // BasicFileAttributes is just implemented here because readAttributes requires a subtype of |
| // BasicFileAttributes -- methods are not implemented |
| |
| @Override |
| public FileTime lastModifiedTime() { |
| return null; |
| } |
| |
| @Override |
| public FileTime lastAccessTime() { |
| return null; |
| } |
| |
| @Override |
| public FileTime creationTime() { |
| return null; |
| } |
| |
| @Override |
| public boolean isRegularFile() { |
| return false; |
| } |
| |
| @Override |
| public boolean isDirectory() { |
| return false; |
| } |
| |
| @Override |
| public boolean isSymbolicLink() { |
| return false; |
| } |
| |
| @Override |
| public boolean isOther() { |
| return false; |
| } |
| |
| @Override |
| public long size() { |
| return 0; |
| } |
| |
| @Override |
| public Object fileKey() { |
| return null; |
| } |
| } |
| } |