public static boolean tryAnalyzeWhetherFullDataElementList(List<DataElement> dataElements,
                                                               ExGuid storageIndexExGuid)
            throws TikaException {
        AtomicReference<ExGuid> manifestMappingGuid = new AtomicReference<>();
        AtomicReference<HashMap<CellID, ExGuid>> cellIDMappings = new AtomicReference<>();
        AtomicReference<HashMap<ExGuid, ExGuid>> revisionIDMappings = new AtomicReference<>();
        if (!analyzeStorageIndexDataElement(dataElements, storageIndexExGuid, manifestMappingGuid,
                cellIDMappings, revisionIDMappings)) {
            return false;
        }

        if (cellIDMappings.get().size() == 0) {
            return false;
        }

        if (revisionIDMappings.get().size() == 0) {
            return false;
        }

        StorageManifestDataElementData manifestData =
                getStorageManifestDataElementData(dataElements, manifestMappingGuid.get());
        if (manifestData == null) {
            return false;
        }

        for (StorageManifestRootDeclare kv : manifestData.storageManifestRootDeclareList) {
            if (!cellIDMappings.get().containsKey(kv.cellID)) {
                throw new InvalidOperationException(String.format(Locale.US,
                        "Cannot find the Cell ID %s in the cell id mapping", kv.cellID.toString()));
            }

            ExGuid cellMappingID = cellIDMappings.get().get(kv.cellID);
            DataElement dataElement = dataElements.stream()
                    .filter(element -> element.dataElementExGuid.equals(cellMappingID)).findAny()
                    .orElse(null);
            if (dataElement == null) {
                return false;
            }

            CellManifestDataElementData cellData =
                    dataElement.getData(CellManifestDataElementData.class);
            ExGuid currentRevisionExGuid =
                    cellData.cellManifestCurrentRevision.cellManifestCurrentRevisionExGuid;
            if (!revisionIDMappings.get().containsKey(currentRevisionExGuid)) {
                throw new InvalidOperationException(String.format(Locale.US,
                        "Cannot find the revision id %s in the revisionMapping",
                        currentRevisionExGuid.toString()));
            }

            ExGuid revisionMapping = revisionIDMappings.get().get(currentRevisionExGuid);
            dataElement = dataElements.stream()
                    .filter(element -> element.dataElementExGuid.equals(revisionMapping)).findAny()
                    .orElse(null);
            if (dataElement == null) {
                return false;
            }

            RevisionManifestDataElementData revisionData =
                    dataElement.getData(RevisionManifestDataElementData.class);
            for (RevisionManifestObjectGroupReferences reference :
                    revisionData.revisionManifestObjectGroupReferences) {
                dataElement = dataElements.stream()
                        .filter(element -> element.dataElementExGuid.equals(
                                reference.objectGroupExtendedGUID)).findAny().orElse(null);
                if (dataElement == null) {
                    return false;
                }
            }
        }

        return true;
    }
This method is used to try to analyze the returned whether data elements are complete.

@param dataElements       Specify the data elements list.
@param storageIndexExGuid Specify the storage index extended GUID.
@return If the data elements start with the specified storage index extended GUID are complete,
return true. Otherwise return false.
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/fsshttpb/util/DataElementUtils.java