Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(DMP): own resource viewer (DSP-1586) #434

Merged
merged 23 commits into from May 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
f3c6fcc
chore(dependencies): update package.lock after npm i
kilchenmann May 3, 2021
8e5975f
chore(deps): bump dsp-ui version
kilchenmann May 3, 2021
0f6cb8a
chore(dmp): init own resource viewer
kilchenmann May 3, 2021
02bfd4a
style(resource): correct position of tab bar
kilchenmann May 4, 2021
7e2cec8
feat(resource): own resource toolbar (copied from ui-lib)
kilchenmann May 4, 2021
95cd95d
chore(resource): copy property view from ui-lib to own component
kilchenmann May 5, 2021
b87efcd
refactor(resource): fix compound viewer
kilchenmann May 5, 2021
ac27ae2
test(resource): bug fixes in tests
kilchenmann May 6, 2021
71616d6
refactor(resource): clean up code
kilchenmann May 6, 2021
9c410d9
refactor(resource): clean up code
kilchenmann May 6, 2021
e33cfbf
chore(resource): copy still-image viewer from ui-lib
kilchenmann May 6, 2021
443e530
test(resource): fix test
kilchenmann May 6, 2021
4bb3b95
style(resource): new still image viewer navigation
kilchenmann May 6, 2021
ac74546
fix(resource): get rid of console warning
kilchenmann May 7, 2021
1527de6
refactor(resource): fix typo
kilchenmann May 7, 2021
51faa92
refactor(resource): clean up code
kilchenmann May 7, 2021
57335ff
refactor(resource): clean up code
kilchenmann May 7, 2021
3fca09d
refactor(resource): clean up code
kilchenmann May 7, 2021
5649c02
Merge branch 'main' into wip/dsp-1586-compound-viewer
kilchenmann May 7, 2021
7e78424
refactor(resource): turn valueOperationEventSubscription into an array
mdelez May 7, 2021
930e4f2
Merge branch 'wip/dsp-1586-compound-viewer' of https://github.com/das…
kilchenmann May 7, 2021
5231db5
chore(deps): reinstall node modules
kilchenmann May 7, 2021
463a2c6
chore(deps): reinstall node modules
kilchenmann May 7, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6,959 changes: 1,849 additions & 5,110 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions src/app/app.module.ts
Expand Up @@ -90,6 +90,9 @@ import { SwitchPropertiesComponent } from './workspace/resource/resource-instanc
import { SelectResourceClassComponent } from './workspace/resource/resource-instance-form/select-resource-class/select-resource-class.component';
import { ResourceComponent } from './workspace/resource/resource.component';
import { ResultsComponent } from './workspace/results/results.component';
import { ResourceToolbarComponent } from './workspace/resource/resource-toolbar/resource-toolbar.component';
import { ResourcePropertiesComponent } from './workspace/resource/resource-properties/resource-properties.component';
import { StillImageComponent } from './workspace/resource/representation/still-image/still-image.component';

