package com.constellio.app.entities.modules;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.entities.schemasDisplay.SchemaDisplayConfig;
import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
public class MigrationHelper {
protected SchemaDisplayConfig order(String collection, AppLayerFactory appLayerFactory, String type,
SchemaDisplayConfig schema, String... localCodes) {
MetadataSchemaTypes schemaTypes = appLayerFactory.getModelLayerFactory()
.getMetadataSchemasManager().getSchemaTypes(collection);
List<String> visibleMetadataCodes = new ArrayList<>();
for (String localCode : localCodes) {
visibleMetadataCodes.add(schema.getSchemaCode() + "_" + localCode);
}
List<String> metadataCodes = new ArrayList<>();
metadataCodes.addAll(visibleMetadataCodes);
List<String> otherMetadatas = new ArrayList<>();
List<String> retrievedMetadataCodes;
if ("form".equals(type)) {
retrievedMetadataCodes = schema.getFormMetadataCodes();
} else {
retrievedMetadataCodes = schema.getDisplayMetadataCodes();
}
for (String retrievedMetadataCode : retrievedMetadataCodes) {
int index = visibleMetadataCodes.indexOf(retrievedMetadataCode);
if (index != -1) {
metadataCodes.set(index, retrievedMetadataCode);
} else if (!schemaTypes.getMetadata(retrievedMetadataCode).isSystemReserved()) {
otherMetadatas.add(retrievedMetadataCode);
}
}
SchemaDisplayConfig newSchema;
if ("form".equals(type)) {
metadataCodes.addAll(otherMetadatas);
newSchema = schema.withFormMetadataCodes(metadataCodes);
SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager();
for (String invisible : otherMetadatas) {
manager.saveMetadata(manager.getMetadata(collection, invisible).withInputType(MetadataInputType.HIDDEN));
}
} else {
newSchema = schema.withDisplayMetadataCodes(metadataCodes);
}
return newSchema;
}
}