Skip to content

Commit e26f90e

Browse files
authored
Merge pull request #22 from y-t99/master
add interface: create, delete field and create datasheet
2 parents 371d34a + f9dcb43 commit e26f90e

File tree

57 files changed

+2524
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2524
-5
lines changed

README.md

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,96 @@ File file = new File("/Users/Document/test.txt");
267267
Attachment attachment = vikaApiClient.getAttachmentApi().upload("datasheet_id", file);
268268
```
269269

270+
#### **Add Field**
271+
272+
You can create field by sdk. Firstly, we need to build the property required by the field. Secondly, Using `CreateFieldRequestBuilder` to creating a `CreateFieldRequest` object. Finally, submitting the request to the specified space and the specified datasheet. If creating the field successfully, we can get the new field's `id` and `name`.
273+
274+
> more detail about field type and property of field see official [API manual#create-field](https://vika.cn/developers/api/reference/#operation/create-fields)
275+
276+
create single text field example:
277+
278+
```java
279+
// build the SingleText field's property
280+
SingleTextFieldProperty singleTextFieldProperty = new SingleTextFieldProperty();
281+
singleTextFieldProperty.setDefaultValue("defaultValue");
282+
// create a CreateFieldRequest Object
283+
CreateFieldRequest<SingleTextFieldProperty> createFieldRequest = CreateFieldRequestBuilder
284+
.create()
285+
.ofType(FieldTypeEnum.SingleText)
286+
.withName("singleText")
287+
.withProperty(singleTextFieldProperty)
288+
.build();
289+
// request to create a field
290+
CreateFieldResponse response = vikaApiClient.getFieldApi().addField("space_id", "datasheet_id", createFieldRequest);
291+
```
292+
293+
create text field example:
294+
295+
```java
296+
// if field don't require property, we can skip the process that build the property
297+
CreateFieldRequest<EmptyProperty> createFieldRequest = CreateFieldRequestBuilder
298+
.create()
299+
.ofType(FieldTypeEnum.Text)
300+
.withName("text")
301+
.withoutProperty()
302+
.build();
303+
// request to create a field
304+
CreateFieldResponse createFieldRequest = vikaApiClient.getFieldApi().addField("space_id", "datasheet_id", createFieldRequest);
305+
```
306+
307+
#### **Detele Field**
308+
309+
```java
310+
// we can use field_id to detele field
311+
vikaApiClient.getFieldApi().deleteField("space_id", "datasheet_id", "field_id");
312+
```
313+
314+
#### **Add Datasheet**
315+
316+
You can create a datasheet with the help of a `CreateDatasheetRequest` Object. If creating the datasheet successfully, we can get the new datasheet's `id`, `name` and the fields' `id`, `name`.
317+
318+
> more detail see official [API munual#create-datasheet](https://vika.cn/developers/api/reference/#operation/create-datasheets)
319+
320+
```java
321+
// create a CreateDatasheetRequest Object
322+
CreateDatasheetRequest createDatasheetRequest = new CreateDatasheetRequest();
323+
// datasheet's name is required.
324+
request.setName("datasheet");
325+
// add description to datasheet
326+
request.setDescription("description");
327+
// specify the folder where the datasheet is stored
328+
request.setFolderId("fold_id");
329+
// specify the datasheet's previous node
330+
request.setPreNodeId("pre_node_id");
331+
332+
// datasheet's initial fields
333+
SingleTextFieldProperty property = new SingleTextFieldProperty();
334+
property.setDefaultValue("defaultValue");
335+
// a SingleText field
336+
CreateFieldRequest<SingleTextFieldProperty> singleSelectField = CreateFieldRequestBuilder
337+
.create()
338+
.ofType(FieldTypeEnum.SingleText)
339+
.withName("singleSelect")
340+
.withProperty(property)
341+
.build();
342+
// a Text field
343+
CreateFieldRequest<EmptyProperty> textField = CreateFieldRequestBuilder
344+
.create()
345+
.ofType(FieldTypeEnum.Text)
346+
.withName("text")
347+
.withoutProperty()
348+
.build();
349+
List<CreateFieldRequest<?>> fields = new ArrayList<>();
350+
fields.add(singleSelectField);
351+
fields.add(textField);
352+
request.setFields(fields);
353+
354+
// request to create a datasheet
355+
CreateDatasheetResponse response = vikaApiClient.getDatasheetApi().addDatasheet("space_id", createDatasheetRequest);
356+
```
357+
270358
## Reporting Issues
359+
271360
Vika java sdk project uses GitHub's integrated issue tracking system to record bugs and feature requests.
272361
If you want to raise an issue, please follow the recommendations below:
273362

@@ -279,4 +368,3 @@ If you want to raise an issue, please follow the recommendations below:
279368
## License
280369
Open Source software released under the [MIT License](https://vikadata.mit-license.org).
281370

282-
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package cn.vika.client.api;
2+
3+
import cn.vika.client.api.exception.ApiException;
4+
import cn.vika.client.api.http.AbstractApi;
5+
import cn.vika.client.api.http.ApiHttpClient;
6+
import cn.vika.client.api.model.CreateDatasheetRequest;
7+
import cn.vika.client.api.model.CreateDatasheetResponse;
8+
import cn.vika.client.api.model.HttpResult;
9+
import cn.vika.core.http.GenericTypeReference;
10+
import cn.vika.core.http.HttpHeader;
11+
import cn.vika.core.utils.StringUtil;
12+
13+
/**
14+
* @author tao
15+
*/
16+
public class DatasheetApi extends AbstractApi {
17+
18+
private static final String POST_DATASHEET_PATH = "/spaces/%s/datasheets";
19+
20+
public DatasheetApi(ApiHttpClient apiHttpClient) {
21+
super(apiHttpClient);
22+
}
23+
24+
public CreateDatasheetResponse addDatasheet(String spaceId,
25+
CreateDatasheetRequest datasheet) {
26+
27+
checkPostDatasheetPathArgs(spaceId);
28+
29+
final String path = String.format(POST_DATASHEET_PATH, spaceId);
30+
31+
HttpResult<CreateDatasheetResponse> result = getDefaultHttpClient().post(
32+
path, new HttpHeader(), datasheet,
33+
new GenericTypeReference<HttpResult<CreateDatasheetResponse>>() {});
34+
return result.getData();
35+
}
36+
37+
private void checkPostDatasheetPathArgs(String spaceId) {
38+
39+
if (!StringUtil.hasText(spaceId)) {
40+
throw new ApiException("space id must be not null");
41+
}
42+
43+
}
44+
45+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package cn.vika.client.api;
2+
3+
import cn.vika.client.api.exception.ApiException;
4+
import cn.vika.client.api.http.AbstractApi;
5+
import cn.vika.client.api.http.ApiHttpClient;
6+
import cn.vika.client.api.model.CreateFieldRequest;
7+
import cn.vika.client.api.model.CreateFieldResponse;
8+
import cn.vika.client.api.model.HttpResult;
9+
import cn.vika.client.api.model.field.property.BaseFieldProperty;
10+
import cn.vika.core.http.GenericTypeReference;
11+
import cn.vika.core.http.HttpHeader;
12+
import cn.vika.core.utils.StringUtil;
13+
14+
/**
15+
* @author wuyitao
16+
*/
17+
public class FieldApi extends AbstractApi {
18+
19+
private static final String POST_FIELD_PATH = "/spaces/%s/datasheets/%s/fields";
20+
21+
private static final String DELETE_FIELD_PATH = "/spaces/%s/datasheets/%s/fields/%s";
22+
23+
24+
public FieldApi(ApiHttpClient apiHttpClient) {
25+
super(apiHttpClient);
26+
}
27+
28+
public CreateFieldResponse addField(String spaceId, String datasheetId,
29+
CreateFieldRequest<? extends BaseFieldProperty> field) throws ApiException {
30+
31+
checkPostFieldPathArgs(spaceId, datasheetId);
32+
33+
final String path = String.format(POST_FIELD_PATH, spaceId, datasheetId);
34+
HttpResult<CreateFieldResponse> result = getDefaultHttpClient().post(
35+
path, new HttpHeader(), field,
36+
new GenericTypeReference<HttpResult<CreateFieldResponse>>() {});
37+
return result.getData();
38+
}
39+
40+
private void checkPostFieldPathArgs(String spaceId, String datasheetId) {
41+
42+
if (!StringUtil.hasText(spaceId)) {
43+
throw new ApiException("space id must be not null");
44+
}
45+
46+
if (!StringUtil.hasText(datasheetId)) {
47+
throw new ApiException("datasheet id must be not null");
48+
}
49+
50+
}
51+
52+
public void deleteField(String spaceId, String datasheetId, String fieldId) {
53+
54+
checkDeleteFieldPathArgs(spaceId, datasheetId, fieldId);
55+
56+
final String path = String.format(DELETE_FIELD_PATH, spaceId, datasheetId, fieldId);
57+
58+
getDefaultHttpClient().delete(path, new HttpHeader(), Void.class);
59+
60+
}
61+
62+
private void checkDeleteFieldPathArgs(String spaceId, String datasheetId, String fieldId) {
63+
if (!StringUtil.hasText(spaceId)) {
64+
throw new ApiException("space id must not be null");
65+
}
66+
67+
if (!StringUtil.hasText(datasheetId)) {
68+
throw new ApiException("datasheet id must not be null");
69+
}
70+
71+
if (!StringUtil.hasText(fieldId)) {
72+
throw new ApiException("fieldId id must not be null");
73+
}
74+
}
75+
}

client/src/main/java/cn/vika/client/api/VikaApiClient.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,15 @@ public class VikaApiClient {
4343

4444
private final ApiHttpClient apiHttpClient;
4545

46-
private RecordApi recordApi;
46+
private volatile RecordApi recordApi;
4747

48-
private AttachmentApi attachmentApi;
48+
private volatile AttachmentApi attachmentApi;
4949

50-
private NodeApi nodeApi;
50+
private volatile NodeApi nodeApi;
51+
52+
private volatile FieldApi fieldApi;
53+
54+
private volatile DatasheetApi datasheetApi;
5155

5256
public VikaApiClient(ApiCredential credential) {
5357
this(ApiVersion.V1, DEFAULT_HOST, credential);
@@ -159,4 +163,26 @@ public NodeApi getNodeApi() {
159163
}
160164
return this.nodeApi;
161165
}
166+
167+
public FieldApi getFieldApi() {
168+
if (this.fieldApi == null) {
169+
synchronized (this) {
170+
if (this.fieldApi == null) {
171+
this.fieldApi = new FieldApi(this.apiHttpClient);
172+
}
173+
}
174+
}
175+
return fieldApi;
176+
}
177+
178+
public DatasheetApi getDatasheetApi() {
179+
if (this.datasheetApi == null) {
180+
synchronized (this) {
181+
if (this.datasheetApi == null) {
182+
this.datasheetApi = new DatasheetApi(this.apiHttpClient);
183+
}
184+
}
185+
}
186+
return datasheetApi;
187+
}
162188
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package cn.vika.client.api.model;
2+
3+
import java.util.List;
4+
5+
/**
6+
* @author tao
7+
*/
8+
public class CreateDatasheetRequest {
9+
10+
private String name;
11+
12+
private String description;
13+
14+
private String folderId;
15+
16+
private String preNodeId;
17+
18+
private List<CreateFieldRequest<?>> fields;
19+
20+
public String getName() {
21+
return name;
22+
}
23+
24+
public void setName(String name) {
25+
this.name = name;
26+
}
27+
28+
public String getDescription() {
29+
return description;
30+
}
31+
32+
public void setDescription(String description) {
33+
this.description = description;
34+
}
35+
36+
public String getFolderId() {
37+
return folderId;
38+
}
39+
40+
public void setFolderId(String folderId) {
41+
this.folderId = folderId;
42+
}
43+
44+
public String getPreNodeId() {
45+
return preNodeId;
46+
}
47+
48+
public void setPreNodeId(String preNodeId) {
49+
this.preNodeId = preNodeId;
50+
}
51+
52+
public List<CreateFieldRequest<?>> getFields() {
53+
return fields;
54+
}
55+
56+
public void setFields(List<CreateFieldRequest<?>> fields) {
57+
this.fields = fields;
58+
}
59+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cn.vika.client.api.model;
2+
3+
import java.util.List;
4+
5+
/**
6+
* @author tao
7+
*/
8+
public class CreateDatasheetResponse {
9+
10+
private String id;
11+
12+
private long createdAt;
13+
14+
private List<CreateFieldResponse> fields;
15+
16+
public String getId() {
17+
return id;
18+
}
19+
20+
public void setId(String id) {
21+
this.id = id;
22+
}
23+
24+
public long getCreatedAt() {
25+
return createdAt;
26+
}
27+
28+
public void setCreatedAt(long createdAt) {
29+
this.createdAt = createdAt;
30+
}
31+
32+
public List<CreateFieldResponse> getFields() {
33+
return fields;
34+
}
35+
36+
public void setFields(List<CreateFieldResponse> fields) {
37+
this.fields = fields;
38+
}
39+
40+
}

0 commit comments

Comments
 (0)