package org.intermine.app.storage;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import org.intermine.app.core.model.Model;
import org.intermine.app.util.Collections;
import org.intermine.app.util.Strs;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author Daria Komkova <Daria_Komkova @ hotmail.com>
*/
public class MemoryStorage extends BaseStorage {
private Map<String, Model> mMineToModelMap;
private volatile Map<String, String> mMineNameToUrlMap;
private Map<String, Map<String, List<String>>> mMineNameToTypeFields;
public MemoryStorage(Context ctx) {
super(ctx);
mMineNameToTypeFields = new HashMap<>();
}
@Override
public Model getMineModel(String mineName) {
if (null != mMineToModelMap) {
return mMineToModelMap.get(mineName);
}
return null;
}
@Override
public Map<String, List<String>> getTypeFields(String mineName) {
Map<String, List<String>> typeFields = mMineNameToTypeFields.get(mineName);
if (null == typeFields || typeFields.isEmpty()) {
typeFields = super.getTypeFields(mineName);
mMineNameToTypeFields.put(mineName, typeFields);
}
return typeFields;
}
@Override
public Map<String, Model> getMineToModelMap() {
return mMineToModelMap;
}
@Override
public void addMineModel(String mineName, Model model) {
if (null == mMineToModelMap) {
mMineToModelMap = Collections.newHashMap();
}
mMineToModelMap.put(mineName, model);
}
@Override
public Map<String, String> getMineToUserTokenMap() {
Set<String> mines = getSelectedMineNames();
Map<String, String> result = Collections.newHashMap();
for (String mine : mines) {
String token = getUserToken(mine);
if (!Strs.isNullOrEmpty(token)) {
result.put(mine, token);
}
}
return result;
}
@Override
public Map<String, String> getMineNameToUrlMap() {
if (null == mMineNameToUrlMap) {
mMineNameToUrlMap = initializeMineToBaseUrlMap(getContext());
}
return mMineNameToUrlMap;
}
private synchronized Map<String, String> initializeMineToBaseUrlMap(Context ctx) {
Map<String, String> result = Collections.newHashMap();
Set<String> selectedMineNames = getSelectedMineNames();
if (!Collections.isNullOrEmpty(selectedMineNames)) {
for (String mineName : selectedMineNames) {
result.put(mineName, getMineUrl(mineName));
}
}
return result;
}
@Override
public void setMineUrl(String mine, String url) {
super.setMineUrl(mine, url);
if (null == mMineNameToUrlMap) {
mMineNameToUrlMap = initializeMineToBaseUrlMap(getContext());
}
mMineNameToUrlMap.put(mine, url);
}
}