package com.flagtick.core.models.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.OSGiService;
import org.apache.sling.models.annotations.injectorspecific.Self;
import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
@Model(adaptables = SlingHttpServletRequest.class, adapters = VerificationLetterModel.class,
defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class VerificationLetterModelImpl implements VerificationLetterModel {
@Self
private SlingHttpServletRequest request;
@Self
private WcmModeModel wcmMode;
@OSGiService
private transient FlagtickIntegrationService flagtickIntegrationService;
@ValueMapValue
private String propertyName;
private verificationReponse/verificationData [Object for parse from APIs]
private boolean isAnyCheck;
@PostConstructor
protected void init() {
final String loginUserID = CookieUtils.getCookieValue(request, Constants.LOGIN_USER_ID);
if (this.wcmMode.isDisabled()) {
if (Objects.nonNull(flagtickIntegrationService)) {
final String token = CookieUtils.getCookieValue(request, Constants.TOKEN);
Map<String, String> params = new HashMap<>();
params.put(Constants.LOGIN_USER_ID, loginUserID);
verificationData = flagtickIntegrationService.getVerificationLetterEntity(
params, token);
} else {
verificationData = new VerificationData();
}
}
}
}
Note: You can get more information with @self from link.
For the WcmModeModel.java. We will define as below:
package com.flagtick.core.models.entities;
import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
import com.day.cq.wcm.api.WCMMode;
import javax.inject.Inject;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.Self;
@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = OPTIONAL)
public class WcmModeModel {
private final WCMMode wcmmode;
@Inject
public WcmModeModel(@Self SlingHttpServletRequest request) {
this.wcmmode = WCMMode.fromRequest(request);
}
public boolean isEditMode() {
return this.wcmmode.equals(WCMMode.EDIT);
}
public boolean isDisabled() {
return this.wcmmode.equals(WCMMode.DISABLED);
}
}
For the VerificationReponse or VerificationData. This is POJO class and then you can generate from Java.
package com.flagtick.core.models.entities;
public class VerificationLetterEntity {
private String name;
private String email;
public VerificationLetterEntity(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
For FlagtickIntegrationService service implementation, you can refer as below:
VerificationData getVerificationLetterEntity(Map<String, String> paramMap, String userToken);
For FlagtickIntegrationServiceImpl, you can refer as below:
@Override
public VerificationData getVerificationLetterEntity(Map<String, String> paramMap, String userToken) {
URI uri;
try {
uri = buildParameterizedUri(verificationInformationEndpoint, paramMap);
} catch (URISyntaxException e) {
LOGGER.error(UNABLE_TO_CREATE_URI, e);
return null;
}
VerificationData verificationData = new VerificationData();
HttpGet request = createAuthenticatedGetRequest(apiKey, uri);
request.addHeader(HttpHeaders.AUTHORIZATION, BEARER + userToken);
try (CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(request)) {
if (response.getStatusLine().getStatusCode() == HTTP_BAD_REQUEST) {
LOGGER.error(BAD_REQUEST_ERROR_MSG);
return null;
}
if (response.getStatusLine().getStatusCode() == HTTP_BAD_GATEWAY) {
LOGGER.error(BAD_GATEWAY_ERROR_MSG);
return null;
}
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseData = EntityUtils.toString(entity, StandardCharsets.UTF_8);
ObjectMapper objectMapper = new ObjectMapper();
verificationData = objectMapper.readValue(responseData,
VerificationData.class);
}
} catch (ClientProtocolException e) {
LOGGER.error(CLIENT_PROTOCOL_EXCEPTION, e);
} catch (IOException e) {
LOGGER.error(ERROR_WHILE_PARSING_THE_RESPONSE, e);
}
return verificationData;
}
To be continued!