public ArrayList<String> obtainCommonalities(String[] ecoreFiles) throws Exception {
    ArrayList<String> commonality = new ArrayList<String>();
    ArrayList<Language> languages = new ArrayList<Language>();
    for (String ecoreFile : ecoreFiles) {
      Metamodel metamodel = MelangeFactory.eINSTANCE.createMetamodel();
      metamodel.setEcoreUri(ecoreFile);
      Language language = MelangeFactory.eINSTANCE.createLanguage();
      language.setName(ecoreFile);
      language.setSyntax(metamodel);
      languages.add(language);
    }

    ConceptComparison comparisonOperator = new NamingConceptComparison();

    ArrayList<TupleConceptMember> conceptMemberList =
        FamiliesServices.getInstance().getConceptMemberMappingList(languages);
    ArrayList<TupleConceptMembers> conceptMemberGroupList =
        FamiliesServices.getInstance()
            .getConceptMemberGroupList(conceptMemberList, comparisonOperator);

    for (TupleConceptMembers conceptMembersGroupVO : conceptMemberGroupList) {
      if (this.commonality(conceptMembersGroupVO, languages)) {
        commonality.add(conceptMembersGroupVO.getConcept().getName());
      }
    }
    return commonality;
  }
  private boolean commonality(
      TupleConceptMembers conceptMembersGroupVO, ArrayList<Language> languages) {
    boolean allContained = true;
    for (Language language : languages) {
      allContained =
          allContained
              && conceptMembersGroupVO.getMembers().contains(language.getSyntax().getEcoreUri());

      if (!allContained) continue;
    }
    return allContained && languages.size() == conceptMembersGroupVO.getMembers().size();
  }