package io.urmia.md.mock;
import com.google.common.base.Optional;
import io.urmia.md.repo.MetadataRepository;
import io.urmia.md.exception.MetadataException;
import io.urmia.md.model.storage.Etag;
import io.urmia.md.model.storage.FullObjectName;
import io.urmia.md.model.storage.ObjectName;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class MockMetadataRepositoryImpl implements MetadataRepository {
final List<FullObjectName> objectNames;
final List<String> storageNodes;
public MockMetadataRepositoryImpl(final List<FullObjectName> objectNames, final List<String> storageNodes) {
this.objectNames = objectNames;
this.storageNodes = storageNodes;
}
@Override
public Optional<FullObjectName> selectByName(ObjectName on) throws MetadataException {
for(FullObjectName fon : objectNames)
if(fon.toSimpleString().equalsIgnoreCase(on.toString()))
return Optional.of(fon);
return Optional.absent();
}
@Override
public void insert(FullObjectName fon) throws MetadataException {
objectNames.add(fon);
}
@Override
public void insertStored(/*StorageNode*/String storageNode, Etag etag) throws MetadataException { }
@Override
public void delete(ObjectName on) throws MetadataException {
Iterator<FullObjectName> fonItr = objectNames.iterator();
while(fonItr.hasNext()) {
FullObjectName fon = fonItr.next();
if(fon.toSimpleString().equalsIgnoreCase(on.toString()))
fonItr.remove();
}
}
@Override
public List<FullObjectName> listDir(ObjectName on, int limit) throws MetadataException {
return objectNames.subList(0, limit);
}
@Override
public boolean deletable(ObjectName dir) throws MetadataException {
throw new RuntimeException("not implemented");
}
/*
@Override
public List<String> listStorageNodes() throws MetadataException {
return storageNodes;
}
*/
@Override
public List<String> findStorageByName(ObjectName on) throws MetadataException {
Optional<FullObjectName> fon = selectByName(on);
return fon.isPresent() ? findStorageNameByEtag(fon.get().attributes.etag) : Collections.<String>emptyList();
}
@Override
public List<String> findStorageNameByEtag(String etag) throws MetadataException {
throw new RuntimeException("not implemented");
}
}