blob: 84031ec73339d7106919b0ba05b7fad38ee39db7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.nifi.registry.service.mapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.registry.db.entity.BucketEntity;
import org.apache.nifi.registry.db.entity.BucketItemEntityType;
import org.apache.nifi.registry.db.entity.BundleEntity;
import org.apache.nifi.registry.db.entity.BundleVersionDependencyEntity;
import org.apache.nifi.registry.db.entity.BundleVersionEntity;
import org.apache.nifi.registry.db.entity.ExtensionEntity;
import org.apache.nifi.registry.db.entity.ExtensionProvidedServiceApiEntity;
import org.apache.nifi.registry.db.entity.ExtensionRestrictionEntity;
import org.apache.nifi.registry.db.entity.TagCountEntity;
import org.apache.nifi.registry.extension.bundle.BuildInfo;
import org.apache.nifi.registry.extension.bundle.Bundle;
import org.apache.nifi.registry.extension.bundle.BundleInfo;
import org.apache.nifi.registry.extension.bundle.BundleVersionDependency;
import org.apache.nifi.registry.extension.bundle.BundleVersionMetadata;
import org.apache.nifi.registry.extension.component.ExtensionMetadata;
import org.apache.nifi.registry.extension.component.TagCount;
import org.apache.nifi.registry.extension.component.manifest.Extension;
import org.apache.nifi.registry.extension.component.manifest.ProvidedServiceAPI;
import org.apache.nifi.registry.extension.component.manifest.Restriction;
import org.apache.nifi.registry.serialization.SerializationException;
import org.apache.nifi.registry.serialization.Serializer;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Date;
import java.util.stream.Collectors;
/**
* Mappings between Extension related DB entities and data model.
*/
public class ExtensionMappings {
// -- Map Bundle
public static BundleEntity map(final Bundle bundle) {
final BundleEntity entity = new BundleEntity();
entity.setId(bundle.getIdentifier());
entity.setName(bundle.getName());
entity.setDescription(bundle.getDescription());
entity.setCreated(new Date(bundle.getCreatedTimestamp()));
entity.setModified(new Date(bundle.getModifiedTimestamp()));
entity.setType(BucketItemEntityType.BUNDLE);
entity.setBucketId(bundle.getBucketIdentifier());
entity.setGroupId(bundle.getGroupId());
entity.setArtifactId(bundle.getArtifactId());
entity.setBundleType(bundle.getBundleType());
return entity;
}
public static Bundle map(final BucketEntity bucketEntity, final BundleEntity bundleEntity) {
final Bundle bundle = new Bundle();
bundle.setIdentifier(bundleEntity.getId());
bundle.setName(bundleEntity.getName());
bundle.setDescription(bundleEntity.getDescription());
bundle.setCreatedTimestamp(bundleEntity.getCreated().getTime());
bundle.setModifiedTimestamp(bundleEntity.getModified().getTime());
bundle.setBucketIdentifier(bundleEntity.getBucketId());
if (bucketEntity != null) {
bundle.setBucketName(bucketEntity.getName());
} else {
bundle.setBucketName(bundleEntity.getBucketName());
}
bundle.setGroupId(bundleEntity.getGroupId());
bundle.setArtifactId(bundleEntity.getArtifactId());
bundle.setBundleType(bundleEntity.getBundleType());
bundle.setVersionCount(bundleEntity.getVersionCount());
return bundle;
}
// -- Map BundleVersion
public static BundleVersionEntity map(final BundleVersionMetadata bundleVersionMetadata) {
final BundleVersionEntity entity = new BundleVersionEntity();
entity.setId(bundleVersionMetadata.getId());
entity.setBundleId(bundleVersionMetadata.getBundleId());
entity.setBucketId(bundleVersionMetadata.getBucketId());
entity.setVersion(bundleVersionMetadata.getVersion());
entity.setCreated(new Date(bundleVersionMetadata.getTimestamp()));
entity.setCreatedBy(bundleVersionMetadata.getAuthor());
entity.setDescription(bundleVersionMetadata.getDescription());
entity.setSha256Hex(bundleVersionMetadata.getSha256());
entity.setSha256Supplied(bundleVersionMetadata.getSha256Supplied());
entity.setContentSize(bundleVersionMetadata.getContentSize());
entity.setSystemApiVersion(bundleVersionMetadata.getSystemApiVersion());
final BuildInfo buildInfo = bundleVersionMetadata.getBuildInfo();
entity.setBuildTool(buildInfo.getBuildTool());
entity.setBuildFlags(buildInfo.getBuildFlags());
entity.setBuildBranch(buildInfo.getBuildBranch());
entity.setBuildTag(buildInfo.getBuildTag());
entity.setBuildRevision(buildInfo.getBuildRevision());
entity.setBuiltBy(buildInfo.getBuiltBy());
entity.setBuilt(new Date(buildInfo.getBuilt()));
return entity;
}
public static BundleVersionMetadata map(final BundleVersionEntity bundleVersionEntity) {
final BundleVersionMetadata bundleVersionMetadata = new BundleVersionMetadata();
bundleVersionMetadata.setId(bundleVersionEntity.getId());
bundleVersionMetadata.setBundleId(bundleVersionEntity.getBundleId());
bundleVersionMetadata.setBucketId(bundleVersionEntity.getBucketId());
bundleVersionMetadata.setVersion(bundleVersionEntity.getVersion());
bundleVersionMetadata.setTimestamp(bundleVersionEntity.getCreated().getTime());
bundleVersionMetadata.setAuthor(bundleVersionEntity.getCreatedBy());
bundleVersionMetadata.setDescription(bundleVersionEntity.getDescription());
bundleVersionMetadata.setSha256(bundleVersionEntity.getSha256Hex());
bundleVersionMetadata.setSha256Supplied(bundleVersionEntity.getSha256Supplied());
bundleVersionMetadata.setContentSize(bundleVersionEntity.getContentSize());
bundleVersionMetadata.setSystemApiVersion(bundleVersionEntity.getSystemApiVersion());
final BuildInfo buildInfo = new BuildInfo();
buildInfo.setBuildTool(bundleVersionEntity.getBuildTool());
buildInfo.setBuildFlags(bundleVersionEntity.getBuildFlags());
buildInfo.setBuildBranch(bundleVersionEntity.getBuildBranch());
buildInfo.setBuildTag(bundleVersionEntity.getBuildTag());
buildInfo.setBuildRevision(bundleVersionEntity.getBuildRevision());
buildInfo.setBuiltBy(bundleVersionEntity.getBuiltBy());
buildInfo.setBuilt(bundleVersionEntity.getBuilt().getTime());
bundleVersionMetadata.setBuildInfo(buildInfo);
return bundleVersionMetadata;
}
// -- Map BundleVersionDependency
public static BundleVersionDependencyEntity map(final BundleVersionDependency bundleVersionDependency) {
final BundleVersionDependencyEntity entity = new BundleVersionDependencyEntity();
entity.setGroupId(bundleVersionDependency.getGroupId());
entity.setArtifactId(bundleVersionDependency.getArtifactId());
entity.setVersion(bundleVersionDependency.getVersion());
return entity;
}
public static BundleVersionDependency map(final BundleVersionDependencyEntity dependencyEntity) {
final BundleVersionDependency dependency = new BundleVersionDependency();
dependency.setGroupId(dependencyEntity.getGroupId());
dependency.setArtifactId(dependencyEntity.getArtifactId());
dependency.setVersion(dependencyEntity.getVersion());
return dependency;
}
// -- Map Extension
public static ExtensionEntity map(final Extension extension, final Serializer<Extension> extensionSerializer) {
final String extensionContent;
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
extensionSerializer.serialize(extension, out);
extensionContent = new String(out.toByteArray(), StandardCharsets.UTF_8);
} catch (IOException e) {
throw new SerializationException("Unable to serialize extension", e);
}
final ExtensionEntity entity = new ExtensionEntity();
entity.setName(extension.getName());
// determine the display name which is the last part of the name after the last separator
final String fullName = entity.getName();
if (fullName != null) {
final int index = fullName.lastIndexOf('.');
if (index > 0 && (index < (fullName.length() - 1))) {
entity.setDisplayName(fullName.substring(index + 1));
}
}
// if displayName still isn't set, then set it to the full name
if (StringUtils.isBlank(entity.getDisplayName())) {
entity.setDisplayName(extension.getName());
}
entity.setExtensionType(extension.getType());
entity.setContent(extensionContent);
if (extension.getTags() != null) {
entity.setTags(extension.getTags().stream().collect(Collectors.toSet()));
}
if (extension.getProvidedServiceAPIs() != null) {
entity.setProvidedServiceApis(extension.getProvidedServiceAPIs().stream()
.map(p -> map(p))
.collect(Collectors.toSet()));
} else {
entity.setProvidedServiceApis(Collections.emptySet());
}
if (extension.getRestricted() != null) {
if (extension.getRestricted().getRestrictions() != null) {
entity.setRestrictions(extension.getRestricted().getRestrictions().stream()
.map(r -> map(r))
.collect(Collectors.toSet()));
}
} else {
entity.setRestrictions(Collections.emptySet());
}
return entity;
}
public static Extension map(final ExtensionEntity entity, final Serializer<Extension> extensionSerializer) {
final byte[] content = entity.getContent().getBytes(StandardCharsets.UTF_8);
try (final ByteArrayInputStream input = new ByteArrayInputStream(content)) {
return extensionSerializer.deserialize(input);
} catch (IOException e) {
throw new SerializationException("Unable to deserialize extension", e);
}
}
// -- Map ExtensionMetadata
public static ExtensionMetadata mapToMetadata(final ExtensionEntity entity, final Serializer<Extension> extensionSerializer) {
final Extension extension = map(entity, extensionSerializer);
final BundleInfo bundleInfo = new BundleInfo();
bundleInfo.setBucketId(entity.getBucketId());
bundleInfo.setBucketName(entity.getBucketName());
bundleInfo.setBundleId(entity.getBundleId());
bundleInfo.setGroupId(entity.getGroupId());
bundleInfo.setArtifactId(entity.getArtifactId());
bundleInfo.setVersion(entity.getVersion());
bundleInfo.setBundleType(entity.getBundleType());
bundleInfo.setSystemApiVersion(entity.getSystemApiVersion());
final ExtensionMetadata metadata = new ExtensionMetadata();
metadata.setName(extension.getName());
metadata.setDisplayName(entity.getDisplayName());
metadata.setType(extension.getType());
metadata.setDescription(extension.getDescription());
metadata.setDeprecationNotice(extension.getDeprecationNotice());
metadata.setRestricted(extension.getRestricted());
metadata.setProvidedServiceAPIs(extension.getProvidedServiceAPIs());
metadata.setTags(extension.getTags());
metadata.setBundleInfo(bundleInfo);
metadata.setHasAdditionalDetails(entity.getHasAdditionalDetails());
return metadata;
}
// -- Map ProvidedServiceAPI
public static ExtensionProvidedServiceApiEntity map(final ProvidedServiceAPI providedServiceApi) {
final ExtensionProvidedServiceApiEntity entity = new ExtensionProvidedServiceApiEntity();
entity.setClassName(providedServiceApi.getClassName());
entity.setGroupId(providedServiceApi.getGroupId());
entity.setArtifactId(providedServiceApi.getArtifactId());
entity.setVersion(providedServiceApi.getVersion());
return entity;
}
public static ProvidedServiceAPI map(final ExtensionProvidedServiceApiEntity entity) {
final ProvidedServiceAPI providedServiceApi = new ProvidedServiceAPI();
providedServiceApi.setClassName(entity.getClassName());
providedServiceApi.setGroupId(entity.getGroupId());
providedServiceApi.setArtifactId(entity.getArtifactId());
providedServiceApi.setVersion(entity.getVersion());
return providedServiceApi;
}
// -- Map Restriction
public static ExtensionRestrictionEntity map(final Restriction restriction) {
final ExtensionRestrictionEntity restrictionEntity = new ExtensionRestrictionEntity();
restrictionEntity.setRequiredPermission(restriction.getRequiredPermission());
restrictionEntity.setExplanation(restriction.getExplanation());
return restrictionEntity;
}
public static Restriction map(final ExtensionRestrictionEntity restrictionEntity) {
final Restriction restriction = new Restriction();
restriction.setRequiredPermission(restrictionEntity.getRequiredPermission());
restriction.setExplanation(restrictionEntity.getExplanation());
return restriction;
}
// -- Map TagCount
public static TagCount map(final TagCountEntity entity) {
final TagCount tagCount = new TagCount();
tagCount.setTag(entity.getTag());
tagCount.setCount(entity.getCount());
return tagCount;
}
}