|
1 | | - |
2 | 1 | package edu.harvard.iq.dataverse.engine.command.impl; |
3 | | -import edu.harvard.iq.dataverse.Dataverse; |
4 | | -import edu.harvard.iq.dataverse.Template; |
| 2 | + |
| 3 | +import edu.harvard.iq.dataverse.*; |
5 | 4 | import edu.harvard.iq.dataverse.authorization.Permission; |
6 | 5 |
|
7 | 6 | import edu.harvard.iq.dataverse.engine.command.AbstractCommand; |
8 | 7 | import edu.harvard.iq.dataverse.engine.command.CommandContext; |
9 | 8 | import edu.harvard.iq.dataverse.engine.command.DataverseRequest; |
10 | 9 | import edu.harvard.iq.dataverse.engine.command.RequiredPermissions; |
11 | 10 | import edu.harvard.iq.dataverse.engine.command.exception.CommandException; |
| 11 | +import edu.harvard.iq.dataverse.settings.JvmSettings; |
| 12 | +import edu.harvard.iq.dataverse.util.DatasetFieldUtil; |
| 13 | + |
| 14 | +import java.util.ArrayList; |
| 15 | +import java.util.List; |
| 16 | + |
12 | 17 | /** |
13 | | - * |
14 | 18 | * @author skraffmiller |
| 19 | + * Creates a template {@link Template} for a {@link Dataverse}. |
15 | 20 | */ |
16 | | -@RequiredPermissions( Permission.EditDataverse ) |
| 21 | +@RequiredPermissions(Permission.EditDataverse) |
17 | 22 | public class CreateTemplateCommand extends AbstractCommand<Template> { |
18 | | - private final Template created; |
19 | | - private final Dataverse dv; |
20 | | - |
21 | | - public CreateTemplateCommand(Template template, DataverseRequest aRequest, Dataverse anAffectedDataverse) { |
22 | | - super(aRequest, anAffectedDataverse); |
23 | | - created = template; |
24 | | - dv = anAffectedDataverse; |
25 | | - } |
26 | | - |
27 | | - @Override |
28 | | - public Template execute(CommandContext ctxt) throws CommandException { |
29 | | - |
30 | | - return ctxt.templates().save(created); |
31 | | - } |
32 | | - |
| 23 | + private final Template template; |
| 24 | + private final Dataverse dataverse; |
| 25 | + |
| 26 | + private final boolean initialize; |
| 27 | + |
| 28 | + public CreateTemplateCommand(Template template, DataverseRequest request, Dataverse dataverse) { |
| 29 | + this(template, request, dataverse, false); |
| 30 | + } |
| 31 | + |
| 32 | + public CreateTemplateCommand(Template template, DataverseRequest request, Dataverse dataverse, boolean initialize) { |
| 33 | + super(request, dataverse); |
| 34 | + this.template = template; |
| 35 | + this.dataverse = dataverse; |
| 36 | + this.initialize = initialize; |
| 37 | + } |
| 38 | + |
| 39 | + @Override |
| 40 | + public Template execute(CommandContext ctxt) throws CommandException { |
| 41 | + if (initialize) { |
| 42 | + template.setDataverse(dataverse); |
| 43 | + template.setMetadataValueBlocks(getSystemMetadataBlocks(ctxt)); |
| 44 | + |
| 45 | + updateTermsOfUseAndAccess(ctxt, template); |
| 46 | + updateDatasetFieldInputLevels(template, ctxt); |
| 47 | + |
| 48 | + DatasetFieldUtil.tidyUpFields(template.getDatasetFields(), false); |
| 49 | + } |
| 50 | + |
| 51 | + return ctxt.templates().save(template); |
| 52 | + } |
| 53 | + |
| 54 | + private static void updateTermsOfUseAndAccess(CommandContext ctxt, Template template) { |
| 55 | + TermsOfUseAndAccess terms = new TermsOfUseAndAccess(); |
| 56 | + terms.setFileAccessRequest(true); |
| 57 | + terms.setTemplate(template); |
| 58 | + terms.setLicense(ctxt.licenses().getDefault()); |
| 59 | + template.setTermsOfUseAndAccess(terms); |
| 60 | + } |
| 61 | + |
| 62 | + private void updateDatasetFieldInputLevels(Template template, CommandContext ctxt) { |
| 63 | + Long dvIdForInputLevel = this.dataverse.getId(); |
| 64 | + if (!this.dataverse.isMetadataBlockRoot()) { |
| 65 | + dvIdForInputLevel = this.dataverse.getMetadataRootId(); |
| 66 | + } |
| 67 | + |
| 68 | + for (DatasetField dsf : template.getFlatDatasetFields()) { |
| 69 | + DataverseFieldTypeInputLevel inputLevel = ctxt.fieldTypeInputLevels().findByDataverseIdDatasetFieldTypeId( |
| 70 | + dvIdForInputLevel, |
| 71 | + dsf.getDatasetFieldType().getId() |
| 72 | + ); |
| 73 | + if (inputLevel != null) { |
| 74 | + dsf.setInclude(inputLevel.isInclude()); |
| 75 | + } else { |
| 76 | + dsf.setInclude(true); |
| 77 | + } |
| 78 | + } |
| 79 | + } |
| 80 | + |
| 81 | + private static List<MetadataBlock> getSystemMetadataBlocks(CommandContext ctxt) { |
| 82 | + List<MetadataBlock> systemMetadataBlocks = new ArrayList<>(); |
| 83 | + for (MetadataBlock mdb : ctxt.metadataBlocks().listMetadataBlocks()) { |
| 84 | + JvmSettings.MDB_SYSTEM_KEY_FOR.lookupOptional(mdb.getName()).ifPresent(smdbString -> systemMetadataBlocks.add(mdb)); |
| 85 | + } |
| 86 | + return systemMetadataBlocks; |
| 87 | + } |
33 | 88 | } |
0 commit comments