/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.uberfire.backend.server; import java.net.URI; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; import org.jboss.errai.bus.server.annotations.Service; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.DirectoryStream; import org.uberfire.backend.vfs.Path; import org.uberfire.backend.vfs.VFSService; import org.uberfire.backend.vfs.impl.DirectoryStreamImpl; import org.uberfire.io.IOService; import org.uberfire.java.nio.IOException; import org.uberfire.java.nio.file.AtomicMoveNotSupportedException; import org.uberfire.java.nio.file.DirectoryNotEmptyException; import org.uberfire.java.nio.file.FileAlreadyExistsException; import org.uberfire.java.nio.file.FileSystemAlreadyExistsException; import org.uberfire.java.nio.file.Files; import org.uberfire.java.nio.file.NoSuchFileException; import org.uberfire.java.nio.file.NotDirectoryException; import org.uberfire.java.nio.file.ProviderNotFoundException; import org.uberfire.java.nio.file.attribute.FileTime; @Service @ApplicationScoped public class VFSServicesServerImpl implements VFSService { @Inject @Named("ioStrategy") private IOService ioService; @Override public Path get(final String uri) { return Paths.convert(ioService.get(URI.create(uri))); } @Override public DirectoryStream<Path> newDirectoryStream(final Path dir) throws IllegalArgumentException, NotDirectoryException, IOException { final Iterator<org.uberfire.java.nio.file.Path> content = ioService.newDirectoryStream(Paths.convert(dir)).iterator(); return newDirectoryStream(content); } @Override public DirectoryStream<Path> newDirectoryStream(final Path dir, final DirectoryStream.Filter<Path> filter) throws IllegalArgumentException, NotDirectoryException, IOException { final Iterator<org.uberfire.java.nio.file.Path> content = ioService.newDirectoryStream(Paths.convert(dir), null).iterator(); return newDirectoryStream(content); } @Override public Path createDirectory(final Path dir) throws IllegalArgumentException, UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException { return Paths.convert(ioService.createDirectory(Paths.convert(dir))); } @Override public Path createDirectories(final Path dir) throws UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException { return Paths.convert(ioService.createDirectories(Paths.convert(dir))); } @Override public Path createDirectory(final Path dir, final Map<String, ?> attrs) throws IllegalArgumentException, UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException { return Paths.convert(ioService.createDirectory(Paths.convert(dir), attrs)); } @Override public Path createDirectories(final Path dir, final Map<String, ?> attrs) throws UnsupportedOperationException, FileAlreadyExistsException, IOException, SecurityException { return Paths.convert(ioService.createDirectories(Paths.convert(dir), attrs)); } @Override public Map<String, Object> readAttributes(final Path path) throws UnsupportedOperationException, IllegalArgumentException, IOException { final Map<String, Object> attributes = new HashMap<String, Object>(ioService.readAttributes(Paths.convert(path))); final Object _lastModifiedTime = attributes.get("lastModifiedTime"); if (_lastModifiedTime != null) { attributes.put("lastModifiedTime", new Date(((FileTime) _lastModifiedTime).toMillis())); } final Object _lastAccessTime = attributes.get("lastAccessTime"); if (_lastAccessTime != null) { attributes.put("lastAccessTime", new Date(((FileTime) _lastAccessTime).toMillis())); } final Object _creationTime = attributes.get("creationTime"); if (_creationTime != null) { attributes.put("creationTime", new Date(((FileTime) _creationTime).toMillis())); } return attributes; } @Override public void setAttributes(final Path path, final Map<String, Object> attrs) throws IllegalArgumentException, FileSystemAlreadyExistsException, ProviderNotFoundException { ioService.setAttributes(Paths.convert(path), attrs); } @Override public void delete(final Path path) throws IllegalArgumentException, NoSuchFileException, DirectoryNotEmptyException, IOException { ioService.delete(Paths.convert(path)); } @Override public boolean deleteIfExists(final Path path) throws IllegalArgumentException, DirectoryNotEmptyException, IOException { return ioService.deleteIfExists(Paths.convert(path)); } @Override public Path copy(final Path source, final Path target) throws UnsupportedOperationException, FileAlreadyExistsException, DirectoryNotEmptyException, IOException { return Paths.convert(ioService.copy(Paths.convert(source), Paths.convert(target))); } @Override public Path move(final Path source, final Path target) throws UnsupportedOperationException, FileAlreadyExistsException, DirectoryNotEmptyException, AtomicMoveNotSupportedException, IOException { return Paths.convert(ioService.move(Paths.convert(source), Paths.convert(target))); } @Override public String readAllString(final Path path) throws IllegalArgumentException, NoSuchFileException, IOException { return ioService.readAllString(Paths.convert(path)); } @Override public Path write(final Path path, final String content) throws IllegalArgumentException, IOException, UnsupportedOperationException { return Paths.convert(ioService.write(Paths.convert(path), content)); } @Override public Path write(final Path path, final String content, final Map<String, ?> attrs) throws IllegalArgumentException, IOException, UnsupportedOperationException { return Paths.convert(ioService.write(Paths.convert(path), content, attrs)); } @Override public boolean isRegularFile(final String uri) { return Files.isRegularFile(ioService.get(URI.create(uri))); } @Override public boolean isRegularFile(final Path path) { return Files.isRegularFile(Paths.convert(path)); } @Override public boolean isDirectory(final String uri) { return Files.isDirectory(ioService.get(URI.create(uri))); } @Override public boolean isDirectory(final Path path) { return Files.isDirectory(Paths.convert(path)); } private DirectoryStream<Path> newDirectoryStream(final Iterator<org.uberfire.java.nio.file.Path> iterator) { final List<Path> content = new LinkedList<Path>(); while (iterator.hasNext()) { content.add(Paths.convert(iterator.next())); } return new DirectoryStreamImpl(content); } private DirectoryStream.Filter<org.uberfire.java.nio.file.Path> convert(final DirectoryStream.Filter<Path> filter) { return new DirectoryStream.Filter<org.uberfire.java.nio.file.Path>() { @Override public boolean accept(final org.uberfire.java.nio.file.Path entry) throws IOException { return filter.accept(Paths.convert(entry)); } }; } }