package photato.controllers; import photato.controllers.entities.FolderListResponse; import photato.helpers.SerialisationGsonBuilder; import java.util.List; import org.apache.http.HttpStatus; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import photato.core.PhotatoFilesManager; import photato.core.entities.PhotatoFolder; import photato.core.entities.PhotatoMedia; import java.util.Map; public class FolderListHandler extends PhotatoHandler { private final PhotatoFilesManager photatoFilesManager; public FolderListHandler(String prefix, PhotatoFilesManager photatoFilesManager) { super(prefix, new String[]{"GET"}); this.photatoFilesManager = photatoFilesManager; } @Override protected Response getResponse(String path, Map<String, String> queryStringMap) throws Exception { if (queryStringMap.containsKey("folder")) { String folder = queryStringMap.get("folder"); while (!folder.isEmpty() && folder.startsWith("/")) { // Remove the leading slashes if needed folder = folder.substring(1); } String query = queryStringMap.get("query"); // Can be null List<PhotatoFolder> folders = query == null ? this.photatoFilesManager.getFoldersInFolder(folder) : this.photatoFilesManager.searchFoldersInFolder(folder, query); List<PhotatoMedia> medias = query == null ? this.photatoFilesManager.getMediasInFolder(folder) : this.photatoFilesManager.searchMediasInFolder(folder, query); folders.sort((PhotatoFolder f1, PhotatoFolder f2) -> f1.filename.toLowerCase().compareTo(f2.filename.toLowerCase())); medias.sort((PhotatoMedia m1, PhotatoMedia m2) -> { int c = Long.compare(m1.timestamp, m2.timestamp); if (c == 0) { return m1.filename.toLowerCase().compareTo(m2.filename.toLowerCase()); } else { return c; } }); FolderListResponse result = new FolderListResponse(folders, medias); return new Response(HttpStatus.SC_OK, new StringEntity(SerialisationGsonBuilder.getGson().toJson(result), ContentType.create("application/json", "UTF-8"))); } else { return PhotatoHandler.http404; } } }