code: @Override
      public Set<URI> listMandatoryParts(URI messageContent) {
          if (messageContent == null || !messageContent.isAbsolute()) {
              log.warn("The Message Content URI is either absent or relative. Provide an absolute URI");
              return ImmutableSet.of();
          }
  
          URI graphUri;
          try {
              graphUri = getGraphUriForElement(messageContent);
          } catch (URISyntaxException e) {
              log.warn("The namespace of the URI of the message content is incorrect.", e);
              return ImmutableSet.of();
          }
  
          if (graphUri == null) {
              log.warn("Could not obtain a graph URI for the element. The URI may not be managed by the server - " + messageContent);
              return ImmutableSet.of();
          }
  
          String queryStr = new StringBuilder()
                  .append("SELECT DISTINCT ?part WHERE { \n")
                  .append(" GRAPH <").append(graphUri.toASCIIString()).append("> { \n")
                  .append("<").append(messageContent.toASCIIString()).append("> ").append("<").append(MSM.hasMandatoryPart.getURI()).append(">").append(" ?part .")
                  .append("?part ").append("<").append(RDF.type.getURI()).append(">").append(" ").append("<").append(MSM.MessagePart.getURI()).append("> .")
                  .append(" } \n ")
                  .append("} \n ")
                  .toString();
  
          return this.graphStoreManager.listResourcesByQuery(queryStr, "part");
      }
docs: Obtains the list of mandatory parts for a given Message Content
  
  @param messageContent the message content URI
  @return a Set of URIs with the mandatory parts of the message content. If there are no parts the Set should be empty NOT null.