mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-17 15:03:07 +00:00
Add support for Communities
This commit is contained in:
36
src/app/core/cache/models/normalized-community.model.ts
vendored
Normal file
36
src/app/core/cache/models/normalized-community.model.ts
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import { autoserialize, inheritSerialization, autoserializeAs } from "cerialize";
|
||||||
|
import { NormalizedDSpaceObject } from "./normalized-dspace-object.model";
|
||||||
|
import { Community } from "../../shared/community.model";
|
||||||
|
import { mapsTo, relationship } from "../builders/build-decorators";
|
||||||
|
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
||||||
|
|
||||||
|
@mapsTo(Community)
|
||||||
|
@inheritSerialization(NormalizedDSpaceObject)
|
||||||
|
export class NormalizedCommunity extends NormalizedDSpaceObject {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A string representing the unique handle of this Community
|
||||||
|
*/
|
||||||
|
@autoserialize
|
||||||
|
handle: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Bitstream that represents the logo of this Community
|
||||||
|
*/
|
||||||
|
logo: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of Communities that are direct parents of this Community
|
||||||
|
*/
|
||||||
|
parents: Array<string>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Community that owns this Community
|
||||||
|
*/
|
||||||
|
owner: string;
|
||||||
|
|
||||||
|
@autoserialize
|
||||||
|
@relationship(NormalizedDSOType.NormalizedCollection)
|
||||||
|
collections: Array<string>;
|
||||||
|
|
||||||
|
}
|
@@ -5,6 +5,7 @@ import { NormalizedItem } from "./normalized-item.model";
|
|||||||
import { NormalizedCollection } from "./normalized-collection.model";
|
import { NormalizedCollection } from "./normalized-collection.model";
|
||||||
import { GenericConstructor } from "../../shared/generic-constructor";
|
import { GenericConstructor } from "../../shared/generic-constructor";
|
||||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
||||||
|
import { NormalizedCommunity } from "./normalized-community.model";
|
||||||
|
|
||||||
export class NormalizedDSOFactory {
|
export class NormalizedDSOFactory {
|
||||||
public static getConstructor(type: NormalizedDSOType): GenericConstructor<NormalizedDSpaceObject> {
|
public static getConstructor(type: NormalizedDSOType): GenericConstructor<NormalizedDSpaceObject> {
|
||||||
@@ -21,6 +22,9 @@ export class NormalizedDSOFactory {
|
|||||||
case NormalizedDSOType.NormalizedCollection: {
|
case NormalizedDSOType.NormalizedCollection: {
|
||||||
return NormalizedCollection
|
return NormalizedCollection
|
||||||
}
|
}
|
||||||
|
case NormalizedDSOType.NormalizedCommunity: {
|
||||||
|
return NormalizedCommunity
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@@ -2,5 +2,6 @@ export enum NormalizedDSOType {
|
|||||||
NormalizedBitstream,
|
NormalizedBitstream,
|
||||||
NormalizedBundle,
|
NormalizedBundle,
|
||||||
NormalizedItem,
|
NormalizedItem,
|
||||||
NormalizedCollection
|
NormalizedCollection,
|
||||||
|
NormalizedCommunity
|
||||||
}
|
}
|
||||||
|
@@ -10,6 +10,7 @@ import { CollectionDataService } from "./data/collection-data.service";
|
|||||||
import { ItemDataService } from "./data/item-data.service";
|
import { ItemDataService } from "./data/item-data.service";
|
||||||
import { RequestService } from "./data/request.service";
|
import { RequestService } from "./data/request.service";
|
||||||
import { RemoteDataBuildService } from "./cache/builders/remote-data-build.service";
|
import { RemoteDataBuildService } from "./cache/builders/remote-data-build.service";
|
||||||
|
import { CommunityDataService } from "./data/community-data.service";
|
||||||
|
|
||||||
const IMPORTS = [
|
const IMPORTS = [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@@ -25,6 +26,7 @@ const EXPORTS = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const PROVIDERS = [
|
const PROVIDERS = [
|
||||||
|
CommunityDataService,
|
||||||
CollectionDataService,
|
CollectionDataService,
|
||||||
ItemDataService,
|
ItemDataService,
|
||||||
DSpaceRESTv2Service,
|
DSpaceRESTv2Service,
|
||||||
|
26
src/app/core/data/community-data.service.ts
Normal file
26
src/app/core/data/community-data.service.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { Injectable } from "@angular/core";
|
||||||
|
import { DataService } from "./data.service";
|
||||||
|
import { Community } from "../shared/community.model";
|
||||||
|
import { ObjectCacheService } from "../cache/object-cache.service";
|
||||||
|
import { ResponseCacheService } from "../cache/response-cache.service";
|
||||||
|
import { Store } from "@ngrx/store";
|
||||||
|
import { NormalizedCommunity } from "../cache/models/normalized-community.model";
|
||||||
|
import { CoreState } from "../core.reducers";
|
||||||
|
import { RequestService } from "./request.service";
|
||||||
|
import { RemoteDataBuildService } from "../cache/builders/remote-data-build.service";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CommunityDataService extends DataService<NormalizedCommunity, Community> {
|
||||||
|
protected endpoint = '/communities';
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
protected objectCache: ObjectCacheService,
|
||||||
|
protected responseCache: ResponseCacheService,
|
||||||
|
protected requestService: RequestService,
|
||||||
|
protected rdbService: RemoteDataBuildService,
|
||||||
|
protected store: Store<CoreState>
|
||||||
|
) {
|
||||||
|
super(NormalizedCommunity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
62
src/app/core/shared/community.model.ts
Normal file
62
src/app/core/shared/community.model.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import { DSpaceObject } from "./dspace-object.model";
|
||||||
|
import { Bitstream } from "./bitstream.model";
|
||||||
|
import { Collection } from "./collection.model";
|
||||||
|
import { RemoteData } from "../data/remote-data";
|
||||||
|
|
||||||
|
export class Community extends DSpaceObject {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A string representing the unique handle of this Community
|
||||||
|
*/
|
||||||
|
handle: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The introductory text of this Community
|
||||||
|
* Corresponds to the metadata field dc.description
|
||||||
|
*/
|
||||||
|
get introductoryText(): string {
|
||||||
|
return this.findMetadata("dc.description");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The short description: HTML
|
||||||
|
* Corresponds to the metadata field dc.description.abstract
|
||||||
|
*/
|
||||||
|
get shortDescription(): string {
|
||||||
|
return this.findMetadata("dc.description.abstract");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The copyright text of this Community
|
||||||
|
* Corresponds to the metadata field dc.rights
|
||||||
|
*/
|
||||||
|
get copyrightText(): string {
|
||||||
|
return this.findMetadata("dc.rights");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The sidebar text of this Community
|
||||||
|
* Corresponds to the metadata field dc.description.tableofcontents
|
||||||
|
*/
|
||||||
|
get sidebarText(): string {
|
||||||
|
return this.findMetadata("dc.description.tableofcontents");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Bitstream that represents the logo of this Community
|
||||||
|
*/
|
||||||
|
logo: RemoteData<Bitstream>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of Communities that are direct parents of this Community
|
||||||
|
*/
|
||||||
|
parents: Array<Community>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Community that owns this Community
|
||||||
|
*/
|
||||||
|
owner: Community;
|
||||||
|
|
||||||
|
collections: Array<RemoteData<Collection>>;
|
||||||
|
|
||||||
|
}
|
@@ -1,3 +1,4 @@
|
|||||||
|
import { COMMUNITIES } from "./communities";
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const { Router } = require('express');
|
const { Router } = require('express');
|
||||||
|
|
||||||
@@ -51,6 +52,67 @@ export function createMockApi() {
|
|||||||
|
|
||||||
let router = Router();
|
let router = Router();
|
||||||
|
|
||||||
|
router.route('/communities')
|
||||||
|
.get(function(req, res) {
|
||||||
|
console.log('GET');
|
||||||
|
// 70ms latency
|
||||||
|
setTimeout(function() {
|
||||||
|
res.json(toHALResponse(req, COMMUNITIES));
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
// })
|
||||||
|
// .post(function(req, res) {
|
||||||
|
// console.log('POST', util.inspect(req.body, { colors: true }));
|
||||||
|
// let community = req.body;
|
||||||
|
// if (community) {
|
||||||
|
// COMMUNITIES.push({
|
||||||
|
// value: community.value,
|
||||||
|
// created_at: new Date(),
|
||||||
|
// completed: community.completed,
|
||||||
|
// id: COMMUNITY_COUNT++
|
||||||
|
// });
|
||||||
|
// return res.json(community);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return res.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
router.param('community_id', function(req, res, next, community_id) {
|
||||||
|
// ensure correct prop type
|
||||||
|
let id = req.params.community_id;
|
||||||
|
try {
|
||||||
|
req.community_id = id;
|
||||||
|
req.community = COMMUNITIES.find((community) => {
|
||||||
|
return community.id === id;
|
||||||
|
});
|
||||||
|
next();
|
||||||
|
} catch (e) {
|
||||||
|
next(new Error('failed to load community'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.route('/communities/:community_id')
|
||||||
|
.get(function(req, res) {
|
||||||
|
// console.log('GET', util.inspect(req.community.id, { colors: true }));
|
||||||
|
res.json(toHALResponse(req, req.community));
|
||||||
|
// })
|
||||||
|
// .put(function(req, res) {
|
||||||
|
// console.log('PUT', util.inspect(req.body, { colors: true }));
|
||||||
|
//
|
||||||
|
// let index = COMMUNITIES.indexOf(req.community);
|
||||||
|
// let community = COMMUNITIES[index] = req.body;
|
||||||
|
//
|
||||||
|
// res.json(community);
|
||||||
|
// })
|
||||||
|
// .delete(function(req, res) {
|
||||||
|
// console.log('DELETE', req.community_id);
|
||||||
|
//
|
||||||
|
// let index = COMMUNITIES.indexOf(req.community);
|
||||||
|
// COMMUNITIES.splice(index, 1);
|
||||||
|
//
|
||||||
|
// res.json(req.community);
|
||||||
|
});
|
||||||
|
|
||||||
router.route('/collections')
|
router.route('/collections')
|
||||||
.get(function(req, res) {
|
.get(function(req, res) {
|
||||||
console.log('GET');
|
console.log('GET');
|
||||||
|
86
src/backend/communities.ts
Normal file
86
src/backend/communities.ts
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
export const COMMUNITIES = [
|
||||||
|
{
|
||||||
|
"name": "Community 1",
|
||||||
|
"handle": "10673/1",
|
||||||
|
"id": "6631",
|
||||||
|
"uuid": "83cd3281-f241-48be-9234-d876f8010d14",
|
||||||
|
"type": "community",
|
||||||
|
"metadata": [
|
||||||
|
{
|
||||||
|
"key": "dc.description",
|
||||||
|
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "This is a sample top-level community",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.tableofcontents",
|
||||||
|
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.rights",
|
||||||
|
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Sample Community",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
||||||
|
},
|
||||||
|
"collections": [
|
||||||
|
{ "href": "/collections/5179" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Community 2",
|
||||||
|
"handle": "10673/2",
|
||||||
|
"id": "2365",
|
||||||
|
"uuid": "80eec4c6-70bd-4beb-b3d4-5d46c6343157",
|
||||||
|
"type": "community",
|
||||||
|
"metadata": [
|
||||||
|
{
|
||||||
|
"key": "dc.description",
|
||||||
|
"value": "<p>This is the introductory text for the <em>Sample Community</em> on the DSpace Demonstration Site. It is editable by System or Community Administrators (of this Community).</p>\r\n<p><strong>DSpace Communities may contain one or more Sub-Communities or Collections (of Items).</strong></p>\r\n<p>This particular Community has its own logo (the <a href=\"http://www.duraspace.org/\">DuraSpace</a> logo).</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.abstract",
|
||||||
|
"value": "This is a sample top-level community",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.description.tableofcontents",
|
||||||
|
"value": "<p>This is the <em>news section</em> for this <em>Sample Community</em>. System or Community Administrators (of this Community) can edit this News field.</p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.rights",
|
||||||
|
"value": "<p><em>If this Community had special copyright text to display, it would be displayed here.</em></p>",
|
||||||
|
"language": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "dc.title",
|
||||||
|
"value": "Sample Community",
|
||||||
|
"language": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "http://dspace7.4science.it/dspace-spring-rest/api/core/community/9076bd16-e69a-48d6-9e41-0238cb40d863"
|
||||||
|
},
|
||||||
|
"collections": [
|
||||||
|
{ "href": "/collections/6547" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
Reference in New Issue
Block a user