@Override
    public boolean loadMap(Object source) {

        BufferedReader br = null;
        String line = "";
        String csvSplitBy = ",";

        File file = new File((String) source);
        if (!file.exists()) {
            throw new IllegalArgumentException("file doesn't exist");
        }

        try {
            setExitExist(false);
            setCharacterExist(false);
            br = new BufferedReader(new FileReader(file));
            line = br.readLine();
            String[] mapInfo = new String[line.trim().split(csvSplitBy).length];
            mapInfo = line.trim().split(csvSplitBy);

            setMapName(mapInfo[0]);
            setTimeLimit(Integer.valueOf(mapInfo[1]));

            setWidth(Integer.valueOf(mapInfo[2]));
            setHeight(Integer.valueOf(mapInfo[3]));

            int x = 0;

            for (int y = 0; y<getHeight(); y++) {
                line = br.readLine();
                if(line != null) {
                x = 0;
                for (String item : line.trim().split(csvSplitBy)) {
                    createMapObject(x, y, item);
                    x++;

                }
                }
            }
            
            if (!isMapValid()) {
                throw new Exception("Map is not valid");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Done");
        return true;
    }