package org.droidplanner.services.android.impl.utils.file.IO;
import android.content.Context;
import org.droidplanner.services.android.impl.core.survey.CameraInfo;
import com.o3dr.android.client.utils.FileUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class CameraInfoLoader {
private static final String CAMERA_INFO_ASSESTS_FOLDER = "CameraInfo";
private Context context;
private HashMap<String, String> filesInSdCard = new HashMap<String, String>();
private HashMap<String, String> filesInAssets = new HashMap<String, String>();
public CameraInfoLoader(Context context) {
this.context = context;
}
public CameraInfo openFile(String file) throws Exception {
if (filesInSdCard.containsKey(file)) {
return readSdCardFile(file);
} else if (filesInAssets.containsKey(file)) {
return readAssetsFile(file);
} else {
throw new FileNotFoundException();
}
}
private CameraInfo readSdCardFile(String file) throws Exception {
CameraInfoReader reader = new CameraInfoReader();
InputStream inputStream = new FileInputStream(filesInSdCard.get(file));
reader.openFile(inputStream);
inputStream.close();
return reader.getCameraInfo();
}
private CameraInfo readAssetsFile(String file) throws Exception {
CameraInfoReader reader = new CameraInfoReader();
InputStream inputStream = context.getAssets().open(filesInAssets.get(file));
reader.openFile(inputStream);
inputStream.close();
return reader.getCameraInfo();
}
public List<String> getCameraInfoList() {
ArrayList<String> avaliableCameras = new ArrayList<String>();
List<String> cameraInfoListFromStorage = getCameraInfoListFromStorage();
avaliableCameras.addAll(cameraInfoListFromStorage);
List<String> cameraInfoListFromAssets = getCameraInfoListFromAssets();
avaliableCameras.addAll(cameraInfoListFromAssets);
return avaliableCameras;
}
private List<String> getCameraInfoListFromAssets() {
try {
String[] list = context.getAssets().list(CAMERA_INFO_ASSESTS_FOLDER);
filesInAssets.clear();
for (String string : list) {
filesInAssets.put(string, CAMERA_INFO_ASSESTS_FOLDER + "/" + string);
}
return Arrays.asList(list);
} catch (IOException e) {
return new ArrayList<String>();
}
}
private List<String> getCameraInfoListFromStorage() {
List<String> filesName = new ArrayList<>();
filesInSdCard.clear();
File[] filesList = FileUtils.getCameraInfoFileList(this.context);
if(filesList != null && filesList.length > 0) {
for (File file : filesList) {
final String filename = file.getName();
filesName.add(filename);
filesInSdCard.put(filename, file.getAbsolutePath());
}
}
return filesName;
}
}