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.
194 lines
5.8 KiB
194 lines
5.8 KiB
/*
|
|
* Copyright (c) 2011-2015, Intel Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "SelectionCriterion.h"
|
|
#include "Utility.h"
|
|
#include <log/Logger.h>
|
|
|
|
#define base CElement
|
|
|
|
using namespace core;
|
|
|
|
CSelectionCriterion::CSelectionCriterion(const std::string &strName,
|
|
const CSelectionCriterionType *pType,
|
|
core::log::Logger &logger)
|
|
: base(strName), _pType(pType), _logger(logger)
|
|
{
|
|
}
|
|
|
|
std::string CSelectionCriterion::getKind() const
|
|
{
|
|
return "SelectionCriterion";
|
|
}
|
|
|
|
bool CSelectionCriterion::hasBeenModified() const
|
|
{
|
|
return _uiNbModifications != 0;
|
|
}
|
|
|
|
void CSelectionCriterion::resetModifiedStatus()
|
|
{
|
|
_uiNbModifications = 0;
|
|
}
|
|
|
|
/// From ISelectionCriterionInterface
|
|
// State
|
|
void CSelectionCriterion::setCriterionState(int iState)
|
|
{
|
|
// Check for a change
|
|
if (_iState != iState) {
|
|
|
|
_iState = iState;
|
|
|
|
_logger.info() << "Selection criterion changed event: "
|
|
<< getFormattedDescription(false, false);
|
|
|
|
// Check if the previous criterion value has been taken into account (i.e. at least one
|
|
// Configuration was applied
|
|
// since the last criterion change)
|
|
if (_uiNbModifications != 0) {
|
|
|
|
_logger.warning() << "Selection criterion '" << getName() << "' has been modified "
|
|
<< _uiNbModifications
|
|
<< " time(s) without any configuration application";
|
|
}
|
|
|
|
// Track the number of modifications for this criterion
|
|
_uiNbModifications++;
|
|
}
|
|
}
|
|
|
|
int CSelectionCriterion::getCriterionState() const
|
|
{
|
|
return _iState;
|
|
}
|
|
|
|
// Name
|
|
std::string CSelectionCriterion::getCriterionName() const
|
|
{
|
|
return getName();
|
|
}
|
|
|
|
// Type
|
|
const ISelectionCriterionTypeInterface *CSelectionCriterion::getCriterionType() const
|
|
{
|
|
return _pType;
|
|
}
|
|
|
|
/// Match methods
|
|
bool CSelectionCriterion::is(int iState) const
|
|
{
|
|
return _iState == iState;
|
|
}
|
|
|
|
bool CSelectionCriterion::isNot(int iState) const
|
|
{
|
|
return _iState != iState;
|
|
}
|
|
|
|
bool CSelectionCriterion::includes(int iState) const
|
|
{
|
|
// For inclusive criterion, Includes checks if ALL the bit sets in iState are set in the
|
|
// current _iState.
|
|
return (_iState & iState) == iState;
|
|
}
|
|
|
|
bool CSelectionCriterion::excludes(int iState) const
|
|
{
|
|
return (_iState & iState) == 0;
|
|
}
|
|
|
|
/// User request
|
|
std::string CSelectionCriterion::getFormattedDescription(bool bWithTypeInfo,
|
|
bool bHumanReadable) const
|
|
{
|
|
std::string strFormattedDescription;
|
|
|
|
if (bHumanReadable) {
|
|
|
|
if (bWithTypeInfo) {
|
|
|
|
// Display type info
|
|
utility::appendTitle(strFormattedDescription, getName() + ":");
|
|
|
|
// States
|
|
strFormattedDescription += "Possible states ";
|
|
|
|
// Type Kind
|
|
strFormattedDescription += "(";
|
|
strFormattedDescription += _pType->isTypeInclusive() ? "Inclusive" : "Exclusive";
|
|
strFormattedDescription += "): ";
|
|
|
|
// States
|
|
strFormattedDescription += _pType->listPossibleValues() + "\n";
|
|
|
|
// Current State
|
|
strFormattedDescription += "Current state";
|
|
} else {
|
|
// Name only
|
|
strFormattedDescription = getName();
|
|
}
|
|
|
|
// Current State
|
|
strFormattedDescription += " = " + _pType->getFormattedState(_iState);
|
|
} else {
|
|
// Name
|
|
strFormattedDescription = "Criterion name: " + getName();
|
|
|
|
if (bWithTypeInfo) {
|
|
// Type Kind
|
|
strFormattedDescription += ", type kind: ";
|
|
strFormattedDescription += _pType->isTypeInclusive() ? "inclusive" : "exclusive";
|
|
}
|
|
|
|
// Current State
|
|
strFormattedDescription += ", current state: " + _pType->getFormattedState(_iState);
|
|
|
|
if (bWithTypeInfo) {
|
|
// States
|
|
strFormattedDescription += ", states: " + _pType->listPossibleValues();
|
|
}
|
|
}
|
|
return strFormattedDescription;
|
|
}
|
|
|
|
// XML export
|
|
void CSelectionCriterion::toXml(CXmlElement &xmlElement,
|
|
CXmlSerializingContext &serializingContext) const
|
|
{
|
|
// Current Value
|
|
xmlElement.setAttribute("Value", _pType->getFormattedState(_iState));
|
|
|
|
// Serialize Type node
|
|
_pType->toXml(xmlElement, serializingContext);
|
|
|
|
base::toXml(xmlElement, serializingContext);
|
|
}
|