use of com.thinkbiganalytics.metadata.api.extension.UserFieldDescriptor in project kylo by Teradata.
the class FeedModelTransform method feedToDomain.
/**
* Transforms the specified Feed Manager feed to a Metadata feed.
*
* @param feedMetadata the Feed Manager feed
* @return the Metadata feed
*/
@Nonnull
public Feed feedToDomain(@Nonnull final FeedMetadata feedMetadata) {
// resolve the id
Feed.ID domainId = feedMetadata.getId() != null ? feedProvider.resolveId(feedMetadata.getId()) : null;
Feed domain = domainId != null ? feedProvider.findById(domainId) : null;
FeedCategory restCategoryModel = feedMetadata.getCategory();
Category category = null;
if (restCategoryModel != null && (domain == null || domain.getCategory() == null)) {
category = categoryProvider.findById(categoryProvider.resolveId(restCategoryModel.getId()));
}
if (domain == null) {
// ensure the Category exists
if (category == null) {
final String categoryId = (restCategoryModel != null) ? restCategoryModel.getId() : "(null)";
throw new RuntimeException("Category cannot be found while creating feed " + feedMetadata.getSystemFeedName() + ". Category Id is " + categoryId);
}
domain = feedProvider.ensureFeed(category.getId(), feedMetadata.getSystemFeedName());
domainId = domain.getId();
Feed.State state = Feed.State.valueOf(feedMetadata.getState());
domain.setState(state);
// reassign the domain data back to the ui model....
feedMetadata.setFeedId(domainId.toString());
feedMetadata.setState(state.name());
}
domain.setDisplayName(feedMetadata.getFeedName());
if (feedMetadata.getDescription() == null) {
feedMetadata.setDescription("");
}
domain.setDescription(feedMetadata.getDescription());
domain.setAllowIndexing(feedMetadata.isAllowIndexing());
if (StringUtils.isNotBlank(feedMetadata.getHistoryReindexingStatus())) {
domain.updateHistoryReindexingStatus(new HistoryReindexingStatus(com.thinkbiganalytics.metadata.api.feed.reindex.HistoryReindexingState.valueOf(feedMetadata.getHistoryReindexingStatus())));
}
feedMetadata.setId(domain.getId().toString());
if (StringUtils.isNotBlank(feedMetadata.getState())) {
Feed.State state = Feed.State.valueOf(feedMetadata.getState().toUpperCase());
domain.setState(state);
}
domain.setNifiProcessGroupId(feedMetadata.getNifiProcessGroupId());
// clear out the state as that
RegisteredTemplate template = feedMetadata.getRegisteredTemplate();
prepareForSave(feedMetadata);
feedMetadata.setRegisteredTemplate(template);
if (domain.getTemplate() == null) {
FeedManagerTemplate.ID templateId = templateProvider.resolveId(feedMetadata.getTemplateId());
FeedManagerTemplate domainTemplate = templateProvider.findById(templateId);
domain.setTemplate(domainTemplate);
}
// Set user-defined properties
if (feedMetadata.getUserProperties() != null) {
final Set<UserFieldDescriptor> userFields = getUserFields(category);
domain.setUserProperties(UserPropertyTransform.toMetadataProperties(feedMetadata.getUserProperties()), userFields);
}
// Set the hadoop security groups
final List<HadoopSecurityGroup> securityGroups = new ArrayList<>();
if (feedMetadata.getSecurityGroups() != null) {
for (com.thinkbiganalytics.feedmgr.rest.model.HadoopSecurityGroup securityGroup : feedMetadata.getSecurityGroups()) {
JcrHadoopSecurityGroup hadoopSecurityGroup = (JcrHadoopSecurityGroup) hadoopSecurityGroupProvider.ensureSecurityGroup(securityGroup.getName());
hadoopSecurityGroup.setGroupId(securityGroup.getId());
hadoopSecurityGroup.setDescription(securityGroup.getDescription());
securityGroups.add(hadoopSecurityGroup);
}
}
domain.setSecurityGroups(securityGroups);
domain.setVersionName(domain.getVersionName());
if (feedMetadata.getTags() != null) {
domain.setTags(feedMetadata.getTags().stream().map(Tag::getName).collect(Collectors.toSet()));
}
// Create a new feed metadata stripped of any excess data that does
// not need to be serialized and stored in the feed domain entity.
FeedMetadata stripped = stripMetadata(feedMetadata);
domain.setJson(ObjectMapperSerializer.serialize(stripped));
return domain;
}
use of com.thinkbiganalytics.metadata.api.extension.UserFieldDescriptor in project kylo by Teradata.
the class UserPropertyTransform method toUserProperties.
/**
* Transforms the specified Metadata user-defined properties to Feed Manager user-defined properties.
*
* @param properties map of property names to values
* @param userFields the user-defined field descriptors
* @return the set of Feed Manager user-defined properties
*/
@Nonnull
@SafeVarargs
public static Set<UserProperty> toUserProperties(@Nonnull final Map<String, String> properties, @Nonnull final Set<UserFieldDescriptor>... userFields) {
// Map field names and order
int order = 0;
int size = Arrays.stream(userFields).collect(Collectors.summingInt(Set::size));
final Map<String, UserFieldDescriptor> userFieldMap = Maps.newHashMapWithExpectedSize(size);
final Map<String, Integer> userFieldOrder = Maps.newHashMapWithExpectedSize(size);
for (final Set<UserFieldDescriptor> set : userFields) {
final Iterator<UserFieldDescriptor> sorted = set.stream().sorted((f1, f2) -> Integer.compare(f1.getOrder(), f2.getOrder())).iterator();
while (sorted.hasNext()) {
final UserFieldDescriptor field = sorted.next();
if (!userFieldMap.containsKey(field.getSystemName())) {
userFieldMap.put(field.getSystemName(), field);
userFieldOrder.put(field.getSystemName(), order++);
}
}
}
// Convert from Metadata to Feed Manager format
final Stream<UserProperty> newProperties = userFieldMap.values().stream().filter(field -> !properties.containsKey(field.getSystemName())).map(field -> {
final UserProperty property = new UserProperty();
property.setDescription(field.getDescription());
property.setDisplayName(field.getDisplayName());
property.setLocked(true);
property.setOrder(userFieldOrder.get(field.getSystemName()));
property.setRequired(field.isRequired());
property.setSystemName(field.getSystemName());
return property;
});
final Stream<UserProperty> existingProperties = properties.entrySet().stream().map(entry -> {
// Create the Feed Manager property
final UserProperty property = new UserProperty();
property.setLocked(false);
property.setSystemName(entry.getKey());
property.setValue(entry.getValue());
// Set additional Metadata attributes
final UserFieldDescriptor field = userFieldMap.get(entry.getKey());
if (field != null) {
property.setDescription(field.getDescription());
property.setDisplayName(field.getDisplayName());
property.setLocked(true);
property.setOrder(userFieldOrder.get(entry.getKey()));
property.setRequired(field.isRequired());
}
// Return the Feed Manager property
return property;
});
return Stream.concat(newProperties, existingProperties).collect(Collectors.toCollection(LinkedHashSet::new));
}
use of com.thinkbiganalytics.metadata.api.extension.UserFieldDescriptor in project kylo by Teradata.
the class UserPropertyTransformTest method toUserProperties.
/**
* Verify transforming property map to user properties.
*/
@Test
public void toUserProperties() {
// Mock user field descriptors
final UserFieldDescriptor field1 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field1.getDescription()).thenReturn("Global field 1");
Mockito.when(field1.getDisplayName()).thenReturn("Test1");
Mockito.when(field1.getOrder()).thenReturn(0);
Mockito.when(field1.getSystemName()).thenReturn("field1");
final UserFieldDescriptor field2 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field2.getDescription()).thenReturn("Global field 2");
Mockito.when(field2.getDisplayName()).thenReturn("Test2");
Mockito.when(field2.getOrder()).thenReturn(1);
Mockito.when(field2.isRequired()).thenReturn(true);
Mockito.when(field2.getSystemName()).thenReturn("field2");
final UserFieldDescriptor field3 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field3.getDescription()).thenReturn("Category field 1");
Mockito.when(field3.getDisplayName()).thenReturn("Overridden");
Mockito.when(field3.getOrder()).thenReturn(0);
Mockito.when(field3.isRequired()).thenReturn(true);
Mockito.when(field3.getSystemName()).thenReturn("field1");
final UserFieldDescriptor field4 = Mockito.mock(UserFieldDescriptor.class);
Mockito.when(field4.getDescription()).thenReturn("Category field 2");
Mockito.when(field4.getDisplayName()).thenReturn("Test4");
Mockito.when(field4.getOrder()).thenReturn(0);
Mockito.when(field4.getSystemName()).thenReturn("field4");
// Verify user properties
final Map<String, String> properties = ImmutableMap.of("field1", "one", "field2", "two", "field4", "three", "customField", "four");
final Set<UserProperty> userProperties = UserPropertyTransform.toUserProperties(properties, ImmutableSet.of(field2, field1), ImmutableSet.of(field3, field4));
Assert.assertEquals(4, userProperties.size());
final UserProperty[] array = userProperties.toArray(new UserProperty[4]);
Assert.assertEquals("Global field 1", array[0].getDescription());
Assert.assertEquals("Test1", array[0].getDisplayName());
Assert.assertTrue(array[0].isLocked());
Assert.assertEquals(0, array[0].getOrder().intValue());
Assert.assertFalse(array[0].isRequired());
Assert.assertEquals("field1", array[0].getSystemName());
Assert.assertEquals("one", array[0].getValue());
Assert.assertEquals("Global field 2", array[1].getDescription());
Assert.assertEquals("Test2", array[1].getDisplayName());
Assert.assertTrue(array[1].isLocked());
Assert.assertEquals(1, array[1].getOrder().intValue());
Assert.assertTrue(array[1].isRequired());
Assert.assertEquals("field2", array[1].getSystemName());
Assert.assertEquals("two", array[1].getValue());
Assert.assertEquals("Category field 2", array[2].getDescription());
Assert.assertEquals("Test4", array[2].getDisplayName());
Assert.assertTrue(array[2].isLocked());
Assert.assertEquals(2, array[2].getOrder().intValue());
Assert.assertFalse(array[2].isRequired());
Assert.assertEquals("field4", array[2].getSystemName());
Assert.assertEquals("three", array[2].getValue());
Assert.assertNull(array[3].getDescription());
Assert.assertNull(array[3].getDisplayName());
Assert.assertFalse(array[3].isLocked());
Assert.assertNull(array[3].getOrder());
Assert.assertNull(array[3].isRequired());
Assert.assertEquals("customField", array[3].getSystemName());
Assert.assertEquals("four", array[3].getValue());
}
Aggregations