add ordinal in Language Entity

This commit is contained in:
amentis 2023-11-29 15:27:27 +02:00
parent bf07fed0f8
commit 2c914ead90
15 changed files with 84 additions and 20 deletions

View File

@ -37,6 +37,10 @@ public class LanguageEntity {
private IsActive isActive; private IsActive isActive;
public static final String _isActive = "isActive"; public static final String _isActive = "isActive";
@Column(name = "ordinal")
private Integer ordinal;
public static final String _ordinal = "ordinal";
public UUID getId() { public UUID getId() {
return id; return id;
} }
@ -84,4 +88,12 @@ public class LanguageEntity {
public void setIsActive(IsActive isActive) { public void setIsActive(IsActive isActive) {
this.isActive = isActive; this.isActive = isActive;
} }
public Integer getOrdinal() {
return ordinal;
}
public void setOrdinal(Integer ordinal) {
this.ordinal = ordinal;
}
} }

View File

@ -25,6 +25,9 @@ public class Language {
private IsActive isActive; private IsActive isActive;
public static final String _isActive = "isActive"; public static final String _isActive = "isActive";
private Integer ordinal;
public static final String _ordinal = "ordinal";
private String hash; private String hash;
public final static String _hash = "hash"; public final static String _hash = "hash";
@ -76,6 +79,14 @@ public class Language {
this.isActive = isActive; this.isActive = isActive;
} }
public Integer getOrdinal() {
return ordinal;
}
public void setOrdinal(Integer ordinal) {
this.ordinal = ordinal;
}
public String getHash() { public String getHash() {
return hash; return hash;
} }

View File

