class TemporaryLicenseGroup extends LicenseGroup {
        private static final long serialVersionUID = -1268650463377651000L;
    }

    /**
     * Whether a condition provides a positive list or negative list of licenses.
     * 
     * <p>
     * Configuring a LicenseGroupPolicy allows the user to specify conditions as either "IS
     * MyLicenseGroup" or "IS_NOT MyLicenseGroup", and a policy violation is reported when the
     * condition is met. The IS and IS_NOT is not very intuitive when actually evaluating a
     * condition; what it actually means is that either "IS_NOT" is selected, and the user provides
     * a list of licenses that are allowed to be used (violation if license is not in license
     * group), or "IS" is selected and the user provides a list of licenses that cannot be used
     * (violation if license is in license group).
     * 
     * <p>
     * In order to simplify thinking about license violations, this license group type is used.
     *
     */
    private static enum LicenseGroupType {
        /**
         * License group represents a list of licenses that are explicitly allowed to be used
         */
        AllowedLicenseList,
        /**
         * License group represents a list of licenses that are not allowed to be used
         */
        ForbiddenLicenseList;
    }

    private static final Logger LOGGER = Logger.getLogger(LicenseGroupPolicyEvaluator.class);

    /**
     * {@inheritDoc}
     */
    @Override
    public PolicyCondition.Subject supportedSubject() {
        return PolicyCondition.Subject.LICENSE_GROUP;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<PolicyConditionViolation> evaluate(final Policy policy, final Component component) {<FILL_FUNCTION_BODY>

        final List<PolicyConditionViolation> violations = new ArrayList<>();

        final List<PolicyCondition> policyConditions = super.extractSupportedConditions(policy);
        if (policyConditions.isEmpty()) {
            return violations;
        }

        final SpdxExpression expression = getSpdxExpressionFromComponent(component);

        for (final PolicyCondition condition : policyConditions) {
            LOGGER.debug("Evaluating component (" + component.getUuid() + ") against policy condition ("
                    + condition.getUuid() + ")");
            final LicenseGroup lg = qm.getObjectByUuid(LicenseGroup.class, condition.getValue());
            if (lg == null) {
                LOGGER.warn("The license group %s does not exist; Skipping evaluation of condition %s of policy %s"
                        .formatted(condition.getValue(), condition.getUuid(), policy.getName()));
                continue;
            }
            evaluateCondition(qm, condition, expression, lg, component, violations);
        }
        return violations;
    
<methods>public non-sealed void <init>() ,public void setQueryManager(org.dependencytrack.persistence.QueryManager) <variables>protected org.dependencytrack.persistence.QueryManager qm