Also, fixed issue with data type sorting when there are mutliple layers in dependency hierarchy
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-4129
Change-Id: I4d535420953237efd610a3fb1dd6b9d40883e514
dataTypes.forEach(dataType -> {
int highestDependencyIndex = -1;
- for (final String dependencyName : getDependencyTypes(dataType)) {
+ for (final String dependencyName : getDependencyTypes(dataType, dataTypes)) {
final DataTypeDefinition dependency = dataTypeDefinitionsMap.get(dependencyName);
final int indexOfDependency = sortedDataTypeDefinitions.lastIndexOf(dependency);
highestDependencyIndex = indexOfDependency > highestDependencyIndex ? indexOfDependency : highestDependencyIndex;
return sortedDataTypeDefinitions;
}
- private Collection<String> getDependencyTypes(final DataTypeDefinition dataType) {
+ private Collection<String> getDependencyTypes(final DataTypeDefinition dataType, final List<DataTypeDefinition> dataTypes) {
final Set<String> dependencies = new HashSet<>();
if (dataType.getDerivedFromName() != null) {
dependencies.add(dataType.getDerivedFromName());
if (dataType.getProperties() != null) {
dataType.getProperties().stream().forEach(property -> dependencies.add(property.getType()));
}
+ dataTypes.stream().filter(dependencyCandidate -> dependencies.contains(dependencyCandidate.getName()))
+ .forEach(dependencyDataType -> dependencies.addAll(getDependencyTypes(dependencyDataType, dataTypes)));
return dependencies;
}
if (responseWrapper.isEmpty()) {
String url = request.getMethod() + " " + request.getRequestURI();
log.debug("Start handle request of {} - modifier id is {}", url, userId);
+ resourceBusinessLogic.getApplicationDataTypeCache().refreshDataTypesCacheIfStale();
final Map<String, DataTypeDefinition> dataTypes = resourceBusinessLogic.getComponentsUtils()
.getAllDataTypes(resourceBusinessLogic.getApplicationDataTypeCache(), modelName);
String dataTypeJson = gson.toJson(dataTypes);
@Override
public void run() {
try {
- final long startTime = System.currentTimeMillis();
- log.trace("Starting refresh data types cache job");
- if (hasDataTypesChanged()) {
- log.info("Detected changes in the data types, updating the data type cache.");
- refreshDataTypesCache();
- }
- log.trace("Finished refresh data types cache job. Finished in {}ms", (System.currentTimeMillis() - startTime));
+ refreshDataTypesCacheIfStale();
} catch (final Exception e) {
var errorMsg = "Failed to run refresh data types cache job";
log.error(EcompLoggerErrorCode.UNKNOWN_ERROR, ApplicationDataTypeCache.class.getName(), errorMsg, e);
readWriteLock.readLock().unlock();
}
}
+
+ public void refreshDataTypesCacheIfStale() {
+ final long startTime = System.currentTimeMillis();
+ log.trace("Starting refresh data types cache");
+ if (hasDataTypesChanged()) {
+ log.info("Detected changes in the data types, updating the data type cache.");
+ refreshDataTypesCache();
+ }
+ log.trace("Finished refresh data types cache. Finished in {}ms", (System.currentTimeMillis() - startTime));
+ }
private void refreshDataTypesCache() {
final Map<String, Map<String, DataTypeDefinition>> dataTypesDefinitionMap = findAllDataTypesEager();
import {ComponentInstanceFactory, CommonUtils} from "app/utils";
import {SharingService} from "app/services-ng2";
import {ComponentMetadata} from "../../models/component-metadata";
+import { DataTypesService } from "app/services";
export interface IComponentService {
'Restangular',
'sdcConfig',
'Sdc.Services.SharingService',
+ 'Sdc.Services.DataTypesService',
'$q',
'$base64'
];
constructor(protected restangular:restangular.IElement,
protected sdcConfig:IAppConfigurtaion,
protected sharingService:SharingService,
+ protected dataTypeService:DataTypesService,
protected $q:ng.IQService,
protected $base64:any
) {
let headerObj = this.getHeaderMd5(component);
this.restangular.customPOST(JSON.stringify(component), 'importService', {}, headerObj).then((response: Component) => {
let component: Component = this.createComponentObject(response);
+ this.dataTypeService.loadDataTypesCache(component.model);
deferred.resolve(component);
}, (err) => {
deferred.reject(err);
import {IComponentService, ComponentService} from "./component-service";
import {PropertyModel, IAppConfigurtaion, Resource, Component} from "../../models";
import {SharingService} from "app/services-ng2";
+import { DataTypesService } from "app/services";
export interface IResourceService extends IComponentService {
updateResourceGroupProperties(uniqueId:string, groupId:string, properties:Array<PropertyModel>):ng.IPromise<Array<PropertyModel>>
'Restangular',
'sdcConfig',
'Sdc.Services.SharingService',
+ 'Sdc.Services.DataTypesService',
'$q',
'$base64'
];
constructor(protected restangular:restangular.IElement,
protected sdcConfig:IAppConfigurtaion,
protected sharingService:SharingService,
+ protected dataTypeService:DataTypesService,
protected $q:ng.IQService,
protected $base64:any
) {
- super(restangular, sdcConfig, sharingService, $q, $base64);
+ super(restangular, sdcConfig, sharingService, dataTypeService, $q, $base64);
this.restangular = restangular.one("resources");
}
import {IComponentService, ComponentService} from "./component-service";
import {Distribution, DistributionComponent, Service, PropertyModel, Component, IAppConfigurtaion} from "app/models";
import {SharingService} from "app/services-ng2";
+import { DataTypesService } from "app/services";
export interface IServiceService extends IComponentService {
getDistributionsList(uuid:string):ng.IPromise<Array<Distribution>>;
'Restangular',
'sdcConfig',
'Sdc.Services.SharingService',
+ 'Sdc.Services.DataTypesService',
'$q',
'$base64'
];
constructor(protected restangular:restangular.IElement,
protected sdcConfig:IAppConfigurtaion,
protected sharingService:SharingService,
+ protected dataTypeService:DataTypesService,
protected $q:ng.IQService,
protected $base64:any) {
- super(restangular, sdcConfig, sharingService, $q, $base64);
+ super(restangular, sdcConfig, sharingService, dataTypeService, $q, $base64);
this.restangular = restangular.one("services");
}