Use generics

This commit is contained in:
Andrea Cavalli 2020-12-04 22:41:05 +01:00
parent e489bd05d7
commit 0577001a25
8 changed files with 68 additions and 35 deletions

View File

@ -19,7 +19,7 @@
package org.warp.filesponge; package org.warp.filesponge;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -33,22 +33,22 @@ import org.warp.filesponge.value.FileURI;
*/ */
@AllArgsConstructor @AllArgsConstructor
@EqualsAndHashCode @EqualsAndHashCode
public class SecureFileAccessor implements FileAccessor { public class SecureFileAccessor<FURI extends FileURI, FC extends FileContent> implements FileAccessor<FURI, FC> {
private final FileAccessor fileAccessor; private final FileAccessor<FURI, FC> fileAccessor;
@Override @Override
public void delete(@NotNull FileURI fileURI) { public void delete(@NotNull FURI fileURI) {
fileAccessor.delete(fileURI); fileAccessor.delete(fileURI);
} }
@Override @Override
public CompletableFuture<Optional<FileContent>> getContent(@NotNull FileURI fileURI, boolean offlineOnly) { public CompletionStage<Optional<FC>> getContent(@NotNull FURI fileURI, boolean offlineOnly) {
return fileAccessor.getContent(fileURI, offlineOnly); return fileAccessor.getContent(fileURI, offlineOnly);
} }
@Override @Override
public @NotNull FileStatus getStatus(@NotNull FileURI fileURI) { public @NotNull FileStatus getStatus(@NotNull FURI fileURI) {
return fileAccessor.getStatus(fileURI); return fileAccessor.getStatus(fileURI);
} }

View File

@ -19,7 +19,7 @@
package org.warp.filesponge.api; package org.warp.filesponge.api;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.warp.filesponge.value.FileContent; import org.warp.filesponge.value.FileContent;
import org.warp.filesponge.value.FileStatus; import org.warp.filesponge.value.FileStatus;
@ -28,14 +28,14 @@ import org.warp.filesponge.value.FileURI;
/** /**
* FileAccessor can be used to access files from the client side * FileAccessor can be used to access files from the client side
*/ */
public interface FileAccessor { public interface FileAccessor<FURI extends FileURI, FC extends FileContent> {
/** /**
* Request file deletion * Request file deletion
* *
* @param fileURI File URI * @param fileURI File URI
*/ */
void delete(@NotNull FileURI fileURI); void delete(@NotNull FURI fileURI);
/** /**
* Get file content * Get file content
@ -44,7 +44,7 @@ public interface FileAccessor {
* @param offlineOnly true to get the file from cache * @param offlineOnly true to get the file from cache
* @return content if found. If the request is offline the future will complete instantly * @return content if found. If the request is offline the future will complete instantly
*/ */
CompletableFuture<Optional<FileContent>> getContent(@NotNull FileURI fileURI, boolean offlineOnly); CompletionStage<Optional<FC>> getContent(@NotNull FURI fileURI, boolean offlineOnly);
/** /**
* Get file status * Get file status
@ -52,5 +52,5 @@ public interface FileAccessor {
* @param fileURI File URI * @param fileURI File URI
* @return status of this file * @return status of this file
*/ */
@NotNull FileStatus getStatus(@NotNull FileURI fileURI); @NotNull FileStatus getStatus(@NotNull FURI fileURI);
} }

View File

@ -25,7 +25,7 @@ import org.warp.filesponge.value.FileURI;
/** /**
* FileActor sends signals to a mirror * FileActor sends signals to a mirror
*/ */
public interface FileActor { public interface FileActor<FURI extends FileURI> {
/** /**
* Send a "delete file" signal * Send a "delete file" signal
@ -33,7 +33,7 @@ public interface FileActor {
* @param fileURI File URI * @param fileURI File URI
* @return true if the signal can be sent * @return true if the signal can be sent
*/ */
boolean deleteFile(FileURI fileURI); boolean deleteFile(FURI fileURI);
/** /**
* Send a "download file" signal * Send a "download file" signal
@ -41,7 +41,7 @@ public interface FileActor {
* @param fileURI File URI * @param fileURI File URI
* @return true if the signal can be sent * @return true if the signal can be sent
*/ */
boolean downloadFile(FileURI fileURI); boolean downloadFile(FURI fileURI);
/** /**
* Check if this actor can handle signals for this file * Check if this actor can handle signals for this file
@ -49,7 +49,7 @@ public interface FileActor {
* @param fileURI File URI * @param fileURI File URI
* @return true if the actor can send signals related to this file * @return true if the actor can send signals related to this file
*/ */
boolean canHandleFile(FileURI fileURI); boolean canHandleFile(FURI fileURI);
/** /**
* Send a "download file" signal * Send a "download file" signal

View File

@ -27,7 +27,7 @@ import org.warp.filesponge.value.FileURI;
/** /**
* FileSource receives responses from a mirror * FileSource receives responses from a mirror
*/ */
public interface FileSource { public interface FileSource<FURI extends FileURI, FTYPE extends FileType> {
/** /**
* Called when the mirror is online * Called when the mirror is online
@ -42,14 +42,14 @@ public interface FileSource {
/** /**
* Called when the mirror notifies you that a new file exists * Called when the mirror notifies you that a new file exists
*/ */
boolean onNewFile(@NotNull FileURI fileURI, @NotNull FileType fileType); boolean onNewFile(@NotNull FURI fileURI, @NotNull FTYPE fileType);
/** /**
* Called when the mirror notifies you details about a file. * Called when the mirror notifies you details about a file.
* <p> * <p>
* {@link this#onNewFile(FileURI, FileType)} must have been already called * {@link this#onNewFile(FileURI, FileType)} must have been already called
*/ */
void onFile(@NotNull FileURI fileURI, @NotNull FileSourceAvailability fileAvailability, long totalSize); void onFile(@NotNull FURI fileURI, @NotNull FileSourceAvailability fileAvailability, long totalSize);
/** /**
* Called when the mirror notifies you the bytes of a part of a file. * Called when the mirror notifies you the bytes of a part of a file.
@ -57,5 +57,5 @@ public interface FileSource {
* {@link this#onNewFile(FileURI, FileType)} and {@link this#onFile(FileURI, FileSourceAvailability, long)} must * {@link this#onNewFile(FileURI, FileType)} and {@link this#onFile(FileURI, FileSourceAvailability, long)} must
* have been already called * have been already called
*/ */
void onFilePiece(@NotNull FileURI fileURI, long offset, long size, @NotNull ByteBuffer piece); void onFilePiece(@NotNull FURI fileURI, long offset, long size, @NotNull ByteBuffer piece);
} }

View File

@ -19,11 +19,13 @@
package org.warp.filesponge.api; package org.warp.filesponge.api;
import org.warp.filesponge.SecureFileAccessor; import org.warp.filesponge.SecureFileAccessor;
import org.warp.filesponge.value.FileContent;
import org.warp.filesponge.value.FileURI;
/** /**
* FileAccessor can be used to manage FileSponge and access files from the client side * FileAccessor can be used to manage FileSponge and access files from the client side
*/ */
public interface FileSpongeClient extends FileAccessor { public interface FileSpongeClient<FURI extends FileURI, FC extends FileContent> extends FileAccessor<FURI, FC> {
void optimizeStorage(); void optimizeStorage();
@ -32,7 +34,7 @@ public interface FileSpongeClient extends FileAccessor {
* *
* @return limited instance of itself * @return limited instance of itself
*/ */
default FileAccessor asFileAccessor() { default FileAccessor<FURI, FC> asFileAccessor() {
return new SecureFileAccessor(this); return new SecureFileAccessor<>(this);
} }
} }

View File

@ -0,0 +1,32 @@
/*
* FileSponge
* Copyright (C) 2020 Andrea Cavalli
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.warp.filesponge.api;
import org.jetbrains.annotations.NotNull;
import org.warp.filesponge.value.FileContent;
import org.warp.filesponge.value.FileType;
import org.warp.filesponge.value.FileURI;
import org.warp.filesponge.value.MirrorURI;
public interface FileStorage<FURI extends FileURI, FTYPE extends FileType, MURI extends MirrorURI, FC extends FileContent> {
void newFile(@NotNull FURI fileURI, @NotNull FTYPE fileType);
FC readFileData(@NotNull FURI fileURI);
}

View File

@ -19,26 +19,25 @@
package org.warp.filesponge.extra.api; package org.warp.filesponge.extra.api;
import java.util.Optional; import java.util.Optional;
import java.util.OptionalLong;
import org.warp.filesponge.value.FileURI; import org.warp.filesponge.value.FileURI;
/** /**
* Translate File URIs to "fileId" and back * Translate File URIs to "fileId" and back
*/ */
public interface FileURITranslator { public interface FileURITranslator<FURI extends FileURI, FID> {
Optional<FileURI> getURI(long fileId); Optional<FURI> getURI(FID fileId);
OptionalLong getFileId(FileURI fileURI); Optional<FID> getFileId(FURI fileURI);
/** /**
* @throws AlreadyAssignedException Throw if the uri has another fileId assigned * @throws AlreadyAssignedException Throw if the uri has another fileId assigned
*/ */
void setFileId(FileURI fileURI, long fileId) throws AlreadyAssignedException; void setFileId(FURI fileURI, FID fileId) throws AlreadyAssignedException;
Optional<FileURI> delete(long fileId); Optional<FURI> delete(FID fileId);
OptionalLong delete(FileURI fileURI); Optional<FID> delete(FURI fileURI);
void clear(); void clear();
} }

View File

@ -23,17 +23,17 @@ import org.warp.filesponge.value.FileURI;
/** /**
* Create an unique "fileId" for each File URI * Create an unique "fileId" for each File URI
*/ */
public interface URIObfuscator { public interface URIObfuscator<FURI extends FileURI, FID> {
FileURI deobfuscateFileId(long fileId); FURI deobfuscateFileId(FID fileId);
void getFileId(FileURI fileURI); void getFileId(FURI fileURI);
void setURIValue(FileURI fileURI, long fileId); void setURIValue(FURI fileURI, FID fileId);
FileURI delete(long fileId); FURI delete(FID fileId);
long delete(FileURI fileURI); FID delete(FURI fileURI);
void clear(); void clear();
} }