package com.mocircle.cidrawing; import android.text.TextUtils; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * A manager of the drawing board */ public class DrawingBoardManager { private static DrawingBoardManager instance; private Map<String, DrawingBoard> drawingBoardMap = new HashMap<>(); /** * Get the singleton instance of {@link DrawingBoardManager} * * @return DrawingBoardManager instance */ public static DrawingBoardManager getInstance() { if (instance == null) { instance = new DrawingBoardManager(); } return instance; } private DrawingBoardManager() { } /** * Creates a new drawing board * * @return drawing board just created */ public DrawingBoard createDrawingBoard() { DrawingBoard board = new DrawingBoardImpl(generateBoardId()); drawingBoardMap.put(board.getBoardId(), board); return board; } /** * Pre-create a new drawing board from json data (boardId) * * @param object json data * @return drawing board */ public DrawingBoard createDrawingBoard(JSONObject object) { String boardId = extractBoardId(object); if (!TextUtils.isEmpty(boardId)) { DrawingBoard board = new DrawingBoardImpl(boardId); drawingBoardMap.put(board.getBoardId(), board); return board; } else { return null; } } /** * Looks up the drawing board by unique id * * @param boardId board id * @return drawing board just found */ public DrawingBoard findDrawingBoard(String boardId) { return drawingBoardMap.get(boardId); } private String generateBoardId() { return UUID.randomUUID().toString(); } private String extractBoardId(JSONObject object) { return object.optString(DrawingBoardImpl.KEY_BOARD_ID); } }