Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
albertoh committed Feb 17, 2025
1 parent b669f56 commit dff6b8a
Show file tree
Hide file tree
Showing 6 changed files with 205 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ private void addPian(SolrInputDocument idoc, String pian, String pristupnost) th
for (int d = 0; d < json.getJSONObject("response").getJSONArray("docs").length(); d++) {
JSONObject pianDoc = json.getJSONObject("response").getJSONArray("docs").getJSONObject(d);

// IndexUtils.addSecuredFieldNonRepeat(idoc, "pian", pianDoc.toString(), pristupnost);
// IndexUtils.setSecuredJSONField(idoc, "pian", pianDoc, pristupnost);
IndexUtils.addFieldNonRepeat(idoc, "f_pian_typ", pianDoc.getString("pian_typ"));
IndexUtils.addFieldNonRepeat(idoc, "f_pian_presnost", pianDoc.getString("pian_presnost"));
IndexUtils.addSecuredFieldNonRepeat(idoc, "f_pian_zm10", pianDoc.getJSONObject("pian_chranene_udaje").getString("zm10"), pristupnost);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,36 @@ public void setQuery(HttpServletRequest request, SolrQuery query) throws IOExcep

SolrSearcher.addFilters(request, query, pristupnost);
}

public void addPians(JSONObject jo, Http2SolrClient client, HttpServletRequest request) {
String pristupnost = LoginServlet.pristupnost(request.getSession());
if ("E".equals(pristupnost)) {
pristupnost = "D";
}
PIANSearcher ps = new PIANSearcher();
String[] fs = ps.getSearchFields(pristupnost);
String fields = String.join(",", fs);

JSONArray ja = jo.getJSONObject("response").getJSONArray("docs");
for (int i = 0; i < ja.length(); i++) {
JSONObject doc = ja.getJSONObject(i);
if (doc.has("pian_id")) {
JSONArray cdjs = doc.getJSONArray("pian_id");
for (int j = 0; j < cdjs.length(); j++) {
String cdj = cdjs.getString(j);
JSONObject sub = SolrSearcher.getById(client, cdj, fields);
if (sub != null) {
String docPr = sub.getString("pristupnost");
if (docPr.compareToIgnoreCase(pristupnost) > 0) {
sub.remove("pian_chranene_udaje");
}
doc.append("pian", sub);
}

}
}
}
}

