com.lapissea.datamanager.managers.DataManagerMulti Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jlapisdata Show documentation
Show all versions of jlapisdata Show documentation
An abstraction of folder/zip/jar reading with multi source fallback and lazy caching and SQL emulated mutable file system.
package com.lapissea.datamanager.managers;
import com.lapissea.datamanager.DataSignature;
import com.lapissea.datamanager.Domain;
import com.lapissea.datamanager.DomainRegistry;
import com.lapissea.datamanager.IDataManager;
import com.lapissea.util.NotNull;
import com.lapissea.util.Nullable;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.ObjIntConsumer;
import java.util.stream.Stream;
@SuppressWarnings("CatchMayIgnoreException")
public class DataManagerMulti implements IDataManager{
private final List domains=new ArrayList<>(2);
public DataManagerMulti(){ }
public DataManagerMulti(@NotNull String... domainPaths){
for(String path : domainPaths){
registerDomain(path);
}
}
@NotNull
public DataManagerMulti registerDomain(@NotNull String path){
Domain domain=DomainRegistry.create(path);
if(domains.contains(domain)) return this;
domains.add(domain);
return this;
}
@Nullable
@Override
public BufferedInputStream getInStream(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
BufferedInputStream t=domain.getInStream(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public BufferedReader getReader(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
BufferedReader t=domain.getReader(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Override
public long getSize(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
long t=domain.getSize(localPath);
if(t!=-1) return t;
}catch(Exception e){}
}
return -1;
}
@Nullable
@Override
public byte[] readAllBytes(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
byte[] t=domain.getBytes(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public char[] readAllChars(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
char[] t=domain.getChars(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public String readAll(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
String t=domain.readAll(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public List getLines(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
List t=domain.getLines(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@NotNull
@Override
public DataManagerMulti getLines(@NotNull String localPath, @NotNull Consumer lineConsumer){
checkInitialization();
for(Domain domain : domains){
try{
if(domain.getLines(localPath, lineConsumer)) return this;
}catch(Exception e){}
}
return this;
}
@NotNull
@Override
public DataManagerMulti getLines(@NotNull String localPath, @NotNull ObjIntConsumer lineConsumer){
checkInitialization();
for(Domain domain : domains){
try{
if(domain.getLines(localPath, lineConsumer)) return this;
}catch(Exception e){}
}
return this;
}
@Nullable
@Override
public String[] getDirNames(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
String[] t=domain.getDirNames(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Override
public boolean exists(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
if(domain.exists(localPath)) return true;
}catch(Exception e){}
}
return false;
}
@Nullable
@Override
public String[] getDirPaths(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
String[] t=domain.getDirPaths(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public String[] getDirPathsDeep(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
String[] t=domain.getDirPathsDeep(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public Stream getDirPathsS(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
Stream t=domain.getDirPathsS(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Nullable
@Override
public Stream getDirPathsDeepS(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
Stream t=domain.getDirPathsDeepS(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@Override
public boolean canEditCreate(@NotNull String localPath){
checkInitialization();
for(Domain d : domains){
if(d.canEditCreate(localPath)){
return true;
}
}
return false;
}
@NotNull
@Override
public BufferedOutputStream makeFile(@NotNull String localPath){
checkInitialization();
for(Domain d : domains){
if(d.canEditCreate(localPath)){
return d.makeFile(localPath);
}
}
throw new UnsupportedOperationException();
}
@Override
public void makeFile(@NotNull String localPath, byte[] data){
checkInitialization();
for(Domain d : domains){
if(d.canEditCreate(localPath)){
d.makeFile(localPath, data);
return;
}
}
throw new UnsupportedOperationException();
}
@Nullable
@Override
public Stream getDirNamesS(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
try{
Stream t=domain.getDirNamesS(localPath);
if(t!=null) return t;
}catch(Exception e){}
}
return null;
}
@NotNull
@Override
public IDataManager subData(@NotNull String localPath){
checkInitialization();
if(!exists(localPath)){
StringBuilder sb=new StringBuilder(localPath+" does not exist in any of:\n");
for(Domain domain : domains){
sb.append(" ").append(domain.getSignature()).append('\n');
}
throw new IllegalStateException(sb.toString());
}
return new SubDataManager(this, localPath);
}
@NotNull
@Override
public DataSignature createSignature(@NotNull String localPath){
return new DataSignature(localPath, this);
}
@Override
public long getLastChange(@NotNull String localPath){
checkInitialization();
for(Domain domain : domains){
long time=domain.getLastChange(localPath);
if(time!=-1) return time;
}
return -1;
}
private void checkInitialization(){
if(domains.isEmpty()) throw new IllegalStateException("Domain can not be used without registering a domain!");
}
@NotNull
@Override
public String toString(){
if(domains.isEmpty()) return "";
if(domains.size()==1) return domains.get(0).getSignature();
return "";
}
}