
io.relayr.java.storage.MockDeviceModelCache Maven / Gradle / Ivy
package io.relayr.java.storage;
import com.google.gson.reflect.TypeToken;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeoutException;
import javax.inject.Inject;
import io.relayr.java.api.mock.MockBackend;
import io.relayr.java.model.models.DeviceModel;
import io.relayr.java.model.models.DeviceModels;
import io.relayr.java.model.models.error.DeviceModelsException;
import rx.Subscriber;
public class MockDeviceModelCache{
private static final Map sDeviceModels = new ConcurrentHashMap();
private final MockBackend mMockBackend;
@Inject
public MockDeviceModelCache(MockBackend mockBackend) {
mMockBackend = mockBackend;
refresh();
}
public boolean isEmpty() {
return false;
}
public DeviceModel getModelById(String modelId) throws DeviceModelsException {
if (modelId == null) throw DeviceModelsException.nullModelId();
if (isEmpty()) throw DeviceModelsException.cacheNotReady();
DeviceModel model = sDeviceModels.get(modelId);
if (model == null) throw DeviceModelsException.deviceModelNotFound();
return model;
}
public void refresh() {
mMockBackend.createObservable(new TypeToken() { }, MockBackend.DEVICE_MODELS)
.subscribe(new Subscriber() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {
e.printStackTrace();
if (e instanceof TimeoutException) refresh();
}
@Override
public void onNext(DeviceModels deviceModels) {
for (DeviceModel deviceModel : deviceModels.getModels())
sDeviceModels.put(deviceModel.getId(), deviceModel);
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy