/*
 *  copyright (C) 2002-2004
 *  Umbrello UML Modeller Authors <uml-devel@ uml.sf.net>
 */

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

#include <kdebug.h>

#include "idchangelog.h"

IDChangeLog::IDChangeLog() {}

IDChangeLog::IDChangeLog(const IDChangeLog& Other) {
    m_LogArray = Other.m_LogArray;
}

IDChangeLog::~IDChangeLog() {}

IDChangeLog& IDChangeLog::operator=(const IDChangeLog& Other) {
    m_LogArray = Other.m_LogArray;

    return *this;
}

bool IDChangeLog::operator==(const IDChangeLog& /*Other*/) {
    /*It needs to be Implemented*/
    return false;
}

Uml::IDType IDChangeLog::findNewID(Uml::IDType OldID) {
    uint count = m_LogArray.size();
    for(uint i = 0; i < count; i++) {
        if((m_LogArray.point(i)).y() ==  OldID) {
            return  (m_LogArray.point(i)).x();
        }
    }

    return Uml::id_None;
}

IDChangeLog& IDChangeLog::operator+=(const IDChangeLog& Other) {
    //m_LogArray.putpoints(m_LogArray.size(), Other.m_LogArray.size(), Other)
    uint count = Other.m_LogArray.size();
    for(uint i = 0; i < count; i++) {
        addIDChange((Other.m_LogArray.point(i)).y(), (Other.m_LogArray.point(i)).x());
    }

    return *this;
}

void IDChangeLog::addIDChange(Uml::IDType OldID, Uml::IDType NewID) {
    uint pos;
    if(!findIDChange(OldID, NewID, pos)) {
        pos = m_LogArray.size();
        m_LogArray.resize(pos + 1);
        m_LogArray.setPoint(pos, NewID, OldID);
    } else {
        m_LogArray.setPoint(pos, NewID, OldID);
    }
}

Uml::IDType IDChangeLog::findOldID(Uml::IDType NewID) {
    uint count = m_LogArray.size();
    for(uint i = 0; i < count; i++) {
        if((m_LogArray.point(i)).x() ==  NewID) {
            return  (m_LogArray.point(i)).y();
        }
    }

    return Uml::id_None;
}

bool IDChangeLog::findIDChange(Uml::IDType OldID, Uml::IDType NewID, uint& pos) {
    uint count = m_LogArray.size();
    for(uint i = 0; i < count; i++) {
        if(((m_LogArray.point(i)).y() ==  OldID) && ((m_LogArray.point(i)).x() ==  NewID)) {
            pos = i;
            return  true;
        }
    }

    return false;
}

void IDChangeLog::removeChangeByNewID(Uml::IDType OldID) {
    uint count = m_LogArray.size();
    for(uint i = 0; i < count; i++) {
        if((m_LogArray.point(i)).y() ==  OldID) {
            m_LogArray.setPoint(i, Uml::id_None, OldID);
        }
    }
}
