// Copyright 2010 Simon Edwards <simon@simonzone.com>

//                 Generated by twine2

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as
// published by the Free Software Foundation; either version 2, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details

// You should have received a copy of the GNU Library General Public
// License along with this program; if not, write to the
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

namespace Nepomuk
{
namespace Query
{
class Term
{
%TypeHeaderCode
#include <nepomuk/term.h>
%End

public:
    enum Type
    {
        Invalid,
        Literal,
        Resource,
        And,
        Or,
        Comparison,
        ResourceType,
        Negation,
        Optional
    };
                            Term ();
                            Term (const Nepomuk::Query::Term& other);
    ~Term ();
    bool                    isValid () const;
    Nepomuk::Query::Term::Type  type () const;
    bool                    isLiteralTerm () const;
    bool                    isResourceTerm () const;
    bool                    isNegationTerm () const;
    bool                    isAndTerm () const;
    bool                    isOrTerm () const;
    bool                    isComparisonTerm () const;
    bool                    isResourceTypeTerm () const;
    Nepomuk::Query::LiteralTerm  toLiteralTerm () const;
    Nepomuk::Query::ResourceTerm  toResourceTerm () const;
    Nepomuk::Query::NegationTerm  toNegationTerm () const;
    Nepomuk::Query::AndTerm  toAndTerm () const;
    Nepomuk::Query::OrTerm  toOrTerm () const;
    Nepomuk::Query::ComparisonTerm  toComparisonTerm () const;
    Nepomuk::Query::ResourceTypeTerm  toResourceTypeTerm () const;
//ig    Nepomuk::Query::LiteralTerm&  toLiteralTerm ();
//ig    Nepomuk::Query::ResourceTerm&  toResourceTerm ();
//ig    Nepomuk::Query::NegationTerm&  toNegationTerm ();
//ig    Nepomuk::Query::AndTerm&  toAndTerm ();
//ig    Nepomuk::Query::OrTerm&  toOrTerm ();
//ig    Nepomuk::Query::ComparisonTerm&  toComparisonTerm ();
//ig    Nepomuk::Query::ResourceTypeTerm&  toResourceTypeTerm ();
    bool                    operator == (const Nepomuk::Query::Term& term) const;
//ig    QDebug                  operator << (QDebug) const;
protected:
//ig                            Term (TermPrivate*);
public:
    bool                    isOptionalTerm () const;
    Nepomuk::Query::OptionalTerm  toOptionalTerm () const;
//ig    Nepomuk::Query::OptionalTerm&  toOptionalTerm ();
    QString                 toString () const;
    static Nepomuk::Query::Term  fromString (const QString& s);
    Nepomuk::Query::Term    optimized () const;
    static Nepomuk::Query::Term  fromVariant (const Nepomuk::Variant& variant);
    static Nepomuk::Query::Term  fromProperty (const Nepomuk::Types::Property& property, const Nepomuk::Variant& variant);
    bool                    operator != (const Nepomuk::Query::Term& term) const;
};
uint                    qHash (const Nepomuk::Query::Term&);
//ig Nepomuk::Query::Term    operator && (const Nepomuk::Query::Term& term1, const Nepomuk::Query::Term& term2);
//ig Nepomuk::Query::Term    operator || (const Nepomuk::Query::Term& term1, const Nepomuk::Query::Term& term2);
//ig Nepomuk::Query::Term    operator ! (const Nepomuk::Query::Term& term);
Nepomuk::Query::ComparisonTerm  operator < (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
Nepomuk::Query::ComparisonTerm  operator > (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
Nepomuk::Query::ComparisonTerm  operator <= (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
Nepomuk::Query::ComparisonTerm  operator >= (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
Nepomuk::Query::ComparisonTerm  operator == (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
Nepomuk::Query::Term    operator != (const Nepomuk::Types::Property& property, const Nepomuk::Query::Term& term);
};
};
//ig QDebug                  operator << (QDebug, const Nepomuk::Query::Term&);
//ig Nepomuk::Query::TermPrivate*  QSharedDataPointer<Nepomuk::Query::TermPrivate>::clone ();
