FOSSology  4.7.1
Open Source License Compliance by Open Source Software
ReuserDatabaseHandler.hpp
1 /*
2  SPDX-License-Identifier: GPL-2.0-only
3  Author: Dietmar Helmut Leher <helmut.leher.ext@vaillant-group.com>
4  SPDX-FileCopyrightText: © 2026 Vaillant GmbH
5 */
6 #pragma once
7 
8 #include <array>
9 #include <map>
10 #include <string>
11 #include <vector>
12 
13 #include "libfossologyCPP.hpp"
14 #include "ReuserTypes.hpp"
15 
27 {
28 public:
31  virtual ~ReuserDatabaseHandler() = default;
32 
34  virtual ReuserDatabaseHandler spawn() const;
35 
36  // Upload-tree helpers
37 
42  virtual bool getParentItemBounds(int uploadId, ItemTreeBounds& out);
43 
44  // Reuse relationship queries
45 
49  virtual std::vector<ReuseTriple> getReusedUploads(int uploadId, int groupId);
50 
56  virtual std::map<int, int> getClearingDecisionMapByPfile(int uploadId, int groupId);
57 
61  virtual std::map<int, std::vector<int>> getUploadTreePksForPfiles(
62  int uploadId, const std::vector<int>& pfileIds);
63 
64  // Clearing-decision operations
65 
70  virtual int insertClearingEvent(int uploadId, int uploadTreeId,
71  int userId, int groupId,
72  int licenseId, bool removed, int type,
73  const std::string& reportInfo, const std::string& comment,
74  const std::string& ack, int jobId);
75 
81  virtual int createDecisionFromEvents(int uploadId, int uploadTreeId,
82  int userId, int groupId,
83  int decType, int scope, const std::vector<int>& eventIds);
84 
90  virtual int createCopyOfClearingDecision(int uploadId,
91  int newItemUploadTreePk, int userId,
92  int groupId, int originalDecisionPk);
93 
94  // ARS record
95 
100  virtual int writeArsRecord(int agentId, int uploadId, int arsId = 0,
101  bool success = false);
102 
103  // Reuse operations
104 
106  virtual bool processUploadReuse(int uploadId, int reusedUploadId,
107  int groupId, int reusedGroupId, int userId);
108 
110  virtual bool processEnhancedUploadReuse(int uploadId, int reusedUploadId,
111  int groupId, int reusedGroupId, int userId);
112 
114  virtual bool reuseMainLicense(int uploadId, int groupId,
115  int reusedUploadId, int reusedGroupId);
116 
118  virtual bool reuseConfSettings(int uploadId, int reusedUploadId);
119 
121  virtual bool reuseCopyrights(int uploadId, int reusedUploadId, int userId);
122 
123 protected:
125  static bool isValidIdentifier(const std::string& s);
127  static std::string replaceUnicodeControlChars(const std::string& input);
134  static int getDecisionTypePriority(int decisionType);
135 
136 private:
137  static std::string shellEscape(const std::string& s);
138  static int diffLineCount(const std::string& a, const std::string& b);
139 
141  std::string getRepoPathOfPfile(int pfileId);
142 };
Database handler for the reuser agent.
virtual bool processUploadReuse(int uploadId, int reusedUploadId, int groupId, int reusedGroupId, int userId)
virtual bool getParentItemBounds(int uploadId, ItemTreeBounds &out)
Fetch the parent item bounds for a given upload.
virtual int createCopyOfClearingDecision(int uploadId, int newItemUploadTreePk, int userId, int groupId, int originalDecisionPk)
Copy an existing clearing decision to a new uploadtree item.
virtual int createDecisionFromEvents(int uploadId, int uploadTreeId, int userId, int groupId, int decType, int scope, const std::vector< int > &eventIds)
Create a clearing_decision linked to eventIds.
virtual bool reuseMainLicense(int uploadId, int groupId, int reusedUploadId, int reusedGroupId)
virtual ReuserDatabaseHandler spawn() const
virtual std::map< int, int > getClearingDecisionMapByPfile(int uploadId, int groupId)
Build a pfile_fk to clearing_decision_pk map for uploadId.
static int getDecisionTypePriority(int decisionType)
Priority for decision types during reuse conflict resolution.
virtual bool processEnhancedUploadReuse(int uploadId, int reusedUploadId, int groupId, int reusedGroupId, int userId)
static bool isValidIdentifier(const std::string &s)
Validate that s contains only characters safe for SQL identifiers.
std::string getRepoPathOfPfile(int pfileId)
virtual int insertClearingEvent(int uploadId, int uploadTreeId, int userId, int groupId, int licenseId, bool removed, int type, const std::string &reportInfo, const std::string &comment, const std::string &ack, int jobId)
Insert a new clearing event and return its primary key (0 on error).
static std::string replaceUnicodeControlChars(const std::string &input)
Strip Unicode control characters (C0, C1, DEL) from input.
virtual bool reuseCopyrights(int uploadId, int reusedUploadId, int userId)
virtual int writeArsRecord(int agentId, int uploadId, int arsId=0, bool success=false)
Write (insert or update) an ARS record.
virtual std::vector< ReuseTriple > getReusedUploads(int uploadId, int groupId)
Return the list of uploads that should be reused for uploadId.
virtual bool reuseConfSettings(int uploadId, int reusedUploadId)
virtual std::map< int, std::vector< int > > getUploadTreePksForPfiles(int uploadId, const std::vector< int > &pfileIds)
For a set of pfile ids, return a map pfile_fk to [uploadtree_pk].
Database handler for agents.
DbManager dbManager
DbManager to use.
DB wrapper for agents.
int s
The socket that the CLI will use to communicate.
Definition: fo_cli.c:37
The main FOSSology CPP library.
int jobId
The id of the job.
Bounds of an item within an uploadtree table.
Definition: ReuserTypes.hpp:14