blob: 4804431cf3930933115a58f852918d1bc9016092 [file] [log] [blame]
Yingdi Yu0a6b6c52013-10-15 17:54:00 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2013, Regents of the University of California
4 * Yingdi Yu
5 *
6 * BSD license, See the LICENSE file for more information
7 *
8 * Author: Yingdi Yu <yingdi@cs.ucla.edu>
9 */
10
11#include "profileeditor.h"
12#include "ui_profileeditor.h"
13#include <QtSql/QSqlRecord>
14#include <QtSql/QSqlField>
15#include <QtSql/QSqlError>
16
17#ifndef Q_MOC_RUN
18#include "logging.h"
19#include "exception.h"
20#endif
21
22using namespace ndn;
23
24INIT_LOGGER("ProfileEditor");
25
Yingdi Yuaa8d7692013-10-18 17:05:02 -070026ProfileEditor::ProfileEditor(Ptr<ContactManager> contactManager,
Yingdi Yuc26af3c2013-10-17 17:03:46 -070027 QWidget *parent)
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070028 : QDialog(parent)
29 , ui(new Ui::ProfileEditor)
30 , m_tableModel(new QSqlTableModel())
Yingdi Yuaa8d7692013-10-18 17:05:02 -070031 , m_contactManager(contactManager)
Yingdi Yu71ec9652013-11-09 22:18:26 -080032 , m_identityManager(ndn::Ptr<ndn::security::IdentityManager>::Create())
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070033{
Yingdi Yuc26af3c2013-10-17 17:03:46 -070034 ui->setupUi(this);
35
Yingdi Yub35b8652013-11-07 11:32:40 -080036 m_currentIdentity = contactManager->getDefaultIdentity();
37 ui->identityInput->setText(m_currentIdentity.toUri().c_str());
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070038
Yingdi Yuc26af3c2013-10-17 17:03:46 -070039 connect(ui->addRowButton, SIGNAL(clicked()),
40 this, SLOT(onAddClicked()));
41 connect(ui->deleteRowButton, SIGNAL(clicked()),
42 this, SLOT(onDeleteClicked()));
43 connect(ui->okButton, SIGNAL(clicked()),
44 this, SLOT(onOkClicked()));
45 connect(ui->getButton, SIGNAL(clicked()),
46 this, SLOT(onGetClicked()));
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070047
Yingdi Yuc26af3c2013-10-17 17:03:46 -070048
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070049
50}
51
52ProfileEditor::~ProfileEditor()
53{
54 delete ui;
55 delete m_tableModel;
56}
57
58void
59ProfileEditor::onAddClicked()
60{
61 int rowCount = m_tableModel->rowCount();
Yingdi Yuc26af3c2013-10-17 17:03:46 -070062 QSqlRecord record;
63 QSqlField identityField("profile_identity", QVariant::String);
64 record.append(identityField);
65 record.setValue("profile_identity", QString(m_currentIdentity.toUri().c_str()));
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070066 m_tableModel->insertRow(rowCount);
Yingdi Yuc26af3c2013-10-17 17:03:46 -070067 m_tableModel->setRecord(rowCount, record);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070068}
69
70void
71ProfileEditor::onDeleteClicked()
72{
73 QItemSelectionModel* selectionModel = ui->profileTable->selectionModel();
Yingdi Yu8dacdf22013-11-05 23:06:43 -080074 QModelIndexList indexList = selectionModel->selectedIndexes();
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070075
76 int i = indexList.size() - 1;
77 for(; i >= 0; i--)
Yingdi Yuc26af3c2013-10-17 17:03:46 -070078 m_tableModel->removeRow(indexList[i].row());
79
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070080 m_tableModel->submitAll();
81}
82
83void
84ProfileEditor::onOkClicked()
85{
Yingdi Yu71ec9652013-11-09 22:18:26 -080086 Name defaultKeyName = m_identityManager->getPublicStorage()->getDefaultKeyNameForIdentity(m_currentIdentity);
87 if(defaultKeyName.size() == 0)
Yingdi Yueb98f7d2013-11-10 01:34:57 -080088 {
89 emit noKeyOrCert(QString::fromStdString("Corresponding key is missing!\nHave you created the key?"));
90 return;
91 }
92
Yingdi Yu71ec9652013-11-09 22:18:26 -080093 Name defaultCertName = m_identityManager->getPublicStorage()->getDefaultCertificateNameForKey(defaultKeyName);
94 if(defaultCertName.size() == 0)
Yingdi Yueb98f7d2013-11-10 01:34:57 -080095 {
96 emit noKeyOrCert(QString::fromStdString("Corresponding certificate is missing!\nHave you installed the certificate?"));
97 return;
98 }
Yingdi Yu71ec9652013-11-09 22:18:26 -080099
Yingdi Yu0a6b6c52013-10-15 17:54:00 -0700100 m_tableModel->submitAll();
Yingdi Yuaa8d7692013-10-18 17:05:02 -0700101 m_contactManager->updateProfileData(m_currentIdentity);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -0700102 this->hide();
103}
104
Yingdi Yuc26af3c2013-10-17 17:03:46 -0700105void
106ProfileEditor::onGetClicked()
107{
108 QString inputIdentity = ui->identityInput->text();
109 m_currentIdentity = Name(inputIdentity.toUtf8().constData());
110 string filter("profile_identity = '");
111 filter.append(m_currentIdentity.toUri()).append("'");
112
113 m_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
114 m_tableModel->setTable("SelfProfile");
115 m_tableModel->setFilter(filter.c_str());
116 m_tableModel->select();
117 m_tableModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Identity"));
118 m_tableModel->setHeaderData(1, Qt::Horizontal, QObject::tr("Type"));
119 m_tableModel->setHeaderData(2, Qt::Horizontal, QObject::tr("Value"));
120
121 ui->profileTable->setModel(m_tableModel);
122 ui->profileTable->setColumnHidden(0, true);
123 ui->profileTable->show();
124}
125
Yingdi Yu0a6b6c52013-10-15 17:54:00 -0700126#if WAF
127#include "profileeditor.moc"
128#include "profileeditor.cpp.moc"
129#endif