package com.constellio.sdk.load.script.preparators; import static com.constellio.model.entities.schemas.Schemas.CODE; import java.util.ArrayList; import java.util.List; import java.util.Stack; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.sdk.load.script.TaxonomyPreparator; public abstract class BaseTaxonomyPreparator implements TaxonomyPreparator { int conceptsPerLevelPerParent = 9; int nbLevels = 3; public int getConceptsPerLevelPerParent() { return conceptsPerLevelPerParent; } public void setConceptsPerLevelPerParent(int conceptsPerLevelPerParent) { this.conceptsPerLevelPerParent = conceptsPerLevelPerParent; } public int getNbLevels() { return nbLevels; } public void setNbLevels(int nbLevels) { this.nbLevels = nbLevels; } @Override public List<RecordWrapper> createRootConcepts(RMSchemasRecordsServices rm) { List<RecordWrapper> concepts = new ArrayList<>(); for (int i = 0; i < conceptsPerLevelPerParent; i++) { concepts.add(newConceptWithCodeAndParent(rm, "" + (i + 1), null)); } return concepts; } protected abstract RecordWrapper newConceptWithCodeAndParent(RMSchemasRecordsServices rm, String code, RecordWrapper parent); @Override public List<RecordWrapper> createChildConcepts(RMSchemasRecordsServices rm, RecordWrapper parent, Stack<Integer> positions) { List<RecordWrapper> concepts = new ArrayList<>(); int levels = positions.size(); if (levels < nbLevels) { String parentCode = parent.getWrappedRecord().get(CODE); for (int i = 0; i < conceptsPerLevelPerParent; i++) { String code; if (conceptsPerLevelPerParent > 9) { code = parentCode + "-" + (i < 10 ? "0" : "") + (i + 1); } else { code = parentCode + (i + 1); } concepts.add(newConceptWithCodeAndParent(rm, code, parent)); } } return concepts; } }