public static Ooaofooa getInstance(String id, boolean forceLoad) {
    Ooaofooa modelRoot = Ooaofooa.getInstance(id);

    if (forceLoad && isFileBasedID(id) && !modelRoot.isLoaded()) {
      String projectName = getProjectNameFromModelRootId(id);
      String fileName = getDomainFileNameFromModelRootId(id);
      IProject[] project_set = CorePlugin.getWorkspace().getRoot().getProjects();
      IFile content = null;
      for (int i = 0; i < project_set.length; ++i) {
        if (XtUMLNature.hasNature(project_set[i])) {
          if (project_set[i].getName().equals(projectName)) {
            IResource mdl_folder = project_set[i].findMember(MODELS_DIRNAME);
            IResource[] mdl_content = null;
            try {
              mdl_content = ((IFolder) mdl_folder).members();
            } catch (Exception e) {
              CorePlugin.logError("Problem accessing workspace ", e);
            }
            if (mdl_content != null) {
              for (int j = 0; j < mdl_content.length; ++j) {
                if (mdl_content[j] instanceof IFile) {
                  IFile selected = (IFile) mdl_content[j];
                  if (selected.getName().equals(fileName)) {
                    content = selected;
                    break;
                  }
                }
              }
            }
          }
        }
      }
      if (content != null) {
        modelRoot = getInstance(content, true);
        if (!modelRoot.loadedOk()) {
          modelRoot.delete();
          modelRoot = null;
        }
      }
    }

    return modelRoot;
  }
  /** Returns the model-root associated with the content of the given file. */
  public static Ooaofooa getInstance(IFile file, boolean forceLoad) {
    boolean addExtension = false;
    String domainName = file.getName();
    IPath filePath = file.getFullPath();
    if (filePath.segmentCount() > 5) {
      domainName = filePath.removeLastSegments(filePath.segmentCount() - 4).lastSegment();
      addExtension = true;
    }

    final String id = createModelRootId(file.getProject(), domainName, addExtension);
    Ooaofooa modelRoot = (Ooaofooa) rootInstanceMap.get(id);
    if (modelRoot == null) {
      modelRoot = getInstance(id, false);
    }

    if (forceLoad && !modelRoot.isLoaded()) {
      modelRoot = loadInstanceFromFile(file);
    }
    return modelRoot;
  }