mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-17 06:53:03 +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 { GenericConstructor } from "../../shared/generic-constructor";
|
||||
import { NormalizedDSOType } from "./normalized-dspace-object-type";
|
||||
import { NormalizedCommunity } from "./normalized-community.model";
|
||||
|
||||
export class NormalizedDSOFactory {
|
||||
public static getConstructor(type: NormalizedDSOType): GenericConstructor<NormalizedDSpaceObject> {
|
||||
@@ -21,6 +22,9 @@ export class NormalizedDSOFactory {
|
||||
case NormalizedDSOType.NormalizedCollection: {
|
||||
return NormalizedCollection
|
||||
}
|
||||
case NormalizedDSOType.NormalizedCommunity: {
|
||||
return NormalizedCommunity
|
||||
}
|
||||
default: {
|
||||
return undefined;
|
||||
}
|
||||
|
@@ -2,5 +2,6 @@ export enum NormalizedDSOType {
|
||||
NormalizedBitstream,
|
||||
NormalizedBundle,
|
||||
NormalizedItem,
|
||||
NormalizedCollection
|
||||
NormalizedCollection,
|
||||
NormalizedCommunity
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@ import { CollectionDataService } from "./data/collection-data.service";
|
||||
import { ItemDataService } from "./data/item-data.service";
|
||||
import { RequestService } from "./data/request.service";
|
||||
import { RemoteDataBuildService } from "./cache/builders/remote-data-build.service";
|
||||
import { CommunityDataService } from "./data/community-data.service";
|
||||
|
||||
const IMPORTS = [
|
||||
CommonModule,
|
||||
@@ -25,6 +26,7 @@ const EXPORTS = [
|
||||
];
|
||||
|
||||
const PROVIDERS = [
|
||||
CommunityDataService,
|
||||
CollectionDataService,
|
||||
ItemDataService,
|
||||
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 { Router } = require('express');
|
||||
|
||||
@@ -51,6 +52,67 @@ export function createMockApi() {
|
||||
|
||||
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')
|
||||
.get(function(req, res) {
|
||||
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