/* * Copyright Siemens AG, 2014-2017. Part of the SW360 Portal Project. * With modifications by Bosch Software Innovations GmbH, 2016. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.sw360.datahandler.common; import com.google.common.collect.ImmutableMap; import org.eclipse.sw360.datahandler.thrift.VerificationState; import org.eclipse.sw360.datahandler.thrift.datasources.SourceDatabase; import org.eclipse.sw360.datahandler.thrift.ModerationState; import org.eclipse.sw360.datahandler.thrift.Visibility; import org.eclipse.sw360.datahandler.thrift.attachments.AttachmentType; import org.eclipse.sw360.datahandler.thrift.attachments.CheckStatus; import org.eclipse.sw360.datahandler.thrift.components.*; import org.eclipse.sw360.datahandler.thrift.projects.ProjectClearingState; import org.eclipse.sw360.datahandler.thrift.projects.ProjectRelationship; import org.eclipse.sw360.datahandler.thrift.projects.ProjectState; import org.eclipse.sw360.datahandler.thrift.projects.ProjectType; import org.eclipse.sw360.datahandler.thrift.users.UserGroup; import org.eclipse.sw360.datahandler.thrift.vulnerabilities.VulnerabilityRatingForProject; import org.apache.thrift.TEnum; import java.util.Map; /** * @author Cedric.Bodet@tngtech.com * @author Gerrit.Grenzebach@tngtech.com * @author Johannes.Najjar@tngtech.com * @author Andreas.Reichel@tngtech.com * @author alex.borodin@evosoft.com */ public class ThriftEnumUtils { private ThriftEnumUtils() { // Utility class with only static functions } private static final ImmutableMap<SourceDatabase, String> MAP_SOURCE_DATABASE_STRING = ImmutableMap.of( SourceDatabase.BDP, "BDP" ); //! Enumeration "fancy name" mappings private static final ImmutableMap<ComponentType, String> MAP_COMPONENT_TYPE_STRING = ImmutableMap.<ComponentType, String>builder() .put(ComponentType.OSS, "OSS") .put(ComponentType.COTS, "COTS") .put(ComponentType.INTERNAL, "Internal") .put(ComponentType.INNER_SOURCE, "Inner Source") .put(ComponentType.SERVICE, "Service") .put(ComponentType.FREESOFTWARE, "Freeware") .build(); private static final ImmutableMap<ProjectType, String> MAP_PROJECT_TYPE_STRING = ImmutableMap.of( ProjectType.CUSTOMER, "Customer Project" , ProjectType.INTERNAL, "Internal Project" , ProjectType.PRODUCT, "Product" , ProjectType.SERVICE, "Service"); private static final ImmutableMap<AttachmentType, String> MAP_ATTACHMENT_TYPE_STRING = ImmutableMap.<AttachmentType, String>builder() .put(AttachmentType.DOCUMENT, "Document") .put(AttachmentType.SOURCE, "Source file") .put(AttachmentType.DESIGN, "Design document") .put(AttachmentType.REQUIREMENT, "Requirement document") .put(AttachmentType.CLEARING_REPORT, "Clearing report") .put(AttachmentType.COMPONENT_LICENSE_INFO_XML, "Component license information (XML)") .put(AttachmentType.COMPONENT_LICENSE_INFO_COMBINED, "Component license information (Combined)") .put(AttachmentType.SCAN_RESULT_REPORT, "Scan result report") .put(AttachmentType.SCAN_RESULT_REPORT_XML, "Scan result report (XML)") .put(AttachmentType.SOURCE_SELF, "Source file (Self-made)") .put(AttachmentType.BINARY, "Binaries") .put(AttachmentType.BINARY_SELF, "Binaries (Self-made)") .put(AttachmentType.DECISION_REPORT, "Decision report") .put(AttachmentType.LEGAL_EVALUATION, "Legal evaluation report") .put(AttachmentType.LICENSE_AGREEMENT, "License agreement") .put(AttachmentType.SCREENSHOT, "Screenshot of website") .put(AttachmentType.OTHER, "Other") .build(); private static final ImmutableMap<ClearingState, String> MAP_CLEARING_STATUS_STRING = ImmutableMap.of( ClearingState.NEW_CLEARING, "New", ClearingState.SENT_TO_FOSSOLOGY, "Sent to Fossology", ClearingState.UNDER_CLEARING, "Under clearing", ClearingState.REPORT_AVAILABLE, "Report available", ClearingState.APPROVED, "Approved"); private static final ImmutableMap<FossologyStatus, String> MAP_FOSSOLOGY_STATE_STRING = ImmutableMap.<FossologyStatus, String>builder() .put(FossologyStatus.CONNECTION_FAILED, "Connection to FOSSology failed") .put(FossologyStatus.NON_EXISTENT, "Non available or removed on remote server") .put(FossologyStatus.INACCESSIBLE, "Read permission to upload is denied") .put(FossologyStatus.ERROR, "Error") .put(FossologyStatus.NOT_SENT, "Not yet sent") .put(FossologyStatus.SENT, "Sent") .put(FossologyStatus.SCANNING, "Job scanning") .put(FossologyStatus.OPEN, "Open") .put(FossologyStatus.IN_PROGRESS, "Assigned in progress") .put(FossologyStatus.CLOSED, "Closed by assignee") .put(FossologyStatus.REJECTED, "Rejected by assignee") .put(FossologyStatus.REPORT_AVAILABLE, "Clearing report is available") .build(); private static final ImmutableMap<ModerationState, String> MAP_MODERATION_STATE_STRING = ImmutableMap.of( ModerationState.APPROVED, "Approved", ModerationState.PENDING, "Pending", ModerationState.REJECTED, "Rejected", ModerationState.INPROGRESS, "In progress"); private static final ImmutableMap<ProjectRelationship, String> MAP_PROJECT_RELATION_STRING = ImmutableMap.of( ProjectRelationship.UNKNOWN, "Unknown" , ProjectRelationship.DUPLICATE, "Duplicate" , ProjectRelationship.CONTAINED, "Is a subproject" , ProjectRelationship.REFERRED, "Related"); private static final ImmutableMap<ReleaseRelationship, String> MAP_RELEASE_RELATION_STRING = ImmutableMap.of( ReleaseRelationship.UNKNOWN, "Unknown" , ReleaseRelationship.CONTAINED, "Is a subrelease" , ReleaseRelationship.REFERRED, "Related"); private static final ImmutableMap<RepositoryType, String> MAP_REPOSITORY_TYPE_STRING = ImmutableMap.<RepositoryType, String>builder() .put(RepositoryType.UNKNOWN, "Unknown") .put(RepositoryType.GIT, "Git") .put(RepositoryType.CLEARCASE, "ClearCase") .put(RepositoryType.SVN, "Subversion (SVN)") .put(RepositoryType.CVS, "CVS") .put(RepositoryType.MERCURIAL, "Mercurial") .put(RepositoryType.PERFORCE, "Perforce") .put(RepositoryType.VISUAL_SOURCESAFE, "Visual SourceSafe") .put(RepositoryType.BAZAAR, "Bazaar") .put(RepositoryType.ALIENBRAIN, "Alienbrain") .put(RepositoryType.TEAM_FOUNDATION_SERVER, "Team Foundation Server") .put(RepositoryType.RATIONAL_SYNERGY, "IBM Rational Synergy") .put(RepositoryType.PTC_INTEGRITY, "PTC Integrity") .put(RepositoryType.DTR, "SAP Design Time Repository (DTR)") .put(RepositoryType.DARCS, "Darcs") .put(RepositoryType.FOSSIL, "Fossil") .put(RepositoryType.GNU_ARCH, "GNU arch") .put(RepositoryType.MONOTONE, "Monotone") .put(RepositoryType.BIT_KEEPER, "BitKeeper") .put(RepositoryType.RATIONAL_TEAM_CONCERT, "Rational Team Concert") .put(RepositoryType.RCS, "Revision Control System (RCS)") .build(); private static final ImmutableMap<MainlineState, String> MAP_MAINLINE_STATE_STRING = ImmutableMap.of( MainlineState.OPEN, "Open", MainlineState.MAINLINE, "Mainline", MainlineState.SPECIFIC, "Specific", MainlineState.PHASEOUT, "Phaseout" ); private static final ImmutableMap<CheckStatus, String> MAP_CHECK_STATUS_STRING = ImmutableMap.of( CheckStatus.ACCEPTED,"Accepted", CheckStatus.REJECTED,"Rejected", CheckStatus.NOTCHECKED,"Not checked" ); private static final ImmutableMap<Visibility, String> MAP_VISIBILITY_STRING = ImmutableMap.of( Visibility.PRIVATE, "Private" , Visibility.ME_AND_MODERATORS, "Me and Moderators", Visibility.BUISNESSUNIT_AND_MODERATORS, "Group and Moderators", Visibility.EVERYONE, "Everyone" ); private static final ImmutableMap<ProjectState, String> MAP_PROJECT_STATE_STRING = ImmutableMap.of( ProjectState.ACTIVE, "Active" , ProjectState.PHASE_OUT, "Phase out" , ProjectState.UNKNOWN, "Unknown"); private static final ImmutableMap<ProjectClearingState, String> MAP_PROJECT_CLEARING_STATE_STRING = ImmutableMap.of( ProjectClearingState.OPEN, "Open", ProjectClearingState.IN_PROGRESS, "In Progress", ProjectClearingState.CLOSED, "Closed"); private static final ImmutableMap<UserGroup, String> MAP_USER_GROUP_STRING = ImmutableMap.of( UserGroup.USER, "User" , UserGroup.CLEARING_ADMIN, "Clearing Admin" , UserGroup.ADMIN, "Admin", UserGroup.ECC_ADMIN, "ECC Admin" ); private static final ImmutableMap<VulnerabilityRatingForProject, String> MAP_VULNERABILITY_RATING_FOR_PROJECT_STRING = ImmutableMap.of( VulnerabilityRatingForProject.NOT_CHECKED, "Not Checked" , VulnerabilityRatingForProject.IRRELEVANT, "Irrelevant" , VulnerabilityRatingForProject.RESOLVED, "Resolved" , VulnerabilityRatingForProject.APPLICABLE, "Applicable" ); private static final ImmutableMap<VerificationState, String> MAP_VERIFICATION_STATUS_STRING = ImmutableMap.of( VerificationState.NOT_CHECKED, "Not Checked" , VerificationState.CHECKED, "Checked" , VerificationState.INCORRECT, "Incorrect" ); private static final ImmutableMap<ECCStatus, String> MAP_ECC_STATUS_STRING = ImmutableMap.of( ECCStatus.OPEN, "Open" , ECCStatus.IN_PROGRESS, "In Progress" , ECCStatus.APPROVED, "Approved", ECCStatus.REJECTED, "Rejected" ); public static final ImmutableMap<Class<? extends TEnum>, Map<? extends TEnum, String>> MAP_ENUMTYPE_MAP = ImmutableMap.<Class<? extends TEnum>, Map<? extends TEnum, String>>builder() .put(SourceDatabase.class, MAP_SOURCE_DATABASE_STRING) .put(ComponentType.class, MAP_COMPONENT_TYPE_STRING) .put(ProjectType.class, MAP_PROJECT_TYPE_STRING) .put(AttachmentType.class, MAP_ATTACHMENT_TYPE_STRING) .put(ClearingState.class, MAP_CLEARING_STATUS_STRING) .put(FossologyStatus.class, MAP_FOSSOLOGY_STATE_STRING) .put(ModerationState.class, MAP_MODERATION_STATE_STRING) .put(ProjectRelationship.class, MAP_PROJECT_RELATION_STRING) .put(ReleaseRelationship.class, MAP_RELEASE_RELATION_STRING) .put(RepositoryType.class, MAP_REPOSITORY_TYPE_STRING) .put(MainlineState.class, MAP_MAINLINE_STATE_STRING) .put(UserGroup.class, MAP_USER_GROUP_STRING) .put(Visibility.class, MAP_VISIBILITY_STRING) .put(ProjectState.class, MAP_PROJECT_STATE_STRING) .put(ProjectClearingState.class, MAP_PROJECT_CLEARING_STATE_STRING) .put(CheckStatus.class,MAP_CHECK_STATUS_STRING) .put(VerificationState.class, MAP_VERIFICATION_STATUS_STRING) .put(VulnerabilityRatingForProject.class, MAP_VULNERABILITY_RATING_FOR_PROJECT_STRING) .put(ECCStatus.class, MAP_ECC_STATUS_STRING) .build(); public static String enumToString(TEnum value) { String out = ""; if (value != null) { out = MAP_ENUMTYPE_MAP.get(value.getClass()).get(value); } return out; } public static <T extends Enum<T>> T stringToEnum(String in, Class<T> clazz){ for (T t : clazz.getEnumConstants()) { if(t.name().equals(in)) return t; } return null; } public static <T extends Enum<T>> T enumByString(String in, Class<T> clazz){ Map<? extends TEnum, String> map = MAP_ENUMTYPE_MAP.get(clazz); for (T t : clazz.getEnumConstants()) { if(map.get(t).equals(in)) return t; } return null; } }