Skip to content

Commit 6d8c64d

Browse files
committed
allowing resource template for new resources
1 parent a17a481 commit 6d8c64d

File tree

6 files changed

+46
-14
lines changed

6 files changed

+46
-14
lines changed

components/dataset/Dataset.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,15 @@ class Dataset extends React.Component {
7979
let self = this;
8080
let createResourceDIV = '';
8181
let dcnf = this.state.config;
82+
let templateResource = '';
8283
if(dcnf && !this.props.readOnly && dcnf.allowResourceNew){
84+
if(dcnf.templateResource){
85+
templateResource = dcnf.templateResource[0];
86+
}
8387
createResourceDIV =
8488
<div className="ui list">
8589
<div className="item">
86-
<div className="medium ui basic icon labeled button" onClick={this.props.onCreateResource.bind(this, this.props.datasetURI)}>
90+
<div className="medium ui basic icon labeled button" onClick={this.props.onCreateResource.bind(this, this.props.datasetURI, templateResource)}>
8791
<i className="cube square large blue icon "></i> <i className="add black icon"></i> Add a New Resource
8892
</div>
8993
</div>

components/reactors/DatasetReactor.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ class DatasetReactor extends React.Component {
1919
resourceURI: resourceURI
2020
});
2121
}
22-
handleCreateResource(datasetURI) {
22+
handleCreateResource(datasetURI, templateResource) {
2323
this.context.executeAction(createResource, {
24-
dataset: datasetURI
24+
dataset: datasetURI,
25+
templateResource: templateResource
2526
});
2627
}
2728
//removes properties from an object

configs/reactor.sample.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,11 @@ export default {
141141
isHidden: 0,
142142
shortenURI: 0
143143
},
144+
'https://github.com/ali1k/ld-reactor/blob/master/vocabulary/index.ttl#templateResource': {
145+
label: ['The Template Resource'],
146+
hint: ['If set, this resource will be used as template for new resources.'],
147+
allowNewValue: 0
148+
},
144149
'https://github.com/ali1k/ld-reactor/blob/master/vocabulary/index.ttl#scope': {
145150
hint: ['Determines the type of scope in LD-R'],
146151
objectIEditor: ['BasicOptionInput'],

data/autocompletes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ module.exports = {
4444
{title: 'ldr:resourceImageProperty'},
4545
{title: 'ldr:resourceLabelProperty'},
4646
{title: 'ldr:maxNumberOfResourcesOnPage'},
47+
{title: 'ldr:templateResource'},
4748
{title: 'ldr:readOnly'},
4849
{title: 'ldr:readOnlyProperty'},
4950
{title: 'ldr:readOnlyResource'},

services/resource.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ export default {
354354
}
355355
getDynamicEndpointParameters(user, datasetURI, (endpointParameters)=>{
356356
graphName = endpointParameters.graphName;
357-
query = queryObject.getPrefixes() + queryObject.newResource(endpointParameters, user, graphName, newResourceURI);
357+
query = queryObject.getPrefixes() + queryObject.newResource(endpointParameters, user, graphName, newResourceURI, params.templateResource);
358358
HTTPQueryObject = getHTTPQuery('update', query, endpointParameters, outputFormat);
359359
rp.post({uri: HTTPQueryObject.uri, form: HTTPQueryObject.params}).then(function(res){
360360
if(enableLogs){

services/sparql/ResourceQuery.js

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class ResourceQuery{
7979
`;
8080
return this.query;
8181
}
82-
newResource(endpointParameters, user, graphName, newResourceURI) {
82+
newResource(endpointParameters, user, graphName, newResourceURI, templateResourceURI) {
8383
//todo: consider different value types
8484
let {gStart, gEnd} = this.prepareGraphName(graphName);
8585
let userSt = '';
@@ -88,16 +88,37 @@ class ResourceQuery{
8888
}
8989
let date = new Date();
9090
let currentDate = date.toISOString(); //"2011-12-19T15:28:46.493Z"
91-
this.query = `
92-
INSERT DATA {
93-
${gStart}
94-
<${newResourceURI}> a ldr:Resource ;
95-
ldr:createdOn "${currentDate}"^^xsd:dateTime;
96-
${userSt}
97-
rdfs:label "New Resource" .
98-
${gEnd}
91+
// use a template for resource if set
92+
if(templateResourceURI){
93+
this.query = `
94+
INSERT {
95+
${gStart}
96+
<${newResourceURI}> ?p ?o ;
97+
ldr:createdOn "${currentDate}"^^xsd:dateTime;
98+
${userSt}
99+
${gEnd}
100+
} WHERE {
101+
${gStart}
102+
<${templateResourceURI}> ?p ?o .
103+
FILTER (?p != ldr:cloneOf && ?p != ldr:createdOn && ?p != ldr:createdBy)
104+
${gEnd}
105+
}
106+
`;
107+
} else {
108+
// create an empty resource
109+
this.query = `
110+
INSERT DATA {
111+
${gStart}
112+
<${newResourceURI}> a ldr:Resource ;
113+
ldr:createdOn "${currentDate}"^^xsd:dateTime;
114+
${userSt}
115+
rdfs:label "New Resource" .
116+
${gEnd}
117+
}
118+
`;
99119
}
100-
`;
120+
121+
101122
return this.query;
102123
}
103124
annotateResource(endpointParameters, user, datasetURI, graphName, resourceURI, propertyURI, annotations, inNewDataset) {

0 commit comments

Comments
 (0)