ref #10048 add MclActivator and normalize users
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 10 Nov 2022 13:59:21 +0000 (14:59 +0100)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 10 Nov 2022 13:59:21 +0000 (14:59 +0100)
app-import/src/main/java/eu/etaxonomy/cdm/app/berlinModelImport/MclActivator.java [new file with mode: 0644]
app-import/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelImportBase.java
app-import/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelImportConfigurator.java

diff --git a/app-import/src/main/java/eu/etaxonomy/cdm/app/berlinModelImport/MclActivator.java b/app-import/src/main/java/eu/etaxonomy/cdm/app/berlinModelImport/MclActivator.java
new file mode 100644 (file)
index 0000000..78b9758
--- /dev/null
@@ -0,0 +1,488 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.app.berlinModelImport;
+
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.transaction.TransactionStatus;
+
+import eu.etaxonomy.cdm.api.application.FirstDataInserter;
+import eu.etaxonomy.cdm.api.application.ICdmRepository;
+import eu.etaxonomy.cdm.api.service.IGroupService;
+import eu.etaxonomy.cdm.app.common.CdmDestinations;
+import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
+import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
+import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
+import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
+import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
+import eu.etaxonomy.cdm.io.common.IImportConfigurator.EDITOR;
+import eu.etaxonomy.cdm.io.common.Source;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.metadata.CdmPreference;
+import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.permission.GrantedAuthorityImpl;
+import eu.etaxonomy.cdm.model.permission.Group;
+import eu.etaxonomy.cdm.model.permission.User;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.term.TermTree;
+import eu.etaxonomy.cdm.persistence.permission.Role;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
+
+/**
+ * TODO add the following to a wiki page:
+ * HINT: If you are about to import into a mysql data base running under windows and if you wish to
+ * dump and restore the resulting data bas under another operation systen
+ * you must set the mysql system variable lower_case_table_names = 0 in order to create data base with table compatible names.
+ *
+ * @author a.mueller
+ */
+public class MclActivator {
+
+    private static final Logger logger = LogManager.getLogger();
+
+       //database validation status (create, update, validate ...)
+       static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
+       static final Source berlinModelSource = BerlinModelSources.mcl();
+
+       static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
+//  static final ICdmDataSource cdmDestination = CdmDestinations.cdm_local_medchecklist();
+//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_medchecklist();
+//  static final ICdmDataSource cdmDestination = CdmDestinations.cdm_production_medchecklist();
+
+    //check - import
+    static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
+
+    static final boolean doUser = false;
+//  //authors
+    static final boolean doAuthors = true;
+    //references
+    static final DO_REFERENCES doReferences = DO_REFERENCES.ALL;
+    //names
+    static final boolean doTaxonNames = true;
+    static final boolean doRelNames = true;
+    static final boolean doNameStatus = true;
+    static final boolean doNameFacts = true;
+
+    //taxa
+    static final boolean doTaxa = true;
+    static final boolean doFacts = true;
+    static final boolean doRelTaxa = true;
+    static final boolean doOccurrences = true;
+    static final boolean doOccurrenceSources = true;
+    static final boolean doCommonNames = true;
+
+    static final boolean doNamedAreas = true;
+
+    //serious types do not exist in MCL
+    static final boolean doTypes = false;
+
+    static final boolean doRunTransmissionEngine = false; // (hbm2dll == DbSchemaValidation.VALIDATE);
+
+    //etc.
+    static final boolean doMarker = false;  //no relevant markers exist
+
+    boolean invers = !(hbm2dll == DbSchemaValidation.CREATE);
+
+    boolean doPreliminaryRefDetailsWithNames = true;
+
+    boolean logNotMatchingOldNames = false;
+    boolean logMatchingNotExportedOldNames = false;  //true
+    boolean checkOldNameIsSynonym = false;
+    boolean includeMANsForOldNameCheck = true;
+
+       static final int sourceSecId = 7000000; //500000
+       static final UUID classificationUuid = UUID.fromString("f65a592d-a430-4db9-b994-39c181c34abe");
+       static final boolean useSingleClassification = true;
+       static final String classificationName = "Med-Checklist";
+       static final UUID featureTreeUuid = UUID.fromString("be5851fb-ddb7-4e30-a375-57d98cf30c40");
+       static final Object[] featureKeyList = new Integer[]{1, 31, 4, 98, 41};
+
+       // set to zero for unlimited nameFacts
+       static final int maximumNumberOfNameFacts = 0;
+
+       static final int partitionSize = 2500;
+
+
+       //editor - import
+       static final EDITOR editor = EDITOR.EDITOR_AS_EDITOR;
+
+       //NomenclaturalCode
+       static final NomenclaturalCode nomenclaturalCode = NomenclaturalCode.ICNAFP;
+
+       //ignore null
+       static final boolean ignoreNull = false;
+
+       static final boolean switchSpeciesGroup = true;
+
+       static boolean useClassification = true;
+
+       static boolean isSplitTdwgCodes = false;
+//     static boolean useEmAreaVocabulary = true;
+
+       private final boolean removeHttpMapsAnchor = true;
+
+
+       static final String infrGenericRankAbbrev = "[unranked]";
+       static final String infrSpecificRankAbbrev = "[unranked]";
+
+       static boolean useLastScrutinyAsSec = false;
+       static boolean warnForDifferingSynonymReference = false;
+
+
+// **************** ALL *********************
+
+       public void importEm2CDM (Source source, ICdmDataSource destination, DbSchemaValidation hbm2dll){
+               System.out.println("Start import from BerlinModel("+ berlinModelSource.getDatabase() + ") to " + cdmDestination.getDatabase() + " ...");
+               //make BerlinModel Source
+
+               BerlinModelImportConfigurator config = BerlinModelImportConfigurator.NewInstance(source,  destination);
+
+               config.setClassificationName(classificationName);
+
+               config.setClassificationUuid(classificationUuid);
+               config.setSourceSecId(sourceSecId);
+               config.setNomenclaturalCode(nomenclaturalCode);
+               config.setIgnoreNull(ignoreNull);
+
+               config.setDoAuthors(doAuthors ^ invers);
+               config.setDoReferences(invers ? doReferences.invers() : doReferences);
+               config.setDoTaxonNames(doTaxonNames ^ invers);
+               config.setDoRelNames(doRelNames ^ invers);
+               config.setDoNameStatus(doNameStatus ^ invers);
+               config.setDoTypes(doTypes);  //always false
+               config.setDoNameFacts(doNameFacts ^ invers);
+               config.setDoTaxa(doTaxa ^ invers);
+               config.setDoRelTaxa(doRelTaxa ^ invers);
+               config.setDoFacts(doFacts ^ invers);
+               config.setDoOccurrence(doOccurrences ^ invers);
+               config.setDoOccurrenceSources(doOccurrenceSources ^ invers);
+        config.setDoCommonNames(doCommonNames ^ invers);
+        config.setDoNamedAreas(doNamedAreas ^ invers);
+
+               config.setDoMarker(doMarker);
+               config.setDoUser(doUser ^ invers);
+
+               config.setMcl(true);
+               config.setDoSourceNumber(true);
+
+               config.setLogNotMatchingOldNames(logNotMatchingOldNames);
+               config.setLogMatchingNotExportedOldNames(logMatchingNotExportedOldNames);
+               config.setCheckOldNameIsSynonym(checkOldNameIsSynonym);
+               config.setIncludeMANsForOldNameCheck(includeMANsForOldNameCheck);
+
+               config.setUseClassification(useClassification);
+               config.setSourceRefUuid(BerlinModelTransformer.uuidSourceRefEuroMed);
+               config.setEditor(editor);
+               config.setDbSchemaValidation(hbm2dll);
+               config.setUseLastScrutinyAsSec(useLastScrutinyAsSec);
+               config.setWarnForDifferingSynonymReference(warnForDifferingSynonymReference);
+
+               // maximum number of name facts to import
+               config.setMaximumNumberOfNameFacts(maximumNumberOfNameFacts);
+
+               config.setInfrGenericRankAbbrev(infrGenericRankAbbrev);
+               config.setInfrSpecificRankAbbrev(infrSpecificRankAbbrev);
+               config.setRemoveHttpMapsAnchor(removeHttpMapsAnchor);
+
+               config.setDoPreliminaryRefDetailsWithNames(doPreliminaryRefDetailsWithNames);
+
+//             filter
+//             config.setTaxonTable(taxonTable);
+//             config.setClassificationQuery(classificationQuery);
+//             config.setRelTaxaIdQuery(relPTaxonIdQuery);
+//             config.setNameIdTable(nameIdTable);
+//             config.setReferenceIdTable(referenceIdTable);
+//             config.setAuthorTeamFilter(authorTeamFilter);
+//             config.setAuthorFilter(authorFilter);
+//             config.setFactFilter(factFilter);
+//             config.setRefDetailFilter(refDetailFilter);
+//             config.setCommonNameFilter(commonNameFilter);
+//             config.setOccurrenceFilter(occurrenceFilter);
+//             config.setOccurrenceSourceFilter(occurrenceSourceFilter);
+//             config.setWebMarkerFilter(webMarkerFilter);
+               config.setUseSingleClassification(useSingleClassification);
+
+               //TDWG codes
+               config.setSplitTdwgCodes(isSplitTdwgCodes);
+//             config.setUseEmAreaVocabulary(useEmAreaVocabulary);
+
+               config.setCheck(check);
+               config.setEditor(editor);
+               config.setRecordsPerTransaction(partitionSize);
+
+               config.setSwitchSpeciesGroup(switchSpeciesGroup);
+
+               // invoke import
+               CdmDefaultImport<BerlinModelImportConfigurator> bmImport = new CdmDefaultImport<>();
+               bmImport.invoke(config);
+
+//             renameRanks(config, bmImport);
+
+               createFeatureTree(config, bmImport);
+
+//             changeCommonNameLabel(config, bmImport);
+
+//             createUsersAndRoles(config, bmImport);
+
+//        runTransmissionEngine(config, bmImport);
+
+//        importShapefile(config, bmImport);
+
+//      createPreferences(config, bmImport); => manual
+
+//        markAreasAsHidden(config, bmImport);  //has been moved to BM occurrence import
+
+               System.out.println("End import from BerlinModel ("+ source.getDatabase() + ")...");
+       }
+
+    private void createPreferences(BerlinModelImportConfigurator config,
+            CdmDefaultImport<BerlinModelImportConfigurator> bmImport) {
+
+        if (config.isDoUser() && (config.getCheck().isImport() )){
+            ICdmRepository app = bmImport.getCdmAppController();
+
+            //area vocs
+            CdmPreference preference = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionAreaVocabularies, BerlinModelTransformer.uuidVocCaucasusAreas.toString()+";" + BerlinModelTransformer.uuidVocEuroMedAreas.toString());
+            preference.setAllowOverride(false);
+            app.getPreferenceService().set(preference);
+
+            //occ status list
+            String status ="42946bd6-9c22-45ad-a910-7427e8f60bfd;9eb99fe6-59e2-4445-8e6a-478365bd0fa9;c3ee7048-15b7-4be1-b687-9ce9c1a669d6;643cf9d1-a5f1-4622-9837-82ef961e880b;0c54761e-4887-4788-9dfa-7190c88746e3;83eb0aa0-1a45-495a-a3ca-bf6958b74366;aeec2947-2700-4623-8e32-9e3a430569d1;ddeac4f2-d8fa-43b8-ad7e-ca13abdd32c7;310373bf-7df4-4d02-8cb3-bcc7448805fc;5c397f7b-59ef-4c11-a33c-45691ceda91b;925662c1-bb10-459a-8c53-da5a738ac770;61cee840-801e-41d8-bead-015ad866c2f1;e191e89a-a751-4b0c-b883-7f1de70915c9";
+            CdmPreference statusListPref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionAreaVocabularies, status);
+            statusListPref.setAllowOverride(false);
+            app.getPreferenceService().set(statusListPref);
+
+            //distr. editor activated
+            CdmPreference distrEditorActive = CdmPreference.NewTaxEditorInstance(PreferencePredicate.DistributionEditorActivated, "true");
+            statusListPref.setAllowOverride(true);
+            app.getPreferenceService().set(distrEditorActive);
+
+//            //idInVoc for areas
+//            CdmPreference distrEditorShowIdInVocForAreas = CdmPreference.NewTaxEditorInstance(PreferencePredicate.Sho.ShowIdInVocabulary, "true");
+//            distrEditorShowIdInVocForAreas.setAllowOverride(true);
+//            app.getPreferenceService().set(distrEditorShowIdInVocForAreas);
+//
+//            //areas sort order
+//            //?? correct?
+//            CdmPreference distrEditorSorted = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AreasSortedByIdInVocabulary, "true");
+//            distrEditorSorted.setAllowOverride(true);
+//            app.getPreferenceService().set(distrEditorSorted);
+//
+//            //distr. status uses symbol
+//            //?? correct?
+//            CdmPreference distrEditorStatusUseSymbols = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowSymbolForStatus, "false");
+//            distrEditorStatusUseSymbols.setAllowOverride(true);
+//            app.getPreferenceService().set(distrEditorStatusUseSymbols);
+
+            //media view
+            CdmPreference showMediaView = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowMediaView, "false");
+            showMediaView.setAllowOverride(false);
+            app.getPreferenceService().set(showMediaView);
+
+            //multi classification
+            CdmPreference multiClassification = CdmPreference.NewTaxEditorInstance(PreferencePredicate.DisableMultiClassification, "true");
+            multiClassification.setAllowOverride(false);
+            app.getPreferenceService().set(multiClassification);
+
+            //taxon node wizard
+            CdmPreference showTaxonNodeWizard = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowTaxonNodeWizard, "false");
+            showTaxonNodeWizard.setAllowOverride(false);
+            app.getPreferenceService().set(showTaxonNodeWizard);
+
+            //import+export
+            CdmPreference showImportExportMenu = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowImportExportMenu, "false");
+            showImportExportMenu.setAllowOverride(true);
+            app.getPreferenceService().set(showImportExportMenu);
+
+            //show specimen
+            CdmPreference showSpecimen = CdmPreference.NewTaxEditorInstance(PreferencePredicate.ShowSpecimen, "false");
+            showSpecimen.setAllowOverride(false);
+            app.getPreferenceService().set(showSpecimen);
+
+        }
+
+    }
+
+    //create feature tree
+    private void createFeatureTree(BerlinModelImportConfigurator config,
+            CdmDefaultImport<BerlinModelImportConfigurator> bmImport){
+           if (config.isDoFacts() && (config.getCheck().isImport()  )  ){
+                       try {
+                ICdmRepository app = bmImport.getCdmAppController();
+                TransactionStatus tx = app.startTransaction();
+
+                //make feature tree
+                TermTree<Feature> tree = TreeCreator.flatTree(featureTreeUuid, config.getFeatureMap(), featureKeyList);
+                tree.setTitleCache("Euro+Med Feature Tree", true);
+                tree.getRoot().addChild(Feature.IMAGE());
+                tree.getRoot().addChild(Feature.DISTRIBUTION(), 1);
+                tree.getRoot().addChild(Feature.COMMON_NAME(), 2);
+                app.getTermTreeService().saveOrUpdate(tree);
+
+                app.commitTransaction(tx);
+            } catch (Exception e) {
+                e.printStackTrace();
+                logger.error("Exception in createFeatureTree: " + e.getMessage());
+            }
+               }
+    }
+
+
+
+    //4. Create users and assign roles  #3979
+    private void createUsersAndRoles(BerlinModelImportConfigurator config,
+            CdmDefaultImport<BerlinModelImportConfigurator> bmImport) {
+
+        try {
+            if (config.isDoRelTaxa() && (config.getCheck().isImport())){
+                ICdmRepository app = bmImport.getCdmAppController();
+                TransactionStatus tx = app.startTransaction();
+
+                //eraabstraube
+                String eraabstraube = "e.raabstraube";
+                List<User> users = app.getUserService().listByUsername(eraabstraube, MatchMode.EXACT, null, null, null, null, null);
+                User userEraabStraube;
+                if (users.isEmpty()){
+                    userEraabStraube = User.NewInstance(eraabstraube, eraabstraube);
+                }else{
+                    userEraabStraube = users.get(0);
+                }
+                if (userEraabStraube.getPerson() == null){
+                    Person eckhard = Person.NewInstance();
+                    eckhard.setFamilyName("von Raab-Straube");
+                    eckhard.setGivenName("Eckhard");
+                    eckhard.setPrefix("Dr.");
+                    userEraabStraube.setPerson(eckhard);
+                }
+                app.getUserService().saveOrUpdate(userEraabStraube);
+
+                //groups
+                Group groupEditor = app.getGroupService().load(Group.GROUP_EDITOR_UUID);
+                groupEditor.addMember(userEraabStraube);
+                app.getGroupService().saveOrUpdate(groupEditor);
+
+                Group groupProjectManager = app.getGroupService().load(Group.GROUP_PROJECT_MANAGER_UUID);
+                groupProjectManager.addMember(userEraabStraube);
+                app.getGroupService().saveOrUpdate(groupProjectManager);
+
+                String[] publishRoles = new String[]{Role.ROLE_PUBLISH.toString()};
+                Group groupPublisher = checkGroup(app.getGroupService(), Group.GROUP_PUBLISH_UUID, "Publisher", publishRoles);
+                groupPublisher.addMember(userEraabStraube);
+                app.getGroupService().saveOrUpdate(groupPublisher);
+
+                UUID uuidEuroMedPlantBaseGroup = UUID.fromString("91be42ea-ad04-4458-9836-389277e773db");
+                String[] emPlantBaseRoles = new String[]{"TAXONNODE.[CREATE,READ,UPDATE,DELETE]"};
+                Group euroMedPlantbase = checkGroup(app.getGroupService(), uuidEuroMedPlantBaseGroup, "Euro+Med Plantbase", emPlantBaseRoles);
+                euroMedPlantbase.addMember(userEraabStraube);
+                app.getGroupService().saveOrUpdate(euroMedPlantbase);
+
+                //cichorieae-editor
+                String cichorieaeEditor = "cichorieae-editor";
+                app.getUserService().listByUsername(cichorieaeEditor, MatchMode.EXACT, null, null, null, null, null);
+                User userCichEditor;
+                if (users.isEmpty()){
+                    userCichEditor = User.NewInstance(cichorieaeEditor, cichorieaeEditor);
+                }else{
+                    userCichEditor = users.get(0);
+                }
+                app.getUserService().saveOrUpdate(userCichEditor);
+
+                //groups
+                groupEditor.addMember(userCichEditor);
+                app.getGroupService().saveOrUpdate(groupEditor);
+
+                UUID uuidCichorieaeSubtree = null;
+                UUID uuidCichorieae = UUID.fromString("63c7dbeb-b9a2-48b8-a75f-e3fe5e161f7c");
+                Taxon cich = (Taxon)app.getTaxonService().find(uuidCichorieae);
+                if (cich != null){
+                    if (!cich.getTaxonNodes().isEmpty()){
+                        TaxonNode cichNode = cich.getTaxonNodes().iterator().next();
+                        uuidCichorieaeSubtree = cichNode.getUuid();
+                    }
+                }
+
+                String[] cichorieaeRoles = new String[]{};
+                if (uuidCichorieaeSubtree != null){
+                    cichorieaeRoles = new String[]{"TAXONNODE.[CREATE,READ,UPDATE,DELETE]{"+uuidCichorieaeSubtree.toString()+"}"};
+                }else{
+                    String message = "Cichorieae node could not be found for cichorieae-editor role";
+                    logger.warn(message);
+                    System.out.println(message);
+                }
+                UUID uuidCichorieaeGroup = UUID.fromString("a630938d-dd4f-48c2-9406-91def487b11e");
+                String cichorieaeGroupName = "Cichorieae";
+                Group cichorieaeGroup = checkGroup(app.getGroupService(), uuidCichorieaeGroup, cichorieaeGroupName, cichorieaeRoles);
+                cichorieaeGroup.addMember(userCichEditor);
+                app.getGroupService().saveOrUpdate(cichorieaeGroup);
+
+                app.commitTransaction(tx);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception in createUsersAndRoles: " + e.getMessage());
+        }
+    }
+
+       /**
+         * copied from {@link FirstDataInserter#checkGroup}
+     */
+    private Group checkGroup(IGroupService groupService, UUID groupUuid, String groupName, String[] requiredAuthorities) {
+        Group group = groupService.load(groupUuid);
+        if(group == null){
+            group = Group.NewInstance();
+            group.setUuid(groupUuid);
+            logger.info("New Group '" + groupName + "' created");
+        }
+        group.setName(groupName); // force name
+
+        Set<GrantedAuthority> grantedAuthorities = group.getGrantedAuthorities();
+
+        for(String a : requiredAuthorities){
+            boolean isMissing = true;
+            for(GrantedAuthority ga : grantedAuthorities){
+                if(a.equals(ga.getAuthority())){
+                    isMissing = false;
+                    break;
+                }
+            }
+            if(isMissing){
+                GrantedAuthorityImpl newGa = GrantedAuthorityImpl.NewInstance(a);
+                group.addGrantedAuthority(newGa);
+                logger.info("New GrantedAuthority '" + a + "' added  to '" + groupName + "'");
+            }
+        }
+        groupService.saveOrUpdate(group);
+        logger.info("Check of group  '" + groupName + "' done");
+        return group;
+    }
+
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               MclActivator importActivator = new MclActivator();
+               Source source = berlinModelSource;
+               ICdmDataSource cdmRepository = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
+
+               importActivator.importEm2CDM(source, cdmRepository, hbm2dll);
+               System.exit(0);
+       }
+
+}
index eadc3d270eccd9ba3cac431cf5854ee421fc22fa..bae173eea7ee741d5b5527dd15656ca7de236dd6 100644 (file)
@@ -546,6 +546,8 @@ public abstract class BerlinModelImportBase
                 if(username.matches("kapet")){
                     username = "kpet";
                 }
+            }else if (state.getConfig().isMcl()) {
+                username = username.replace(", ", "_");
             }
             return username;
         }
index 0b36863e834693cf7cab54b9a76a6bd2c6000a23..87af7d873286d45915f9fd4fdb176dba02968927 100644 (file)
@@ -63,6 +63,7 @@ public class BerlinModelImportConfigurator
 \r
        private boolean isSalvador = false;\r
        private boolean isEuroMed = false;\r
+       private boolean isMcl = false;\r
 \r
        //taxa\r
        private boolean doTaxa = true;\r
@@ -638,6 +639,9 @@ public class BerlinModelImportConfigurator
     public boolean isEuroMed() {return isEuroMed;}\r
     public void setEuroMed(boolean isEuroMed) {this.isEuroMed = isEuroMed;}\r
 \r
+    public boolean isMcl() {return isMcl;}\r
+    public void setMcl(boolean isMcl) {this.isMcl = isMcl;}\r
+\r
     public UUID getFeatureTreeUuid() {\r
         return featureTreeUuid;\r
     }\r