Tweak test script no issue #
[arvados.git] / src / main / java / org / arvados / client / logic / collection / CollectionFactory.java
1 /*
2  * Copyright (C) The Arvados Authors. All rights reserved.
3  *
4  * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
5  *
6  */
7
8 package org.arvados.client.logic.collection;
9
10 import org.arvados.client.api.client.GroupsApiClient;
11 import org.arvados.client.api.client.UsersApiClient;
12 import org.arvados.client.exception.ArvadosApiException;
13 import org.arvados.client.api.model.Collection;
14 import org.arvados.client.common.Patterns;
15 import org.arvados.client.config.FileConfigProvider;
16 import org.arvados.client.config.ConfigProvider;
17 import org.arvados.client.exception.ArvadosClientException;
18
19 import java.io.File;
20 import java.time.LocalDateTime;
21 import java.time.format.DateTimeFormatter;
22 import java.util.List;
23 import java.util.Optional;
24
25 public class CollectionFactory {
26
27     private ConfigProvider config;
28     private UsersApiClient usersApiClient;
29     private GroupsApiClient groupsApiClient;
30
31     private final String name;
32     private final String projectUuid;
33     private final List<File> manifestFiles;
34     private final List<String> manifestLocators;
35
36     private CollectionFactory(ConfigProvider config, String name, String projectUuid, List<File> manifestFiles, List<String> manifestLocators) {
37         this.name = name;
38         this.projectUuid = projectUuid;
39         this.manifestFiles = manifestFiles;
40         this.manifestLocators = manifestLocators;
41         this.config = config;
42         setApiClients();
43     }
44
45     public static CollectionFactoryBuilder builder() {
46         return new CollectionFactoryBuilder();
47     }
48
49     private void setApiClients() {
50         if(this.config == null) this.config = new FileConfigProvider();
51
52         this.usersApiClient = new UsersApiClient(config);
53         this.groupsApiClient = new GroupsApiClient(config);
54     }
55
56     public Collection create() {
57         ManifestFactory manifestFactory = ManifestFactory.builder()
58             .files(manifestFiles)
59             .locators(manifestLocators)
60             .build();
61         String manifest = manifestFactory.create();
62         
63         Collection newCollection = new Collection();
64         newCollection.setName(getNameOrDefault(name));
65         newCollection.setManifestText(manifest);
66         newCollection.setOwnerUuid(getDesiredProjectUuid(projectUuid));
67
68         return newCollection;
69     }
70
71     private String getNameOrDefault(String name) {
72         return Optional.ofNullable(name).orElseGet(() -> {
73             LocalDateTime dateTime = LocalDateTime.now();
74             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Y-MM-dd HH:mm:ss.SSS");
75             return String.format("New Collection (%s)", dateTime.format(formatter));
76         });
77     }
78
79     public String getDesiredProjectUuid(String projectUuid) {
80         try {
81             if (projectUuid == null || projectUuid.length() == 0){
82                 return usersApiClient.current().getUuid();
83             } else if (projectUuid.matches(Patterns.USER_UUID_PATTERN)) {
84                 return usersApiClient.get(projectUuid).getUuid();
85             } else if (projectUuid.matches(Patterns.GROUP_UUID_PATTERN)) {
86                 return groupsApiClient.get(projectUuid).getUuid();
87             }
88         } catch (ArvadosApiException e) {
89             throw new ArvadosClientException(String.format("An error occurred while getting project by UUID %s", projectUuid));
90         }
91         throw new ArvadosClientException(String.format("No project with %s UUID found", projectUuid));
92     }
93
94     public static class CollectionFactoryBuilder {
95         private ConfigProvider config;
96         private String name;
97         private String projectUuid;
98         private List<File> manifestFiles;
99         private List<String> manifestLocators;
100
101         CollectionFactoryBuilder() {
102         }
103
104         public CollectionFactoryBuilder config(ConfigProvider config) {
105             this.config = config;
106             return this;
107         }
108
109         public CollectionFactoryBuilder name(String name) {
110             this.name = name;
111             return this;
112         }
113
114         public CollectionFactoryBuilder projectUuid(String projectUuid) {
115             this.projectUuid = projectUuid;
116             return this;
117         }
118
119         public CollectionFactoryBuilder manifestFiles(List<File> manifestFiles) {
120             this.manifestFiles = manifestFiles;
121             return this;
122         }
123
124         public CollectionFactoryBuilder manifestLocators(List<String> manifestLocators) {
125             this.manifestLocators = manifestLocators;
126             return this;
127         }
128
129         public CollectionFactory build() {
130             return new CollectionFactory(config, name, projectUuid, manifestFiles, manifestLocators);
131         }
132
133     }
134 }