@ -49,6 +49,7 @@ public class LanguageBuilder extends BaseBuilder<Language, LanguageEntity>{
if (fields.hasField(this.asIndexer(Language._id))) m.setId(d.getId()); if (fields.hasField(this.asIndexer(Language._id))) m.setId(d.getId());
if (fields.hasField(this.asIndexer(Language._code))) m.setCode(d.getCode()); if (fields.hasField(this.asIndexer(Language._code))) m.setCode(d.getCode());
if (fields.hasField(this.asIndexer(Language._payload))) m.setPayload(d.getPayload()); if (fields.hasField(this.asIndexer(Language._payload))) m.setPayload(d.getPayload());
if (fields.hasField(this.asIndexer(Language._ordinal))) m.setOrdinal(d.getOrdinal());
if (fields.hasField(this.asIndexer(Language._createdAt))) m.setCreatedAt(d.getCreatedAt()); if (fields.hasField(this.asIndexer(Language._createdAt))) m.setCreatedAt(d.getCreatedAt());
if (fields.hasField(this.asIndexer(Language._updatedAt))) m.setUpdatedAt(d.getUpdatedAt()); if (fields.hasField(this.asIndexer(Language._updatedAt))) m.setUpdatedAt(d.getUpdatedAt());
if (fields.hasField(this.asIndexer(Language._isActive))) m.setIsActive(d.getIsActive()); if (fields.hasField(this.asIndexer(Language._isActive))) m.setIsActive(d.getIsActive());

View File

@ -18,6 +18,9 @@ public class LanguagePersist {
private String payload; private String payload;
@NotNull(message = "{validation.empty}")
private Integer ordinal;
private String hash; private String hash;
public UUID getId() { public UUID getId() {
@ -44,6 +47,14 @@ public class LanguagePersist {
this.payload = payload; this.payload = payload;
} }
public Integer getOrdinal() {
return ordinal;
}
public void setOrdinal(Integer ordinal) {
this.ordinal = ordinal;
}
public String getHash() { public String getHash() {
return hash; return hash;
} }

View File

@ -161,6 +161,7 @@ public class LanguageQuery extends QueryBase<LanguageEntity> {
item.setId(QueryBase.convertSafe(tuple, columns, LanguageEntity._id, UUID.class)); item.setId(QueryBase.convertSafe(tuple, columns, LanguageEntity._id, UUID.class));
item.setCode(QueryBase.convertSafe(tuple, columns, LanguageEntity._code, String.class)); item.setCode(QueryBase.convertSafe(tuple, columns, LanguageEntity._code, String.class));
item.setPayload(QueryBase.convertSafe(tuple, columns, LanguageEntity._payload, String.class)); item.setPayload(QueryBase.convertSafe(tuple, columns, LanguageEntity._payload, String.class));
item.setOrdinal(QueryBase.convertSafe(tuple, columns, LanguageEntity._ordinal, Integer.class));
item.setCreatedAt(QueryBase.convertSafe(tuple, columns, LanguageEntity._createdAt, Instant.class)); item.setCreatedAt(QueryBase.convertSafe(tuple, columns, LanguageEntity._createdAt, Instant.class));
item.setUpdatedAt(QueryBase.convertSafe(tuple, columns, LanguageEntity._updatedAt, Instant.class)); item.setUpdatedAt(QueryBase.convertSafe(tuple, columns, LanguageEntity._updatedAt, Instant.class));
item.setIsActive(QueryBase.convertSafe(tuple, columns, LanguageEntity._isActive, IsActive.class)); item.setIsActive(QueryBase.convertSafe(tuple, columns, LanguageEntity._isActive, IsActive.class));
@ -172,6 +173,7 @@ public class LanguageQuery extends QueryBase<LanguageEntity> {
if (item.match(Language._id)) return LanguageEntity._id; if (item.match(Language._id)) return LanguageEntity._id;
else if (item.match(Language._code)) return LanguageEntity._code; else if (item.match(Language._code)) return LanguageEntity._code;
else if (item.match(Language._payload)) return LanguageEntity._payload; else if (item.match(Language._payload)) return LanguageEntity._payload;
else if (item.match(Language._ordinal)) return LanguageEntity._ordinal;
else if (item.match(Language._createdAt)) return LanguageEntity._createdAt; else if (item.match(Language._createdAt)) return LanguageEntity._createdAt;
else if (item.match(Language._updatedAt)) return LanguageEntity._updatedAt; else if (item.match(Language._updatedAt)) return LanguageEntity._updatedAt;
else if (item.match(Language._hash)) return LanguageEntity._updatedAt; else if (item.match(Language._hash)) return LanguageEntity._updatedAt;

View File

@ -91,6 +91,7 @@ public class LanguageServiceImpl implements LanguageService {
data.setCode(model.getCode()); data.setCode(model.getCode());
data.setPayload(model.getPayload()); data.setPayload(model.getPayload());
data.setOrdinal(model.getOrdinal());
data.setUpdatedAt(Instant.now()); data.setUpdatedAt(Instant.now());
if (isUpdate) this.entityManager.merge(data); if (isUpdate) this.entityManager.merge(data);

View File

@ -104,8 +104,8 @@ public class LanguageV2Controller {
return model; return model;
} }
@GetMapping("code/{code}") @GetMapping("get-payload/{code}")
public Language get(@PathVariable("code") String code, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException, IOException { public ResponseEntity getPayload(@PathVariable("code") String code, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException, IOException {
logger.debug(new MapLogEntry("retrieving" + Language.class.getSimpleName()).And("code", code).And("fields", fieldSet)); logger.debug(new MapLogEntry("retrieving" + Language.class.getSimpleName()).And("code", code).And("fields", fieldSet));
this.censorFactory.censor(LanguageCensor.class).censor(fieldSet, null); this.censorFactory.censor(LanguageCensor.class).censor(fieldSet, null);
@ -124,7 +124,7 @@ public class LanguageV2Controller {
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet) new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
)); ));
return model; return new ResponseEntity<>(model.getPayload().getBytes(), HttpStatus.OK);
} }
@PostMapping("available-languages") @PostMapping("available-languages")

View File

@ -3,6 +3,7 @@ import { BaseEntity, BaseEntityPersist } from "@common/base/base-entity.model";
export interface Language extends BaseEntity{ export interface Language extends BaseEntity{
code: string; code: string;
payload: string; payload: string;
ordinal: number;
} }
// Persist // Persist
@ -10,4 +11,5 @@ export interface Language extends BaseEntity{
export interface LanguagePersist extends BaseEntityPersist{ export interface LanguagePersist extends BaseEntityPersist{
code: string; code: string;
payload: string; payload: string;
ordinal: number;
} }

View File

@ -12,6 +12,7 @@ import { catchError, map } from 'rxjs/operators';
import { nameof } from 'ts-simple-nameof'; import { nameof } from 'ts-simple-nameof';
import { ConfigurationService } from '../configuration/configuration.service'; import { ConfigurationService } from '../configuration/configuration.service';
import { BaseHttpV2Service } from '../http/base-http-v2.service'; import { BaseHttpV2Service } from '../http/base-http-v2.service';
import { HttpResponse } from '@angular/common/http';
@Injectable() @Injectable()
export class LanguageV2Service { export class LanguageV2Service {
@ -35,13 +36,11 @@ export class LanguageV2Service {
catchError((error: any) => throwError(error))); catchError((error: any) => throwError(error)));
} }
getSingleWithCode(code: string, reqFields: string[] = []): Observable<Language> { getPayload(code: string, reqFields: string[] = []): Observable<HttpResponse<Blob>> {
const url = `${this.apiBase}/code/${code}`; const url = `${this.apiBase}/get-payload/${code}`;
const options = { params: { f: reqFields } }; const options = { params: { f: reqFields }, responseType: 'blob', observe: 'response' };
return this.http return this.http.get(url, options);
.get<Language>(url, options).pipe(
catchError((error: any) => throwError(error)));
} }
queryAvailableCodes(q: LanguageLookup): Observable<QueryResult<string>> { queryAvailableCodes(q: LanguageLookup): Observable<QueryResult<string>> {

View File

@ -49,6 +49,14 @@
{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error> {{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-4">
<mat-form-field class="w-100">
<mat-label>{{'LANGUAGE-EDITOR.FIELDS.ORDINAL' | translate}}</mat-label>
<input matInput type="text" name="ordinal" [formControl]="formGroup.get('ordinal')" required>
<mat-error *ngIf="formGroup.get('ordinal').hasError('required')">
{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
</mat-form-field>
</div>
<div class="col-12"> <div class="col-12">
<mat-form-field class="w-100"> <mat-form-field class="w-100">
<mat-label>{{'LANGUAGE-EDITOR.FIELDS.PAYLOAD' | translate}}</mat-label> <mat-label>{{'LANGUAGE-EDITOR.FIELDS.PAYLOAD' | translate}}</mat-label>

View File

@ -107,13 +107,16 @@ export class LanguageEditorComponent extends BaseEditor<LanguageEditorModel, Lan
prepareForm(data: Language) { prepareForm(data: Language) {
try { try {
if(data && data.payload == null){ if(data && data.payload == null){
this.languageV2Service.getSingleWithCode(data.code, LanguageEditorResolver.lookupFields()) this.languageV2Service.getPayload(data.code, LanguageEditorResolver.lookupFields())
.pipe(takeUntil(this._destroyed)) .pipe(takeUntil(this._destroyed))
.subscribe(language => { .subscribe(respone => {
data.payload = language.payload; const blob = new Blob([respone.body], { type: 'text/html' });
this.editorModel = data ? new LanguageEditorModel().fromModel(data) : new LanguageEditorModel(); blob.text().then(text => {
this.isDeleted = data ? data.isActive === IsActive.Inactive : false; data.payload = text;
this.buildForm(); this.editorModel = data ? new LanguageEditorModel().fromModel(data) : new LanguageEditorModel();
this.isDeleted = data ? data.isActive === IsActive.Inactive : false;
this.buildForm();
});
}); });
}else{ }else{
this.editorModel = data ? new LanguageEditorModel().fromModel(data) : new LanguageEditorModel(); this.editorModel = data ? new LanguageEditorModel().fromModel(data) : new LanguageEditorModel();
@ -198,10 +201,14 @@ export class LanguageEditorComponent extends BaseEditor<LanguageEditorModel, Lan
} }
public selectedCodeChanged(code: string){ public selectedCodeChanged(code: string){
this.languageV2Service.getSingleWithCode(code, LanguageEditorResolver.lookupFields()) this.languageV2Service.getPayload(code, LanguageEditorResolver.lookupFields())
.pipe(takeUntil(this._destroyed)) .pipe(takeUntil(this._destroyed))
.subscribe(language => { .subscribe(response => {
this.formGroup.get('payload').patchValue(language.payload); const blob = new Blob([response.body], { type: 'text/html' });
blob.text().then(text => {
this.formGroup.get('payload').patchValue(text);
})
}); });
} }

View File

@ -8,6 +8,7 @@ import { Validation, ValidationContext } from "@common/forms/validation/validati
export class LanguageEditorModel extends BaseEditorModel implements LanguagePersist { export class LanguageEditorModel extends BaseEditorModel implements LanguagePersist {
code: string; code: string;
payload: string; payload: string;
ordinal: number;
permissions: string[]; permissions: string[];
@ -21,6 +22,7 @@ export class LanguageEditorModel extends BaseEditorModel implements LanguagePers
super.fromModel(item); super.fromModel(item);
this.code = item.code; this.code = item.code;
this.payload = item.payload; this.payload = item.payload;
this.ordinal = item.ordinal;
} }
return this; return this;
} }
@ -32,6 +34,7 @@ export class LanguageEditorModel extends BaseEditorModel implements LanguagePers
id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators], id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
code: [{ value: this.code, disabled: disabled }, context.getValidation('code').validators], code: [{ value: this.code, disabled: disabled }, context.getValidation('code').validators],
payload: [{ value: this.payload, disabled: disabled }, context.getValidation('payload').validators], payload: [{ value: this.payload, disabled: disabled }, context.getValidation('payload').validators],
ordinal: [{ value: this.ordinal, disabled: disabled }, context.getValidation('ordinal').validators],
hash: [{ value: this.hash, disabled: disabled }, context.getValidation('hash').validators] hash: [{ value: this.hash, disabled: disabled }, context.getValidation('hash').validators]
}); });
} }
@ -42,6 +45,7 @@ export class LanguageEditorModel extends BaseEditorModel implements LanguagePers
baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] }); baseValidationArray.push({ key: 'id', validators: [BackendErrorValidator(this.validationErrorModel, 'id')] });
baseValidationArray.push({ key: 'code', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'code')] }); baseValidationArray.push({ key: 'code', validators: [Validators.required, BackendErrorValidator(this.validationErrorModel, 'code')] });
baseValidationArray.push({ key: 'payload', validators: [BackendErrorValidator(this.validationErrorModel, 'payload')] }); baseValidationArray.push({ key: 'payload', validators: [BackendErrorValidator(this.validationErrorModel, 'payload')] });
baseValidationArray.push({ key: 'ordinal', validators: [Validators.required, Validators.pattern("^[0-9]*$"), BackendErrorValidator(this.validationErrorModel, 'ordinal')] });
baseValidationArray.push({ key: 'hash', validators: [] }); baseValidationArray.push({ key: 'hash', validators: [] });
baseContext.validation = baseValidationArray; baseContext.validation = baseValidationArray;

