public IpnbFileRaw deserialize()

in src/org/jetbrains/plugins/ipnb/format/IpnbParser.java [545:606]


    public IpnbFileRaw deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
      JsonObject object = json.getAsJsonObject();
      IpnbFileRaw fileRaw = new IpnbFileRaw();

      JsonElement worksheets = object.get("worksheets");
      if (worksheets != null) {
        fileRaw.worksheets = gson.fromJson(worksheets, new TypeToken<List<IpnbWorksheet>>(){}.getType());
      }

      JsonElement cellsElement = object.get("cells");
      if (cellsElement != null) {
        fileRaw.cells = gson.fromJson(cellsElement, new TypeToken<List<IpnbCellRaw>>(){}.getType());
      }

      JsonElement metadataElement = object.get("metadata");
      if (metadataElement != null) {
        LinkedTreeMap<String, Object> metadataMap = gson.fromJson(metadataElement, new TypeToken<Map<String, Object>>(){}.getType());

        JsonElement kernelInfo = metadataElement.getAsJsonObject().get("kernel_info");
        if (kernelInfo != null) {
          metadataMap.put("kernel_info", gson.fromJson(kernelInfo, new TypeToken<Map<String, String>>() {}.getType()));
        }

        JsonElement languageInfo = metadataElement.getAsJsonObject().get("language_info");
        if (languageInfo != null) {
          LinkedTreeMap<String, Object> languageInfoMap = gson.fromJson(languageInfo, new TypeToken<Map<String, Object>>() {}.getType());
          JsonElement codemirrorMode = languageInfo.getAsJsonObject().get("codemirror_mode");
          if (codemirrorMode != null) {
            LinkedTreeMap<String, Object> codemirrorModeMap = gson.fromJson(codemirrorMode, new TypeToken<Map<String, String>>() {}.getType());
            if (codemirrorModeMap.containsKey("version")) {

              String version = (String)codemirrorModeMap.get("version");
              if (NumberUtils.isNumber(version)) {
                try {
                  codemirrorModeMap.put("version", Integer.parseInt(version));
                }
                catch (NumberFormatException e) {
                  // added this to obtain backward compatibility as previously we parsed "version" as double.
                  codemirrorModeMap.put("version", (int) Double.parseDouble(version));
                }
              }
            }
            languageInfoMap.put("codemirror_mode", codemirrorModeMap);
          }
          metadataMap.put("language_info", languageInfoMap);
        }

        fileRaw.metadata = metadataMap;
      }

      JsonElement nbformat = object.get("nbformat");
      if (nbformat != null) {
        fileRaw.nbformat = nbformat.getAsInt();
      }

      JsonElement nbformatMinor = object.get("nbformat_minor");
      if (nbformatMinor != null) {
        fileRaw.nbformat_minor = nbformatMinor.getAsInt();
      }

      return fileRaw;
    }