/*
* Copyright 2014-2016 CyberVision, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaaproject.kaa.server.admin.services;
import static org.kaaproject.kaa.server.admin.services.util.Utils.getCurrentUser;
import static org.kaaproject.kaa.server.admin.shared.util.Utils.isEmpty;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericRecord;
import org.apache.commons.lang3.StringUtils;
import org.kaaproject.avro.ui.converter.FormAvroConverter;
import org.kaaproject.avro.ui.shared.RecordField;
import org.kaaproject.kaa.common.avro.GenericAvroConverter;
import org.kaaproject.kaa.common.dto.EndpointGroupDto;
import org.kaaproject.kaa.common.dto.EndpointGroupStateDto;
import org.kaaproject.kaa.common.dto.EndpointProfileBodyDto;
import org.kaaproject.kaa.common.dto.EndpointProfileDto;
import org.kaaproject.kaa.common.dto.EndpointProfileSchemaDto;
import org.kaaproject.kaa.common.dto.EndpointUserDto;
import org.kaaproject.kaa.common.dto.KaaAuthorityDto;
import org.kaaproject.kaa.common.dto.ServerProfileSchemaDto;
import org.kaaproject.kaa.common.dto.TopicDto;
import org.kaaproject.kaa.common.dto.ctl.CTLSchemaDto;
import org.kaaproject.kaa.server.admin.services.util.Utils;
import org.kaaproject.kaa.server.admin.shared.endpoint.EndpointProfileViewDto;
import org.kaaproject.kaa.server.admin.shared.schema.ConverterType;
import org.kaaproject.kaa.server.admin.shared.schema.CtlSchemaFormDto;
import org.kaaproject.kaa.server.admin.shared.schema.CtlSchemaReferenceDto;
import org.kaaproject.kaa.server.admin.shared.schema.ProfileSchemaViewDto;
import org.kaaproject.kaa.server.admin.shared.schema.SchemaInfoDto;
import org.kaaproject.kaa.server.admin.shared.schema.ServerProfileSchemaViewDto;
import org.kaaproject.kaa.server.admin.shared.services.ConfigurationService;
import org.kaaproject.kaa.server.admin.shared.services.CtlService;
import org.kaaproject.kaa.server.admin.shared.services.KaaAdminServiceException;
import org.kaaproject.kaa.server.admin.shared.services.ProfileService;
import org.kaaproject.kaa.server.admin.shared.services.ServiceErrorCode;
import org.kaaproject.kaa.server.operations.service.filter.DefaultFilterEvaluator;
import org.kaaproject.kaa.server.operations.service.filter.el.GenericRecordPropertyAccessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Service("profileService")
public class ProfileServiceImpl extends AbstractAdminService implements ProfileService {
/**
* The Constant LOG.
*/
private static final Logger LOG = LoggerFactory.getLogger(ProfileServiceImpl.class);
@Autowired
CtlService ctlService;
@Autowired
ConfigurationService configurationService;
@Override
public List<EndpointProfileSchemaDto> getProfileSchemasByApplicationToken(
String applicationToken)
throws KaaAdminServiceException {
return getProfileSchemasByApplicationId(checkApplicationToken(applicationToken));
}
@Override
public List<EndpointProfileSchemaDto> getProfileSchemasByApplicationId(String applicationId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
checkApplicationId(applicationId);
return controlService.getProfileSchemasByApplicationId(applicationId);
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileSchemaDto getProfileSchema(String profileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileSchemaDto profileSchema = controlService.getProfileSchema(profileSchemaId);
Utils.checkNotNull(profileSchema);
checkApplicationId(profileSchema.getApplicationId());
return profileSchema;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileSchemaDto saveProfileSchema(EndpointProfileSchemaDto profileSchema)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
if (isEmpty(profileSchema.getId())) {
profileSchema.setCreatedUsername(getCurrentUser().getUsername());
checkApplicationId(profileSchema.getApplicationId());
} else {
EndpointProfileSchemaDto storedProfileSchema = controlService.getProfileSchema(
profileSchema.getId());
Utils.checkNotNull(storedProfileSchema);
checkApplicationId(storedProfileSchema.getApplicationId());
}
return controlService.editProfileSchema(profileSchema);
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public List<ServerProfileSchemaDto> getServerProfileSchemasByApplicationToken(
String applicationToken) throws KaaAdminServiceException {
return getServerProfileSchemasByApplicationId(checkApplicationToken(applicationToken));
}
@Override
public List<ServerProfileSchemaDto> getServerProfileSchemasByApplicationId(
String applicationId) throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
checkApplicationId(applicationId);
return controlService.getServerProfileSchemasByApplicationId(applicationId);
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ServerProfileSchemaDto getServerProfileSchema(String serverProfileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
ServerProfileSchemaDto profileSchema = controlService.getServerProfileSchema(
serverProfileSchemaId);
Utils.checkNotNull(profileSchema);
checkApplicationId(profileSchema.getApplicationId());
return profileSchema;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ServerProfileSchemaDto saveServerProfileSchema(ServerProfileSchemaDto serverProfileSchema)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
if (isEmpty(serverProfileSchema.getId())) {
serverProfileSchema.setCreatedUsername(getCurrentUser().getUsername());
checkApplicationId(serverProfileSchema.getApplicationId());
} else {
ServerProfileSchemaDto storedServerProfileSchema = controlService.getServerProfileSchema(
serverProfileSchema.getId());
Utils.checkNotNull(storedServerProfileSchema);
checkApplicationId(storedServerProfileSchema.getApplicationId());
}
return controlService.saveServerProfileSchema(serverProfileSchema);
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileDto updateServerProfile(String endpointKeyHash,
int serverProfileVersion,
String serverProfileBody)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileDto profileDto = controlService.getEndpointProfileByKeyHash(endpointKeyHash);
Utils.checkNotNull(profileDto);
checkApplicationId(profileDto.getApplicationId());
ServerProfileSchemaDto serverProfileSchema =
controlService.getServerProfileSchemaByApplicationIdAndVersion(
profileDto.getApplicationId(), serverProfileVersion);
Utils.checkNotNull(serverProfileSchema);
RecordField record;
try {
record = createRecordFieldFromCtlSchemaAndBody(serverProfileSchema.getCtlSchemaId(),
serverProfileBody);
} catch (Exception ex) {
LOG.error("Provided server profile body is not valid: ", ex);
throw new KaaAdminServiceException("Provided server profile body is not valid: "
+ ex.getMessage(), ServiceErrorCode.BAD_REQUEST_PARAMS);
}
if (!record.isValid()) {
throw new KaaAdminServiceException(
"Provided server profile body is not valid!", ServiceErrorCode.BAD_REQUEST_PARAMS);
}
profileDto = controlService.updateServerProfile(
endpointKeyHash, serverProfileVersion, serverProfileBody);
return profileDto;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileDto updateServerProfile(String endpointKeyHash,
int serverProfileVersion,
RecordField serverProfileRecord)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
GenericRecord record = FormAvroConverter.createGenericRecordFromRecordField(
serverProfileRecord);
GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(
record.getSchema());
String serverProfileBody = converter.encodeToJson(record);
return updateServerProfile(endpointKeyHash, serverProfileVersion, serverProfileBody);
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileDto getEndpointProfileByKeyHash(String endpointProfileKeyHash)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileDto profileDto = controlService.getEndpointProfileByKeyHash(
endpointProfileKeyHash);
if (profileDto == null) {
throw new KaaAdminServiceException(
"Requested item was not found!", ServiceErrorCode.ITEM_NOT_FOUND);
}
checkApplicationId(profileDto.getApplicationId());
return profileDto;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileBodyDto getEndpointProfileBodyByKeyHash(String endpointProfileKeyHash)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileBodyDto profileBodyDto = controlService.getEndpointProfileBodyByKeyHash(
endpointProfileKeyHash);
Utils.checkNotNull(profileBodyDto);
checkApplicationId(profileBodyDto.getAppId());
return profileBodyDto;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public List<EndpointProfileDto> getEndpointProfilesByUserExternalId(
String endpointUserExternalId) throws KaaAdminServiceException {
this.checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
if (StringUtils.isEmpty(endpointUserExternalId)) {
String message = "The endpoint user external ID provided is empty!";
throw new IllegalArgumentException(message);
}
return this.controlService.getEndpointProfilesByUserExternalIdAndTenantId(
endpointUserExternalId, getCurrentUser().getTenantId());
} catch (Exception cause) {
throw Utils.handleException(cause);
}
}
@Override
public void removeEndpointProfileByKeyHash(String endpointKeyHash)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileDto endpointProfile = controlService.getEndpointProfileByKeyHash(
endpointKeyHash);
Utils.checkNotNull(endpointProfile);
checkApplicationId(endpointProfile.getApplicationId());
controlService.removeEndpointProfile(endpointProfile);
} catch (Exception cause) {
throw Utils.handleException(cause);
}
}
@Override
public ProfileSchemaViewDto saveProfileSchemaView(ProfileSchemaViewDto profileSchemaView)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileSchemaDto profileSchema = profileSchemaView.getSchema();
String applicationId = profileSchema.getApplicationId();
checkApplicationId(applicationId);
String ctlSchemaId = profileSchema.getCtlSchemaId();
if (isEmpty(ctlSchemaId)) {
if (profileSchemaView.useExistingCtlSchema()) {
CtlSchemaReferenceDto metaInfo = profileSchemaView.getExistingMetaInfo();
CTLSchemaDto schema = ctlService.getCtlSchemaByFqnVersionTenantIdAndApplicationId(
metaInfo.getMetaInfo().getFqn(),
metaInfo.getVersion(),
metaInfo.getMetaInfo().getTenantId(),
metaInfo.getMetaInfo().getApplicationId());
profileSchema.setCtlSchemaId(schema.getId());
} else {
CtlSchemaFormDto ctlSchemaForm = ctlService.saveCtlSchemaForm(
profileSchemaView.getCtlSchemaForm(), ConverterType.FORM_AVRO_CONVERTER);
profileSchema.setCtlSchemaId(ctlSchemaForm.getId());
}
}
EndpointProfileSchemaDto savedProfileSchema = saveProfileSchema(profileSchema);
return getProfileSchemaView(savedProfileSchema.getId());
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ProfileSchemaViewDto createProfileSchemaFormCtlSchema(CtlSchemaFormDto ctlSchemaForm)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
checkApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId());
EndpointProfileSchemaDto profileSchema = new EndpointProfileSchemaDto();
profileSchema.setApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId());
profileSchema.setName(ctlSchemaForm.getSchema().getDisplayNameFieldValue());
profileSchema.setDescription(ctlSchemaForm.getSchema().getDescriptionFieldValue());
CtlSchemaFormDto savedCtlSchemaForm = ctlService.saveCtlSchemaForm(
ctlSchemaForm, ConverterType.FORM_AVRO_CONVERTER);
profileSchema.setCtlSchemaId(savedCtlSchemaForm.getId());
EndpointProfileSchemaDto savedProfileSchema = saveProfileSchema(profileSchema);
return getProfileSchemaView(savedProfileSchema.getId());
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ProfileSchemaViewDto getProfileSchemaView(String profileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileSchemaDto profileSchema = getProfileSchema(profileSchemaId);
CTLSchemaDto ctlSchemaDto = controlService.getCtlSchemaById(profileSchema.getCtlSchemaId());
return new ProfileSchemaViewDto(
profileSchema, toCtlSchemaForm(ctlSchemaDto, ConverterType.FORM_AVRO_CONVERTER));
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public List<SchemaInfoDto> getServerProfileSchemaInfosByApplicationId(String applicationId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
checkApplicationId(applicationId);
List<ServerProfileSchemaDto> serverProfileSchemas =
controlService.getServerProfileSchemasByApplicationId(applicationId);
List<SchemaInfoDto> schemaInfos = new ArrayList<>(serverProfileSchemas.size());
for (ServerProfileSchemaDto serverProfileSchema : serverProfileSchemas) {
SchemaInfoDto schemaInfo = new SchemaInfoDto(serverProfileSchema);
RecordField schemaForm = createRecordFieldFromCtlSchemaAndBody(
serverProfileSchema.getCtlSchemaId(), null);
schemaInfo.setSchemaName(serverProfileSchema.getName());
schemaInfo.setSchemaForm(schemaForm);
schemaInfos.add(schemaInfo);
}
return schemaInfos;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public List<SchemaInfoDto> getServerProfileSchemaInfosByEndpointKey(String endpointKeyHash)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileDto endpointProfile = getEndpointProfileByKeyHash(endpointKeyHash);
List<ServerProfileSchemaDto> serverProfileSchemas =
controlService.getServerProfileSchemasByApplicationId(
endpointProfile.getApplicationId());
List<SchemaInfoDto> schemaInfos = new ArrayList<>(serverProfileSchemas.size());
for (ServerProfileSchemaDto serverProfileSchema : serverProfileSchemas) {
SchemaInfoDto schemaInfo = new SchemaInfoDto(serverProfileSchema);
String body = null;
if (schemaInfo.getVersion() == endpointProfile.getServerProfileVersion()) {
body = endpointProfile.getServerProfileBody();
}
RecordField schemaForm = createRecordFieldFromCtlSchemaAndBody(
serverProfileSchema.getCtlSchemaId(), body);
schemaInfo.setSchemaName(serverProfileSchema.getName());
schemaInfo.setSchemaForm(schemaForm);
schemaInfos.add(schemaInfo);
}
Collections.sort(schemaInfos, Collections.reverseOrder());
return schemaInfos;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ServerProfileSchemaViewDto getServerProfileSchemaView(String serverProfileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
ServerProfileSchemaDto serverProfileSchema = getServerProfileSchema(serverProfileSchemaId);
CTLSchemaDto ctlSchemaDto = controlService.getCtlSchemaById(
serverProfileSchema.getCtlSchemaId());
return new ServerProfileSchemaViewDto(
serverProfileSchema, toCtlSchemaForm(ctlSchemaDto, ConverterType.FORM_AVRO_CONVERTER));
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ServerProfileSchemaViewDto saveServerProfileSchemaView(
ServerProfileSchemaViewDto serverProfileSchemaView) throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
ServerProfileSchemaDto serverProfileSchema = serverProfileSchemaView.getSchema();
String applicationId = serverProfileSchema.getApplicationId();
checkApplicationId(applicationId);
String ctlSchemaId = serverProfileSchema.getCtlSchemaId();
if (isEmpty(ctlSchemaId)) {
if (serverProfileSchemaView.useExistingCtlSchema()) {
CtlSchemaReferenceDto metaInfo = serverProfileSchemaView.getExistingMetaInfo();
CTLSchemaDto schema = ctlService.getCtlSchemaByFqnVersionTenantIdAndApplicationId(
metaInfo.getMetaInfo().getFqn(),
metaInfo.getVersion(),
metaInfo.getMetaInfo().getTenantId(),
metaInfo.getMetaInfo().getApplicationId());
serverProfileSchema.setCtlSchemaId(schema.getId());
} else {
CtlSchemaFormDto ctlSchemaForm = ctlService.saveCtlSchemaForm(
serverProfileSchemaView.getCtlSchemaForm(), ConverterType.FORM_AVRO_CONVERTER);
serverProfileSchema.setCtlSchemaId(ctlSchemaForm.getId());
}
}
ServerProfileSchemaDto savedServerProfileSchema = saveServerProfileSchema(
serverProfileSchema);
return getServerProfileSchemaView(savedServerProfileSchema.getId());
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public ServerProfileSchemaViewDto createServerProfileSchemaFormCtlSchema(
CtlSchemaFormDto ctlSchemaForm) throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
checkApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId());
ServerProfileSchemaDto serverProfileSchema = new ServerProfileSchemaDto();
serverProfileSchema.setApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId());
serverProfileSchema.setName(ctlSchemaForm.getSchema().getDisplayNameFieldValue());
serverProfileSchema.setDescription(ctlSchemaForm.getSchema().getDescriptionFieldValue());
CtlSchemaFormDto savedCtlSchemaForm = ctlService.saveCtlSchemaForm(
ctlSchemaForm, ConverterType.FORM_AVRO_CONVERTER);
serverProfileSchema.setCtlSchemaId(savedCtlSchemaForm.getId());
ServerProfileSchemaDto savedServerProfileSchema = saveServerProfileSchema(
serverProfileSchema);
return getServerProfileSchemaView(savedServerProfileSchema.getId());
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public SchemaInfoDto getEndpointProfileSchemaInfo(String endpointProfileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileSchemaDto endpointProfileSchema = controlService.getProfileSchema(
endpointProfileSchemaId);
SchemaInfoDto schemaInfo = new SchemaInfoDto(endpointProfileSchema);
RecordField schemaForm = createRecordFieldFromCtlSchemaAndBody(
endpointProfileSchema.getCtlSchemaId(), null);
schemaInfo.setSchemaName(endpointProfileSchema.getName());
schemaInfo.setSchemaForm(schemaForm);
return schemaInfo;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public SchemaInfoDto getServerProfileSchemaInfo(String serverProfileSchemaId)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
ServerProfileSchemaDto serverProfileSchema = controlService.getServerProfileSchema(
serverProfileSchemaId);
SchemaInfoDto schemaInfo = new SchemaInfoDto(serverProfileSchema);
RecordField schemaForm = createRecordFieldFromCtlSchemaAndBody(
serverProfileSchema.getCtlSchemaId(), null);
schemaInfo.setSchemaName(serverProfileSchema.getName());
schemaInfo.setSchemaForm(schemaForm);
return schemaInfo;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public boolean testProfileFilter(RecordField endpointProfile,
RecordField serverProfile,
String filterBody) throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
GenericRecord endpointProfileRecord = null;
GenericRecord serverProfileRecord = null;
try {
if (endpointProfile != null) {
endpointProfileRecord = FormAvroConverter.createGenericRecordFromRecordField(
endpointProfile);
}
if (serverProfile != null) {
serverProfileRecord = FormAvroConverter.createGenericRecordFromRecordField(
serverProfile);
}
} catch (Exception ex) {
throw Utils.handleException(ex);
}
try {
final Expression expression = new SpelExpressionParser().parseExpression(filterBody);
StandardEvaluationContext evaluationContext;
if (endpointProfileRecord != null) {
evaluationContext = new StandardEvaluationContext(endpointProfileRecord);
evaluationContext.setVariable(
DefaultFilterEvaluator.CLIENT_PROFILE_VARIABLE_NAME, endpointProfileRecord);
} else {
evaluationContext = new StandardEvaluationContext();
}
evaluationContext.addPropertyAccessor(new GenericRecordPropertyAccessor());
evaluationContext.setVariable(DefaultFilterEvaluator.EP_KEYHASH_VARIABLE_NAME, "test");
if (serverProfileRecord != null) {
evaluationContext.setVariable(
DefaultFilterEvaluator.SERVER_PROFILE_VARIABLE_NAME, serverProfileRecord);
}
return expression.getValue(evaluationContext, Boolean.class);
} catch (Exception ex) {
throw new KaaAdminServiceException(
"Invalid profile filter: " + ex.getMessage(), ex, ServiceErrorCode.BAD_REQUEST_PARAMS);
}
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
@Override
public EndpointProfileViewDto getEndpointProfileViewByKeyHash(String endpointProfileKeyHash)
throws KaaAdminServiceException {
checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER);
try {
EndpointProfileDto endpointProfile = controlService.getEndpointProfileByKeyHash(
endpointProfileKeyHash);
Utils.checkNotNull(endpointProfile);
checkApplicationId(endpointProfile.getApplicationId());
EndpointProfileViewDto endpointProfileView = new EndpointProfileViewDto();
endpointProfileView.setEndpointKeyHash(endpointProfile.getEndpointKeyHash());
endpointProfileView.setSdkProfileDto(controlService.findSdkProfileByToken(
endpointProfile.getSdkToken()));
if (endpointProfile.getEndpointUserId() != null) {
EndpointUserDto endpointUser = controlService.getEndpointUser(
endpointProfile.getEndpointUserId());
if (endpointUser != null) {
endpointProfileView.setUserId(endpointUser.getId());
endpointProfileView.setUserExternalId(endpointUser.getExternalId());
}
}
EndpointProfileSchemaDto clientProfileSchema =
controlService.getProfileSchemaByApplicationIdAndVersion(
endpointProfile.getApplicationId(),
endpointProfile.getClientProfileVersion());
ServerProfileSchemaDto serverProfileSchema =
controlService.getServerProfileSchemaByApplicationIdAndVersion(
endpointProfile.getApplicationId(),
endpointProfile.getServerProfileVersion());
endpointProfileView.setProfileSchemaName(clientProfileSchema.getName());
endpointProfileView.setProfileSchemaVersion(clientProfileSchema.toVersionDto());
endpointProfileView.setServerProfileSchemaName(serverProfileSchema.getName());
endpointProfileView.setServerProfileSchemaVersion(serverProfileSchema.toVersionDto());
endpointProfileView.setProfileRecord(createRecordFieldFromCtlSchemaAndBody(
clientProfileSchema.getCtlSchemaId(),
endpointProfile.getClientProfileBody()));
endpointProfileView.setServerProfileRecord(createRecordFieldFromCtlSchemaAndBody(
serverProfileSchema.getCtlSchemaId(),
endpointProfile.getServerProfileBody()));
String endpointConfig = configurationService.findEndpointConfigurationByEndpointKeyHash(
endpointProfileKeyHash);
Integer version = Integer.parseInt(controlService.findConfSchemaByAppIdAndVersion(
endpointProfile.getApplicationId(), endpointProfile.getConfigurationVersion()).getId());
endpointProfileView.setSchemaId(version);
Schema schema = controlService.findEndpointConfigurationSchemaByEndpointKeyHash(
endpointProfileKeyHash);
GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(schema);
GenericRecord record = converter.decodeJson(endpointConfig);
RecordField recordField = FormAvroConverter.createRecordFieldFromGenericRecord(record);
endpointProfileView.setEndpointConfig(recordField);
List<TopicDto> topics = new ArrayList<>();
if (endpointProfile.getSubscriptions() != null) {
for (String topicId : endpointProfile.getSubscriptions()) {
topics.add(controlService.getTopic(topicId));
}
}
endpointProfileView.setTopics(topics);
Set<EndpointGroupDto> endpointGroupsSet = new HashSet<>();
if (endpointProfile.getGroupState() != null) {
for (EndpointGroupStateDto endpointGroupState : endpointProfile.getGroupState()) {
endpointGroupsSet.add(controlService.getEndpointGroup(
endpointGroupState.getEndpointGroupId()));
}
}
List<EndpointGroupDto> endpointGroups = new ArrayList<>(endpointGroupsSet);
endpointProfileView.setEndpointGroups(endpointGroups);
return endpointProfileView;
} catch (Exception ex) {
throw Utils.handleException(ex);
}
}
}