You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
10 KiB
280 lines
10 KiB
// Copyright 2020 Siemens Digital Industries Software
|
|
// ==================================================
|
|
// Copyright 2015.
|
|
// Siemens Product Lifecycle Management Software Inc.
|
|
// All Rights Reserved.
|
|
// ==================================================
|
|
// Copyright 2020 Siemens Digital Industries Software
|
|
|
|
#ifndef QRY_FINDERUTILS_HXX
|
|
#define QRY_FINDERUTILS_HXX
|
|
|
|
#include <vector>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <iostream>
|
|
#include <map>
|
|
#include <metaframework/BusinessObject.hxx>
|
|
#include <metaframework/BusinessObjectRef.hxx>
|
|
#include <tccore/aom_prop.h>
|
|
#include <qry/libqry_exports.h>
|
|
|
|
|
|
/**
|
|
* @defgroup QRY Query
|
|
* @ingroup TC
|
|
*/
|
|
|
|
namespace Teamcenter
|
|
{
|
|
namespace QRY
|
|
{
|
|
class FinderUtils;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This class provides Finder related utility methods.
|
|
*/
|
|
class QRY_API Teamcenter::QRY::FinderUtils
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* A structure containing start and end values for a specific property. The end value
|
|
* is used for range comparisons if populated
|
|
*/
|
|
struct PropertyGroupingValue
|
|
{
|
|
/**
|
|
* ID used by client to identify the group
|
|
*/
|
|
std::string propertyGroupID;
|
|
/**
|
|
* the start value for the property
|
|
*/
|
|
std::string startValue;
|
|
/**
|
|
* The end value for the property used for range values if populated.
|
|
*/
|
|
std::string endValue;
|
|
};
|
|
|
|
/**
|
|
* A map containing a list of propertyGroupID for each BusinessObject. For multi-valued
|
|
* properties, a single business object may be associated with multiple property group
|
|
* IDs.
|
|
*/
|
|
typedef std::map< BusinessObjectRef<Teamcenter::BusinessObject>, std::vector< std::string > > ObjectPropertyGroupingMap;;
|
|
|
|
/**
|
|
* A structure containing an internal property name and a list of ObjectPropertyGroup
|
|
* objects.
|
|
*/
|
|
struct ObjectsGroupedByProperty
|
|
{
|
|
/**
|
|
* The internal name for the property.
|
|
*/
|
|
std::string internalPropertyName;
|
|
/**
|
|
* Map of a business object and its associated grouping values.
|
|
*/
|
|
ObjectPropertyGroupingMap groupedObjectsMap;
|
|
/**
|
|
* List of unmatched Business Objects.
|
|
*/
|
|
std::vector< BusinessObjectRef<Teamcenter::BusinessObject> > unmatchedObjectList;
|
|
};
|
|
|
|
/**
|
|
* A structure containing an internal property name, a list of PropertyGroupingValue
|
|
* objects and a list of Business Objects.
|
|
*/
|
|
struct ObjectPropertyGroupInput
|
|
{
|
|
/**
|
|
* The internal name for the property
|
|
*/
|
|
std::string internalPropertyName;
|
|
/**
|
|
* List of PropertyGroupingValue objects corresponding to the property.
|
|
*/
|
|
std::vector< PropertyGroupingValue > propertyValues;
|
|
/**
|
|
* List of Business Objects to be grouped.
|
|
*/
|
|
std::vector< BusinessObjectRef<Teamcenter::BusinessObject> > objectList;
|
|
};
|
|
|
|
|
|
/**
|
|
Classifies Business Objects into groups.
|
|
<br/>This allows users to send a list of ObjectPropertyGroupInput objects, each object containing an internal property name,
|
|
a list of PropertyGroupingValue objects identifying groups and a list of Business Objects to be classified into the groups.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#SOAQUERY_input_list_empty if the input list is empty,
|
|
<li>#SOAQUERY_internal_property_empty if the internal Property name is empty,
|
|
<li>#SOAQUERY_object_list_empty if the Business Object list is empty
|
|
</ul>
|
|
*/
|
|
static int groupObjectsByProperties(
|
|
const std::vector< ObjectPropertyGroupInput >& objectPropertyGroupInputList, /**< (I) A list containing ObjectPropertyGroupInput objects that represents
|
|
property name and property value information to group a list of input Business Objects */
|
|
std::vector< ObjectsGroupedByProperty>& groupedObjectsList /**< (O) List of ObjectPropertyGrouping objects */
|
|
);
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
* Default Constructor
|
|
*/
|
|
FinderUtils();
|
|
|
|
/**
|
|
* Copy Constructor
|
|
*/
|
|
FinderUtils(const FinderUtils& obj);
|
|
|
|
/**
|
|
* Operator=
|
|
*/
|
|
FinderUtils& operator=(const FinderUtils& other);
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~FinderUtils();
|
|
|
|
/**
|
|
* Helper function to convert string to logical
|
|
*/
|
|
static logical to_logical( std::string const& s );
|
|
|
|
/**
|
|
* Helper function for getting the property constant value for the passed Object type
|
|
object_tag (I) tag of the Object
|
|
* internalPropertyName (I) internal property name
|
|
*/
|
|
static char* getReferencedObjectProperty( const tag_t &object_tag, std::string internalPropertyName );
|
|
|
|
/**
|
|
* Checks if the object is a User object
|
|
* referencedObject (I) object tag
|
|
*/
|
|
static bool isUserObject( const tag_t referencedObject );
|
|
|
|
/**
|
|
* Checks if startValue for a PropertyGroupingValue exists or has string $NONE
|
|
*/
|
|
static logical isStartValueEmptyOrNone( const FinderUtils::PropertyGroupingValue propertyValue );
|
|
|
|
/**
|
|
* Checks if endValue for a PropertyGroupingValue exists
|
|
*/
|
|
static logical endValueExists( const FinderUtils::PropertyGroupingValue propertyValue );
|
|
|
|
/**
|
|
* Returns a list of PropertyGroupingValues that have $NONE as startValue
|
|
*/
|
|
static std::vector< std::string > getGroupWithNoneInStartValues( const FinderUtils::ObjectPropertyGroupInput *objectPropertyGroupInput );
|
|
|
|
/**
|
|
* Performs grouping task on integer property
|
|
*/
|
|
static void processIntegerProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on real property
|
|
*/
|
|
static void processDoubleProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on logical property
|
|
*/
|
|
static void processLogicalProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on date_t property
|
|
*/
|
|
static void processDateProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on char property
|
|
*/
|
|
static void processCharProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on string property
|
|
*/
|
|
static void processStringProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &foundGroup,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
/**
|
|
* Performs grouping task on typed_reference/untyped_reference property
|
|
*/
|
|
static void processReferenceProperty( BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &isGroupFound
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
Helper method to switch based on property value type
|
|
*/
|
|
static void processPropertyValuesForGrouping(PROP_value_type_t &propertyValueType,
|
|
BusinessObjectRef<Teamcenter::BusinessObject> &businessObject,
|
|
FinderUtils::ObjectPropertyGroupInput &objectPropertyGroupInput,
|
|
FinderUtils::ObjectPropertyGroupingMap &groupedObjectsMap,
|
|
bool &isGroupFound,
|
|
const tag_t &tableRowBOTag,
|
|
const char* tableRowPropertyName
|
|
);
|
|
|
|
};
|
|
|
|
#include <qry/libqry_undef.h>
|
|
#endif
|