// translate: AoT requires an exported function for factories
export function httpLoaderFactory(httpClient: HttpClient) {
Expand Down Expand Up @@ -167,6 +170,9 @@ export function httpLoaderFactory(httpClient: HttpClient) {
UsersComponent,
UsersListComponent,
VisualizerComponent,
ResourceToolbarComponent,
ResourcePropertiesComponent,
StillImageComponent,
],
imports: [
AppRoutingModule,
Expand Down
47 changes: 47 additions & 0 deletions src/app/workspace/resource/dsp-resource.ts
@@ -0,0 +1,47 @@
import {
ReadResource,
ReadValue,
SystemPropertyDefinition
} from '@dasch-swiss/dsp-js';
import { PropertyInfoValues } from '@dasch-swiss/dsp-ui';

export class DspResource {

res: ReadResource;

resProps: PropertyInfoValues[] = []; // array of resource properties

systemProps: SystemPropertyDefinition[] = []; // array of system properties

// regions or sequences
incomingAnnotations: ReadResource[] = [];

// incoming stillImages, movingImages, audio etc.
incomingRepresentations: ReadResource[] = [];

constructor(resource: ReadResource) {

this.res = resource;
}
}

export class DspCompoundPosition {
offset: number; // current offset of search requests
maxOffsets: number; // max offsets in relation to totalPages
position: number; // current item position in offset sequence
page: number; // current and real page number in compound object
totalPages: number; // total pages (part of) in compound object

constructor(totalPages: number) {
this.totalPages = totalPages;
this.maxOffsets = Math.ceil(totalPages / 25) - 1;
}
}

export interface PropIriToNameMapping {
[index: string]: string;
}

export interface PropertyValues {
[index: string]: ReadValue[];
}
162 changes: 162 additions & 0 deletions src/app/workspace/resource/incoming.service.spec.ts
@@ -0,0 +1,162 @@
import { TestBed } from '@angular/core/testing';
import { DspApiConnectionToken } from '@dasch-swiss/dsp-ui';
import { IncomingService } from './incoming.service';

describe('IncomingService', () => {
let service: IncomingService;

beforeEach(() => {
const dspConnSpyObj = {
v2: {
search: jasmine.createSpyObj('search', ['doExtendedSearch'])
}
};

TestBed.configureTestingModule({
providers: [
{
provide: DspApiConnectionToken,
useValue: dspConnSpyObj
},
]
});
service = TestBed.inject(IncomingService);
});

it('should be created', () => {
expect(service).toBeTruthy();
});

it('should get incoming regions ', () => {

const dspSpy = TestBed.inject(DspApiConnectionToken);

const expectedQuery = `
PREFIX knora-api: <http://api.knora.org/ontology/knora-api/simple/v2#>

CONSTRUCT {
?region knora-api:isMainResource true .

?region knora-api:hasGeometry ?geom .

?region knora-api:hasComment ?comment .

?region knora-api:hasColor ?color .
} WHERE {
?region a knora-api:Region .
?region a knora-api:Resource .

?region knora-api:isRegionOf <http://rdfh.ch/0801/letter> .
knora-api:isRegionOf knora-api:objectType knora-api:Resource .

<http://rdfh.ch/0801/letter> a knora-api:Resource .

?region knora-api:hasGeometry ?geom .
knora-api:hasGeometry knora-api:objectType knora-api:Geom .

?geom a knora-api:Geom .

?region knora-api:hasComment ?comment .
knora-api:hasComment knora-api:objectType xsd:string .

?comment a xsd:string .

?region knora-api:hasColor ?color .
knora-api:hasColor knora-api:objectType knora-api:Color .

?color a knora-api:Color .
} OFFSET 0
`;

service.getIncomingRegions('http://rdfh.ch/0801/letter', 0);

expect(dspSpy.v2.search.doExtendedSearch).toHaveBeenCalledWith(expectedQuery);

});

it('should get incoming StillImageRepresentations ', () => {

const dspSpy = TestBed.inject(DspApiConnectionToken);

const expectedQuery = `
PREFIX knora-api: <http://api.knora.org/ontology/knora-api/simple/v2#>

CONSTRUCT {
?page knora-api:isMainResource true .

?page knora-api:seqnum ?seqnum .

?page knora-api:hasStillImageFile ?file .
} WHERE {

?page a knora-api:StillImageRepresentation .
?page a knora-api:Resource .

?page knora-api:isPartOf <http://rdfh.ch/0801/letter> .
knora-api:isPartOf knora-api:objectType knora-api:Resource .

<http://rdfh.ch/0801/letter> a knora-api:Resource .

?page knora-api:seqnum ?seqnum .
knora-api:seqnum knora-api:objectType xsd:integer .

?seqnum a xsd:integer .

?page knora-api:hasStillImageFile ?file .
knora-api:hasStillImageFile knora-api:objectType knora-api:File .

?file a knora-api:File .

} ORDER BY ?seqnum
OFFSET 1
`;

service.getStillImageRepresentationsForCompoundResource('http://rdfh.ch/0801/letter', 1);

expect(dspSpy.v2.search.doExtendedSearch).toHaveBeenCalledWith(expectedQuery);

});

it('should get incoming Links', () => {

const dspSpy = TestBed.inject(DspApiConnectionToken);

const expectedQuery = `
PREFIX knora-api: <http://api.knora.org/ontology/knora-api/simple/v2#>

CONSTRUCT {
?incomingRes knora-api:isMainResource true .

?incomingRes ?incomingProp <http://rdfh.ch/0801/letter> .

} WHERE {

?incomingRes a knora-api:Resource .

?incomingRes ?incomingProp <http://rdfh.ch/0801/letter> .

<http://rdfh.ch/0801/letter> a knora-api:Resource .

?incomingProp knora-api:objectType knora-api:Resource .

knora-api:isRegionOf knora-api:objectType knora-api:Resource .
knora-api:isPartOf knora-api:objectType knora-api:Resource .

FILTER NOT EXISTS {
?incomingRes knora-api:isRegionOf <http://rdfh.ch/0801/letter> .
}

FILTER NOT EXISTS {
?incomingRes knora-api:isPartOf <http://rdfh.ch/0801/letter> .
}

} OFFSET 0
`;

service.getIncomingLinksForResource('http://rdfh.ch/0801/letter', 0);

expect(dspSpy.v2.search.doExtendedSearch).toHaveBeenCalledWith(expectedQuery);

});

});