diff --git a/src/main/angular/src/app/api/bulk/Bulk.ts b/src/main/angular/src/app/api/bulk/Bulk.ts index 7cbb7ed..f5edad5 100644 --- a/src/main/angular/src/app/api/bulk/Bulk.ts +++ b/src/main/angular/src/app/api/bulk/Bulk.ts @@ -30,4 +30,12 @@ export class Bulk { return this.fromJson(json); } + public static trackBy(index: number, item: Bulk): number { + return item.id; + } + + public static compareName(a: Bulk, b: Bulk): number { + return a.name.localeCompare(b.name); + } + } diff --git a/src/main/angular/src/app/api/bulk/bulkService.ts b/src/main/angular/src/app/api/bulk/bulkService.ts index aae1a7c..0e3cb04 100644 --- a/src/main/angular/src/app/api/bulk/bulkService.ts +++ b/src/main/angular/src/app/api/bulk/bulkService.ts @@ -40,4 +40,8 @@ export class BulkService implements ISearchService { this.api.getItem("bulk/create/", Bulk.fromJson, next, error); } + delete(bulk: Bulk, next: () => void, error: (error: any) => void = NO_OP): void { + this.api.getItem("bulk/delete/" + bulk.id, _ => _, next, error); + } + } diff --git a/src/main/angular/src/app/app-routing.module.ts b/src/main/angular/src/app/app-routing.module.ts index 8a5eabe..ad5cf99 100644 --- a/src/main/angular/src/app/app-routing.module.ts +++ b/src/main/angular/src/app/app-routing.module.ts @@ -9,17 +9,25 @@ import {ChannelListComponent} from "./pages/channel-list/channel-list.component" import {AreaListComponent} from "./pages/mobile/device-tree/area-list/area-list.component"; import {RoomListComponent} from "./pages/mobile/device-tree/room-list/room-list.component"; import {DeviceListComponent} from "./pages/mobile/device-tree/device-list/device-list.component"; +import {BulkListComponent} from "./pages/bulk/bulk-list/bulk-list.component"; +import {BulkComponent} from "./pages/bulk/bulk/bulk.component"; const routes: Routes = [ {path: 'Device', component: DeviceComponent}, {path: 'DeviceAllList', component: DeviceAllListComponent}, + // {path: 'Channel', component: ChannelComponent}, {path: 'ChannelList', component: ChannelListComponent}, + // {path: 'Property', component: PropertyComponent}, {path: 'PropertyList', component: PropertyListComponent}, + {path: 'Schedule', component: ScheduleComponent}, {path: 'ScheduleList', component: ScheduleListComponent}, + {path: 'Bulk', component: BulkComponent}, + {path: 'BulkList', component: BulkListComponent}, + {path: 'AreaList', component: AreaListComponent}, {path: 'RoomList', component: RoomListComponent}, {path: 'DeviceList', component: DeviceListComponent}, diff --git a/src/main/angular/src/app/app.component.html b/src/main/angular/src/app/app.component.html index a87cc77..0e4a15e 100644 --- a/src/main/angular/src/app/app.component.html +++ b/src/main/angular/src/app/app.component.html @@ -7,6 +7,10 @@ Geräte +
+ Massenverarbeitung +
+
Eigenschaften
diff --git a/src/main/angular/src/app/app.module.ts b/src/main/angular/src/app/app.module.ts index 960a845..2c55a20 100644 --- a/src/main/angular/src/app/app.module.ts +++ b/src/main/angular/src/app/app.module.ts @@ -18,6 +18,8 @@ import {ChannelListComponent} from './pages/channel-list/channel-list.component' import {AreaListComponent} from './pages/mobile/device-tree/area-list/area-list.component'; import {RoomListComponent} from './pages/mobile/device-tree/room-list/room-list.component'; import {DeviceListComponent} from './pages/mobile/device-tree/device-list/device-list.component'; +import {BulkListComponent} from './pages/bulk/bulk-list/bulk-list.component'; +import {BulkComponent} from './pages/bulk/bulk/bulk.component'; @NgModule({ declarations: [ @@ -34,6 +36,8 @@ import {DeviceListComponent} from './pages/mobile/device-tree/device-list/device AreaListComponent, RoomListComponent, DeviceListComponent, + BulkListComponent, + BulkComponent, ], imports: [ BrowserModule, diff --git a/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.html b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.html new file mode 100644 index 0000000..cd8328a --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + +
 Bezeichnung 
+ + + + {{bulk.name}} + + +
+ +

+ +

diff --git a/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.less b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.spec.ts b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.spec.ts new file mode 100644 index 0000000..3dda216 --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.spec.ts @@ -0,0 +1,25 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; + +import {BulkListComponent} from './bulk-list.component'; + +describe('BulkListComponent', () => { + let component: BulkListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [BulkListComponent] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.ts b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.ts new file mode 100644 index 0000000..7a31cb2 --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk-list/bulk-list.component.ts @@ -0,0 +1,61 @@ +import {Component, OnInit} from '@angular/core'; +import {BulkService} from "../../../api/bulk/bulkService"; +import {Bulk} from "../../../api/bulk/Bulk"; +import {faCheckCircle, faCircle, faTimesCircle} from "@fortawesome/free-regular-svg-icons"; + +@Component({ + selector: 'app-bulk-list', + templateUrl: './bulk-list.component.html', + styleUrls: ['./bulk-list.component.less'] +}) +export class BulkListComponent implements OnInit { + + readonly faCheckCircle = faCheckCircle; + + readonly faCircle = faCircle; + + readonly faTimes = faTimesCircle; + + readonly Bulk = Bulk; + + bulks: Bulk[] = []; + + constructor( + readonly bulkService: BulkService, + ) { + // nothing + } + + ngOnInit(): void { + this.bulkService.findAll(list => this.bulks = list) + } + + set(bulk: Bulk, key: string, value: any): void { + this.bulkService.set(bulk, key, value, bulk => this.addOrReplace(bulk)); + } + + private addOrReplace(bulk: Bulk): void { + const index: number = this.bulks.findIndex(s => s.id === bulk.id); + if (index < 0) { + this.bulks.push(bulk); + } else { + this.bulks[index] = bulk; + } + this.bulks = this.bulks.sort(Bulk.compareName) + } + + private remove(bulk: Bulk): void { + this.bulks.splice(this.bulks.findIndex(s => s.id === bulk.id), 1); + } + + create(): void { + this.bulkService.create(bulk => this.addOrReplace(bulk)); + } + + delete(bulk: Bulk): void { + if (confirm("Zeitplan \"" + bulk.name + "\" wirklich löschen?")) { + this.bulkService.delete(bulk, () => this.remove(bulk)); + } + } + +} diff --git a/src/main/angular/src/app/pages/bulk/bulk/bulk.component.html b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.html new file mode 100644 index 0000000..782a0f0 --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.html @@ -0,0 +1 @@ +

bulk works!

diff --git a/src/main/angular/src/app/pages/bulk/bulk/bulk.component.less b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.less new file mode 100644 index 0000000..e69de29 diff --git a/src/main/angular/src/app/pages/bulk/bulk/bulk.component.spec.ts b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.spec.ts new file mode 100644 index 0000000..607ae11 --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.spec.ts @@ -0,0 +1,25 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; + +import {BulkComponent} from './bulk.component'; + +describe('BulkComponent', () => { + let component: BulkComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [BulkComponent] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/angular/src/app/pages/bulk/bulk/bulk.component.ts b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.ts new file mode 100644 index 0000000..f6a33dd --- /dev/null +++ b/src/main/angular/src/app/pages/bulk/bulk/bulk.component.ts @@ -0,0 +1,16 @@ +import {Component, OnInit} from '@angular/core'; + +@Component({ + selector: 'app-bulk', + templateUrl: './bulk.component.html', + styleUrls: ['./bulk.component.less'] +}) +export class BulkComponent implements OnInit { + + constructor() { + } + + ngOnInit(): void { + } + +} diff --git a/src/main/angular/src/app/pages/schedule-list/schedule-list.component.ts b/src/main/angular/src/app/pages/schedule-list/schedule-list.component.ts index dabcce7..bf8a34f 100644 --- a/src/main/angular/src/app/pages/schedule-list/schedule-list.component.ts +++ b/src/main/angular/src/app/pages/schedule-list/schedule-list.component.ts @@ -13,6 +13,7 @@ export class ScheduleListComponent implements OnInit { readonly faCheckCircle = faCheckCircle; readonly faCircle = faCircle; readonly faTimes = faTimesCircle; + readonly Schedule = Schedule; schedules: Schedule[] = []; diff --git a/src/main/angular/src/app/pages/schedule/schedule.component.html b/src/main/angular/src/app/pages/schedule/schedule.component.html index 57483eb..be13587 100644 --- a/src/main/angular/src/app/pages/schedule/schedule.component.html +++ b/src/main/angular/src/app/pages/schedule/schedule.component.html @@ -29,7 +29,7 @@ Unschärfe Nächste Ausführung Eingeschaft setzen - Massenausführung + Massenverarbeitung   diff --git a/src/main/java/de/ph87/homeautomation/bulk/BulkController.java b/src/main/java/de/ph87/homeautomation/bulk/BulkController.java index 63f6762..4dd5987 100644 --- a/src/main/java/de/ph87/homeautomation/bulk/BulkController.java +++ b/src/main/java/de/ph87/homeautomation/bulk/BulkController.java @@ -32,17 +32,17 @@ public class BulkController implements ISearchController { return bulkReader.filter(filter); } - @DeleteMapping("delete") - public void delete(@RequestBody final long id) { + @GetMapping("delete/{id}") + public void delete(@PathVariable final long id) { bulkWriter.delete(id); } - @PostMapping("name/{id}") + @PostMapping("set/{id}/name") public BulkDto name(@PathVariable final long id, @RequestBody final String name) { return bulkWriter.set(id, bulk -> bulk.setName(name)); } - @PostMapping("enabled/{id}") + @PostMapping("set/{id}/enabled") public BulkDto enabled(@PathVariable final long id, @RequestBody final boolean enabled) { return bulkWriter.set(id, bulk -> bulk.setEnabled(enabled)); } @@ -79,6 +79,12 @@ public class BulkController implements ISearchController { return bulkReader.findAllDtoLike("%" + term + "%").stream().map(this::toSearchResult).collect(Collectors.toList()); } + @GetMapping("findAll") + @Deprecated(since = "Use 'filter' instead", forRemoval = true) + public List findAll() { + return bulkReader.findAllDto(); + } + private SearchResult toSearchResult(final BulkDto bulkDto) { return new SearchResult(bulkDto.getId(), bulkDto.getName()); } diff --git a/src/main/java/de/ph87/homeautomation/bulk/BulkReader.java b/src/main/java/de/ph87/homeautomation/bulk/BulkReader.java index 97e9f08..62ba100 100644 --- a/src/main/java/de/ph87/homeautomation/bulk/BulkReader.java +++ b/src/main/java/de/ph87/homeautomation/bulk/BulkReader.java @@ -37,4 +37,9 @@ public class BulkReader { return bulkRepository.findAllByNameLike(term).stream().map(bulkMapper::toDto).collect(Collectors.toList()); } + @Deprecated(since = "Use 'filter' instead", forRemoval = true) + public List findAllDto() { + return bulkRepository.findAll().stream().map(bulkMapper::toDto).collect(Collectors.toList()); + } + }