diff --git a/frontend/sw360-portlet/src/main/resources/META-INF/resources/js/utils/includes/clipboard.js b/frontend/sw360-portlet/src/main/resources/META-INF/resources/js/utils/includes/clipboard.js
index 5f58192a06..ab3d1cb629 100644
--- a/frontend/sw360-portlet/src/main/resources/META-INF/resources/js/utils/includes/clipboard.js
+++ b/frontend/sw360-portlet/src/main/resources/META-INF/resources/js/utils/includes/clipboard.js
@@ -10,36 +10,23 @@
*/
define('utils/includes/clipboard', ['jquery'], function($) {
-const toast = '
';
-const Failedtoast = '
';
+const toast = '
';
+const Failedtoast = '
';
- function copyToClipboard(text, textSelector, alterDefaultDisplay) {
+ function copyToClipboard(text, textSelector) {
navigator.clipboard.writeText(text)
.then(() => {
$(textSelector).append(toast);
- if(alterDefaultDisplay) {
- removeWidthClassAndAddInlineDisplay(textSelector);
- }
- $('.toast').toast({delay: 2000});
$('.toast').toast('show');
})
- .catch((error) => {
+ .catch(() => {
$(textSelector).append(Failedtoast);
- if(removeWidthClassAndAddInlineDisplay) {
- removeWidthClassAndAddInlineDisplay(textSelector);
- }
- $('.toast').toast({delay: 2000});
$('.toast').toast('show');
})
setTimeout(function() {
$(textSelector+" .toast").remove();
- }, 2000);
- }
-
- function removeWidthClassAndAddInlineDisplay(textSelector) {
- $(textSelector).find("div.toast:first").removeClass("w-25");
- $(textSelector).find("div.toast-header:first").addClass("d-inline");
+ }, 2200);
}
return {
diff --git a/frontend/sw360-portlet/src/main/resources/content/Language.properties b/frontend/sw360-portlet/src/main/resources/content/Language.properties
index 9dc23a8895..3b0b4192f1 100644
--- a/frontend/sw360-portlet/src/main/resources/content/Language.properties
+++ b/frontend/sw360-portlet/src/main/resources/content/Language.properties
@@ -2,6 +2,7 @@ accepted=Accepted
accept.request=Accept Request
access=Access
access.denied=Access Denied
+access.denied.2=ACCESS DENIED
access.token=Access Token
access.token.validity=Access Token Validity
accountant=Accountant
@@ -23,6 +24,7 @@ add.license.info.to.release=Add License Info to Release
add.user=Add User
added.project.links=Added Project Links
added.release.links=Added Release Links
+added.successfully=added successfully
additional.data=Additional Data
additional.data.name=additional data name
additional.data.value=additional data value
@@ -221,6 +223,8 @@ clearing.team.will.confirm.on.the.agreed.clearing.date=Clearing team will confir
cli.attachment.evaluation.completed=CLI attachment evaluation completed.
cli.attachment.not.found.in.the.release=CLI attachment not found in the release
cli.count=CLI count
+click.on.upload.and.import.button=Click on upload & import button
+click.the.url.to.open.project.details.page=Click the URL to open project details page
click.to.add.oidc.client=Click to add OIDC client
click.to.add.releases=Click to add Releases
click.to.add.row.to=Click to add row to
@@ -230,6 +234,7 @@ click.to.add.row.to.external.ids=Click to add row to External Ids
click.to.add.row.to.external.urls=Click to add row to External URLs
click.to.add.secondary.department.and.roles=Click to add Secondary Department and Roles
click.to.edit=Click to edit
+click.to.link.a.release=Click to link a Release
click.to.set.department=Click to set Department
click.to.expand.or.collapse=Click to expand or collapse
click.to.set.licenses=Click to set Licenses
@@ -264,7 +269,10 @@ component.owner=Component Owner
component.visibility=Component visibility
components=Components
components2=component(s)
+components.created=Components created
components.only=Components only
+components.reused=Components reused
+components.were.not.imported.because.multiple.duplicate.components.are.found.with.exact.same.name=Components were not imported, because multiple duplicate components are found with exact same name
components.with.releases=Components with releases
components.with.the.same.identifier.name=Components with the same identifier [name]
component.type=Component Type
@@ -313,6 +321,8 @@ create.component=Create Component
created.by=Created by
created.by.email=Created by (Email)
created.on=Created on
+created.project.with.id=Created project with id
+created.project.with.name=Created project with name
created.successfully=created successfully
create=Create
create.license=Create License
@@ -339,11 +349,22 @@ current.release=Current Release
current.release.relationship=Current Release relationship
current.selection.will.be.overwritten=Current selection will be overwritten!
current.value=Current Value
+currently.only.cyclonedx.sbom.export.is.supported=Currently only CycloneDX SBOM export is supported
customer.project=Customer Project
cve.id=CVE ID
cve.references=CVE references
cve.search=CVE Search
cvs=CVS
+cyclonedx=CycloneDX
+CycloneDxComponentType=Specifies the type of component. For software components, classify as application if no more specific appropriate classification is available or cannot be determined.
APPLICATION: A software application.
CONTAINER: A packaging and/or runtime format, not specific to any particular technology.
DEVICE: A hardware device such as a processor, or chip-set.
FILE: A computer file.
FIRMWARE: A special type of software that provides low-level control over a devices hardware.
FRAMEWORK: A software framework. If the library also has key features of a framework, then it should be classified as a framework.
LIBRARY: A software library. All third-party and open source reusable components will likely be a library.
OPERATING_SYSTEM: A software operating system without regard to deployment model.
+CycloneDxComponentType-APPLICATION=A software application.
+CycloneDxComponentType-CONTAINER=A packaging and/or runtime format, not specific to any particular technology,
which isolates software inside the container from software outside of a container through virtualization technology.
+CycloneDxComponentType-DEVICE=A hardware device such as a processor, or chip-set.
A hardware device containing firmware should include a component for the physical hardware itself,
and another component of type 'firmware' or 'operating-system' (whichever is relevant),
describing information about the software running on the device.
+CycloneDxComponentType-FILE=A computer file.
+CycloneDxComponentType-FIRMWARE=A special type of software that provides low-level control over a devices hardware.
+CycloneDxComponentType-FRAMEWORK=A software framework. If the library also has key features of a framework, then it should be classified as a framework.
+CycloneDxComponentType-LIBRARY=A software library. All third-party and open source reusable components will likely be a library.
If the library also has key features of a framework, then it should be classified as a framework.
If not, or is unknown, then specifying library is recommended.
+CycloneDxComponentType-OPERATING_SYSTEM=A software operating system without regard to deployment model
(i.e. installed on physical hardware, virtual machine, image, etc).
darcs=Darcs
database.administration=Database Administration
database.sanitation=Database Sanitation
@@ -365,6 +386,7 @@ delete.component=Delete Component
deleted.project=Deleted Project
deleted.project.relationship=Deleted Project Relationship
deleted.linked.project.enable.svm=Deleted Linked Project Enable SVM
+deleted.successfully=Deleted successfully
delete.item=Delete Item
delete.license=Delete License
delete.license.type=Delete License Type
@@ -432,6 +454,7 @@ do.you.really.want.to.delete.the.license.type.x=Do you really want to delete the
do.you.really.want.to.delete.the.license.type.y=Do you really want to delete the license type
?
do.you.really.want.to.delete.the.obligation.x=Do you really want to delete the obligation
do.you.really.want.to.delete.the.vendor.x=Do you really want to delete the vendor
+do.you.really.want.to.export.sbom.for.the.project.x=Do you really want to export SBOM for the project ?
do.you.really.want.to.import.all.spdx.all.licenses=Do you really want to import all SPDX all licenses?
do.you.really.want.to.remove.the.link.to.project.x=Do you really want to remove the link to project ?
do.you.really.want.to.remove.the.link.to.release.x=Do you really want to remove the link to release ?
@@ -439,6 +462,7 @@ do.you.really.want.to.remove.the.link.to.release.x.1=Do you really want to remov
do.you.really.want.to.remove.this.item=Do you really want to remove this item?
drop.a.file.here=Drop a File Here
duplicate=Duplicate
+duplicate.sbom=DUPLICATE SBOM
dynamically.linked=Dynamically linked
ecc.admin=ECC Admin
ecc.assessment.date=ECC Assessment Date
@@ -510,6 +534,7 @@ enter.folder.id=Enter folder id
enter.fullname=Enter Fullname
enter.group=Enter Group
enter.home.url=Enter Home Url
+enter.homepage.url=Enter Homepage Url
enter.mail.address=Enter mail address
enter.mailing.list.url=Enter Mailing List Url
enter.material.index.number=Enter material index number
@@ -524,6 +549,7 @@ enter.owner.billing.group=Enter Owner Billing Group
enter.owners.accounting.unit=Enter owner's accounting unit
enter.owners.billing.group=Enter Owner Billing Group
enter.project=Enter project
+enter.purl=Enter PURL
enter.release=Enter release
enter.release.date=Enter Release Date
enter.request.id=Enter request ID
@@ -547,6 +573,7 @@ enter.user.lastname=Enter user last name
enter.user.primary.department=Enter user primary department
enter.user.primary.roles=Enter user primary roles
enter.user.pwd=Enter user password
+enter.vcs.url=Enter VCS Url
enter.vendor=Enter vendor
enter.vendor.fullname=Enter vendor fullname
enter.vendor.short.name=Enter vendor short name
@@ -606,14 +633,20 @@ failed.to.add.licenses=Failed to add licenses
failed.to.create.clearing.request=Failed to create clearing request!
failed.to.delete.the.obligation=Failed to delete the obligation!
failed.to.edit.secondary.departments.and.roles.for.user=Failed to edit Secondary Departments and Roles for user
+failed.to.export.sbom.for.project=Failed to export SBOM for project
failed.to.fetch.clearing.request.from.db=Failed to fetch clearing request from database!
+failed.to.import.sbom=Failed to import SBOM
failed.to.load=Failed to load!
+failed.to.load.sbom.import.status.for.attachment=Failed to load SBOM import status for attachment
failed.to.load.scanner.findings.with.error=Failed to load Scanner findings with error
failed.to.load.source.file.with.error=Failed to load source file with error
failed.to.reopen.clearing.request=Failed to reopen clearing request!
+failed.to.sync.releases=Failed to sync Releases
+failed.to.sync.releases.with.error=Failed to sync Releases with error
failed.to.update.clearing.request=Failed to update clearing request!
FAILURE=FAILURE
field.name=Field Name
+file=File
file.name=File name
filename=Filename
fill.the.form.to.create.clearing.request.for.project.x=Fill the form to create clearing request for project
@@ -664,6 +697,7 @@ homepage=Homepage
homepage.url=Homepage URL
how.it.works=How it works
ibm.rational.synergy=IBM Rational Synergy
+include.releases.from.sub.projects.in.exported.sbom=Include releases from sub-projects in exported SBOM
i.could.not.cleanup.the.attachments=I could not cleanup the attachments!
i.could.not.delete.the.client=I could not delete the client
i.could.not.delete.the.component=I could not delete the component
@@ -693,9 +727,12 @@ import=Import
import.export=Import & Export
import.failed=Import failed.
import.projects=Import Projects
-import.spdx.bom=Import SBOM
+import.sbom=Import SBOM
import.spdx.information=Import SPDX Information
import.spdx.licenses=Import SPDX licenses
+import.will.fail.if.there.is.already.an.existing.project.with.same.name.and.version.as.component.present.in.sbom=Import will fail if there is already an existing project with same name and version as component present in SBOM
+import.will.fail.if.current.project.name.and.version.is.not.same.as.component.present.in.sbom=Import will fail if current project name and version is not same as component present in SBOM
+imported.sbom.into.project=imported SBOM into project
incorrect=Incorrect
info=Info
infoempty=Showing 0 to 0 of 0 entries
@@ -704,6 +741,7 @@ in.case.you.need.the.clearing.at.an.earlier.date.then.the.preferred.date.that.is
in.order.to.go.ahead.please.sign.in.or.create.a.new.account=In order to go ahead, please sign in or create a new account!
in.progress=In Progress
in.queue=In Queue
+in.sbom.file=in SBOM file
inaccessible.component=Restricted component
inaccessible.count=Other restricted items
inaccessible.release=Restricted release
@@ -740,6 +778,7 @@ lead.architect=Lead Architect
learn.more.about.clearing.request.priority=Learn more about clearing request priority.
learn.more.about.clearing.request.status=Learn more about clearing request status.
learn.more.about.component.types=Learn more about component types.
+learn.more.about.cyconedx.component.types=Learn more about CycloneDx component types.
learn.more.about.ecc.statuses=Learn more about ECC statuses.
learn.more.about.mainline.states=Learn more about mainline states.
learn.more.about.project.types=Learn more about project types.
@@ -775,15 +814,17 @@ license.x.is.not.unique.license.is.not.excluded='License "' + licenseId + '" is
license.x.not.found.license.is.not.excluded='License "' + licenseId + '" not found. License is not excluded.'
lifecycle=Lifecycle
linked.projects=linked projects
-linked.releases=linked releases
+linked.release=Linked Release
+linked.releases=Linked Releases
linked.releases.and.projects=Linked Releases And Projects
link.project=Link Project
link.projects=Link Projects
-link.releases=Link releases
+link.releases=Link Releases
link.release.to.project=Link Release to Project
links=Links
link.to.project=Link to Project
link.to.projects=Link to Projects
+list.of.components.without.version.information=List of Components without version information
list.view=List View
loading=Loading...
loading.data.for.step.1.please.wait=Loading data for step 1, please wait...
@@ -876,6 +917,7 @@ no.license.found.with.your.search=No license found with your search.
no.license.risks.analysis.available=No license risks analysis available.
no.linked.obligations=No linked obligations.
no.linked.releases.or.projects=No linked releases or projects
+no.linked.release=No Linked Release
no.linked.releases.yet=No linked releases yet.
no.matching.records.found=No matching records found
no.moderation.requests.found=No moderation requests found.
@@ -898,6 +940,8 @@ none.of.the.directly.linked.releases.are.cleared=None of the directly linked rel
not.applicable=Not Applicable
not.available=not available
not.checked=Not Checked
+not.imported=not imported
+not.linked.to.any.release=not linked to any release
in.analysis=In Analysis
not.decided.so.far=Not decided so far
not.loaded.yet=Not loaded yet
@@ -930,6 +974,7 @@ only.administrators.can.edit.a.closed.project=Only administrators can edit a clo
only.admin.users.can.delete.obligations=Only admin users can delete obliations!
only.approved=Only Approved
only.current.or.future.date.is.considered.as.valid=Only current or future date is considered as valid
+only.user.with.role.x.and.above.have.permission.to.import.or.export.the.sbom=Only user with role: \"+ data.message +\" and above have permission to import or export the SBOM
open=Open
open.clearing.requests=Open Clearing Requests
open.components=Open Components
@@ -938,6 +983,7 @@ operating.systems=Operating Systems
operation=Operation
optional=Optional
or=Or
+or2=or
org1=org1
org2=org2
org3=org3
@@ -1005,12 +1051,16 @@ please.enter.the.title=Please enter the title!
please.enter.the.user.name=Please enter the user name!
please.enter.user.key=Please enter user key
please.enter.valid.access.token.validity=Please enter valid access token validity
+please.enter.valid.name=Please enter valid name!
+please.enter.valid.purl=Please enter valid PURL!
please.enter.valid.refresh.token.validity=Please enter valid refresh token validity
+please.enter.valid.version=Please enter valid version!
please.enter.your.external.id=Please enter your external id!
please.enter.your.first.email=Please enter your first email!
please.enter.your.first.name=Please enter your first name!
please.enter.your.last.name=Please enter your last name!
please.fill.a.z.A.Z.0.9.-...+.only=Please fill [a-z][A-Z][0-9][-.+ ] only!
+please.import.this.sbom.from.project.details.page=Please import this SBOM from project details page
please.migrate.all.releases.and.keep.the.existing.ones=Please migrate all releases and keep the existing ones!
please.perform.a.new.search=Please perform a new search.
please.select.a.file=Please select a file!
@@ -1018,8 +1068,10 @@ please.select.a.group=Please select a group!
please.select.a.role=Please select a role!
please.select.the.project.type=Please select the project type!
please.select.the.project.visibility=Please select the project visibility!
+please.select.the.sbom.format=Please select the SBOM format
please.select.the.component.visibility=Please select the component visibility!
please.select.the.server=Please select the server!
+please.upload.the=Please upload the
prease.enter.a.valid.url=Please enter a valid URL!
possible.main.license.ids=Possible Main License Ids:
postpone.request=Postpone Request
@@ -1047,6 +1099,7 @@ project.import.bdp=Project Import (BDP)
project.mainline.state=Project Mainline State
project.manager=Project manager
project.name=Project name
+project.name.and.version.x.present.in.sbom.metadata.tag.is.not.same.as.the.current.sw360.project=Project name (version): \"+ data.projectName +\" present in SBOM metadata tag is not same as the current SW360 project
project.name.first.letters=Project Name (first letters)
project.namelinks=Project NameLinks
project.obligation.status=Project Obligation Status
@@ -1078,6 +1131,8 @@ proposed.changes=Proposed Changes
proposed.user.attributes=Proposed User Attributes
ptc.integrity=PTC Integrity
publish.date=Publish Date
+purl=Purl
+purl.package.url=PURL (Package URL)
quality.manager=Quality manager
quick.filter=Quick Filter
rate=Rate
@@ -1088,6 +1143,7 @@ read.and.write.access=Read and Write Access
recent.components=Recent Components
recent.releases=Recent Releases
re.check.connection=Re-Check connection
+redirecting.to.project.details.page=redirecting to project details page
references=References
reference.doc=Reference Doc
refresh=Refresh
@@ -1097,6 +1153,8 @@ related=Related
relation=Relation
release=Release
releases=Releases
+releases.created=Releases created
+releases.reused=Releases reused
release.aggregate.data=Release Aggregate Data
release.bulk.edit=Release Bulk Edit
release.clearing.state=Release clearing state
@@ -1106,12 +1164,16 @@ release.date.of.this.release=Release Date of this Release
release.filter=Release Filter
release.mainline.state=Release Mainline State
release.name=Release name
+release.name.with.version=Release Name (version)
release.namelinks=Release NameLinks
release.namesource.attachments.count=Release NameSource Attachments Count
release.overview=Release Overview
release.path=Release Path
release.relation=Release relation
release.relationship=Release relationship
+releases.synced.successfully.please.reload.the.page.to.see.the.changes=Releases synced successfully, Please reload the page to see the changes
+releases.are.already.in.sync.no.action.needed=Releases are already in sync! No action needed
+releases.were.not.imported.because.multiple.duplicate.releases.are.found.with.exact.same.name.and.version=Releases were not imported, because multiple duplicate releases are found with exact same name & version
ReleaseRelationship="Unkown: If you just do not know
Contained: If you just do not know whether it is dynamically linked
Refered: Referencing a stand alone used other part
Dynamically Linked: Software dynamically linked - as the name says
Statically linked: Software statically linked - as the name says
Side by side: Not decided so far
Standalone: Software is given as standalone delivery, ie. not technically connected
Internal Use: Used for creating or building or ? the product or projects but not delivered
Optional: Is not mandatory part of the installation
To be replaced: Is there but should be moved out
Code Snippet: From references release, a fragment is used.";
ReleaseRelationship-CONTAINED=If you just do not know whether it is dynamically linked.
ReleaseRelationship-DYNAMICALLY_LINKED=Software dynamically linked - as the name says.
@@ -1183,6 +1245,15 @@ save.configuration=Save configuration
saved.attachment.usages=Saved attachment usages.
save.obligations=Save Obligations
save.usages=Save Usages
+sbom=SBOM
+sbom.document=SBOM document
+sbom.exported.successfully=SBOM exported successfully
+sbom.failed.sanity.check=SBOM FAILED SANITY CHECK
+sbom.format=SBOM format
+sbom.import.failed=SBOM Import Failed
+sbom.import.status=SBOM Import Status
+sbom.import.statistics.for=SBOM Import Statistics for
+sbom.imported.successfully=SBOM imported successfully
scanned=Scanned
scan.available=Scan available
scan.the.sources=Scan the sources
@@ -1269,6 +1340,7 @@ source.file.information.not.found.in.cli=Source file information not found in CL
source.file.information.not.found.in.isr=Source file information not found in ISR
source.release=Source release:
source.vendor=Source vendor
+spdx=SPDX
spdx.attachments=SPDX Attachments
special.risk.open.source.software=Special risk Open Source Software
special.risks.3rd.party.software=Special risks 3rd party software
@@ -1303,11 +1375,13 @@ sw360.admin=SW360 Admin
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect=SW360 is an open source software project that provides both a web application and a repository to collect,
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect.organize.and.make.available.information.about.software.components.it.establishes.a.central.hub.for.software.components.in.an.organization=SW360 is an open source software project that provides both a web application and a repository to collect, organize and make available information about software components. It establishes a central hub for software components in an organization.
sw360.user=SW360 User
+sync=Sync
system.test.begin=System test begin
system.test.begin.date.yyyy.mm.dd=System test begin date YYYY-MM-DD
system.test.end=System test end
system.test.end.date.yyyy.mm.dd=System test end date YYYY-MM-DD
tag=Tag
+tag2=tag
target.component=Target component
target.release=Target release:
target.vendor=Target vendor:
@@ -1342,6 +1416,7 @@ the.user.x.will.be.added.to.the.list.of.moderators="The user " +
the.verification.of.vulnerabilities.will.be=The verification of vulnerabilities will be changed to .
this.component.x.contains=This component contains:
this.component.x.contains.y.attachments=This component contains attachments.
+this.currently.only.supports.spdx.rdf.xml.files.with.a.unique.described.top.level.node=This currently only supports SPDX RDF/XML files with a unique described top level node
this.error.can.lead.to.inconsistencies.in.the.database.please.inform.the.administrator.that.the.following.vendors.could.not.be.merged=This error can lead to inconsistencies in the database. Please inform the administrator that the following vendors could not be merged:
this.error.can.lead.to.inconsistencies.in.the.database.please.inform.the.administrator.with.the.following.information=This error can lead to inconsistencies in the database. Please inform the administrator with the following information:
this.function.is.meant.to.be.followed.by.a.new.license.import=This function is meant to be followed by a new license import.
@@ -1353,12 +1428,16 @@ this.project.contains=This project contains
this.project.x.contains=This project contains:
this.release.x.contains=This release contains:
this.release.x.contains.1=This release contains
+time.taken.for.export=Time taken for export
+time.taken.for.import=Time taken for import
title=Title
to=To
to.be.replaced=To be replaced
to.view.the.files.corresponding.to.each.licenses.go.to.clearing.details.tab.of.respective.release=To view the files corresponding to each licenses, go to "Clearing Details" tab of respective Release.
today=Today
+total.components=Total Components
total.number.of.files=Total number of files
+total.releases=Total Releases
enable.svm=Enable SVM
obligation=Obligation
obligation.details=Obligation Details
@@ -1397,6 +1476,7 @@ update.vendor=Update Vendor
update.whitelist=Update Whitelist
updating.the.moderation.request.failed=Updating the moderation request failed.
upload=Upload
+upload.and.import=Upload & Import
upload.attachment=Upload Attachment
upload.component.attachments=Upload Component Attachments
upload.component.csv=Upload Component CSV
@@ -1406,8 +1486,10 @@ uploaded.on=Uploaded On
upload.license.archive=Upload License Archive
upload.licenses=Upload Licenses
upload.release.links=Upload Release Links
+upload.successful.importing.of.sbom.is.in.progress=Upload successful, Importing of SBOM is in progress
upload.the.sources.to.fossology=Upload the sources to FOSSology
upload.users=Upload Users
+uploading.sbom.file=Uploading SBOM file
url=URL
usage.overview=Usage overview
usage.right.available=Usage Right Available
@@ -1428,6 +1510,8 @@ users.already.in.couchdb=Users already in Couch DB
users.not.in.couchdb=Users not in Couch DB
use.selection.of.this.subproject=Use selection of this subproject
valid.for.projects=Valid for Projects
+vcs=VCS
+vcs.version.control.system=VCS (Version Control System)
vender=Vender
vendor=Vendor
vendor.advisories=Vendor advisories
@@ -1442,12 +1526,14 @@ VerificationState-INCORRECT=It was decided that the verification should be rejec
VerificationState-NOT_CHECKED=No one has yet looked at this and verified it.
version=Version
very.large=Very Large
+via.purl=via PURL
view.clearing.request=View Clearing Request
view.clearing.request.failure.message=We are not able to find the clearing request [ID: ] in db for the project
Try again later.
view.by.releases=View by Releases
view.change.logs=View Change Logs
view.file.list=View file list
view.obligations=View Obligations
+view.sbom.import.result=View SBOM import result
view.scanner.findings.license=View scanner findings (License)
visibility=Visibility
Visibility=Private: Only visible by creator (and admin which applies to all visibility levels)
Me and Moderators: Visible by creator and moderators
Group and Moderators: All users of the same group and the moderators
Everyone: Every user who is logged into the system
@@ -1475,12 +1561,14 @@ whitesource.organization.api.key=Whitesource organization API key
whitesource.user.key=Whitesource user key
with.attachments=With Attachments
with.cli.attachments=With CLI Attachments
+with.file.error=with fileError
without.attachments=Without Attachments
without.source.attachments=Without Source Attachments
wiki=Wiki
wiki.url=Wiki URL
will.be.fulfilled.before.release=Will be fulfilled before release
will.be.set.automatically=Will be set automatically
+will.not.be.created.if.it.does.not.contain=will not be created if it does not contain
write.access=Write Access
wsimport=wsimport
x.rows.selected=%d rows selected
@@ -1491,6 +1579,7 @@ you.are.removed.from.the.list.of.moderators.for.the.previous.moderation.request=
you.are.signed.in.please.go.ahead.using.sw360=You are signed in, please go ahead using SW360!
you.are.the.last.moderator.for.this.request.you.are.not.allowed.to.unsubscribe=You are the last moderator for this request - you are not allowed to unsubscribe.
you.do.not.have.any.open.moderation.requests=You do not have any open moderation requests.
+you.do.not.have.permission.to.import.or.export.the.sbom=You do not have permission to import or export the SBOM
you.do.not.own.any.components=You do not own any components.
you.do.not.own.any.projects=You do not own any projects.
you.have.accepted.the.previous.moderation.request=You have accepted the previous moderation request.
@@ -1729,3 +1818,12 @@ cve.number.must.be.positive.number = Cve Number Must Be Positive Number
## Refer to http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/ and add your datatables language
datatables.lang=https://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/English.json
+
+## CycloneDX Component Type
+application=Application
+container=Container
+device=Device
+firmware=Firmware
+framework=Framework
+library=Library
+operating.system=Operating System
diff --git a/frontend/sw360-portlet/src/main/resources/content/Language_ja.properties b/frontend/sw360-portlet/src/main/resources/content/Language_ja.properties
index fc14637ca3..fd3a45be8d 100644
--- a/frontend/sw360-portlet/src/main/resources/content/Language_ja.properties
+++ b/frontend/sw360-portlet/src/main/resources/content/Language_ja.properties
@@ -2,6 +2,7 @@ accepted=承認
accept.request=アクセスリクエスト
access=アクセス
access.denied=アクセス拒否
+access.denied.2=ACCESS DENIED
access.token=アクセストークン
access.token.validity=アクセストークンの有効期間
accountant=会計士
@@ -22,6 +23,7 @@ add.data.to.this.release=このリリースにデータを追加
add.license.info.to.release=ライセンス情報をリリースに追加
added.project.links=プロジェクトのリンク追加
added.release.links=リリースのリンク追加
+added.successfully=added successfully
additional.data=追加データ
additional.data.name=追加データ名
additional.data.value=付加データ値
@@ -221,6 +223,8 @@ clearing.team.will.confirm.on.the.agreed.clearing.date=クリアリングチー
cli.attachment.evaluation.completed=CLI attachment evaluation completed.
cli.attachment.not.found.in.the.release=CLI attachment not found in the release
cli.count=CLI count
+click.on.upload.and.import.button=Click on upload & import button
+click.the.url.to.open.project.details.page=Click the URL to open project details page
click.to.add.oidc.client=Click to add OIDC client
click.to.add.releases=クリックしてリリースを追加
click.to.add.row.to=クリックして行を追加
@@ -230,6 +234,7 @@ click.to.add.row.to.external.ids=クリックして外部ID追加
click.to.add.row.to.external.urls=クリックして外部URLの行を追加
click.to.add.secondary.department.and.roles=クリックして第二所属部門とロールを追加
click.to.edit=クリックして編集
+click.to.link.a.release=Click to link a Release
click.to.set.department=クリックして部門を設定
click.to.expand.or.collapse=Click to expand or collapse
click.to.set.licenses=クリックしてライセンスを設定
@@ -264,7 +269,10 @@ component.owner=コンポーネントオーナー
component.visibility=コンポーネントの可視性
components=コンポーネント
components2=コンポーネント
+components.created=Components created
components.only=コンポーネントのみ
+components.reused=Components reused
+components.were.not.imported.because.multiple.duplicate.components.are.found.with.exact.same.name=Components were not imported, because multiple duplicate components are found with exact same name
components.with.releases=リリースされたコンポーネント
components.with.the.same.identifier.name=同じ識別子[名前]を持つコンポーネント
component.type=コンポーネントタイプ
@@ -313,6 +321,8 @@ create.component=コンポーネントの作成
created.by=作成者
created.by.email=Created by (Email)
created.on=作成日
+created.project.with.id=Created project with id
+created.project.with.name=Created project with name
created.successfully=作成成功
create=作成
create.license=ライセンスの作成
@@ -339,11 +349,22 @@ current.release=現在のリリース
current.release.relationship=現在のリリース関係
current.selection.will.be.overwritten=現在の選択範囲が上書きされます
current.value=現在の値
+currently.only.cyclonedx.sbom.export.is.supported=Currently only CycloneDX SBOM export is supported
customer.project=顧客プロジェクト
cve.id=CVE ID
cve.references=CVE リファレンス
cve.search=CVE検索
cvs=cvs
+cyclonedx=CycloneDX
+CycloneDxComponentType=Specifies the type of component. For software components, classify as application if no more specific appropriate classification is available or cannot be determined.
APPLICATION: A software application.
CONTAINER: A packaging and/or runtime format, not specific to any particular technology.
DEVICE: A hardware device such as a processor, or chip-set.
FILE: A computer file.
FIRMWARE: A special type of software that provides low-level control over a devices hardware.
FRAMEWORK: A software framework. If the library also has key features of a framework, then it should be classified as a framework.
LIBRARY: A software library. All third-party and open source reusable components will likely be a library.
OPERATING_SYSTEM: A software operating system without regard to deployment model.
+CycloneDxComponentType-APPLICATION=A software application.
+CycloneDxComponentType-CONTAINER=A packaging and/or runtime format, not specific to any particular technology,
which isolates software inside the container from software outside of a container through virtualization technology.
+CycloneDxComponentType-DEVICE=A hardware device such as a processor, or chip-set.
A hardware device containing firmware should include a component for the physical hardware itself,
and another component of type 'firmware' or 'operating-system' (whichever is relevant),
describing information about the software running on the device.
+CycloneDxComponentType-FILE=A computer file.
+CycloneDxComponentType-FIRMWARE=A special type of software that provides low-level control over a devices hardware.
+CycloneDxComponentType-FRAMEWORK=A software framework. If the library also has key features of a framework, then it should be classified as a framework.
+CycloneDxComponentType-LIBRARY=A software library. All third-party and open source reusable components will likely be a library.
If the library also has key features of a framework, then it should be classified as a framework.
If not, or is unknown, then specifying library is recommended.
+CycloneDxComponentType-OPERATING_SYSTEM=A software operating system without regard to deployment model
(i.e. installed on physical hardware, virtual machine, image, etc).
darcs=Darcs
database.administration=データベース管理
database.sanitation=データベース状態
@@ -365,6 +386,7 @@ delete.component=コンポーネント削除
deleted.linked.project.enable.svm=プロジェクトにリンクされているSVM(Security Vulnerability Monitor)を削除
deleted.project=プロジェクト削除
deleted.project.relationship=関連プロジェクト削除
+deleted.successfully=Deleted successfully
delete.item=項目削除
delete.license=ライセンス削除
delete.license.type=ライセンスタイプ削除
@@ -432,6 +454,7 @@ do.you.really.want.to.delete.the.project.x=プロジェクト を削除しますか?
do.you.really.want.to.delete.the.todo.x=本当にtodo を削除しますか?
do.you.really.want.to.delete.the.vendor.x=本当にベンダー を削除しますか?
+do.you.really.want.to.export.sbom.for.the.project.x=Do you really want to export SBOM for the project ?
do.you.really.want.to.import.all.spdx.all.licenses=あなたは本当にすべてのSPDXのすべてのライセンスをインポートしますか?
do.you.really.want.to.remove.the.link.to.project.x=あなたは本当にプロジェクトへのリンクを削除しますか ?
do.you.really.want.to.remove.the.link.to.release.x=本当にリリースへのリンクを削除したいのでしょうか ?
@@ -439,6 +462,7 @@ do.you.really.want.to.remove.the.link.to.release.x.1=本当にリリースへの
do.you.really.want.to.remove.this.item=本当にこのアイテムを削除しますか?
drop.a.file.here=ここにファイルをドロップ
duplicate=複製
+duplicate.sbom=DUPLICATE SBOM
dynamically.linked=動的にリンクされている
ecc.admin=ECC情報管理者
ecc.assessment.date=ECC評価日
@@ -509,6 +533,7 @@ enter.folder.id=フォルダIDを入力
enter.fullname=フルネームを入力
enter.group=グループを入力
enter.home.url=ホームURLを入力
+enter.homepage.url=Enter Homepage Url
enter.mail.address=メールアドレスを入力
enter.mailing.list.url=メーリングリストのURLを入力
enter.material.index.number=部品指標番号(Material index number)を入力
@@ -524,6 +549,7 @@ enter.owners.accounting.unit=所有者の会計単位を入力
enter.owners.billing.group=会計グループオーナーを入力
enter.project=プロジェクトを入力
enter.refresh.token.validity=リフレッシュトークンの有効期間を入力
+enter.purl=Enter PURL
enter.release=リリースを入力
enter.release.date=リリース日を入力
enter.request.id=リクエストIDを入力
@@ -546,6 +572,7 @@ enter.user.lastname=last nameを入力
enter.user.primary.department=ユーザの第一所属部門を入力
enter.user.primary.roles=ユーザの第一所属部門でのロールを入力
enter.user.pwd=ユーザのパスワードを入力
+enter.vcs.url=Enter VCS Url
enter.vendor=ベンダーを入力
enter.vendor.fullname=ベンダーのフルネームを入力
enter.vendor.short.name=ベンダーの略称を入力
@@ -605,14 +632,20 @@ failed.to.add.licenses=ライセンス追加失敗!
failed.to.create.clearing.request=クリアリングリクエスト作成失敗!
failed.to.delete.the.obligation=オブリゲーション削除失敗!
failed.to.edit.secondary.departments.and.roles.for.user=第2所属部門とロールの編集失敗!
+failed.to.export.sbom.for.project=Failed to export SBOM for project
failed.to.fetch.clearing.request.from.db=データベースからクリアリングリクエスト取得失敗!
+failed.to.import.sbom=Failed to import SBOM
failed.to.load=ロード失敗!
+failed.to.load.sbom.import.status.for.attachment=Failed to load SBOM import status for attachment
failed.to.load.scanner.findings.with.error=Failed to load Scanner findings with error
failed.to.load.source.file.with.error=エラーによりソースファイルのロードに失敗しました.
failed.to.reopen.clearing.request=クリアリングリクエストを再び開くのに失敗しました!
+failed.to.sync.releases=Failed to sync Releases
+failed.to.sync.releases.with.error=Failed to sync Releases with error
failed.to.update.clearing.request=クリアリングリクエストを更新するのに失敗しました!
FAILURE=失敗
field.name=フィールド名
+file=File
file.name=ファイル名
filename=ファイル名
fill.the.form.to.create.clearing.request.for.project.x=プロジェクトに対し,クリアリングリクエスト入力
@@ -663,6 +696,7 @@ homepage=ホームページ
homepage.url=ホームページURL
how.it.works=どのように動作するか
ibm.rational.synergy=IBM Rational Synergy
+include.releases.from.sub.projects.in.exported.sbom=Include releases from sub-projects in exported SBOM
i.could.not.cleanup.the.attachments=添付ファイルのクリーンアップができませんでした!
i.could.not.delete.the.client=クライアントの削除ができませんでした
i.could.not.delete.the.component=コンポーネントの削除ができませんでした
@@ -692,9 +726,12 @@ import=インポート
import.export=インポート& エクスポート
import.failed=インポートに失敗しました。
import.projects=プロジェクトのインポート
-import.spdx.bom=SBOMのインポート
+import.sbom=SBOMのインポート
import.spdx.information=SPDX情報のインポート
import.spdx.licenses=SPDXライセンスのインポート
+import.will.fail.if.there.is.already.an.existing.project.with.same.name.and.version.as.component.present.in.sbom=Import will fail if there is already an existing project with same name and version as component present in SBOM
+import.will.fail.if.current.project.name.and.version.is.not.same.as.component.present.in.sbom=Import will fail if current project name and version is not same as component present in SBOM
+imported.sbom.into.project=imported SBOM into project
incorrect=間違い
info=Info
infoempty=0件中0件から0件を表示
@@ -703,6 +740,7 @@ in.case.you.need.the.clearing.at.an.earlier.date.then.the.preferred.date.that.is
in.order.to.go.ahead.please.sign.in.or.create.a.new.account=先に進むためには、サインインするか、新しいアカウントを作成してください
in.progress=In Progress
in.queue=待機中
+in.sbom.file=in SBOM file
inaccessible.component=権限の無いコンポーネント
inaccessible.count=その他 権限の無いアイテム
inaccessible.release=権限の無いリリース
@@ -739,6 +777,7 @@ lead.architect=リードアーキテクト
learn.more.about.clearing.request.priority=クリアリングリクエストの優先順序についてはこちらをご覧ください。
learn.more.about.clearing.request.status=クリアリングリクエストの種類については、こちらをご覧ください。
learn.more.about.component.types=コンポーネントの種類については、こちらをご覧ください。
+learn.more.about.cyconedx.component.types=Learn more about CycloneDx component types.
learn.more.about.ecc.statuses=ECCのステータスについては、こちらを参照してください。
learn.more.about.mainline.states=メインラインの状態については、こちらを参照してください。
learn.more.about.project.types=プロジェクトの種類の詳細はこちら。
@@ -774,6 +813,7 @@ license.x.is.not.unique.license.is.not.excluded='ライセンス "' + licenseId
license.x.not.found.license.is.not.excluded='ライセンス "' + licenseId + '" が見つかりません。ライセンスは除外されません。'
lifecycle=ライフサイクル
linked.projects=リンクされたプロジェクト
+linked.release=Linked Release
linked.releases=リンクされたリリース
linked.releases.and.projects=リンクされたリリースとプロジェクト
link.project=リンクプロジェクト
@@ -783,6 +823,7 @@ link.release.to.project=プロジェクトへのリリース情報のリンク
links=リンク
link.to.project=プロジェクトへのリンク
link.to.projects=プロジェクトへのリンク
+list.of.components.without.version.information=List of Components without version information
list.view=リストビュー
loading=読み込み中...
loading.data.for.step.1.please.wait=ステップ1のデータを読み込み中です。少々お待ちください...
@@ -875,6 +916,7 @@ no.license.found.with.your.search=検索でライセンスが見つかりませ
no.license.risks.analysis.available=利用可能なライセンスのリスク分析はありません。
no.linked.obligations=リンクされたオブリゲーションはありません。
no.linked.releases.or.projects=リンクされたリリースやプロジェクトはありません。
+no.linked.release=No Linked Release
no.linked.releases.yet=リンクされたリリースはまだありません。
no.matching.records.found=該当するレコードは見つかりませんでした
no.moderation.requests.found=モデレーションの要求は見つかりませんでした。
@@ -897,6 +939,8 @@ none.of.the.directly.linked.releases.are.cleared=直接リンクされたリリ
not.applicable=適用不可
not.available=利用できない
not.checked=未チェック
+not.imported=not imported
+not.linked.to.any.release=not linked to any release
in.analysis=分析中
not.decided.so.far=今のところ未定
not.loaded.yet=まだロードされていない
@@ -937,6 +981,7 @@ operating.systems=オペレーティングシステム
operation=操作
optional=オプション
or=または
+or2=or
org1=組織1
org2=組織2
org3=組織3
@@ -1004,12 +1049,16 @@ please.enter.the.server.url=サーバーのURLを入力してください
please.enter.the.user.name=ユーザー名を入力してください
please.enter.user.key=ユーザーキーを入力してください
please.enter.valid.access.token.validity=適切なアクセストークン有効期間を入力してください.
+please.enter.valid.name=Please enter valid name!
+please.enter.valid.purl=Please enter valid PURL!
please.enter.valid.refresh.token.validity=適切なリフレッシュトークン有効期間を入力してください.」
+please.enter.valid.version=Please enter valid version!
please.enter.your.external.id=外部IDを入力してください
please.enter.your.first.email=最初のメールアドレスを入力してください
please.enter.your.first.name=名前を入力してください
please.enter.your.last.name=名字を入力してください
please.fill.a.z.A.Z.0.9.-...+.only= [a-z][A-Z][0-9][-.+ ] だけ利用できます!
+please.import.this.sbom.from.project.details.page=Please import this SBOM from project details page
please.migrate.all.releases.and.keep.the.existing.ones=すべてのリリースを移行して、既存のリリースを維持してください
please.perform.a.new.search=新しい検索を実行してください。
please.select.a.file=ファイルを選択してください
@@ -1017,8 +1066,10 @@ please.select.a.group=グループを選択してください
please.select.a.role=ロールを選択してください
please.select.the.project.type=プロジェクトの種類を選択してください
please.select.the.project.visibility=プロジェクトの可視性を選択してください
+please.select.the.sbom.format=Please select the SBOM format
please.select.the.component.visibility=コンポーネントの可視性を選択してください
please.select.the.server=サーバーを選択してください
+please.upload.the=Please upload the
prease.enter.a.valid.url=適切なURLを入力してください
possible.main.license.ids=Possible Main License Ids:
postpone.request=リクエスト延期
@@ -1046,6 +1097,7 @@ project.import.bdp=プロジェクトインポート(BDP)
project.mainline.state=プロジェクト メインライン状態
project.manager=プロジェクトマネージャー
project.name=プロジェクト名
+project.name.and.version.x.present.in.sbom.metadata.tag.is.not.same.as.the.current.sw360.project=Project name (version): \"+ data.projectName +\" present in SBOM metadata tag is not same as the current SW360 project
project.name.first.letters=プロジェクト名の最初の文字
project.namelinks=プロジェクト名リンク
project.obligation.status=プロジェクトのオブリゲーション状況
@@ -1077,6 +1129,8 @@ proposed.changes=提案された変更点
proposed.user.attributes=提案されたユーザー属性
ptc.integrity=PTC Integrity
publish.date=発行日
+purl=Purl
+purl.package.url=PURL (Package URL)
quality.manager=品質管理者
quick.filter=クイックフィルター
rate=レート
@@ -1087,6 +1141,7 @@ read.and.write.access=Read and Write Access
recent.components=最近の成分
recent.releases=最近のリリース
re.check.connection=接続の再確認
+redirecting.to.project.details.page=redirecting to project details page
references=参考
reference.doc=参考ドキュメント
refresh=リフレッシュ
@@ -1096,6 +1151,8 @@ related=関連する
relation=関係
release=リリース
releases=リリース
+releases.created=Releases created
+releases.reused=Releases reused
release.aggregate.data=集計データのリリース
release.bulk.edit=リリース一括編集
release.clearing.state=解除クリア状態
@@ -1105,12 +1162,16 @@ release.date.of.this.release=本リリースの公開日
release.filter=リリースフィルタ
release.mainline.state=リリースメインライン状態
release.name=リリース名
+release.name.with.version=Release Name (version)
release.namelinks=リリース名リンク
release.namesource.attachments.count=リリース名ソース添付ファイル数
release.overview=リリース概要
release.path=リリース パス
release.relation=リリース関係
release.relationship=リリース関係
+releases.synced.successfully.please.reload.the.page.to.see.the.changes=Releases synced successfully, Please reload the page to see the changes
+releases.are.already.in.sync.no.action.needed=Releases are already in sync! No action needed
+releases.were.not.imported.because.multiple.duplicate.releases.are.found.with.exact.same.name.and.version=Releases were not imported, because multiple duplicate releases are found with exact same name & version
ReleaseRelationship="Unkown: 不明、わからない
Contained: 動的リンクか不明
Refered: 他部品を採用した独立したバイナリへの参照
Dynamically Linked: 動的リンク
Statically linked: 静的リンク
Side by side: 決められない
Standalone: 独立したバイナリ
Internal Use: 作成またはビルドした製品またはプロジェクトだが、配布はしない
Optional: インストールに必要な部分ではない
To be replaced: 存在するが除外する予定がある
Code Snippet: 参照。断片だけが使用されている";
ReleaseRelationship-CONTAINED=あなたはそれが動的にリンクされているかどうかだけではわからない場合。
ReleaseRelationship-DYNAMICALLY_LINKED=ソフトウェアは、動的にリンクされている - 名前が言うように。
@@ -1182,6 +1243,15 @@ save.configuration=設定の保存
saved.attachment.usages=保存されたアタッチメントの用途
save.obligations=オブリゲーションの保存
save.usages=使用方法を保存する
+sbom=SBOM
+sbom.document=SBOM document
+sbom.format=SBOM format
+sbom.failed.sanity.check=SBOM FAILED SANITY CHECK
+sbom.exported.successfully=SBOM exported successfully
+sbom.import.failed=SBOM Import Failed
+sbom.import.status=SBOM Import Status
+sbom.import.statistics.for=SBOM Import Statistics for
+sbom.imported.successfully=SBOM imported successfully
scanned=スキャンされた
scan.available=Scan available
scan.the.sources=ソースをスキャン
@@ -1268,6 +1338,7 @@ source.file.information.not.found.in.cli=ソースファイル情報がCLIの中
source.file.information.not.found.in.isr=Source file information not found in ISR
source.release=ソースリリース。
source.vendor=ソースベンダ
+spdx=SPDX
spdx.attachments=SPDXアタッチメント
special.risk.open.source.software=特別なリスク オープンソースソフトウェア
special.risks.3rd.party.software=特別なリスク サードパーティソフトウェア
@@ -1302,11 +1373,13 @@ sw360.admin=SW360 管理者
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect=SW360は、ウェブアプリケーションとリポジトリの両方を提供するオープンソース・ソフトウェア・プロジェクトです。
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect.organize.and.make.available.information.about.software.components.it.establishes.a.central.hub.for.software.components.in.an.organization=SW360は、ソフトウェアコンポーネントに関する情報を収集、整理、利用可能にするためのウェブアプリケーションとリポジトリの両方を提供するオープンソースのソフトウェアプロジェクトです。SW360は、組織内のソフトウェアコンポーネントの一元化を行います。
sw360.user=SW360ユーザー
+sync=Sync
system.test.begin=システムテスト開始
system.test.begin.date.yyyy.mm.dd=システムテスト開始日 YYYYY-MM-DD
system.test.end=システムテスト終了
system.test.end.date.yyyy.mm.dd=システムテスト終了日 YYYYY-MM-DD
tag=タグ
+tag2=tag
target.component=対象コンポーネント
target.release=対象リリース
target.vendor=対象のベンダー
@@ -1341,6 +1414,7 @@ the.user.x.will.be.added.to.the.list.of.moderators="このユーザー 件の脆弱性の検証を変更: .
this.component.x.contains=このコンポーネント <
this.component.x.contains.y.attachments=このコンポーネント
this.release.x.contains=今回のリリース
this.release.x.contains.1=今回のリリース
+time.taken.for.export=Time taken for export
+time.taken.for.import=Time taken for import
title=タイトル
to=To
to.be.replaced=置き換わる
to.view.the.files.corresponding.to.each.licenses.go.to.clearing.details.tab.of.respective.release=To view the files corresponding to each licenses, go to "Clearing Details" tab of respective Release.
today=本日
+total.components=Total Components
total.number.of.files=Total number of files
+total.releases=Total Releases
enable.svm= SVM(Security Vulnerability Monitor)を有効
obligation=オブリゲーション
obligation.details=オブリゲーション詳細
@@ -1396,6 +1474,7 @@ update.vendor=ベンダー更新
update.whitelist=ホワイトリストの更新
updating.the.moderation.request.failed=モデレーションリクエストの更新に失敗しました。
upload=アップロード
+upload.and.import=Upload & Import
upload.attachment=添付ファイルアップロード
upload.component.attachments=コンポーネントの添付ファイルアップロード
upload.component.csv=コンポーネントCSVアップロード
@@ -1405,8 +1484,10 @@ uploaded.on=Uploaded On
upload.license.archive=ライセンスアーカイブのアップロード
upload.licenses=ライセンスのアップロード
upload.release.links=リリースリンクのアップロード
+upload.successful.importing.of.sbom.is.in.progress=Upload successful, Importing of SBOM is in progress
upload.the.sources.to.fossology=ソースをFOSSologyにアップロード
upload.users=ユーザをアップロードする
+uploading.sbom.file=Uploading SBOM file
url=URL
usage.overview=使用の概要
usage.right.available=利用権あり
@@ -1427,6 +1508,8 @@ users.already.in.couchdb=Couch DBに既にいるユーザ
users.not.in.couchdb=Couch DBにいないユーザ
use.selection.of.this.subproject=このサブプロジェクトの選択を使用
valid.for.projects=プロジェクトに有効
+vcs=VCS
+vcs.version.control.system=VCS (Version Control System)
vender=ベンダー
vendor=ベンダー
vendor.advisories=ベンダーアドバイザリー
@@ -1441,12 +1524,14 @@ VerificationState-INCORRECT=検証を拒否することが決定されました
VerificationState-NOT_CHECKED=まだ誰もこれを見て検証していない。
version=バージョン
very.large=Very Large
+via.purl=via PURL
view.clearing.request=クリアリングリクエストビュー
view.clearing.request.failure.message=クリアリングリクエストを発見できない [ID: ] プロジェクトのデータベース
再試行してください.
view.by.releases=リリースごとに表示
view.change.logs=変更ログビュー
view.file.list=ファイルリストビュー
view.obligations=オブリゲーションを表示
+view.sbom.import.result=View SBOM import result
view.scanner.findings.license=View scanner findings (License)
visibility=可視範囲
Visibility=Private: 作成者(およびすべての表示レベルに適用される管理者)のみが表示できます。
Me and Moderators: 作成者とモデレーターが表示できます。
Group and Moderators: 同じグループメンバーとモデレータが見れる
Everyone: このシステムにログインしている人全員が見れる
@@ -1474,12 +1559,14 @@ whitesource.organization.api.key=ホワイトソース組織APIキー
whitesource.user.key=ホワイトソースユーザーキー
with.attachments=添付ファイル
with.cli.attachments=CLI添付ファイル
+with.file.error=with fileError
without.attachments=添付ファイルなし
without.source.attachments=Without Source Attachments
wiki=Wiki
wiki.url=WikiのURL
will.be.fulfilled.before.release=Will be fulfilled before release
will.be.set.automatically=自動的に設定されます
+will.not.be.created.if.it.does.not.contain=will not be created if it does not contain
write.access=書き込みアクセス
wsimport=wsimport
x.rows.selected=%d行が選択されました
@@ -1490,6 +1577,7 @@ you.are.removed.from.the.list.of.moderators.for.the.previous.moderation.request=
you.are.signed.in.please.go.ahead.using.sw360=ログインしています。SW360を使用してください。
you.are.the.last.moderator.for.this.request.you.are.not.allowed.to.unsubscribe=あなたはこのリクエストの最後のモデレーターです-退会することはできません。
you.do.not.have.any.open.moderation.requests=開いているモデレートリクエストはありません。
+you.do.not.have.permission.to.import.or.export.the.sbom=You do not have permission to import or export the SBOM
you.do.not.own.any.components=コンポーネントを所有していません。
you.do.not.own.any.projects=プロジェクトを所有していません。
you.have.accepted.the.previous.moderation.request=以前のモデレートリクエストを受け入れました。
@@ -1704,3 +1792,12 @@ cve.number.must.be.positive.number = Cve番号は正の数である必要があ
## Refer to http://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/ and add your datatables language
datatables.lang=https://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Japanese.json
+
+## CycloneDX Component Type
+application=Application
+container=Container
+device=Device
+firmware=Firmware
+framework=Framework
+library=Library
+operating.system=Operating System
diff --git a/frontend/sw360-portlet/src/main/resources/content/Language_vi.properties b/frontend/sw360-portlet/src/main/resources/content/Language_vi.properties
index dd79076e8a..124237393e 100644
--- a/frontend/sw360-portlet/src/main/resources/content/Language_vi.properties
+++ b/frontend/sw360-portlet/src/main/resources/content/Language_vi.properties
@@ -2,6 +2,7 @@ accepted=Accepted
accept.request=Chấp nhận yêu cầu
access=Truy cập
access.denied=Truy cập bị từ chối
+access.denied.2=ACCESS DENIED
access.token=Mã truy cập
access.token.validity=Access Token Validity
accountant=Kế toán
@@ -22,6 +23,7 @@ add.data.to.this.release=Thêm dữ liệu vào bản phát hành này
add.license.info.to.release=Add License Info to Release
added.project.links=Liên kết dự án đã thêm
added.release.links=Liên kết phát hành đã thêm
+added.successfully=added successfully
additional.data=Dữ liệu bổ sung
additional.data.name=tên dữ liệu bổ sung
additional.data.value=giá trị dữ liệu bổ sung
@@ -221,6 +223,8 @@ clearing.team.will.confirm.on.the.agreed.clearing.date=Clearing team will confir
cli.attachment.evaluation.completed=CLI attachment evaluation completed.
cli.attachment.not.found.in.the.release=CLI attachment not found in the release
cli.count=CLI count
+click.on.upload.and.import.button=Click on upload & import button
+click.the.url.to.open.project.details.page=Click the URL to open project details page
click.to.add.oidc.client=Click to add OIDC client
click.to.add.releases=Nhấn vào đây để thêm Phát hành
click.to.add.row.to=Nhấn vào đây để thêm hàng vào
@@ -230,6 +234,7 @@ click.to.add.row.to.external.ids=Nhấn vào đây để thêm hàng vào Id bê
click.to.add.row.to.external.urls=Click to add row to External URLs
click.to.add.secondary.department.and.roles=Click to add Secondary Department and Roles
click.to.edit=Bấm vào để chỉnh sửa
+click.to.link.a.release=Click to link a Release
click.to.set.department=Nhấn vào đây để đặt bộ phận
click.to.expand.or.collapse=Click to expand or collapse
click.to.set.licenses=Nhấn vào đây để đặt Giấy phép
@@ -264,7 +269,10 @@ component.owner=Chủ sở hữu thành phần
component.visibility=Component visibility
components=Các thành phần
components2=các thành phần
+components.created=Components created
components.only=Chỉ thành phần
+components.reused=Components reused
+components.were.not.imported.because.multiple.duplicate.components.are.found.with.exact.same.name=Components were not imported, because multiple duplicate components are found with exact same name
components.with.releases=Các thành phần có bản phát hành
components.with.the.same.identifier.name=Các thành phần có cùng định danh [name]
component.type=Loại thành phần
@@ -313,6 +321,8 @@ create.component=Tạo thành phần
created.by=Được tạo bởi
created.by.email=Created by (Email)
created.on=Được tạo ra trên
+created.project.with.id=Created project with id
+created.project.with.name=Created project with name
created.successfully=created successfully
create=Create
create.license=Tạo giấy phép
@@ -339,11 +349,22 @@ current.release=Phát hành hiện tại
current.release.relationship=Mối quan hệ phát hành hiện tại
current.selection.will.be.overwritten=Lựa chọn hiện tại sẽ được ghi đè!
current.value=Giá trị hiện tại
+currently.only.cyclonedx.sbom.export.is.supported=Currently only CycloneDX SBOM export is supported
customer.project=Dự án khách hàng
cve.id=CVE ID
cve.references=Tài liệu tham khảo CVE
cve.search=Tìm kiếm CVE
cvs=CVS
+cyclonedx=CycloneDX
+CycloneDxComponentType=Specifies the type of component. For software components, classify as application if no more specific appropriate classification is available or cannot be determined.
APPLICATION: A software application.
CONTAINER: A packaging and/or runtime format, not specific to any particular technology.
DEVICE: A hardware device such as a processor, or chip-set.
FILE: A computer file.
FIRMWARE: A special type of software that provides low-level control over a devices hardware.
FRAMEWORK: A software framework. If the library also has key features of a framework, then it should be classified as a framework.
LIBRARY: A software library. All third-party and open source reusable components will likely be a library.
OPERATING_SYSTEM: A software operating system without regard to deployment model.
+CycloneDxComponentType-APPLICATION=A software application.
+CycloneDxComponentType-CONTAINER=A packaging and/or runtime format, not specific to any particular technology,
which isolates software inside the container from software outside of a container through virtualization technology.
+CycloneDxComponentType-DEVICE=A hardware device such as a processor, or chip-set.
A hardware device containing firmware should include a component for the physical hardware itself,
and another component of type 'firmware' or 'operating-system' (whichever is relevant),
describing information about the software running on the device.
+CycloneDxComponentType-FILE=A computer file.
+CycloneDxComponentType-FIRMWARE=A special type of software that provides low-level control over a devices hardware.
+CycloneDxComponentType-FRAMEWORK=A software framework. If the library also has key features of a framework, then it should be classified as a framework.
+CycloneDxComponentType-LIBRARY=A software library. All third-party and open source reusable components will likely be a library.
If the library also has key features of a framework, then it should be classified as a framework.
If not, or is unknown, then specifying library is recommended.
+CycloneDxComponentType-OPERATING_SYSTEM=A software operating system without regard to deployment model
(i.e. installed on physical hardware, virtual machine, image, etc).
darcs=Anh hùng
database.administration=Quản lý cơ sở dữ liệu
database.sanitation=Dọn dẹp cơ sở dữ liệu
@@ -365,6 +386,7 @@ delete.component=Xóa thành phần
deleted.linked.project.enable.svm=Deleted Linked Project Enable SVM
deleted.project=Deleted Project
deleted.project.relationship=Xóa mối quan hệ dự án
+deleted.successfully=Deleted successfully
delete.item=Xóa mục
delete.license=Xóa giấy phép
delete.license.type=Xóa loại giấy phép
@@ -433,6 +455,7 @@ do.you.really.want.to.delete.the.project.x=Bạn có thực sự muốn xóa d
do.you.really.want.to.delete.the.release.x=Bạn có thực sự muốn xóa bản phát hành
do.you.really.want.to.delete.the.obligation.x=Bạn có thực sự muốn xóa việc cần làm
do.you.really.want.to.delete.the.vendor.x=Bạn có thực sự muốn xóa nhà cung cấp
+do.you.really.want.to.export.sbom.for.the.project.x=Do you really want to export SBOM for the project ?
do.you.really.want.to.import.all.spdx.all.licenses=Bạn có thực sự muốn nhập tất cả SPDX tất cả các giấy phép?
do.you.really.want.to.remove.the.link.to.project.x=Bạn có thực sự muốn xóa liên kết đến dự án ?
do.you.really.want.to.remove.the.link.to.release.x=Bạn có thực sự muốn xóa liên kết để phát hành ?
@@ -440,6 +463,7 @@ do.you.really.want.to.remove.the.link.to.release.x.1=Bạn có thực sự muố
do.you.really.want.to.remove.this.item=Bạn có thực sự muốn loại bỏ mục này?
drop.a.file.here=Thả một tập tin ở đây
duplicate=Bản sao
+duplicate.sbom=DUPLICATE SBOM
dynamically.linked=Liên kết động
ecc.admin=Quản trị viên ECC
ecc.assessment.date=Ngày đánh giá ECC
@@ -511,6 +535,7 @@ enter.folder.id=Nhập id thư mục
enter.fullname=Nhập tên đầy đủ
enter.group=Nhập nhóm
enter.home.url=Nhập Url trang trủ
+enter.homepage.url=Enter Homepage Url
enter.mail.address=Nhập địa chỉ thư
enter.mailing.list.url=Nhập Url danh sách gửi thư
enter.material.index.number=Nhập số chỉ mục tài liệu
@@ -526,6 +551,7 @@ enter.owners.accounting.unit=Nhập đơn vị kế toán
enter.owners.billing.group=Nhập nhóm thanh toán
enter.project=Nhập dự án
enter.refresh.token.validity=Enter Refresh Token Validity
+enter.purl=Enter PURL
enter.release=Nhập bản phát hành
enter.release.date=Nhập ngày phát hành
enter.request.id=Nhập ID yêu cầu
@@ -549,6 +575,7 @@ enter.user.lastname=Enter user last name
enter.user.primary.department=Enter user primary department
enter.user.primary.roles=Enter user primary roles
enter.user.pwd=Enter user password
+enter.vcs.url=Enter VCS Url
enter.vendor=Nhập nhà cung cấp
enter.vendor.fullname=Nhập tên đầy đủ của nhà cung cấp
enter.vendor.short.name=Nhập tên viết tắt của nhà cung cấp
@@ -608,14 +635,20 @@ failed.to.add.licenses=Failed to add licenses
failed.to.create.clearing.request=Failed to create clearing request!
failed.to.delete.the.obligation=Không thể xóa nghĩa vụ!
failed.to.edit.secondary.departments.and.roles.for.user=Failed to edit Secondary Departments and Roles for user
+failed.to.export.sbom.for.project=Failed to export SBOM for project
failed.to.fetch.clearing.request.from.db=Failed to fetch clearing request from database!
+failed.to.import.sbom=Failed to import SBOM
failed.to.load=Failed to load!
+failed.to.load.sbom.import.status.for.attachment=Failed to load SBOM import status for attachment
failed.to.load.scanner.findings.with.error=Failed to load Scanner findings with error
failed.to.load.source.file.with.error=Failed to load source file with error
failed.to.reopen.clearing.request=Failed to reopen clearing request!
+failed.to.sync.releases=Failed to sync Releases
+failed.to.sync.releases.with.error=Failed to sync Releases with error
failed.to.update.clearing.request=Failed to update clearing request!
FAILURE=THẤT BẠI
field.name=Tên trường
+file=File
file.name=Tên tệp
filename=Tên tệp
fill.the.form.to.create.clearing.request.for.project.x=Fill the form to create clearing request for project
@@ -666,6 +699,7 @@ homepage=Trang chủ
homepage.url=URL trang chủ
how.it.works=Nó hoạt động như thế nào
ibm.rational.synergy=Sức mạnh tổng hợp của IBM
+include.releases.from.sub.projects.in.exported.sbom=Include releases from sub-projects in exported SBOM
i.could.not.cleanup.the.attachments=Tôi không thể dọn dẹp các tệp đính kèm!
i.could.not.delete.the.component=Tôi không thể xóa thành phần
i.could.not.delete.the.component.since.it.is.in.use=Tôi không thể xóa thành phần, vì nó đang được sử dụng.
@@ -695,9 +729,12 @@ import=Nhập
import.export=Nhập và xuất
import.failed=Nhập thất bại.
import.projects=Nhập các dự án
-import.spdx.bom=Nhập SBOM
+import.sbom=Nhập SBOM
import.spdx.information=Nhập thông tin SPDX
import.spdx.licenses=Nhập giấy phép SPDX
+import.will.fail.if.there.is.already.an.existing.project.with.same.name.and.version.as.component.present.in.sbom=Import will fail if there is already an existing project with same name and version as component present in SBOM
+import.will.fail.if.current.project.name.and.version.is.not.same.as.component.present.in.sbom=Import will fail if current project name and version is not same as component present in SBOM
+imported.sbom.into.project=imported SBOM into project
incorrect=Sai
info=Info
infoempty=Hiện thị 0 tới 0 của 0 mục
@@ -706,6 +743,7 @@ in.case.you.need.the.clearing.at.an.earlier.date.then.the.preferred.date.that.is
in.order.to.go.ahead.please.sign.in.or.create.a.new.account=Để tiếp tục, vui lòng đăng nhập hoặc tạo một tài khoản mới!
in.progress=In Progress
in.queue=In Queue
+in.sbom.file=in SBOM file
inaccessible.component=Restricted component
inaccessible.count=Other restricted items
inaccessible.release=Restricted release
@@ -742,6 +780,7 @@ lead.architect=Kiến trúc sư trưởng
learn.more.about.clearing.request.priority=Learn more about clearing request priority.
learn.more.about.clearing.request.status=Learn more about clearing request status.
learn.more.about.component.types=Tìm hiểu thêm về các loại thành phần.
+learn.more.about.cyconedx.component.types=Learn more about CycloneDx component types.
learn.more.about.ecc.statuses=Tìm hiểu thêm về trạng thái ECC.
learn.more.about.mainline.states=Tìm hiểu thêm về các trạng thái chính.
learn.more.about.project.types=Tìm hiểu thêm về các loại dự án.
@@ -777,6 +816,7 @@ license.x.is.not.unique.license.is.not.excluded='Giấy phép "' + licenseId + '
license.x.not.found.license.is.not.excluded='Giấy phép "' + licenseId + '" không tìm thấy. Giấy phép không được loại trừ.'
lifecycle=Vòng đời
linked.projects=Các dự án được liên kết
+linked.release=Linked Release
linked.releases=Các bản phát hành được liên kết
linked.releases.and.projects=Các bản phát hành và dự án được liên kết
link.project=Liên kết dự án
@@ -786,6 +826,7 @@ link.release.to.project=Liên kết bản phát hành đến dự án
links=Liên kết
link.to.project=Liên kết đến dự án
link.to.projects=Link to Projects
+list.of.components.without.version.information=List of Components without version information
list.view=List View
loading=Đang tải...
loading.data.for.step.1.please.wait=Đang tải dữ liệu cho bước 1, vui lòng đợi ...
@@ -878,6 +919,7 @@ no.license.found.with.your.search=Không tìm thấy giấy phép với tìm ki
no.license.risks.analysis.available=Không có phân tích rủi ro giấy phép nào có sẵn.
no.linked.obligations=Không có nghĩa vụ liên kết.
no.linked.releases.or.projects=Không có bản phát hành hoặc dự án được liên kết
+no.linked.release=No Linked Release
no.linked.releases.yet=Không có bản phát hành liên kết nào.
no.matching.records.found=Không tìm thấy kết quả
no.moderation.requests.found=Không có yêu cầu kiểm duyệt nào được tìm thấy.
@@ -900,6 +942,8 @@ none.of.the.directly.linked.releases.are.cleared=None of the directly linked rel
not.applicable=Not Applicable
not.available=Không có sẵn
not.checked=Chưa được kiểm tra
+not.imported=not imported
+not.linked.to.any.release=not linked to any release
in.analysis=In Analysis
not.decided.so.far=Không quyết định cho đến nay
not.loaded.yet=Not loaded yet
@@ -938,6 +982,7 @@ operating.systems=Hệ điều hành
operation=Operation
optional=Tùy chọn
or=Hoặc
+or2=or
org1=org1
org2=org2
org3=org3
@@ -1004,10 +1049,15 @@ please.enter.the.server.url=Vui lòng nhập url máy chủ!
please.enter.the.user.name=Vui lòng nhập tên người dùng!
please.enter.user.key=Vui lòng nhập mã người dùng
please.enter.valid.access.token.validity=Please enter valid access token validity
+please.enter.valid.name=Please enter valid name!
+please.enter.valid.purl=Please enter valid PURL!
+please.enter.valid.refresh.token.validity=Please enter valid refresh token validity
+please.enter.valid.version=Please enter valid version!
please.enter.your.external.id=Vui lòng nhập id bên ngoài của bạn!
please.enter.your.first.email=Vui lòng nhập email đầu tiên của bạn!
please.enter.your.first.name=Vui lòng nhập tên của bạn!
please.enter.your.last.name=Vui lòng nhập họ của bạn!
+please.import.this.sbom.from.project.details.page=Please import this SBOM from project details page
please.migrate.all.releases.and.keep.the.existing.ones=Vui lòng di chuyển tất cả các bản phát hành và giữ những bản hiện có!
please.perform.a.new.search=Vui lòng thực hiện một tìm kiếm mới.
please.select.a.file=Vui lòng chọn một tập tin!
@@ -1015,8 +1065,10 @@ please.select.a.group=Vui lòng chọn một nhóm!
please.select.a.role=Vui lòng chọn một vai trò!
please.select.the.project.type=Vui lòng chọn loại dự án!
please.select.the.project.visibility=Vui lòng chọn tầm nhìn của dự án!
+please.select.the.sbom.format=Please select the SBOM format
please.select.the.component.visibility=Please select the component visibility!
please.select.the.server=Vui lòng chọn máy chủ!
+please.upload.the=Please upload the
prease.enter.a.valid.url=Please enter a valid URL!
possible.main.license.ids=Possible Main License Ids:
postpone.request=Yêu cầu trì hoãn
@@ -1044,6 +1096,7 @@ project.import.bdp=Nhập dự án (BDP)
project.mainline.state=Dự án chính
project.manager=Quản lý dự án
project.name=Tên dự án
+project.name.and.version.x.present.in.sbom.metadata.tag.is.not.same.as.the.current.sw360.project=Project name (version): \"+ data.projectName +\" present in SBOM metadata tag is not same as the current SW360 project
project.name.first.letters=Tên dự án (chữ cái đầu tiên)
project.namelinks=Tên dự án
project.obligation.status=Tình trạng nghĩa vụ dự án
@@ -1074,6 +1127,8 @@ proposed.changes=Những thay đổi được đề nghị
proposed.user.attributes=Thuộc tính người dùng được đề xuất
ptc.integrity=Tính toàn vẹn của PTC
publish.date=Ngày xuất bản
+purl=Purl
+purl.package.url=PURL (Package URL)
quality.manager=Quản lý chất lượng
quick.filter=Bộ lọc nhanh
rate=Tỷ lệ
@@ -1084,6 +1139,7 @@ read.and.write.access=Read and Write Access
recent.components=Các thành phần gần đây
recent.releases=Các bản phát hành gần đây
re.check.connection=Kiểm tra lại kết nối
+redirecting.to.project.details.page=redirecting to project details page
references=Tài liệu tham khảo
refresh=Làm mới
refresh.token.validity=Refresh Token Validity
@@ -1093,6 +1149,8 @@ related=Liên quan
relation=Quan hệ
release=Phát hành
releases=Releases
+releases.created=Releases created
+releases.reused=Releases reused
release.aggregate.data=Dữ liệu tổng hợp bản phát hành
release.bulk.edit=Chỉnh sửa hàng loạt bản phát hành
release.clearing.state=Trạng thái dọn dẹp bản phát hành
@@ -1102,11 +1160,15 @@ release.date.of.this.release=Ngày phát hành của bản phát hành này
release.filter=Release Filter
release.mainline.state=Trạng thái chính bản phát hành
release.name=Tên phát hành
+release.name.with.version=Release Name (version)
release.namelinks=Tên liên kết phát hành
release.namesource.attachments.count=Tên bản phát hành Nguồn đính kèm
release.overview=Tổng quan bản phát hành
release.relation=Quan hệ bản phát hành
release.relationship=Phát hành mối quan hệ
+releases.synced.successfully.please.reload.the.page.to.see.the.changes=Releases synced successfully, Please reload the page to see the changes
+releases.are.already.in.sync.no.action.needed=Releases are already in sync! No action needed
+releases.were.not.imported.because.multiple.duplicate.releases.are.found.with.exact.same.name.and.version=Releases were not imported, because multiple duplicate releases are found with exact same name & version
ReleaseRelationship="Không xác định: Nếu bạn không biết
Chứa: Nếu bạn không biết liệu nó có được liên kết động không
Đã giới thiệu: Tham khảo một phần độc lập được sử dụng phần khác
Liên kết động: Phần mềm được liên kết động - như tên gọi
Liên kết tĩnh: Phần mềm được liên kết tĩnh - như tên gọi
Bên cạnh: Không quyết định cho đến nay
Độc lập: Phần mềm được cung cấp dưới dạng phân phối độc lập, tức là. không kết nối kỹ thuật
Sử dụng nội bộ: Được sử dụng để tạo hoặc xây dựng hoặc? sản phẩm hoặc dự án nhưng không được giao
Tùy chọn: Không phải là một phần bắt buộc của cài đặt
Để được thay thế: Có nhưng nên được chuyển ra ngoài
Đoạn mã: Từ bản phát hành tài liệu tham khảo, một đoạn được sử dụng.";
ReleaseRelationship-CONTAINED=Nếu bạn không biết liệu nó có được liên kết động hay không.
ReleaseRelationship-DYNAMICALLY_LINKED=Phần mềm được liên kết động - như tên gọi.
@@ -1178,6 +1240,15 @@ save.configuration=Lưu cấu hình
saved.attachment.usages=Đã lưu cách sử dụng tệp đính.
save.obligations=Lưu nghĩa vụ
save.usages=Lưu cách dùng
+sbom=SBOM
+sbom.document=SBOM document
+sbom.format=SBOM format
+sbom.failed.sanity.check=SBOM FAILED SANITY CHECK
+sbom.exported.successfully=SBOM exported successfully
+sbom.import.failed=SBOM Import Failed
+sbom.import.status=SBOM Import Status
+sbom.import.statistics.for=SBOM Import Statistics for
+sbom.imported.successfully=SBOM imported successfully
scanned=Đã quét
scan.available=Scan available
scan.the.sources=Quét các nguồn
@@ -1264,6 +1335,7 @@ source.file.information.not.found.in.cli=Source file information not found in CL
source.file.information.not.found.in.isr=Source file information not found in ISR
source.release=Phát hành nguồn:
source.vendor=Nhà cung cấp nguồn
+spdx=SPDX
spdx.attachments=Tệp đính kèm SPDX
special.risk.open.source.software=Rủi ro đặc biệt của Phần mềm nguồn mở
special.risks.3rd.party.software=Rủi ro đặc biệt của phần mềm bên thứ 3
@@ -1298,11 +1370,13 @@ sw360.admin=Quản trị viên SW360
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect=SW360 là một dự án phần mềm nguồn mở cung cấp cả ứng dụng web và kho lưu trữ để thu thập,
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect.organize.and.make.available.information.about.software.components.it.establishes.a.central.hub.for.software.components.in.an.organization=SW360 là một dự án phần mềm nguồn mở cung cấp cả ứng dụng web và kho lưu trữ để thu thập, sắp xếp và cung cấp thông tin có sẵn về các thành phần của phần mềm. Nó thiết lập một trung tâm trung tâm cho các thành phần phần mềm trong một tổ chức.
sw360.user=Người dùng SW360
+sync=Sync
system.test.begin=Kiểm tra hệ thống bắt đầu
system.test.begin.date.yyyy.mm.dd=Ngày bắt đầu thử nghiệm hệ thống YYYY-MM-DD
system.test.end=Kết thúc kiểm tra hệ thống
system.test.end.date.yyyy.mm.dd=Ngày kết thúc kiểm tra hệ thống YYYY-MM-DD
tag=Nhãn
+tag2=tag
target.component=Thành phần mục tiêu
target.release=Bản phát hành mục tiêu:
target.vendor=Nhà cung cấp mục tiêu:
@@ -1337,6 +1411,7 @@ the.user.x.will.be.added.to.the.list.of.moderators="Người dùng ?
do.you.really.want.to.delete.the.obligation.x=确定删除义务 ?
do.you.really.want.to.delete.the.vendor.x=确定删除供应商 ?
+do.you.really.want.to.export.sbom.for.the.project.x=Do you really want to export SBOM for the project ?
do.you.really.want.to.import.all.spdx.all.licenses=确定导入所有SPDX文件中所有的许可证吗?
do.you.really.want.to.remove.the.link.to.project.x=确定移除项目 的链接?
do.you.really.want.to.remove.the.link.to.release.x=确定移除发行版本 的链接?
@@ -435,6 +459,7 @@ do.you.really.want.to.remove.the.link.to.release.x.1=确定移除发行版本
@@ -659,6 +693,7 @@ homepage=主页
homepage.url=主页URL
how.it.works=它是如何工作的
ibm.rational.synergy=IBM Rational Synergy
+include.releases.from.sub.projects.in.exported.sbom=Include releases from sub-projects in exported SBOM
i.could.not.cleanup.the.attachments=无法清理附件!
i.could.not.delete.the.client=无法删除该客户端
i.could.not.delete.the.component=无法删除该组件
@@ -688,9 +723,12 @@ import=导入
import.export=导入和导出
import.failed=导入失败。
import.projects=导入项目
-import.spdx.bom=导入SPDX BOM
+import.sbom=导入 SBOM
import.spdx.information=导入SPDX信息
import.spdx.licenses=导入SPDX许可证
+import.will.fail.if.there.is.already.an.existing.project.with.same.name.and.version.as.component.present.in.sbom=Import will fail if there is already an existing project with same name and version as component present in SBOM
+import.will.fail.if.current.project.name.and.version.is.not.same.as.component.present.in.sbom=Import will fail if current project name and version is not same as component present in SBOM
+imported.sbom.into.project=imported SBOM into project
incorrect=不正确
info=信息
infoempty=显示0到0个条目,共0个条目
@@ -699,6 +737,7 @@ in.case.you.need.the.clearing.at.an.earlier.date.then.the.preferred.date.that.is
in.order.to.go.ahead.please.sign.in.or.create.a.new.account=要继续,请登录或创建一个新帐户!
in.progress=进行中
in.queue=在队列中
+in.sbom.file=in SBOM file
inaccessible.component=没有权限的组件
inaccessible.count=没有权限的项目
inaccessible.release=没有权限的发行版本
@@ -734,6 +773,7 @@ lead.architect=首席架构师
learn.more.about.clearing.request.priority=了解更多关于明确请求优先级的信息。
learn.more.about.clearing.request.status=了解更多关于明确请求状态的信息。
learn.more.about.component.types=了解更多有关组件类型的信息。
+learn.more.about.cyconedx.component.types=Learn more about CycloneDx component types.
learn.more.about.ecc.statuses=了解更多关于ECC状态的信息。
learn.more.about.mainline.states=了解更多关于主线状态的信息。
learn.more.about.project.types=了解更多关于项目类型的信息。
@@ -769,6 +809,7 @@ license.x.is.not.unique.license.is.not.excluded='许可证 "' + licenseId + '"
license.x.not.found.license.is.not.excluded='许可证 "' + licenseId + '" 未找到。许可证不被排除。
lifecycle=生命周期
linked.projects=链接的项目
+linked.release=Linked Release
linked.releases=链接的发行版本
linked.releases.and.projects=链接的发行版本和项目
link.project=链接项目
@@ -778,6 +819,7 @@ link.release.to.project=链接发行版本到项目
links=链接
link.to.project=链接到项目
link.to.projects=链接到项目
+list.of.components.without.version.information=List of Components without version information
list.view=列表视图
loading=加载中...
loading.data.for.step.1.please.wait=正在加载第1步的数据,请稍候...
@@ -870,6 +912,7 @@ no.license.found.with.your.search=在您的搜索中没有找到许可证。
no.license.risks.analysis.available=没有可用的许可证风险分析。
no.linked.obligations=没有链接的义务。
no.linked.releases.or.projects=没有链接的发行版本或项目
+no.linked.release=No Linked Release
no.linked.releases.yet=还没有链接的发行版本。
no.matching.records.found=没有找到匹配的记录
no.moderation.requests.found=没有找到审核请求。
@@ -892,6 +935,8 @@ none.of.the.directly.linked.releases.are.cleared=没有直接链接的发行版
not.applicable=不适用
not.available=不可用
not.checked=未检查
+not.imported=not imported
+not.linked.to.any.release=not linked to any release
in.analysis=分析中
not.decided.so.far=目前还没有决定
not.loaded.yet=尚未加载
@@ -931,6 +976,7 @@ operating.systems=操作系统
operation=操作
optional=可选
or=或
+or2=or
org1=org1
org2=org2
org3=org3
@@ -998,12 +1044,16 @@ please.enter.the.title=请输入标题!
please.enter.the.user.name=请输入用户名!
please.enter.user.key=请输入用户key
please.enter.valid.access.token.validity=请输入有效的访问令牌有效期间
+please.enter.valid.name=Please enter valid name!
+please.enter.valid.purl=Please enter valid PURL!
please.enter.valid.refresh.token.validity=请输入有效的刷新令牌有效期间
+please.enter.valid.version=Please enter valid version!
please.enter.your.external.id=请输入外部ID!
please.enter.your.first.email=请输入第一封电子邮件!
please.enter.your.first.name=请输入名!
please.enter.your.last.name=请输入姓!
please.fill.a.z.A.Z.0.9.-...+.only=请仅填写[a-z][A-Z][0-9][-.+ ]!
+please.import.this.sbom.from.project.details.page=Please import this SBOM from project details page
please.migrate.all.releases.and.keep.the.existing.ones=请迁移所有发行版本并保留现有的发行版本!
please.perform.a.new.search=请执行一个新的搜索。
please.select.a.file=请选择一个文件!
@@ -1011,8 +1061,10 @@ please.select.a.group=请选择一个组!
please.select.a.role=请选择一个角色!
please.select.the.project.type=请选择项目类型!
please.select.the.project.visibility=请选择项目可视性!
+please.select.the.sbom.format=Please select the SBOM format
please.select.the.component.visibility=请选择组件可视性!
please.select.the.server=请选择服务器!
+please.upload.the=Please upload the
prease.enter.a.valid.url=请输入一个有效的URL!
possible.main.license.ids=可能的主许可证ID:
postpone.request=推迟请求
@@ -1040,6 +1092,7 @@ project.import.bdp=项目导入(BDP)
project.mainline.state=项目主线状态
project.manager=项目经理
project.name=项目名称
+project.name.and.version.x.present.in.sbom.metadata.tag.is.not.same.as.the.current.sw360.project=Project name (version): \"+ data.projectName +\" present in SBOM metadata tag is not same as the current SW360 project
project.name.first.letters=项目名称(首字母)
project.namelinks=项目名称链接
project.obligation.status=项目义务状态
@@ -1071,6 +1124,8 @@ proposed.changes=提议的更改
proposed.user.attributes=提议的用户属性
ptc.integrity=PTC Integrity
publish.date=发行日期
+purl=Purl
+purl.package.url=PURL (Package URL)
quality.manager=质量经理
quick.filter=快速过滤
rate=率
@@ -1081,6 +1136,7 @@ read.and.write.access=读写权限
recent.components=最近的组件
recent.releases=最近的发行版本
re.check.connection=重新检查连接
+redirecting.to.project.details.page=redirecting to project details page
references=参考
reference.doc=参考文档
refresh=刷新
@@ -1090,6 +1146,8 @@ related=相关
relation=关系
release=发行版本
releases=发行版本
+releases.created=Releases created
+releases.reused=Releases reused
release.aggregate.data=发行版本集合数据
release.bulk.edit=发行版本批量编辑
release.clearing.state=发行版本明确状态
@@ -1099,12 +1157,16 @@ release.date.of.this.release=该发行版本的发行日期
release.filter=发行版本过滤器
release.mainline.state=发行版本主线状态
release.name=发行版本名称
+release.name.with.version=Release Name (version)
release.namelinks=释放名称链接
release.namesource.attachments.count=发行版本名称源附件计数
release.overview=发行版本概述
release.path=发行版本路径
release.relation=发行版本关系
release.relationship=发行版本关系
+releases.synced.successfully.please.reload.the.page.to.see.the.changes=Releases synced successfully, Please reload the page to see the changes
+releases.are.already.in.sync.no.action.needed=Releases are already in sync! No action needed
+releases.were.not.imported.because.multiple.duplicate.releases.are.found.with.exact.same.name.and.version=Releases were not imported, because multiple duplicate releases are found with exact same name & version
ReleaseRelationship="Unkown: 未知
Contained: 如果你不确定它是否是动态链接
Refered: 引用一个被其他组件独立使用的软件
Dynamically Linked: 软件动态链接
Statically linked: 软件静态链接
Side by side: 目前未确定
Standalone: 独立交付的软件,没有技术上的联系
Internal Use: 用于创建或构建产品或项目,但不用于交付
Optional: 不是强制安装的部分
Tobereplace: 存在,但应被移出
Code Snippet: 引用,但只使用了一个片段。";
ReleaseRelationship-CONTAINED=如果你不确定它是否是动态链接。
ReleaseRelationship-DYNAMICALLY_LINKED=软件动态链接。
@@ -1176,6 +1238,15 @@ save.configuration=保存配置
saved.attachment.usages=保存附件的用途。
save.obligations=保存义务
save.usages=保存用法
+sbom=SBOM
+sbom.document=SBOM document
+sbom.format=SBOM format
+sbom.failed.sanity.check=SBOM FAILED SANITY CHECK
+sbom.exported.successfully=SBOM exported successfully
+sbom.import.failed=SBOM Import Failed
+sbom.import.status=SBOM Import Status
+sbom.import.statistics.for=SBOM Import Statistics for
+sbom.imported.successfully=SBOM imported successfully
scanned=已扫描
scan.available=扫描可用
scan.the.sources=扫描源
@@ -1260,6 +1331,7 @@ source.file.information.not.found.in.cli=在CLI中找不到源文件信息
source.file.information.not.found.in.isr=在ISR中找不到源文件信息
source.release=源发行版本
source.vendor=源供应商
+spdx=SPDX
spdx.attachments=SPDX附件
special.risk.open.source.software=特殊风险开源软件
special.risks.3rd.party.software=特殊风险第三方软件
@@ -1294,11 +1366,13 @@ sw360.admin=SW360管理员
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect=SW360是一个开源软件项目,它提供了一个 Web应用程序和一个存储库以收集,
sw360.is.an.open.source.software.project.that.provides.both.a.web.application.and.a.repository.to.collect.organize.and.make.available.information.about.software.components.it.establishes.a.central.hub.for.software.components.in.an.organization=SW360是一个开源软件项目,它提供了一个 Web 应用程序和一个存储库以收集,组织和提供有关软件组件的信息。它为组织中的软件组件建立了一个中心枢纽。
sw360.user=SW360用户
+sync=Sync
system.test.begin=系统测试开始
system.test.begin.date.yyyy.mm.dd=系统测试开始日期YYYY-MM-DD
system.test.end=系统测试结束
system.test.end.date.yyyy.mm.dd=系统测试结束日期YYYY-MM-DD
tag=标签
+tag2=tag
target.component=目标组件
target.release=目标发行版本:
target.vendor=目标供应商:
@@ -1333,6 +1407,7 @@ the.user.x.will.be.added.to.the.list.of.moderators="用户 " + u
the.verification.of.vulnerabilities.will.be= 件的脆弱性验证将被修改至 。
this.component.x.contains=组件 包含:
this.component.x.contains.y.attachments=组件 包含附件 。
+this.currently.only.supports.spdx.rdf.xml.files.with.a.unique.described.top.level.node=This currently only supports SPDX RDF/XML files with a unique described top level node
this.error.can.lead.to.inconsistencies.in.the.database.please.inform.the.administrator.that.the.following.vendors.could.not.be.merged=这个错误会导致数据库的不一致。请通知管理员以下供应商无法合并:
this.error.can.lead.to.inconsistencies.in.the.database.please.inform.the.administrator.with.the.following.information=这个错误会导致数据库的不一致。请告知管理员以下信息:
this.function.is.meant.to.be.followed.by.a.new.license.import=这个功能试图导入一个新的许可证。
@@ -1344,12 +1419,16 @@ this.project.contains=这个项目包含
this.project.x.contains=项目 包含:
this.release.x.contains=发行版本 包含:
this.release.x.contains.1=发行版本 包含
+time.taken.for.export=Time taken for export
+time.taken.for.import=Time taken for import
title=标题
to=到
to.be.replaced=被替换
to.view.the.files.corresponding.to.each.licenses.go.to.clearing.details.tab.of.respective.release=要查看与每个许可证对应的文件,请转到相应发行版本的“明确详细信息”页面。
today=今天
+total.components=Total Components
total.number.of.files=文件总数
+total.releases=Total Releases
enable.svm=启用SVM
obligation=义务
obligation.details=义务详情
@@ -1388,6 +1467,7 @@ update.vendor=更新供应商
update.whitelist=更新白名单
updating.the.moderation.request.failed=更新审核请求失败。
upload=上传
+upload.and.import=Upload & Import
upload.attachment=上传附件
upload.component.attachments=上传组件附件
upload.component.csv=上传组件CSV
@@ -1397,8 +1477,10 @@ uploaded.on=上传时间
upload.license.archive=上传许可证存档
upload.licenses=上传许可证
upload.release.links=上传发行版本链接
+upload.successful.importing.of.sbom.is.in.progress=Upload successful, Importing of SBOM is in progress
upload.the.sources.to.fossology=上传源到FOSSology
upload.users=上传用户
+uploading.sbom.file=Uploading SBOM file
url=URL
usage.overview=使用概览
usage.right.available=可用的使用权限
@@ -1419,6 +1501,8 @@ users.already.in.couchdb=用户已经在于Couch DB中
users.not.in.couchdb=用户不存在于Couch DB中
use.selection.of.this.subproject=使用这个子项目的选择
valid.for.projects=对项目有效
+vcs=VCS
+vcs.version.control.system=VCS (Version Control System)
vender=供应商
vendor=供应商
vendor.advisories=供应商建议
@@ -1433,12 +1517,14 @@ VerificationState-INCORRECT=已经决定驳回验证。
VerificationState-NOT_CHECKED=还没有人看过并验证过。
version=版本
very.large=非常大
+via.purl=via PURL
view.clearing.request=查看明确请求
view.clearing.request.failure.message=我们无法在数据库中找到项目
的明确请求 [ID: ]。请稍后再试。
view.by.releases=按发行版本查看
view.change.logs=查看更改日志
view.file.list=查看文件列表
view.obligations=查看义务
+view.sbom.import.result=View SBOM import result
view.scanner.findings.license=查看扫描器结果(许可证)
visibility=可视性
Visibility=Private:仅创建者(以及拥有所有可见性级别的管理员)可见
Me and Moderators:创建者和审核者可见
Group and Moderators:同一组的所有用户和审核者可见
Everyone:所有用户可见
@@ -1466,12 +1552,14 @@ whitesource.organization.api.key=Whitesource组织API key
whitesource.user.key=Whitesource用户key
with.attachments=带附件
with.cli.attachments=带CLI附件
+with.file.error=with fileError
without.attachments=没有附件
without.source.attachments=没有源附件
wiki=Wiki
wiki.url=Wiki URL
will.be.fulfilled.before.release=将在发布前完成
will.be.set.automatically=将自动设置
+will.not.be.created.if.it.does.not.contain=will not be created if it does not contain
write.access=写权限
wsimport=wsimport
x.rows.selected=%d行已选择
@@ -1482,6 +1570,7 @@ you.are.removed.from.the.list.of.moderators.for.the.previous.moderation.request=
you.are.signed.in.please.go.ahead.using.sw360=已登录,请继续使用SW360!
you.are.the.last.moderator.for.this.request.you.are.not.allowed.to.unsubscribe=您是此请求的最后一个审核者 - 您不能退订。
you.do.not.have.any.open.moderation.requests=没有任何开放的审核请求。
+you.do.not.have.permission.to.import.or.export.the.sbom=You do not have permission to import or export the SBOM
you.do.not.own.any.components=不拥有任何组件。
you.do.not.own.any.projects=不拥有任何项目。
you.have.accepted.the.previous.moderation.request=已接受之前的审核请求。
@@ -1697,4 +1786,13 @@ vulnerability.cve.year = CVE Year
vulnerability.cve.number = CVE Number
cve.year.must.be.greater.than.0 = Cve Year Must Greater Than 0
-cve.number.must.be.positive.number = Cve Number Must Be Positive Number
\ No newline at end of file
+cve.number.must.be.positive.number = Cve Number Must Be Positive Number
+
+## CycloneDX Component Type
+application=Application
+container=Container
+device=Device
+firmware=Firmware
+framework=Framework
+library=Library
+operating.system=Operating System
diff --git a/frontend/sw360-portlet/src/main/resources/org/eclipse/sw360/portal/portlets/base.properties b/frontend/sw360-portlet/src/main/resources/org/eclipse/sw360/portal/portlets/base.properties
index ad9e6e69ac..2c62ad83da 100644
--- a/frontend/sw360-portlet/src/main/resources/org/eclipse/sw360/portal/portlets/base.properties
+++ b/frontend/sw360-portlet/src/main/resources/org/eclipse/sw360/portal/portlets/base.properties
@@ -12,6 +12,8 @@ com.liferay.portlet.css-class-wrapper=sw360-portlet
com.liferay.portlet.header-portlet-css=/css/main.css
com.liferay.portlet.instanceable=false
+javax.portlet.version=3.0.1
+service=javax.portlet.Portlet.class
javax.portlet.portlet-mode=text/html;view,
javax.portlet.expiration-cache=0,
javax.portlet.init-param.copy-request-parameters=false
diff --git a/frontend/sw360-portlet/src/main/resources/sw360.properties b/frontend/sw360-portlet/src/main/resources/sw360.properties
index 30a63116b1..bf8340dea9 100644
--- a/frontend/sw360-portlet/src/main/resources/sw360.properties
+++ b/frontend/sw360-portlet/src/main/resources/sw360.properties
@@ -244,3 +244,15 @@ enable.security.vulnerability.monitoring=false
## This property is used to enable the tab SPDX Document feature.
#spdx.document.enabled = false
+
+## This property is used to control the user role for SBOM import and export.
+#sbom.import.export.access.usergroup=USER
+
+## This property is used to set the tool name in exported CycloneDx SBOM
+#sw360.tool.name = SW360
+
+## This property is used to set the tool name in exported CycloneDx SBOM
+#sw360.tool.vendor = Eclipse Foundation
+
+## This property is used to get the version of SW360 automatically from pom.xml of datahandler module.
+#datahandler.pom.file.path=/META-INF/maven/org.eclipse.sw360/datahandler/pom.xml
diff --git a/libraries/datahandler/pom.xml b/libraries/datahandler/pom.xml
index de8fa8d4a0..5038c230b9 100644
--- a/libraries/datahandler/pom.xml
+++ b/libraries/datahandler/pom.xml
@@ -273,6 +273,10 @@
com.tngtech.java
junit-dataprovider
+
+ org.apache.maven
+ maven-model
+
\ No newline at end of file
diff --git a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Constants.java b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Constants.java
index 2d95261136..83c8edb144 100644
--- a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Constants.java
+++ b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Constants.java
@@ -52,6 +52,14 @@ public class SW360Constants {
public static final String SUCCESS = "success";
public static final String FAILURE = "failure";
public static final String MESSAGE = "message";
+ public static final String NULL_STRING = "null";
+ public static final String PACKAGE_URL = "package-url";
+ public static final String PURL_ID = "purl.id";
+ public static final String XML_FILE_EXTENSION = "xml";
+ public static final String JSON_FILE_EXTENSION = "json";
+ public static final String PROJECT_IDS = "projectIds";
+ public static final String RELEASE_IDS = "releaseIds";
+
// Proper values of the "type" member to deserialize to CouchDB
public static final String TYPE_OBLIGATION = "obligation";
public static final String TYPE_OBLIGATIONS = "obligations";
@@ -86,6 +94,10 @@ public class SW360Constants {
public static final String SVM_SHORT_STATUS;
public static final String SVM_SHORT_STATUS_KEY;
public static final String SVM_SCHEDULER_EMAIL;
+ public static final String DATA_HANDLER_POM_FILE_PATH;
+ public static final String TOOL_NAME;
+ public static final String TOOL_VENDOR;
+ public static final UserGroup SBOM_IMPORT_EXPORT_ACCESS_USER_ROLE;
/**
* Hashmap containing the name field for each type.
@@ -178,6 +190,10 @@ private SW360Constants() {
SVM_SCHEDULER_EMAIL = props.getProperty("svm.scheduler.email", "");
SVM_MONITORINGLIST_ID = props.getProperty("svm.monitoringlist.id", "");
SPDX_DOCUMENT_ENABLED = Boolean.parseBoolean(props.getProperty("spdx.document.enabled", "false"));
+ DATA_HANDLER_POM_FILE_PATH = props.getProperty("datahandler.pom.file.path", "/META-INF/maven/org.eclipse.sw360/datahandler/pom.xml");
+ TOOL_NAME = props.getProperty("sw360.tool.name", "SW360");
+ TOOL_VENDOR = props.getProperty("sw360.tool.vendor", "Eclipse Foundation");
+ SBOM_IMPORT_EXPORT_ACCESS_USER_ROLE = UserGroup.valueOf(props.getProperty("sbom.import.export.access.usergroup", UserGroup.USER.name()));
}
private static Map.Entry pair(TFieldIdEnum field, String displayName){
diff --git a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java
index a446048770..1e41853d97 100644
--- a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java
+++ b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/SW360Utils.java
@@ -37,22 +37,23 @@
import org.eclipse.sw360.datahandler.thrift.users.RequestedAction;
import org.eclipse.sw360.datahandler.thrift.users.User;
import org.eclipse.sw360.datahandler.thrift.users.UserGroup;
-import org.eclipse.sw360.datahandler.thrift.users.UserService;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.ReleaseVulnerabilityRelation;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.Vulnerability;
import org.eclipse.sw360.datahandler.thrift.spdx.spdxdocument.SPDXDocument;
import org.eclipse.sw360.datahandler.thrift.spdx.documentcreationinformation.DocumentCreationInformation;
import org.eclipse.sw360.datahandler.thrift.spdx.spdxpackageinfo.PackageInformation;
-import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.thrift.TEnum;
import org.apache.thrift.TException;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.VulnerabilityService;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -348,6 +349,29 @@ public static String printFullname(User user) {
return sb.toString();
}
+ public static boolean isUserAtleastDesiredRoleInPrimaryOrSecondaryGroup(User user, UserGroup userGroup) {
+ if (PermissionUtils.isUserAtLeast(userGroup, user)) {
+ return true;
+ }
+ if (CommonUtils.isNullOrEmptyMap(user.getSecondaryDepartmentsAndRoles())) {
+ return false;
+ }
+ return (PermissionUtils.isUserAtLeastDesiredRoleInSecondaryGroup(userGroup,
+ user.getSecondaryDepartmentsAndRoles().values().stream().flatMap(Set::stream).collect(Collectors.toSet())));
+ }
+
+ public static String getSW360Version() {
+ final MavenXpp3Reader reader = new MavenXpp3Reader();
+ try (InputStreamReader iStreamReader = new InputStreamReader(
+ SW360Utils.class.getResourceAsStream(SW360Constants.DATA_HANDLER_POM_FILE_PATH))) {
+ Model model = reader.read(iStreamReader);
+ return model.getVersion();
+ } catch (Exception e) {
+ log.error("Error while getting SW360 version information: "+ e);
+ return SW360Constants.NA;
+ }
+ }
+
public static Collection getLinkedProjects(Project project, boolean deep, ThriftClients thriftClients, Logger log, User user) {
if (project != null) {
try {
@@ -374,6 +398,26 @@ public static Collection getLinkedProjects(String id, boolean deep,
return Collections.emptyList();
}
+ public static Set getLinkedReleaseIdsOfAllSubProjectsAsFlatList(Project project, Set projectIds, Set releaseIds, ProjectService.Iface client, User user) {
+ for (String projId : CommonUtils.getNullToEmptyKeyset(project.getLinkedProjects())) {
+ if (!projectIds.contains(projId)) {
+ try {
+ projectIds.add(projId);
+ project = client.getProjectById(projId, user);
+ if (project.getReleaseIdToUsageSize() > 0) {
+ releaseIds.addAll(project.getReleaseIdToUsage().keySet());
+ }
+ if (project.getLinkedProjectsSize() > 0) {
+ getLinkedReleaseIdsOfAllSubProjectsAsFlatList(project, projectIds, releaseIds, client, user);
+ }
+ } catch (TException e) {
+ log.error("Could not get linked projects while exporting SBOM: ", e);
+ }
+ }
+ }
+ return releaseIds;
+ }
+
public static Collection getLinkedProjectsAsFlatList(Project project, boolean deep, ThriftClients thriftClients, Logger log, User user) {
return flattenProjectLinkTree(getLinkedProjects(project, deep, thriftClients, log, user));
}
diff --git a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/ThriftEnumUtils.java b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/ThriftEnumUtils.java
index e1b94290ff..305f90b32c 100644
--- a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/ThriftEnumUtils.java
+++ b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/common/ThriftEnumUtils.java
@@ -359,6 +359,17 @@ private ThriftEnumUtils() {
.put(UserAccess.READ_WRITE, "Read and Write")
.build();
+ private static final ImmutableMap MAP_CYCLONE_DX_COMPONENT_TYPE_STRING = ImmutableMap.builder()
+ .put(CycloneDxComponentType.APPLICATION, "Application")
+ .put(CycloneDxComponentType.CONTAINER, "Container")
+ .put(CycloneDxComponentType.DEVICE, "Device")
+ .put(CycloneDxComponentType.FILE, "File")
+ .put(CycloneDxComponentType.FIRMWARE, "Firmware")
+ .put(CycloneDxComponentType.FRAMEWORK, "Framework")
+ .put(CycloneDxComponentType.LIBRARY, "Library")
+ .put(CycloneDxComponentType.OPERATING_SYSTEM, "Operating System")
+ .build();
+
public static final ImmutableMap, Map extends TEnum, String>>
MAP_ENUMTYPE_MAP = ImmutableMap., Map extends TEnum, String>>builder()
.put(ComponentType.class, MAP_COMPONENT_TYPE_STRING)
@@ -395,6 +406,7 @@ private ThriftEnumUtils() {
.put(ObligationType.class, MAP_OBLIGATION_TYPE_STRING)
.put(ClearingRequestPriority.class, MAP_CLEARING_REQUEST_PRIORITY_STRING)
.put(UserAccess.class, MAP_USER_ACCESS_STRING)
+ .put(CycloneDxComponentType.class, MAP_CYCLONE_DX_COMPONENT_TYPE_STRING)
.build();
public static String enumToString(TEnum value) {
@@ -413,7 +425,8 @@ public static > T stringToEnum(String in, Class clazz){
return null;
}
- public static > T enumByString(String in, Class clazz){
+
+ public static > T enumByString(String in, Class clazz){
Map extends TEnum, String> map = MAP_ENUMTYPE_MAP.get(clazz);
for (T t : clazz.getEnumConstants()) {
if(map.get(t).equals(in)) return t;
diff --git a/libraries/datahandler/src/main/thrift/components.thrift b/libraries/datahandler/src/main/thrift/components.thrift
index ed264a1a0c..b43ea45416 100644
--- a/libraries/datahandler/src/main/thrift/components.thrift
+++ b/libraries/datahandler/src/main/thrift/components.thrift
@@ -17,6 +17,7 @@ include "licenses.thrift"
namespace java org.eclipse.sw360.datahandler.thrift.components
namespace php sw360.thrift.components
+typedef sw360.CycloneDxComponentType CycloneDxComponentType
typedef sw360.RequestStatus RequestStatus
typedef sw360.RequestSummary RequestSummary
typedef sw360.AddDocumentRequestSummary AddDocumentRequestSummary
@@ -320,6 +321,7 @@ struct Component {
30: optional map> roles, //customized roles with set of mail addresses
80: optional Visibility visbility = sw360.Visibility.EVERYONE,
81: optional string businessUnit,
+ 82: optional CycloneDxComponentType cdxComponentType, // required field in CycloneDX specifications
// information from external data sources
31: optional map externalIds,
diff --git a/libraries/datahandler/src/main/thrift/projects.thrift b/libraries/datahandler/src/main/thrift/projects.thrift
index 5950f08464..5547ed8ba8 100644
--- a/libraries/datahandler/src/main/thrift/projects.thrift
+++ b/libraries/datahandler/src/main/thrift/projects.thrift
@@ -501,6 +501,21 @@ service ProjectService {
**/
RequestSummary importBomFromAttachmentContent(1: User user, 2:string attachmentContentId);
+ /**
+ * Parse a CycloneDx SBoM file (XML or JSON) and write the information to SW360 as Project / Component / Release
+ */
+ RequestSummary importCycloneDxFromAttachmentContent(1: User user, 2: string attachmentContentId, 3: string projectId) throws (1: SW360Exception exp);
+
+ /**
+ * Export a CycloneDx SBoM file (XML or JSON) for a Project
+ */
+ RequestSummary exportCycloneDxSbom(1: string projectId, 2: string bomType, 3: bool includeSubProjReleases, 4: User user) throws (1: SW360Exception exp);
+
+ /**
+ * Get the SBOM import statistics information from attachment as String (JSON formatted)
+ */
+ string getSbomImportInfoFromAttachmentAsString(string attachmentContentId) throws (1: SW360Exception exp);
+
/**
* create clearing request for project
*/
diff --git a/libraries/datahandler/src/main/thrift/sw360.thrift b/libraries/datahandler/src/main/thrift/sw360.thrift
index 8d429cc832..21b2598d27 100644
--- a/libraries/datahandler/src/main/thrift/sw360.thrift
+++ b/libraries/datahandler/src/main/thrift/sw360.thrift
@@ -152,6 +152,17 @@ enum ClearingReportStatus {
DOWNLOAD = 2
}
+enum CycloneDxComponentType {
+ APPLICATION = 0,
+ CONTAINER = 1,
+ DEVICE = 2,
+ FILE = 3,
+ FIRMWARE = 4,
+ FRAMEWORK = 5,
+ LIBRARY = 6,
+ OPERATING_SYSTEM = 7,
+}
+
struct ConfigContainer {
1: optional string id,
2: optional string revision,
diff --git a/pom.xml b/pom.xml
index a482cff771..455444a3b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,7 +138,7 @@
4.10.0
1.1.1
1.1.5
- 1.1.1
+ 1.4.1
4.1.2
1.18.24
2.3.6
@@ -310,6 +310,16 @@
jakarta.xml.bind-api
${jakarta-xml-bind.version}
+
+ org.cyclonedx
+ cyclonedx-core-java
+ 7.3.2
+
+
+ org.apache.maven
+ maven-model
+ 3.9.2
+
org.glassfish.jaxb
diff --git a/rest/resource-server/src/docs/asciidoc/projects.adoc b/rest/resource-server/src/docs/asciidoc/projects.adoc
index 6f93810f29..ec364022eb 100644
--- a/rest/resource-server/src/docs/asciidoc/projects.adoc
+++ b/rest/resource-server/src/docs/asciidoc/projects.adoc
@@ -621,9 +621,9 @@ include::{snippets}/should_document_update_project_vulnerabilities/links.adoc[]
[[resources-import-sbom]]
==== Import SBOM
-A `POST` request is used to import SBOM in SPDX format.
+A `POST` request is used to import a SBOM. Only SPDX and CycloneDX files are accepted.
-[red]#Request parameters#
+[red]#Request parameter#
|===
|Parameter |Description
@@ -631,7 +631,7 @@ A `POST` request is used to import SBOM in SPDX format.
|File type of SBOM
|===
-[red]#Request structure#
+[red]#Request body#
|===
Type |Description
@@ -639,17 +639,46 @@ Type |Description
|Path of the SBOM file
|===
+[red]#Response structure#
+|===
+|Complete Project will be returned
+|===
+
+===== Example request 1
+include::{snippets}/should_document_import_spdx/curl-request.adoc[]
+
+===== Example response 1
+include::{snippets}/should_document_import_spdx/http-response.adoc[]
+
+===== Example request 2
+include::{snippets}/should_document_import_cyclonedx/curl-request.adoc[]
+
+===== Example response 2
+include::{snippets}/should_document_import_cyclonedx/http-response.adoc[]
+
+[[resources-import-sbom-on-project]]
+==== Import SBOM on project
+
+A `POST` request is used to import a SBOM on a project. Currently only CycloneDX(.xml/.json) files are supported.
+
+[red]#Request body#
+|===
+Type |Description
+
+|file
+|Path of the SBOM file
+|===
[red]#Response structure#
|===
|Complete Project will be returned
|===
-===== Example request
-include::{snippets}/should_document_import_sbom/curl-request.adoc[]
+===== Example request 1
+include::{snippets}/should_document_import_cyclonedx_on_project/curl-request.adoc[]
-===== Example response
-include::{snippets}/should_document_import_sbom/http-response.adoc[]
+===== Example response 1
+include::{snippets}/should_document_import_cyclonedx_on_project/http-response.adoc[]
[[resources-project-getprojectcount]]
==== Get project count of a user
diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java
index ee7b59975a..68dab865b8 100644
--- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java
+++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java
@@ -107,6 +107,7 @@ public Sw360Module() {
@JsonInclude(JsonInclude.Include.NON_NULL)
static abstract class MultiStatusMixin extends MultiStatus {
+ @Override
@JsonProperty("status")
abstract public int getStatusCode();
}
@@ -390,7 +391,9 @@ static abstract class UserMixin extends User {
"setAdditionalData",
"setModifiedOn",
"setModifiedBy",
- "modifiedBy"
+ "modifiedBy",
+ "cdxComponentType",
+ "setCdxComponentType"
})
static abstract class ComponentMixin extends Component {
@Override
diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java
index 02f7128686..483375e0a3 100644
--- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java
+++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/ProjectController.java
@@ -17,6 +17,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import com.google.gson.Gson;
import com.google.gson.JsonObject;
import lombok.NonNull;
@@ -43,7 +44,6 @@
import org.eclipse.sw360.datahandler.thrift.RequestSummary;
import org.eclipse.sw360.datahandler.thrift.SW360Exception;
import org.eclipse.sw360.datahandler.thrift.Source;
-import org.eclipse.sw360.datahandler.thrift.ThriftClients;
import org.eclipse.sw360.datahandler.thrift.attachments.Attachment;
import org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent;
import org.eclipse.sw360.datahandler.thrift.attachments.AttachmentType;
@@ -62,7 +62,6 @@
import org.eclipse.sw360.datahandler.thrift.projects.ProjectClearingState;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectLink;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectProjectRelationship;
-import org.eclipse.sw360.datahandler.thrift.projects.ProjectService;
import org.eclipse.sw360.datahandler.thrift.users.User;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
import org.eclipse.sw360.datahandler.thrift.vulnerabilities.ProjectVulnerabilityRating;
@@ -1033,36 +1032,88 @@ public ResponseEntity>> getUsedByProjectDet
@PreAuthorize("hasAuthority('WRITE')")
@RequestMapping(value = PROJECTS_URL + "/import/SBOM", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity> importSBOM(@RequestParam(value = "type", required = true) String type,
- @RequestBody MultipartFile file) throws TException {
+ @RequestBody MultipartFile file) throws TException {
final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
Attachment attachment = null;
final RequestSummary requestSummary;
- if (!type.equalsIgnoreCase("SPDX")) {
- return new ResponseEntity("Invalid SBOM file type. It currently only supports SPDX(.rdf/.xml) files.",
+ String projectId = null;
+ Map messageMap = new HashMap<>();
+
+ if (!(type.equalsIgnoreCase("SPDX") || type.equalsIgnoreCase("CycloneDX"))) {
+ return new ResponseEntity("Invalid SBOM file type. Only SPDX(.rdf/.xml) and CycloneDX(.json/.xml) files are supported.",
HttpStatus.BAD_REQUEST);
}
+
try {
attachment = attachmentService.uploadAttachment(file, new Attachment(), sw360User);
- try {
- requestSummary = projectService.importSBOM(sw360User, attachment.getAttachmentContentId());
- } catch (Exception e) {
- log.error("Failed to import SBOM", e.getMessage());
- throw new RuntimeException(e.getMessage());
+ } catch (IOException e) {
+ log.error("failed to upload attachment", e);
+ throw new RuntimeException("failed to upload attachment", e);
+ }
+
+ if (type.equalsIgnoreCase("SPDX")) {
+ requestSummary = projectService.importSPDX(sw360User, attachment.getAttachmentContentId());
+
+ if (!(requestSummary.getRequestStatus() == RequestStatus.SUCCESS)) {
+ return new ResponseEntity(requestSummary.getMessage(), HttpStatus.BAD_REQUEST);
+ }
+ projectId = requestSummary.getMessage();
+ } else {
+ requestSummary = projectService.importCycloneDX(sw360User, attachment.getAttachmentContentId(), "");
+
+ if (requestSummary.getRequestStatus() == RequestStatus.FAILURE) {
+ return new ResponseEntity(requestSummary.getMessage(), HttpStatus.BAD_REQUEST);
}
+ String jsonMessage = requestSummary.getMessage();
+ messageMap = new Gson().fromJson(jsonMessage, Map.class);
+ projectId = messageMap.get("projectId");
+
+ if (requestSummary.getRequestStatus() == RequestStatus.DUPLICATE) {
+ return new ResponseEntity("A project with same name and version already exists. The projectId is: "
+ + projectId, HttpStatus.CONFLICT);
+ }
+ }
+
+ Project project = projectService.getProjectForUserById(projectId, sw360User);
+ HalResource halResource = createHalProject(project, sw360User);
+ return new ResponseEntity>(halResource, HttpStatus.OK);
+ }
+
+ @PreAuthorize("hasAuthority('WRITE')")
+ @RequestMapping(value = PROJECTS_URL + "/{id}/import/SBOM", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
+ public ResponseEntity> importSBOMonProject(@PathVariable(value = "id", required = true) String id,
+ @RequestBody MultipartFile file) throws TException {
+ final User sw360User = restControllerHelper.getSw360UserFromAuthentication();
+ Attachment attachment = null;
+ final RequestSummary requestSummary;
+ String projectId = null;
+ Map messageMap = new HashMap<>();
+
+ try {
+ attachment = attachmentService.uploadAttachment(file, new Attachment(), sw360User);
} catch (IOException e) {
log.error("failed to upload attachment", e);
throw new RuntimeException("failed to upload attachment", e);
}
- String projectId = requestSummary.getMessage();
+ requestSummary = projectService.importCycloneDX(sw360User, attachment.getAttachmentContentId(), id);
- if (!(requestSummary.requestStatus == RequestStatus.SUCCESS && CommonUtils.isNotNullEmptyOrWhitespace(projectId))) {
- return new ResponseEntity("Invalid SBOM file", HttpStatus.BAD_REQUEST);
+ if (requestSummary.getRequestStatus() == RequestStatus.FAILURE) {
+ return new ResponseEntity(requestSummary.getMessage(), HttpStatus.BAD_REQUEST);
}
+ String jsonMessage = requestSummary.getMessage();
+ messageMap = new Gson().fromJson(jsonMessage, Map.class);
+ projectId = messageMap.get("projectId");
+
+ if (requestSummary.getRequestStatus() == RequestStatus.DUPLICATE) {
+ return new ResponseEntity(
+ "A project with same name and version already exists. The projectId is: " + projectId,
+ HttpStatus.CONFLICT);
+ }
+
Project project = projectService.getProjectForUserById(projectId, sw360User);
- HttpStatus status = HttpStatus.OK;
HalResource halResource = createHalProject(project, sw360User);
- return new ResponseEntity>(halResource, status);
+ return new ResponseEntity>(halResource, HttpStatus.OK);
}
@Override
diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java
index b499d1037f..f1a551a4a8 100644
--- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java
+++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/project/Sw360ProjectService.java
@@ -484,14 +484,26 @@ public int getMyAccessibleProjectCounts(User sw360User) throws TException {
}
/**
- * Import SBOM using the method on the thrift client.
+ * Import SPDX SBOM using the method on the thrift client.
* @param user User uploading the SBOM
* @param attachmentContentId Id of the attachment uploaded
* @return RequestSummary
* @throws TException
*/
- public RequestSummary importSBOM(User user, String attachmentContentId) throws TException {
+ public RequestSummary importSPDX(User user, String attachmentContentId) throws TException {
ProjectService.Iface sw360ProjectClient = getThriftProjectClient();
return sw360ProjectClient.importBomFromAttachmentContent(user, attachmentContentId);
}
+
+ /**
+ * Import CycloneDX SBOM using the method on the thrift client.
+ * @param user User uploading the SBOM
+ * @param attachmentContentId Id of the attachment uploaded
+ * @return RequestSummary
+ * @throws TException
+ */
+ public RequestSummary importCycloneDX(User user, String attachmentContentId, String projectId) throws TException {
+ ProjectService.Iface sw360ProjectClient = getThriftProjectClient();
+ return sw360ProjectClient.importCycloneDxFromAttachmentContent(user, attachmentContentId, CommonUtils.nullToEmptyString(projectId));
+ }
}
diff --git a/rest/resource-server/src/test/java/org/eclipse/sw360/rest/resourceserver/restdocs/ProjectSpecTest.java b/rest/resource-server/src/test/java/org/eclipse/sw360/rest/resourceserver/restdocs/ProjectSpecTest.java
index c6c1204433..32527de37e 100644
--- a/rest/resource-server/src/test/java/org/eclipse/sw360/rest/resourceserver/restdocs/ProjectSpecTest.java
+++ b/rest/resource-server/src/test/java/org/eclipse/sw360/rest/resourceserver/restdocs/ProjectSpecTest.java
@@ -141,12 +141,8 @@ public class ProjectSpecTest extends TestRestDocsSpecBase {
private SW360ReportService sw360ReportServiceMock;
private Project project;
- private Project sBOMProject;
private Set projectList = new HashSet<>();
private Attachment attachment;
- private Attachment sBOMAttachment;
- private RequestSummary requestSummary = new RequestSummary();
-
@Before
public void before() throws TException, IOException {
@@ -303,34 +299,58 @@ public void before() throws TException, IOException {
Set releaseIds = new HashSet<>(Collections.singletonList("3765276512"));
Set releaseIdsTransitive = new HashSet<>(Arrays.asList("3765276512", "5578999"));
- sBOMAttachment = new Attachment("3331231254", "bom.spdx.rdf");
- sBOMAttachment.setSha1("df903e491d3863477568896089ee9457bc316183");
- sBOMAttachment.setAttachmentType(AttachmentType.SBOM);
- Set sbomSet = new HashSet<>();
- sbomSet.add(sBOMAttachment);
-
- sBOMProject = new Project();
- sBOMProject.setId("333655");
- sBOMProject.setName("Green Web");
- sBOMProject.setVersion("1.0.1");
- sBOMProject.setCreatedOn("2022-11-13");
- sBOMProject.setBusinessUnit("sw360 BA");
- sBOMProject.setState(ProjectState.ACTIVE);
- sBOMProject.setClearingState(ProjectClearingState.OPEN);
- sBOMProject.setProjectType(ProjectType.PRODUCT);
- sBOMProject.setCreatedBy("admin@sw360.org");
- sBOMProject.setAttachments(sbomSet);
-
- requestSummary.setMessage(sBOMProject.getId());
- requestSummary.setRequestStatus(RequestStatus.SUCCESS);
-
- given(this.projectServiceMock.importSBOM(any(),any())).willReturn(requestSummary);
+ Attachment SPDXAttachment = new Attachment("3331231254", "bom.spdx.rdf");
+ SPDXAttachment.setSha1("df903e491d3863477568896089ee9457bc316183");
+ SPDXAttachment.setAttachmentType(AttachmentType.SBOM);
+ Set spdxSet = new HashSet<>();
+ spdxSet.add(SPDXAttachment);
+
+ Attachment CycloneDXAttachment = new Attachment("3331111231254", "sampleBOM.xml");
+ CycloneDXAttachment.setSha1("df3e491d3863477568896089ee9457bc316183");
+ CycloneDXAttachment.setAttachmentType(AttachmentType.SBOM);
+ Set cyclonedxSet = new HashSet<>();
+ cyclonedxSet.add(CycloneDXAttachment);
+
+ Project SPDXProject = new Project();
+ SPDXProject.setId("333655");
+ SPDXProject.setName("Green Web");
+ SPDXProject.setVersion("1.0.1");
+ SPDXProject.setCreatedOn("2022-11-13");
+ SPDXProject.setBusinessUnit("sw360 BA");
+ SPDXProject.setState(ProjectState.ACTIVE);
+ SPDXProject.setClearingState(ProjectClearingState.OPEN);
+ SPDXProject.setProjectType(ProjectType.PRODUCT);
+ SPDXProject.setCreatedBy("admin@sw360.org");
+ SPDXProject.setAttachments(spdxSet);
+
+ Project cycloneDXProject = new Project();
+ cycloneDXProject.setId("3336565435");
+ cycloneDXProject.setName("Azure Web");
+ cycloneDXProject.setVersion("1.0.2");
+ cycloneDXProject.setCreatedOn("2022-11-13");
+ cycloneDXProject.setBusinessUnit("sw360 BA");
+ cycloneDXProject.setState(ProjectState.ACTIVE);
+ cycloneDXProject.setClearingState(ProjectClearingState.OPEN);
+ cycloneDXProject.setProjectType(ProjectType.PRODUCT);
+ cycloneDXProject.setCreatedBy("admin@sw360.org");
+ cycloneDXProject.setAttachments(cyclonedxSet);
+
+ RequestSummary requestSummaryForSPDX = new RequestSummary();
+ requestSummaryForSPDX.setMessage(SPDXProject.getId());
+ requestSummaryForSPDX.setRequestStatus(RequestStatus.SUCCESS);
+
+ RequestSummary requestSummaryForCycloneDX = new RequestSummary();
+ requestSummaryForCycloneDX.setMessage("{\"projectId\":\"" + cycloneDXProject.getId() + "\"}");
+
+ given(this.projectServiceMock.importSPDX(any(),any())).willReturn(requestSummaryForSPDX);
+ given(this.projectServiceMock.importCycloneDX(any(),any(),any())).willReturn(requestSummaryForCycloneDX);
given(this.sw360ReportServiceMock.getProjectBuffer(any(),anyBoolean())).willReturn(ByteBuffer.allocate(10000));
given(this.projectServiceMock.getProjectsForUser(any(), any())).willReturn(projectList);
given(this.projectServiceMock.getProjectForUserById(eq(project.getId()), any())).willReturn(project);
given(this.projectServiceMock.getProjectForUserById(eq(project2.getId()), any())).willReturn(project2);
given(this.projectServiceMock.getProjectForUserById(eq(projectForAtt.getId()), any())).willReturn(projectForAtt);
- given(this.projectServiceMock.getProjectForUserById(eq(sBOMProject.getId()), any())).willReturn(sBOMProject);
+ given(this.projectServiceMock.getProjectForUserById(eq(SPDXProject.getId()), any())).willReturn(SPDXProject);
+ given(this.projectServiceMock.getProjectForUserById(eq(cycloneDXProject.getId()), any())).willReturn(cycloneDXProject);
given(this.projectServiceMock.searchLinkingProjects(eq(project.getId()), any())).willReturn(usedByProjectList);
given(this.projectServiceMock.searchProjectByName(eq(project.getName()), any())).willReturn(projectListByName);
given(this.projectServiceMock.searchProjectByTag(any(), any())).willReturn(new ArrayList(projectList));
@@ -1675,7 +1695,7 @@ public void should_document_get_my_projects() throws Exception {
}
@Test
- public void should_document_import_sbom() throws Exception {
+ public void should_document_import_spdx() throws Exception {
MockMultipartFile file = new MockMultipartFile("file","file=@/bom.spdx.rdf".getBytes());
String accessToken = TestHelper.getAccessToken(mockMvc, testUserId, testUserPassword);
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.post("/api/projects/import/SBOM")
@@ -1700,7 +1720,7 @@ public void should_document_get_project_count() throws Exception {
fieldWithPath("count").description("Count of projects for a user.").optional()
)));
}
-
+
@Test
public void should_document_create_summary_administration() throws Exception {
String accessToken = TestHelper.getAccessToken(mockMvc, testUserId, testUserPassword);
@@ -1774,7 +1794,7 @@ public void should_document_get_project_report() throws Exception{
)
));
}
-
+
@Test
public void should_document_get_project_report_without_mail_req() throws Exception{
String accessToken = TestHelper.getAccessToken(mockMvc, testUserId, testUserPassword);
@@ -1792,4 +1812,27 @@ public void should_document_get_project_report_without_mail_req() throws Excepti
parameterWithName("mailrequest").description("Downloading project report requirted mail link. Possible values are ``")
)));
}
+
+ @Test
+ public void should_document_import_cyclonedx() throws Exception {
+ MockMultipartFile file = new MockMultipartFile("file","file=@/sampleBOM.xml".getBytes());
+ String accessToken = TestHelper.getAccessToken(mockMvc, testUserId, testUserPassword);
+ MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.post("/api/projects/import/SBOM")
+ .content(file.getBytes())
+ .contentType(MediaType.MULTIPART_FORM_DATA)
+ .header("Authorization", "Bearer " + accessToken)
+ .queryParam("type", "CycloneDX");
+ this.mockMvc.perform(builder).andExpect(status().isOk()).andDo(this.documentationHandler.document());
+ }
+
+ @Test
+ public void should_document_import_cyclonedx_on_project() throws Exception {
+ MockMultipartFile file = new MockMultipartFile("file","file=@/sampleBOM.xml".getBytes());
+ String accessToken = TestHelper.getAccessToken(mockMvc, testUserId, testUserPassword);
+ MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.post("/api/projects/"+project.getId()+"/import/SBOM")
+ .content(file.getBytes())
+ .contentType(MediaType.MULTIPART_FORM_DATA)
+ .header("Authorization", "Bearer " + accessToken);
+ this.mockMvc.perform(builder).andExpect(status().isOk()).andDo(this.documentationHandler.document());
+ }
}