Skip to content

Commit a7f2f94

Browse files
author
Jurica Migac
committed
#5 Code refactoring and finishing base functionalities
1 parent aa695fc commit a7f2f94

17 files changed

+372
-69
lines changed

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/constants/RepozitorijPotresaConstants.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ public class RepozitorijPotresaConstants {
1010
public static final String RESOURCE_TYPE_POTRES = "entitet/potres";
1111
public static final String IDENTIFIKATOR = "id";
1212
public static final String JSON_TIP = "application/json";
13+
public static final String LIMIT = "p.limit";
14+
public static final String SVI_PODACI = "-1";
15+
public static final String PRVI_PROPERTY = "1_property";
16+
public static final String PRVI_PROPERTY_VRIJEDNOST = "1_property.value";
17+
public static final String DRUGI_PROPERTY = "2_property";
18+
public static final String DRUGI_PROPERTY_VRIJEDNOST = "2_property.value";
19+
public static final String DRUGI_PROPERTY_OPERACIJA = "2_property.operation";
1320

1421
private RepozitorijPotresaConstants(){}
1522

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package io.ecx.aem.web.services.core.datafetchers;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
import org.apache.commons.lang3.StringUtils;
9+
import org.apache.sling.api.resource.ResourceResolver;
10+
import org.apache.sling.api.resource.ResourceResolverFactory;
11+
import org.osgi.service.component.annotations.Component;
12+
import org.osgi.service.component.annotations.Reference;
13+
14+
import com.day.cq.search.QueryBuilder;
15+
16+
import graphql.schema.DataFetcher;
17+
import graphql.schema.DataFetchingEnvironment;
18+
import io.ecx.aem.web.services.core.constants.RepozitorijPotresaConstants;
19+
import io.ecx.aem.web.services.core.models.PotresModel;
20+
import io.ecx.aem.web.services.core.services.RepozitorijPotresa;
21+
import lombok.extern.slf4j.Slf4j;
22+
23+
@Slf4j
24+
@Component(service = PotresDataFetcher.class, immediate = true)
25+
public class PotresDataFetcher implements DataFetcher<PotresModel> {
26+
27+
private static final String SERVISNI_KORISNIK = "web-services-system-user";
28+
29+
@Reference
30+
private QueryBuilder queryBuilder;
31+
32+
@Reference
33+
private RepozitorijPotresa repozitorijPotresa;
34+
35+
@Reference
36+
private ResourceResolverFactory resourceResolverFactory;
37+
38+
@Override
39+
public PotresModel get(final DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
40+
List<PotresModel> potresi = new ArrayList<>();
41+
final String id = dataFetchingEnvironment.getArgument(RepozitorijPotresaConstants.IDENTIFIKATOR);
42+
if (StringUtils.isNotEmpty(id)) {
43+
try (final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(this.dohvatiAutentifikacijskePodatke())) {
44+
potresi = this.repozitorijPotresa.dohvatiPotresPoId(resourceResolver, id);
45+
} catch (final Exception e) {
46+
log.error("Greška prilikom dohvatanja potresa", e);
47+
}
48+
}
49+
return !potresi.isEmpty() ? potresi.get(0) : null;
50+
}
51+
52+
private Map<String, Object> dohvatiAutentifikacijskePodatke() {
53+
final Map<String, Object> parametri = new HashMap<>();
54+
parametri.put(ResourceResolverFactory.SUBSERVICE, SERVISNI_KORISNIK);
55+
return parametri;
56+
}
57+
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.ecx.aem.web.services.core.datafetchers;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
import org.apache.sling.api.resource.ResourceResolver;
9+
import org.apache.sling.api.resource.ResourceResolverFactory;
10+
import org.osgi.service.component.annotations.Component;
11+
import org.osgi.service.component.annotations.Reference;
12+
13+
import com.day.cq.search.QueryBuilder;
14+
15+
import graphql.schema.DataFetcher;
16+
import graphql.schema.DataFetchingEnvironment;
17+
import io.ecx.aem.web.services.core.models.PotresModel;
18+
import io.ecx.aem.web.services.core.services.RepozitorijPotresa;
19+
import lombok.extern.slf4j.Slf4j;
20+
21+
@Slf4j
22+
@Component(service = PotresiIzmeduMagnitudaDataFetcher.class, immediate = true)
23+
public class PotresiIzmeduMagnitudaDataFetcher implements DataFetcher<List<PotresModel>> {
24+
25+
private static final String SERVISNI_KORISNIK = "web-services-system-user";
26+
private static final String MINIMALNA_MAGNITUDA = "minMagnituda";
27+
private static final String MAKSIMALNA_MAGNITUDA = "maxMagnituda";
28+
29+
@Reference
30+
private QueryBuilder queryBuilder;
31+
32+
@Reference
33+
private RepozitorijPotresa repozitorijPotresa;
34+
35+
@Reference
36+
private ResourceResolverFactory resourceResolverFactory;
37+
38+
@Override
39+
public List<PotresModel> get(final DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
40+
List<PotresModel> potresi = new ArrayList<>();
41+
final Double minMagnituda = dataFetchingEnvironment.getArgument(MINIMALNA_MAGNITUDA);
42+
final Double maxMagnituda = dataFetchingEnvironment.getArgument(MAKSIMALNA_MAGNITUDA);
43+
if (minMagnituda != null && maxMagnituda != null) {
44+
try (final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(this.dohvatiAutentifikacijskePodatke())) {
45+
potresi = this.repozitorijPotresa.dohvatiSvePotreseUnutarMagnitude(resourceResolver, minMagnituda, maxMagnituda);
46+
} catch (final Exception e) {
47+
log.error("Greška prilikom dohvatanja potresa", e);
48+
}
49+
}
50+
return potresi;
51+
}
52+
53+
private Map<String, Object> dohvatiAutentifikacijskePodatke() {
54+
final Map<String, Object> parametri = new HashMap<>();
55+
parametri.put(ResourceResolverFactory.SUBSERVICE, SERVISNI_KORISNIK);
56+
return parametri;
57+
}
58+
59+
}

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/datafetchers/SviPotresiDataFetcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public List<PotresModel> get(final DataFetchingEnvironment dataFetchingEnvironme
3838
List<PotresModel> potresi = new ArrayList<>();
3939
try (final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(this.dohvatiAutentifikacijskePodatke())) {
4040
potresi = this.repozitorijPotresa.dohvatiSvePotrese(resourceResolver);
41-
} catch (Exception e) {
42-
log.error("erorr");
41+
} catch (final Exception e) {
42+
log.error("Greška prilikom dohvatanja potresa", e);
4343
}
4444
return potresi;
4545
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.ecx.aem.web.services.core.datafetchers;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
import org.apache.sling.api.resource.ResourceResolver;
9+
import org.apache.sling.api.resource.ResourceResolverFactory;
10+
import org.osgi.service.component.annotations.Component;
11+
import org.osgi.service.component.annotations.Reference;
12+
13+
import com.day.cq.search.QueryBuilder;
14+
15+
import graphql.schema.DataFetcher;
16+
import graphql.schema.DataFetchingEnvironment;
17+
import io.ecx.aem.web.services.core.models.PotresModel;
18+
import io.ecx.aem.web.services.core.services.RepozitorijPotresa;
19+
import lombok.extern.slf4j.Slf4j;
20+
21+
@Slf4j
22+
@Component(service = TsunamiPotresiDataFetcher.class, immediate = true)
23+
public class TsunamiPotresiDataFetcher implements DataFetcher<List<PotresModel>> {
24+
25+
private static final String SERVISNI_KORISNIK = "web-services-system-user";
26+
27+
@Reference
28+
private QueryBuilder queryBuilder;
29+
30+
@Reference
31+
private RepozitorijPotresa repozitorijPotresa;
32+
33+
@Reference
34+
private ResourceResolverFactory resourceResolverFactory;
35+
36+
@Override
37+
public List<PotresModel> get(final DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
38+
List<PotresModel> potresi = new ArrayList<>();
39+
try (final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(this.dohvatiAutentifikacijskePodatke())) {
40+
potresi = this.repozitorijPotresa.dohvatiSvePotreseSTsunami(resourceResolver);
41+
} catch (final Exception e) {
42+
log.error("Greška prilikom dohvatanja potresa", e);
43+
}
44+
return potresi;
45+
}
46+
47+
private Map<String, Object> dohvatiAutentifikacijskePodatke() {
48+
final Map<String, Object> parametri = new HashMap<>();
49+
parametri.put(ResourceResolverFactory.SUBSERVICE, SERVISNI_KORISNIK);
50+
return parametri;
51+
}
52+
53+
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,67 @@
11
package io.ecx.aem.web.services.core.datafetchers.mutations;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
36
import org.apache.commons.lang3.StringUtils;
4-
import org.apache.jackrabbit.api.security.user.User;
7+
import org.apache.sling.api.resource.ResourceResolver;
8+
import org.apache.sling.api.resource.ResourceResolverFactory;
9+
import org.osgi.service.component.annotations.Component;
10+
import org.osgi.service.component.annotations.Reference;
511

612
import graphql.schema.DataFetcher;
713
import graphql.schema.DataFetchingEnvironment;
814
import io.ecx.aem.web.services.core.record.KorisnikZapis;
15+
import io.ecx.aem.web.services.core.services.RepozitorijPotresa;
16+
import lombok.extern.slf4j.Slf4j;
17+
18+
@Slf4j
19+
@Component(service = KreiranjeKorisnikaMutacija.class, immediate = true)
20+
public class KreiranjeKorisnikaMutacija implements DataFetcher<KorisnikZapis> {
21+
22+
private static final String SERVISNI_KORISNIK = "web-services-system-user";
23+
private static final String IME = "ime";
24+
private static final String PREZIME = "prezime";
25+
private static final String EMAIL = "email";
26+
private static final String KORISNICKO_IME = "korisnickoIme";
27+
private static final String LOZINKA = "lozinka";
928

10-
public class KreiranjeKorisnikaMutacija implements DataFetcher<User> {
29+
@Reference
30+
private RepozitorijPotresa repozitorijPotresa;
31+
32+
@Reference
33+
private ResourceResolverFactory resourceResolverFactory;
1134

1235
@Override
13-
public User get(final DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
14-
final String ime = dataFetchingEnvironment.getArgument("ime");
15-
final String prezime = dataFetchingEnvironment.getArgument("prezime");
16-
final String email = dataFetchingEnvironment.getArgument("email");
36+
public KorisnikZapis get(final DataFetchingEnvironment dataFetchingEnvironment) throws Exception {
37+
final String ime = dataFetchingEnvironment.getArgument(IME);
38+
final String prezime = dataFetchingEnvironment.getArgument(PREZIME);
39+
final String email = dataFetchingEnvironment.getArgument(EMAIL);
40+
final String korIme = dataFetchingEnvironment.getArgument(KORISNICKO_IME);
41+
final String lozinka = dataFetchingEnvironment.getArgument(LOZINKA);
1742
if (StringUtils.isNoneEmpty(ime, prezime, email)) {
18-
final KorisnikZapis korisnik = KorisnikZapis.builder()
19-
.ime(ime)
20-
.prezime(prezime)
21-
.email(email)
22-
.build();
43+
final KorisnikZapis korisnik = KorisnikZapis
44+
.builder()
45+
.ime(ime)
46+
.prezime(prezime)
47+
.email(email)
48+
.korisnickoIme(korIme)
49+
.lozinka(lozinka)
50+
.build();
51+
try (final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(
52+
this.dohvatiAutentifikacijskePodatke())) {
53+
return this.repozitorijPotresa.kreiranjeKorisnika(resourceResolver, korisnik);
54+
} catch (final Exception e) {
55+
log.error("Greška prilikom dohvatanja potresa", e);
56+
}
2357
}
2458
return null;
2559
}
2660

61+
private Map<String, Object> dohvatiAutentifikacijskePodatke() {
62+
final Map<String, Object> parametri = new HashMap<>();
63+
parametri.put(ResourceResolverFactory.SUBSERVICE, SERVISNI_KORISNIK);
64+
return parametri;
65+
}
66+
2767
}

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/jobs/PeriodicniPreuzimateljPotresaJob.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -63,40 +63,38 @@ public JobResult process(final Job job) {
6363
if (odgovor.imaPotresa()) {
6464
for (final PotresModel model : odgovor.getPotresi()) {
6565
try {
66-
final ObjectMapper vrijemeMapper = new ObjectMapper().configure(
67-
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
68-
final URL urlVrijeme = new URL(String.format(OPEN_WEATHER_MAP, model.getLokacija().getGeografskaSirina(),
69-
model.getLokacija().getGeografskaDuzina()));
66+
final ObjectMapper vrijemeMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
67+
final URL urlVrijeme = new URL(String.format(OPEN_WEATHER_MAP, model.getLokacija().getGeografskaSirina(), model.getLokacija().getGeografskaDuzina()));
7068
final VrijemeOdgovor vrijemeOdgovor = vrijemeMapper.readValue(urlVrijeme, VrijemeOdgovor.class);
7169
if (vrijemeOdgovor != null && vrijemeOdgovor.imaPrognoza()) {
7270
model.setModelVremena(vrijemeOdgovor.dohvatiPrvuPrognozu());
7371
}
74-
final ObjectMapper lokacijaMapper = new ObjectMapper().configure(
75-
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
76-
final URL urlLokacija = new URL(String.format(API_POZICIJA_BASE, model.getLokacija().getGeografskaSirina(),
77-
model.getLokacija().getGeografskaDuzina()));
72+
final ObjectMapper lokacijaMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
73+
final URL urlLokacija = new URL(String.format(API_POZICIJA_BASE, model.getLokacija().getGeografskaSirina(), model.getLokacija().getGeografskaDuzina()));
7874
final PozicijaOdgovor pozicijaOdgovor = lokacijaMapper.readValue(urlLokacija, PozicijaOdgovor.class);
7975
final PozicijaModel dohvacenoMjesto = pozicijaOdgovor.pozicija.get(0);
8076
if (dohvacenoMjesto != null) {
8177
model.setModelPozicije(dohvacenoMjesto);
8278
}
8379
noviPotresi.add(model);
84-
} catch (Exception e) {
80+
} catch (final Exception e) {
8581
log.error("Error during fetching data from external services");
8682
}
87-
//provjeri dal je skidano za taj dan
8883
}
8984
this.periodicniPreuzimateljPotresa.spremiSkupPotresa(noviPotresi, resourceResolver, POCETNI_DATUM.toString());
9085
}
9186
return JobResult.OK;
9287
} catch (final RuntimeException | MalformedURLException e) {
93-
log.error("Exception in during authentification of system user", e);
88+
log.error("Greška tijekom autentifikacije sistemskog korisnika.", e);
9489
return JobResult.FAILED;
95-
} catch (JsonMappingException e) {
90+
} catch (final JsonMappingException e) {
91+
log.error("Greška prilikom mapiranja JSON-a na model", e);
9692
return JobResult.FAILED;
97-
} catch (JsonParseException e) {
93+
} catch (final JsonParseException e) {
94+
log.error("Greška prilikom parsiranja JSON-a", e);
9895
return JobResult.FAILED;
99-
} catch (IOException e) {
96+
} catch (final IOException e) {
97+
log.error("Greška prilikom I/O", e);
10098
return JobResult.FAILED;
10199
}
102100
} else {
@@ -115,11 +113,7 @@ private Map<String, Object> dohvatiAutentifikacijskePodatke() {
115113
}
116114

117115
private boolean postojiRoditeljskiCvor(final ResourceResolver resourceResolver) {
118-
return resourceResolver.getResource("/content/potres/" + POCETNI_DATUM.toString()) != null;
119-
}
120-
121-
private boolean isJaciPotres(final PotresModel potres) {
122-
return potres.getMagnituda() > 2.5;
116+
return resourceResolver.getResource("/content/potresi/" + POCETNI_DATUM.toString()) != null;
123117
}
124118

125119
}

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/models/PotresModel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class PotresModel {
3535
private static final String API_SVOJSTVO_NASLOV = "title";
3636
private static final String API_SVOJSTVO_LOKACIJA = "lokacija";
3737
private static final String API_OBJEKT_LOKACIJA = "geometry";
38+
private static final String OBJEKT_MJESTO = "pozicija";
3839

3940
@ValueMapValue
4041
@Default(values = StringUtils.EMPTY)
@@ -73,8 +74,8 @@ public class PotresModel {
7374
@ChildResource
7475
private LokacijaModel lokacija;
7576

76-
@ChildResource
77-
private PozicijaModel pozicija;
77+
@ChildResource(name = OBJEKT_MJESTO)
78+
private PozicijaModel mjesto;
7879

7980
@JsonIgnore
8081
private VrijemeModel modelVremena;

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/record/KorisnikZapis.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ public class KorisnikZapis {
1010
private String ime;
1111
private String prezime;
1212
private String email;
13+
private String lozinka;
14+
private String korisnickoIme;
1315

1416
}

Software/Adobe-Experience-Manager/web-servisi-potresi/core/src/main/java/io/ecx/aem/web/services/core/schedulers/PlanerPeriodicniPreuzimatelj.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,23 @@ private void deactivate() {
6262
private void scheduleJob() {
6363
try {
6464
if (this.dozvoljenRad) {
65-
log.info("Scheduling expression: {}", this.scheduleExpression);
65+
log.info("Ekspresija planiranja: {}", this.scheduleExpression);
6666
final ScheduleOptions options = this.scheduler.EXPR(this.scheduleExpression).name(JOB_TOPIC).canRunConcurrently(false);
6767
this.scheduler.schedule(this, options);
6868
}
6969
} catch (final RuntimeException e) {
70-
log.error("Unable to schedule a job", e);
70+
log.error("Nemogućnost postavljanja posla", e);
7171
}
7272
}
7373

7474
private void unScheduleJob() {
7575
try {
7676
if (this.scheduler != null) {
77-
log.info("Removing scheduled job: {}", JOB_TOPIC);
77+
log.info("Brisanje zakazanog posla: {}", JOB_TOPIC);
7878
this.scheduler.unschedule(JOB_TOPIC);
7979
}
8080
} catch (final RuntimeException e) {
81-
log.error("Unable to un schedule a job", e);
81+
log.error("Nemogućnost pokretanja zakazanog posla", e);
8282
}
8383
}
8484

0 commit comments

Comments
 (0)