private ResourceDefn loadResource(String n, Map<String, ResourceDefn> map, boolean sandbox)
      throws Exception {
    String src = sandbox ? sndBoxDir : srcDir;
    File spreadsheet =
        new CSFile(
            (sandbox ? sndBoxDir : srcDir) + n + File.separatorChar + n + "-spreadsheet.xml");
    if (!spreadsheet.exists())
      spreadsheet =
          new CSFile((sandbox ? sndBoxDir : srcDir) + n + File.separatorChar + n + "-def.xml");

    SpreadsheetParser sparser =
        new SpreadsheetParser(
            new CSFileInputStream(spreadsheet),
            spreadsheet.getName(),
            definitions,
            src,
            logger,
            registry);
    ResourceDefn root;
    try {
      root = sparser.parseResource();
    } catch (Exception e) {
      throw new Exception("Error Parsing Resource " + n + ": " + e.getMessage(), e);
    }

    root.setSandbox(sandbox);
    for (EventDefn e : sparser.getEvents()) processEvent(e, root.getRoot());

    // EK: Commented this out, seems double with next statement, since
    // loadResource()
    // is always called with definitions.getResources in its map argument.
    // definitions.getResources().put(root.getName(), root);
    if (map != null) {
      map.put(root.getName(), root);
      definitions
          .getKnownResources()
          .put(root.getName(), new DefinedCode(root.getName(), root.getRoot().getDefinition(), n));
    }
    root.setStatus(ini.getStringProperty("status", n));
    return root;
  }