View File

@ -21,6 +21,7 @@ export class LanguageEditorResolver extends BaseEditorResolver {
nameof<Language>(x => x.id), nameof<Language>(x => x.id),
nameof<Language>(x => x.code), nameof<Language>(x => x.code),
nameof<Language>(x => x.payload), nameof<Language>(x => x.payload),
nameof<Language>(x => x.ordinal),
nameof<Language>(x => x.createdAt), nameof<Language>(x => x.createdAt),
nameof<Language>(x => x.updatedAt), nameof<Language>(x => x.updatedAt),
nameof<Language>(x => x.hash), nameof<Language>(x => x.hash),

View File

@ -2,6 +2,9 @@
<form *ngIf="formGroup" (ngSubmit)="formSubmit()"> <form *ngIf="formGroup" (ngSubmit)="formSubmit()">
<div> <div>
<mat-card class="col-md-8 offset-md-2"> <mat-card class="col-md-8 offset-md-2">
<mat-card-header>
<mat-card-title>{{'SUPPORTIVE-MATERIAL-EDITOR.TITLE' | translate}}</mat-card-title>
</mat-card-header>
<div> <div>
<div class ="material"> <div class ="material">
<mat-form-field> <mat-form-field>

View File

@ -1175,6 +1175,7 @@
"UNSUCCESSFUL-DELETE": "This item could not be deleted." "UNSUCCESSFUL-DELETE": "This item could not be deleted."
}, },
"SUPPORTIVE-MATERIAL-EDITOR": { "SUPPORTIVE-MATERIAL-EDITOR": {
"TITLE": "Supportive Material",
"FIELDS": { "FIELDS": {
"MATERIAL-TYPE": "Material Type", "MATERIAL-TYPE": "Material Type",
"LANGUAGE": "Language" "LANGUAGE": "Language"
@ -1189,7 +1190,8 @@
"NEW": "New Language", "NEW": "New Language",
"FIELDS": { "FIELDS": {
"CODE": "Code", "CODE": "Code",
"PAYLOAD": "Payload" "PAYLOAD": "Payload",
"ORDINAL": "Ordinal"
}, },
"ACTIONS": { "ACTIONS": {
"SAVE": "Save", "SAVE": "Save",