1.修复小bug

2.增加Node到Terminal的映射。

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-11-26 17:09:37 +08:00
parent a27b938085
commit 53416f8f33
12 changed files with 100 additions and 41 deletions

4
.gitignore vendored
View File

@ -3,4 +3,6 @@
*.orig *.orig
debug debug
release release
Makefile* Makefile*
testHasttable/*Debug
testHasttable/*Release

View File

@ -33,18 +33,28 @@ bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader)
QStringRef id; QStringRef id;
elementName=reader.name(); elementName=reader.name();
this->name=elementName.toString(); this->name=elementName.toString();
this->id=id.toString();
qDebug()<<reader.name()<<"\n"; qDebug()<<reader.name()<<"\n";
if(reader.attributes().hasAttribute("rdf:ID")) if(reader.attributes().hasAttribute("rdf:ID"))
{ {
qDebug()<<reader.attributes().value("rdf:ID")<<"\n"; qDebug()<<reader.attributes().value("rdf:ID")<<"\n";
id=reader.attributes().value("rdf:ID"); id=reader.attributes().value("rdf:ID");
this->id=id.toString();
} }
// if(elementName.toString()=="Terminal")
// {
// if(reader.attributes().hasAttribute("rdf:ID"))
// {
// std::cout<<this->id.toStdString()<<std::endl;
// std::cout<<"get id"<<std::endl;
// }
// else
// {
// std::cout<<"no ID"<<std::endl;
// }
// }
while(!reader.atEnd() && !reader.hasError()) while(!reader.atEnd() && !reader.hasError())
{ {
reader.readNext(); reader.readNext();
elementName=reader.name();
this->derivedParse(reader); this->derivedParse(reader);
if(reader.isEndElement() && reader.name()==elementName) if(reader.isEndElement() && reader.name()==elementName)
{ {

View File

@ -7,16 +7,23 @@ BusbarSection::BusbarSection(QObject *parent):BasicElementInfo(parent)
bool BusbarSection::derivedParse(QXmlStreamReader& reader) bool BusbarSection::derivedParse(QXmlStreamReader& reader)
{ {
// std::cout<<reader.name().toString().toStdString()<<std::endl;
if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{ {
QString terminal; QString terminal;
terminal=reader.attributes().value("rdf:resource").toString(); terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n"; qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
// std::cout<<"ConductingEquipment.Terminals"<<this->terminal.toStdString()<<std::endl;
} }
return true; return true;
} }
QString BusbarSection::getTerminal()
{
return this->terminal;
}
bool BusbarSection::parse(QXmlStreamReader& reader) bool BusbarSection::parse(QXmlStreamReader& reader)
{ {
// std::cout<<"BusbarSection"<<std::endl; // std::cout<<"BusbarSection"<<std::endl;

View File

@ -7,6 +7,7 @@ class BusbarSection:public BasicElementInfo
public: public:
explicit BusbarSection(QObject *parent = 0); explicit BusbarSection(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader); virtual bool parse(QXmlStreamReader& reader);
QString getTerminal();
protected: protected:
QString terminal; QString terminal;
virtual bool derivedParse(QXmlStreamReader& reader); virtual bool derivedParse(QXmlStreamReader& reader);

View File

@ -78,7 +78,13 @@ bool ElementHashtable::goPath()
BasicElementInfo *p=ht[*ite]; BasicElementInfo *p=ht[*ite];
if(p->getName()=="BusbarSection") if(p->getName()=="BusbarSection")
{ {
std::cout<<"BusbarSection"<<"\n"; // std::cout<<"BusbarSection"<<"\n";
BusbarSection *foo=static_cast<BusbarSection *>(p);
QString terminal=foo->getTerminal();
//找Terminal的东西
Terminal *terminalP=static_cast<Terminal *>(ht[terminal]);
std::cout<<terminalP->getID().toStdString()<<std::endl;
// std::cout<<terminalP->getConductingEquipment().toStdString()<<std::endl;
} }
} }
return true; return true;

View File

@ -0,0 +1,33 @@
#include "nodetoterminal.h"
QHash<QString,QString> *NodeToTerminal::ht=NULL;
NodeToTerminal::NodeToTerminal()
{
if(!NodeToTerminal::ht)
{
NodeToTerminal::ht=new QHash<QString,QString>;
}
}
void NodeToTerminal::add(const QString& key,const QString& value)
{
(*NodeToTerminal::ht)[key]=value;
}
bool NodeToTerminal::contains(const QString& key)
{
return NodeToTerminal::ht->contains(key);
}
QString NodeToTerminal::value(const QString& key)
{
return NodeToTerminal::ht->value(key);
}
NodeToTerminal::~NodeToTerminal()
{
if(NodeToTerminal::ht)
{
delete NodeToTerminal::ht;
NodeToTerminal::ht=NULL;
}
}

View File

@ -0,0 +1,19 @@
#ifndef NODETOTERMINAL_H
#define NODETOTERMINAL_H
//一个通过Node检索Terminal的表做成单例形式
#include <QHash>
#include <QString>
class NodeToTerminal
{
public:
explicit NodeToTerminal();
~NodeToTerminal();
void add(const QString& key,const QString& value);
bool contains(const QString& key);
QString value(const QString& key);
private:
static QHash<QString,QString> *ht;
};
#endif // NODETOTERMINAL_H

View File

@ -1,17 +0,0 @@
INPUT(
./debug/main.o
./debug/elementhashtable.o
./debug/subcontrolarea.o
./debug/BasicElementInfo.o
./debug/regexextract.o
./debug/busbarsection.o
./debug/terminal.o
./debug/aclinesegment.o
./debug/breaker.o
./debug/compensator.o
./debug/disconnector.o
./debug/powertransformer.o
./debug/synchronousmachine.o
./debug/moc_elementhashtable.o
./debug/moc_BasicElementInfo.o
);

View File

@ -1,17 +0,0 @@
INPUT(
./release/main.o
./release/elementhashtable.o
./release/subcontrolarea.o
./release/BasicElementInfo.o
./release/regexextract.o
./release/busbarsection.o
./release/terminal.o
./release/aclinesegment.o
./release/breaker.o
./release/compensator.o
./release/disconnector.o
./release/powertransformer.o
./release/synchronousmachine.o
./release/moc_elementhashtable.o
./release/moc_BasicElementInfo.o
);

View File

@ -4,6 +4,8 @@ Terminal::Terminal(QObject *parent):BasicElementInfo(parent)
{ {
} }
bool Terminal::derivedParse(QXmlStreamReader& reader) bool Terminal::derivedParse(QXmlStreamReader& reader)
{ {
if("Terminal.ConnectivityNode"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) if("Terminal.ConnectivityNode"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
@ -12,6 +14,8 @@ bool Terminal::derivedParse(QXmlStreamReader& reader)
cn=reader.attributes().value("rdf:resource").toString(); cn=reader.attributes().value("rdf:resource").toString();
this->connectivityNode=cn.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref this->connectivityNode=cn.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref
qDebug()<<"got "<<"Terminal.ConnectivityNode "<<this->connectivityNode<<"\n"; qDebug()<<"got "<<"Terminal.ConnectivityNode "<<this->connectivityNode<<"\n";
NodeToTerminal nt;
nt.add(this->connectivityNode,this->id);
} }
if("Terminal.ConductingEquipment"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) if("Terminal.ConductingEquipment"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
@ -24,6 +28,13 @@ bool Terminal::derivedParse(QXmlStreamReader& reader)
return true; return true;
} }
QString Terminal::getConductingEquipment()
{
return this->conductingEquipment;
}
bool Terminal::parse(QXmlStreamReader& reader) bool Terminal::parse(QXmlStreamReader& reader)
{ {
return this->parseBasicInfo(reader); return this->parseBasicInfo(reader);

View File

@ -2,11 +2,13 @@
#define TERMINAL_H #define TERMINAL_H
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include "BasicElementInfo.h" #include "BasicElementInfo.h"
#include "nodetoterminal.h"
class Terminal:public BasicElementInfo class Terminal:public BasicElementInfo
{ {
public: public:
explicit Terminal(QObject *parent = 0); explicit Terminal(QObject *parent = 0);
virtual bool parse(QXmlStreamReader& reader); virtual bool parse(QXmlStreamReader& reader);
QString getConductingEquipment();
protected: protected:
virtual bool derivedParse(QXmlStreamReader& reader); virtual bool derivedParse(QXmlStreamReader& reader);
QString conductingEquipment; QString conductingEquipment;

View File

@ -28,7 +28,8 @@ SOURCES += main.cpp \
compensator.cpp \ compensator.cpp \
disconnector.cpp \ disconnector.cpp \
powertransformer.cpp \ powertransformer.cpp \
synchronousmachine.cpp synchronousmachine.cpp \
nodetoterminal.cpp
HEADERS += \ HEADERS += \
elementhashtable.h \ elementhashtable.h \
@ -42,7 +43,8 @@ HEADERS += \
compensator.h \ compensator.h \
disconnector.h \ disconnector.h \
powertransformer.h \ powertransformer.h \
synchronousmachine.h synchronousmachine.h \
nodetoterminal.h
#release{ #release{
DEFINES += QT_NO_DEBUG_OUTPUT DEFINES += QT_NO_DEBUG_OUTPUT