public JSONObject getMapPians(HttpServletRequest request) {
JSONObject json = new JSONObject();
Expand All @@ -175,9 +205,12 @@ public JSONObject getMapPians(HttpServletRequest request) {
query.setFields("pian:[json],pian_id,ident_cely,organizace,pristupnost", "loc_rpt:loc_rpt_" + pristupnost, "loc:loc_rpt_" + pristupnost);

query.setRows(Math.min(Options.getInstance().getClientConf().getJSONObject("mapOptions").optInt("docsForCluster", 5000), Integer.parseInt(request.getParameter("rows"))));

JSONObject jo = SearchUtils.json(query, client, "entities");
SolrSearcher.addFavorites(jo, client, request);
if (request.getParameter("getFullPian") != null) {
addPians(jo, client, request);
}
return jo;

} catch (Exception ex) {
Expand Down
2 changes: 1 addition & 1 deletion web/src/main/ng/src/app/app.state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export class AppState {
}

setFacetChanged() {
this.facetsSubject.next('facets');
this.facetsSubject.next('direct');
}

setFacetPivots(resp: SolrResponse) {
Expand Down
2 changes: 2 additions & 0 deletions web/src/main/ng/src/app/components/facets/facets.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ export class FacetsComponent implements OnInit {

setEntity(entity) {
this.state.isFacetsCollapsed = true;
this.state.setFacetChanged();
document.getElementById('content-scroller').scrollTo(0,0);
// Validate sort param sort
const sortParam = this.state.sort.field;
Expand Down Expand Up @@ -219,6 +220,7 @@ export class FacetsComponent implements OnInit {

applyFilters() {
this.state.isFacetsCollapsed = true;
this.state.setFacetChanged();
document.getElementById('content-scroller').scrollTo(0,0);
const params: any = {};
this.changedFacets.forEach((c: Crumb) => {
Expand Down
6 changes: 6 additions & 0 deletions web/src/main/ng/src/app/components/mapa/mapa.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
<div [leafletLayer]="markers"></div>
</div>

<mat-card class="app-active-pian-facet" *ngIf="loadingMarkers">
<mat-card-content>
<a [matTooltip]="'map.tooltip.Zastavit' | translate" (click)="stopLoadingMarkers()"><mat-icon>stop</mat-icon></a>
</mat-card-content>
</mat-card>

<mat-card class="app-active-pian-facet" *ngIf="state.pianId">
<mat-card-content>
<a [matTooltip]="'map.tooltip.Odstranit tento filtr' | translate" (click)="clearPian()"><mat-icon>clear</mat-icon>{{ state.pianId }}</a>&#160;
Expand Down
179 changes: 161 additions & 18 deletions web/src/main/ng/src/app/components/mapa/mapa.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,11 @@ export class MapaComponent implements OnInit, OnDestroy {
const start = new Date();
if (this.mapReady) {
this.setHeatData();
if (res === 'direct') {
this.markersList = [];
this.piansList = [];
this.markers = new L.featureGroup();
}
}
}));

Expand Down Expand Up @@ -539,7 +544,11 @@ export class MapaComponent implements OnInit, OnDestroy {
} else {
this.setClusterDataByPian(res.response.docs);
}
this.state.loading = false;
setTimeout(() => {
this.state.loading = false;
this.loadingFinished.emit();
}, 100)

});
break;
}
Expand Down Expand Up @@ -576,7 +585,7 @@ export class MapaComponent implements OnInit, OnDestroy {
}
this.state.loading = true;
this.service.search(p as HttpParams).subscribe((resp: any) => {
this.state.loading = false;
//this.state.loading = false;
this.state.setSearchResponse(resp);
this.state.numFound = resp.response.numFound;
this.distErr = resp.responseHeader.params['facet.heatmap.distErr'];
Expand All @@ -592,21 +601,22 @@ export class MapaComponent implements OnInit, OnDestroy {
this.piansList = [];
docs.forEach(pian => {
//if (this.state.hasRights(pian.pristupnost, pian.organizace)) {
const coords = pian.loc_rpt[0].split(',');
const mrk = this.addMarker({
id: pian.pian_id,
isPian: true,
lat: coords[0],
lng: coords[1],
presnost: pian.pian_presnost,
typ: pian.typ,
doc: pian,
pian_chranene_udaje: pian.pian_chranene_udaje
});
const coords = pian.loc_rpt[0].split(',');
const mrk = this.addMarker({
id: pian.pian_id,
isPian: true,
lat: coords[0],
lng: coords[1],
presnost: pian.pian_presnost,
typ: pian.typ,
doc: pian,
pian_chranene_udaje: pian.pian_chranene_udaje
});
//}
});
this.markers.addLayers(this.markersList);
this.currentZoom = this.map.getZoom();
this.cd.detectChanges();
}

setClusterDataByLoc(docs: any[]) {
Expand Down Expand Up @@ -634,6 +644,7 @@ export class MapaComponent implements OnInit, OnDestroy {
});
this.markers.addLayers(this.markersList);
this.currentZoom = this.map.getZoom();
this.cd.detectChanges();
}

getMarkerById() {
Expand Down Expand Up @@ -717,8 +728,9 @@ export class MapaComponent implements OnInit, OnDestroy {
appmrk.bindTooltip(this.popUpHtml(mr.id, mr.presnost, pianInList.docIds));
}
return appmrk;
} else {
return appmrk;
}
return mr;
}

selectMarker(res) {
Expand All @@ -727,7 +739,138 @@ export class MapaComponent implements OnInit, OnDestroy {
});
}

loadingMarkers = false;

stopLoadingMarkers() {
this.state.loading = false;
this.loadingMarkers = false;
if (!this.state.loading) {
this.loadingFinished.emit();
}
}

processMarkersResp(resp: any[], ids: { id: string, docId: string }[]) {
resp.forEach(pian => {
const coords = pian.loc_rpt[0].split(',');
const pianInList = this.piansList.find(p => p.id === pian.ident_cely);
if (!pianInList) {
return;
}
const doc = ids.find(p => p.id === pian.ident_cely).docId;
pianInList.presnost = pian.pian_presnost;
pianInList.typ = pian.typ;
const mrk = this.addMarker({
id: pian.ident_cely,
isPian: true,
lat: coords[0],
lng: coords[1],
presnost: pian.pian_presnost,
typ: pian.typ,
doc: doc,
pian_chranene_udaje: pian.pian_chranene_udaje
});
mrk.addTo(this.markers);
this.addShapeLayer(pian.ident_cely, pian.pian_presnost, pian.pian_chranene_udaje?.geom_wkt.value, doc);
});
}

loadNextMarkers(ids: { id: string, docId: string }[], entity: string) {
if (!this.loadingMarkers) {
return;
}
const idsSize = 20;
const ids2 = ids.splice(0, idsSize);
this.service.getIdAsChild(ids2.map(p => p.id), entity).subscribe((res: any) => {
this.processMarkersResp(res.response.docs, ids2);
if (res.response.docs.length < idsSize) {
// To znamena konec
this.state.loading = false;
this.loadingMarkers = false;
if (!this.state.loading) {
this.loadingFinished.emit();
}
} else {

if (ids.length > 0) {
this.state.loading = true;
this.loadNextMarkers(ids, entity)
} else {
this.state.loading = false;
this.loadingMarkers = false;
if (!this.state.loading) {
this.loadingFinished.emit();
}
}

}
});
}

setMarkersByPian(docs: SolrDocument[]) {
const pianIds: { id: string, docId: string }[] = [];
docs.forEach(doc => {
if (doc.pian_id && doc.pian_id.length > 0) {
doc.pian_id.forEach(pian_id => {
// const pianInList = this.piansList.find(p => p.id === pian_id);
const pianInList = pianIds.find(p => p.id === pian_id);
if (!pianInList) {
pianIds.push({ id: pian_id, docId: doc.ident_cely });
this.piansList.push({ id: pian_id, presnost: null, typ: null, docIds: [doc.ident_cely] });
}
});
}
});
this.loadingMarkers = true;
this.loadNextMarkers(pianIds, 'pian');
}

setMarkersByLoc(docs: SolrDocument[]) {
const pianIds: { id: string, docId: string }[] = [];
docs.forEach(doc => {

if (this.state.hasRights(doc.pristupnost, doc.organizace) || doc.entity === 'dokument') {
const coords = doc.loc_rpt[0].split(',');
const mrk = this.addMarker({
id: doc.ident_cely,
isPian: false,
lat: coords[0],
lng: coords[1],
presnost: '',
typ: '',
doc: doc,
pian_chranene_udaje: null
});
mrk.addTo(this.markers);
}
//this.markersList.forEach(mrk => {
// mrk.addTo(this.markers);
//});

});
this.loadingMarkers = false;
setTimeout(() => {
this.state.loading = false;
this.loadingFinished.emit();
}, 100)
}



setMarkers(docs: SolrDocument[], clean: boolean) {
if (clean) {
this.markersList = [];
this.piansList = [];
this.markers = new L.featureGroup();
}
const byLoc = this.state.entity === 'knihovna_3d' || this.state.entity === 'samostatny_nalez';
if (byLoc) {
this.setMarkersByLoc(docs)
} else {
this.setMarkersByPian(docs)
}
}

setMarkers2(docs: SolrDocument[], clean: boolean) {
if (clean) {
this.markersList = [];
this.piansList = [];
Expand All @@ -739,7 +882,7 @@ export class MapaComponent implements OnInit, OnDestroy {
docs.forEach(doc => {
if (doc.pian_id && doc.pian_id.length > 0) {
doc.pian_id.forEach(pian_id => {
if (!pianIds.includes(doc.pian_id)){
if (!pianIds.includes(doc.pian_id)) {
pianIds.push(doc.pian_id);
}
});
Expand Down Expand Up @@ -810,7 +953,7 @@ export class MapaComponent implements OnInit, OnDestroy {
//}
} else {
processedPianIds.push(pian_id);

if (!pianInList.docIds.includes(doc.ident_cely)) {
pianInList.docIds.push(doc.ident_cely);
}
Expand Down Expand Up @@ -971,7 +1114,7 @@ export class MapaComponent implements OnInit, OnDestroy {
this.map.removeLayer(this.heatmapLayer);
}
if (!this.state.heatMaps?.loc_rpt) {
this.state.loading = false;
//this.state.loading = false;
return;
}
// const markersToShow = Math.min(this.state.solrResponse.response.numFound, this.markersList.length);
Expand All @@ -980,7 +1123,7 @@ export class MapaComponent implements OnInit, OnDestroy {
&& this.map.getZoom() < this.markerZoomLevel;
// this.showHeat = false;
if (!this.showHeat) {
this.state.loading = false;
// this.state.loading = false;
return;
}
this.data.data = [];
Expand Down

0 comments on commit dff6b8a

Please sign in to comment.