11package edu .harvard .iq .dataverse .engine .command .impl ;
22
3- import edu .harvard .iq .dataverse .DatasetFieldType ;
4- import edu .harvard .iq .dataverse .Dataverse ;
5- import edu .harvard .iq .dataverse .DataverseFieldTypeInputLevel ;
3+ import edu .harvard .iq .dataverse .*;
64import edu .harvard .iq .dataverse .authorization .DataverseRole ;
7- import edu .harvard .iq .dataverse .RoleAssignment ;
85import edu .harvard .iq .dataverse .authorization .Permission ;
96import edu .harvard .iq .dataverse .authorization .groups .Group ;
10- import edu .harvard .iq .dataverse .authorization .groups .GroupProvider ;
11- import edu .harvard .iq .dataverse .authorization .groups .impl .explicit .ExplicitGroupProvider ;
127import edu .harvard .iq .dataverse .authorization .users .AuthenticatedUser ;
138import edu .harvard .iq .dataverse .authorization .users .User ;
14- import edu .harvard .iq .dataverse .batch .util .LoggingUtil ;
159import edu .harvard .iq .dataverse .engine .command .AbstractCommand ;
1610import edu .harvard .iq .dataverse .engine .command .CommandContext ;
1711import edu .harvard .iq .dataverse .engine .command .DataverseRequest ;
1812import edu .harvard .iq .dataverse .engine .command .RequiredPermissions ;
1913import edu .harvard .iq .dataverse .engine .command .exception .CommandException ;
2014import edu .harvard .iq .dataverse .engine .command .exception .IllegalCommandException ;
2115import edu .harvard .iq .dataverse .settings .SettingsServiceBean ;
22- import java .io .IOException ;
2316
2417import java .sql .Timestamp ;
2518import java .util .ArrayList ;
2619import java .util .Arrays ;
2720import java .util .Date ;
2821import java .util .List ;
29- import java .util .logging .Logger ;
30- import org .apache .solr .client .solrj .SolrServerException ;
3122
3223/**
3324 * TODO make override the date and user more active, so prevent code errors.
3829@ RequiredPermissions (Permission .AddDataverse )
3930public class CreateDataverseCommand extends AbstractCommand <Dataverse > {
4031
41- private static final Logger logger = Logger .getLogger (CreateDataverseCommand .class .getName ());
42-
4332 private final Dataverse created ;
4433 private final List <DataverseFieldTypeInputLevel > inputLevelList ;
4534 private final List <DatasetFieldType > facetList ;
35+ private final List <MetadataBlock > metadataBlocks ;
36+
37+ public CreateDataverseCommand (Dataverse created ,
38+ DataverseRequest aRequest ,
39+ List <DatasetFieldType > facetList ,
40+ List <DataverseFieldTypeInputLevel > inputLevelList ) {
41+ this (created , aRequest , facetList , inputLevelList , null );
42+ }
4643
47- public CreateDataverseCommand (Dataverse created , DataverseRequest aRequest , List <DatasetFieldType > facetList ,
48- List <DataverseFieldTypeInputLevel > inputLevelList ) {
44+ public CreateDataverseCommand (Dataverse created ,
45+ DataverseRequest aRequest ,
46+ List <DatasetFieldType > facetList ,
47+ List <DataverseFieldTypeInputLevel > inputLevelList ,
48+ List <MetadataBlock > metadataBlocks ) {
4949 super (aRequest , created .getOwner ());
5050 this .created = created ;
5151 if (facetList != null ) {
@@ -58,6 +58,11 @@ public CreateDataverseCommand(Dataverse created, DataverseRequest aRequest, List
5858 } else {
5959 this .inputLevelList = null ;
6060 }
61+ if (metadataBlocks != null ) {
62+ this .metadataBlocks = new ArrayList <>(metadataBlocks );
63+ } else {
64+ this .metadataBlocks = null ;
65+ }
6166 }
6267
6368 @ Override
@@ -70,6 +75,11 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
7075 }
7176 }
7277
78+ if (metadataBlocks != null && !metadataBlocks .isEmpty ()) {
79+ created .setMetadataBlockRoot (true );
80+ created .setMetadataBlocks (metadataBlocks );
81+ }
82+
7383 if (created .getCreateDate () == null ) {
7484 created .setCreateDate (new Timestamp (new Date ().getTime ()));
7585 }
@@ -97,8 +107,8 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
97107 if (ctxt .dataverses ().findByAlias (created .getAlias ()) != null ) {
98108 throw new IllegalCommandException ("A dataverse with alias " + created .getAlias () + " already exists" , this );
99109 }
100-
101- if (created .getFilePIDsEnabled ()!= null && !ctxt .settings ().isTrueForKey (SettingsServiceBean .Key .AllowEnablingFilePIDsPerCollection , false )) {
110+
111+ if (created .getFilePIDsEnabled () != null && !ctxt .settings ().isTrueForKey (SettingsServiceBean .Key .AllowEnablingFilePIDsPerCollection , false )) {
102112 throw new IllegalCommandException ("File PIDs cannot be enabled per collection" , this );
103113 }
104114
@@ -109,7 +119,7 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
109119 DataverseRole adminRole = ctxt .roles ().findBuiltinRoleByAlias (DataverseRole .ADMIN );
110120 String privateUrlToken = null ;
111121
112- ctxt .roles ().save (new RoleAssignment (adminRole , getRequest ().getUser (), managedDv , privateUrlToken ),false );
122+ ctxt .roles ().save (new RoleAssignment (adminRole , getRequest ().getUser (), managedDv , privateUrlToken ), false );
113123 // Add additional role assignments if inheritance is set
114124 boolean inheritAllRoles = false ;
115125 String rolesString = ctxt .settings ().getValueForKey (SettingsServiceBean .Key .InheritParentRoleAssignments , "" );
@@ -129,18 +139,18 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
129139 // above...
130140 if ((inheritAllRoles || rolesToInherit .contains (role .getRole ().getAlias ()))
131141 && !(role .getAssigneeIdentifier ().equals (getRequest ().getUser ().getIdentifier ())
132- && role .getRole ().equals (adminRole ))) {
142+ && role .getRole ().equals (adminRole ))) {
133143 String identifier = role .getAssigneeIdentifier ();
134144 if (identifier .startsWith (AuthenticatedUser .IDENTIFIER_PREFIX )) {
135145 identifier = identifier .substring (AuthenticatedUser .IDENTIFIER_PREFIX .length ());
136146 ctxt .roles ().save (new RoleAssignment (role .getRole (),
137- ctxt .authentication ().getAuthenticatedUser (identifier ), managedDv , privateUrlToken ),false );
147+ ctxt .authentication ().getAuthenticatedUser (identifier ), managedDv , privateUrlToken ), false );
138148 } else if (identifier .startsWith (Group .IDENTIFIER_PREFIX )) {
139149 identifier = identifier .substring (Group .IDENTIFIER_PREFIX .length ());
140150 Group roleGroup = ctxt .groups ().getGroup (identifier );
141151 if (roleGroup != null ) {
142152 ctxt .roles ().save (new RoleAssignment (role .getRole (),
143- roleGroup , managedDv , privateUrlToken ),false );
153+ roleGroup , managedDv , privateUrlToken ), false );
144154 }
145155 }
146156 }
@@ -150,11 +160,9 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
150160 }
151161
152162 managedDv .setPermissionModificationTime (new Timestamp (new Date ().getTime ()));
153- // TODO: save is called here and above; we likely don't need both
154- managedDv = ctxt .dataverses ().save (managedDv );
155163
156- // ctxt.index().indexDataverse(managedDv);
157164 if (facetList != null ) {
165+ managedDv .setFacetRoot (true );
158166 ctxt .facets ().deleteFacetsFor (managedDv );
159167 int i = 0 ;
160168 for (DatasetFieldType df : facetList ) {
@@ -164,16 +172,19 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
164172
165173 if (inputLevelList != null ) {
166174 ctxt .fieldTypeInputLevels ().deleteFacetsFor (managedDv );
167- for (DataverseFieldTypeInputLevel obj : inputLevelList ) {
168- obj .setDataverse (managedDv );
169- ctxt .fieldTypeInputLevels ().create (obj );
175+ for (DataverseFieldTypeInputLevel inputLevel : inputLevelList ) {
176+ inputLevel .setDataverse (managedDv );
177+ ctxt .fieldTypeInputLevels ().create (inputLevel );
170178 }
171179 }
180+
181+ // TODO: save is called here and above; we likely don't need both
182+ managedDv = ctxt .dataverses ().save (managedDv );
172183 return managedDv ;
173184 }
174-
185+
175186 @ Override
176- public boolean onSuccess (CommandContext ctxt , Object r ) {
187+ public boolean onSuccess (CommandContext ctxt , Object r ) {
177188 return ctxt .dataverses ().index ((Dataverse ) r );
178189 }
179190
0 commit comments