blob: f820264162748184747f22787e62f27587f31a31 [file] [log] [blame]
<?php
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once("XML/RPC.php");
/**
* @author resneck
*
* <p>A PHP port of the core filemgr data structure.</p>
*/
class CAS_Filemgr_BooleanQueryCriteria {
// These variables will function as constants to define boolean operators
public static $AND_OP = 0;
public static $OR_OP = 1;
public static $NOT_OP = 2;
public $operator;
public $terms;
/**
* Default constructor. Uses the AND operator.
*/
function __construct(){
$this->operator = self::$AND_OP;
$this->terms = array();
}
/**
* This query is a boolean combination of term,
* range, and other boolean queries. The supported operators are AND, OR and
* NOT. Note that the NOT operator can only be used with one (1) term. This
* function will not operate if more than one term is used with the NOT
* operator.
*
* @param terms
* The criteria onto which to apply the boolean operator
* @param op
* The boolean operator to be applied
*/
function __init($terms, $op){
if(!($op == self::$NOT_OP && count($terms) > 1)){
$this->terms = $terms;
$this->operator = $op;
}
}
function __initXmlRpc($xmlRpcData){
$this->operator = (isset($xmlRpcData['operator']))
? intval($xmlRpcData['operator'])
: self::$AND_OP;
$this->terms = (isset($xmlRpcData['terms']))
? $xmlRpcData['terms']
: array();
}
/**
* Method to add a term to the boolean query. Note that a NOT operator can
* only be applied to one term. This function will not operate if more than
* one term is used with the NOT operator.
*
* @param t
* Term to be added to the query
*/
function addTerm($t){
if(!($this->operator == self::$NOT_OP && count($this->terms))){
array_push($this->terms, $t);
}
}
/**
* Accessor method for the list of terms in the query.
*
* @return The list of terms
*/
function getTerms() {
return $this->terms;
}
/**
* Mutator method for the boolean operator. This function will not operate if more than
* one term is used with the NOT operator.
*
* @param op
* Boolean operator
*/
function setOperator($op){
if(!($op == self::$NOT_OP && count($this->terms) > 1)){
$this->operator = $op;
}
}
/**
* Accessor method for the boolean operator.
*
* @return the boolean operator
*/
function getOperator() {
return $this->operator;
}
function toAssocArray(){
$assocArray = array(
'operator' => $this->operator,
'terms' => array());
foreach($this->terms as $t){
array_push($assocArray['terms'], $t->toAssocArray());
}
return $assocArray;
}
function toXmlRpcStruct(){
$termArray = array();
foreach($this->terms as $t){
array_push($termArray, $t->toXmlRpcStruct());
}
return new XML_RPC_Value(array(
'class' => new XML_RPC_Value('org.apache.oodt.cas.filemgr.structs.BooleanQueryCriteria', 'string'),
'terms' => new XML_RPC_Value($termArray, 'array'),
'operator' => new XML_RPC_Value($this->operator, 'int')), 'struct');
}
}
?>