code: String deriveGroupIdFromPackages(ProjectModel projectModel)
      {
          Map<Object, Long> pkgsMap = new HashMap<>();
          Set<String> pkgs = new HashSet<>(1000);
          GraphTraversal<Vertex, Vertex> pipeline = new GraphTraversalSource(graphContext.getGraph()).V(projectModel);
  
  
          pkgsMap = pipeline.out(ProjectModel.PROJECT_MODEL_TO_FILE)
                  .has(WindupVertexFrame.TYPE_PROP, new P(new BiPredicate<String, String>() {
                              @Override
                              public boolean test(String o, String o2) {
                                  return o.contains(o2);
                              }
                          },
                          GraphTypeManager.getTypeValue(JavaClassFileModel.class)))
                  .hasKey(JavaClassFileModel.PROPERTY_PACKAGE_NAME)
                  .groupCount()
                  .by(v -> upToThirdDot(graphContext, (Vertex)v)).toList().get(0);
  
          Map.Entry<Object, Long> biggest = null;
          for (Map.Entry<Object, Long> entry : pkgsMap.entrySet())
          {
              if (biggest == null || biggest.getValue() < entry.getValue())
                  biggest = entry;
          }
          // More than a half is of this package.
          if (biggest != null && biggest.getValue() > pkgsMap.size() / 2)
              return biggest.getKey().toString();
  
          return null;
      }
docs: Counts the packages prefixes appearing in this project and if some of them make more than half of the total of existing packages, this prefix
  is returned. Otherwise, returns null.
  
  This is just a helper, it isn't something really hard-setting the package. It's something to use if the user didn't specify using
  --mavenize.groupId, and the archive or project name is something insane, like few sencences paragraph (a description) or a number or such.