Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/OpenModelica/OMEdit
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Feb 17, 2017
2 parents 15bf1aa + 15f740b commit 081cef9
Show file tree
Hide file tree
Showing 11 changed files with 275 additions and 73 deletions.
9 changes: 9 additions & 0 deletions OMEdit/OMEditGUI/FMI/ImportFMUModelDescriptionDialog.cpp
Expand Up @@ -36,6 +36,8 @@
#include "MainWindow.h"
#include "OMC/OMCProxy.h"
#include "Modeling/LibraryTreeWidget.h"
#include "Options/OptionsDialog.h"
#include "Git/CommitChangesDialog.h"
#include "Util/Helper.h"
#include "Util/StringHandler.h"

Expand Down Expand Up @@ -119,5 +121,12 @@ void ImportFMUModelDescriptionDialog::importFMUModelDescription()
if (!fmuFileName.isEmpty()) {
MainWindow::instance()->getLibraryWidget()->openFile(fmuFileName);
}
//trace import modeldescription
if (OptionsDialog::instance()->getTraceabilityPage()->getTraceabilityGroupBox()->isChecked() && !fmuFileName.isEmpty()) {
QFileInfo file(fmuFileName);
// Get the name of the file without the extension
QString base_name = file.baseName();
MainWindow::instance()->getCommitChangesDialog()->generateFMUTraceabilityURI("ModelDescription Import", fmuFileName, base_name, mpFmuModelDescriptionTextBox->text());
}
accept();
}
53 changes: 46 additions & 7 deletions OMEdit/OMEditGUI/Git/CommitChangesDialog.cpp
Expand Up @@ -3,6 +3,7 @@
#include "Modeling/ModelWidgetContainer.h"
#include "Modeling/MessagesWidget.h"
#include "Git/GitCommands.h"
#include "Options/OptionsDialog.h"
#include "Util/Helper.h"
#include "QFrame"
#include "QGridLayout"
Expand Down Expand Up @@ -210,26 +211,32 @@ void CommitChangesDialog::commitFiles()
if(!fileName.isEmpty()) {
QString activity = getFileStatus(fileName.mid(0, 2));
QString fileURI = fileName.mid(3);
generateTraceabilityURI(nameStructure, info.absolutePath(), activity, fileURI );
generateTraceabilityURI(nameStructure, info.absolutePath(), filePath, activity, fileURI );
}
}
accept();
}

void CommitChangesDialog::generateTraceabilityURI(QString nameStructure, QString filePath, QString activity, QString fileURI)
void CommitChangesDialog::generateTraceabilityURI(QString nameStructure, QString absloutePath, QString fileName, QString activity, QString fileURI)
{
QString toolURI, fileNameURI, activityURI, agentURI;
QFile file(filePath + "/" + nameStructure +".md");
QString toolURI, fileNameURI, activityURI, agentURI, sourceFileNameURI;
QFile file(absloutePath + "/" + nameStructure +".md");
// open the file for writing
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QDateTime time = QDateTime::currentDateTime();
/*for writing line by line to text file */
fileNameURI = "Entity.file:" + fileURI + "#"+ MainWindow::instance()->getGitCommands()->getGitHash(MainWindow::instance()->getModelWidgetContainer()->getCurrentModelWidget()->getLibraryTreeItem()->getFileName());
fileNameURI = "Entity.model:" + fileURI + "#"+ MainWindow::instance()->getGitCommands()->getGitHash(fileName);
toolURI = "Entity.softwareTool:" + MainWindow::instance()->getOMCProxy()->getVersion();
agentURI = "Agent:" + mpAuthorTextBox->text();
agentURI = "Agent:" + OptionsDialog::instance()->getTraceabilityPage()->getUserName()->text();
activityURI = "Activity." + activity +":" + time.toString("yyyy-MM-dd-hh-mm-ss");
QTextStream textSstream(&file);
textSstream << fileNameURI << "," << activityURI << "," << agentURI <<"," << toolURI;
if(activity.compare("Model Modification")== 0){
sourceFileNameURI = "Entity.model:" + fileURI + "#"+ MainWindow::instance()->getGitCommands()->getGitHash(fileName);
textSstream << activity << "," << toolURI << "," << fileNameURI << "," << agentURI << "," << activityURI <<"," << sourceFileNameURI;
}else {
textSstream << activity << "," << toolURI << "," << agentURI << "," << activityURI <<"," << fileNameURI;
}

file.flush();
file.close();
} else {
Expand All @@ -238,3 +245,35 @@ void CommitChangesDialog::generateTraceabilityURI(QString nameStructure, QString
Helper::scriptingKind, Helper::notificationLevel));
}
}

void CommitChangesDialog::generateFMUTraceabilityURI(QString activity, QString modelFileName, QString nameStructure, QString fmuFileName)
{
QString toolURI, activityURI, agentURI, sourceModelFileNameURI, fmuFileNameURI;
QDir dir(OptionsDialog::instance()->getTraceabilityPage()->getGitRepository()->text());
//fmuURI;
QFileInfo info(modelFileName);
QFile uriFile(info.absolutePath() + "/" + nameStructure +".md");
// open the file for writing
if (uriFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
QDateTime time = QDateTime::currentDateTime();
if(activity.compare("ModelDescription Import")== 0) {
qDebug("something here");
fmuFileNameURI = "Entity.model: " + dir.relativeFilePath(modelFileName) + "#" + MainWindow::instance()->getGitCommands()->commitAndGetFileHash(modelFileName, activity);
sourceModelFileNameURI = "Entity.modelDescription xml:" + dir.relativeFilePath(fmuFileName) + "#" + MainWindow::instance()->getGitCommands()->getGitHash(fmuFileName);
}else {
fmuFileNameURI = "Entity.fmu: " + dir.relativeFilePath(fmuFileName) + "#" + MainWindow::instance()->getGitCommands()->commitAndGetFileHash(fmuFileName, activity);
sourceModelFileNameURI = "Entity.model:" + dir.relativeFilePath(modelFileName) + "#" + MainWindow::instance()->getGitCommands()->getGitHash(modelFileName);
}
toolURI = "Entity.softwareTool: " + MainWindow::instance()->getOMCProxy()->getVersion();
agentURI = "Agent:" + OptionsDialog::instance()->getTraceabilityPage()->getUserName()->text();
activityURI = "Activity."+ activity +":" + time.toString("yyyy-MM-dd-hh-mm-ss");
QTextStream textSstream(&uriFile);
textSstream << activity << "," << toolURI << "," << fmuFileNameURI << "," << agentURI << "," << activityURI <<"," << sourceModelFileNameURI;
uriFile.flush();
uriFile.close();
} else {
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::CompositeModel, "", false, 0, 0, 0, 0,
tr("The traceability information is not stored. One possible reason could be the model is not Modelica model"),
Helper::scriptingKind, Helper::notificationLevel));
}
}
3 changes: 2 additions & 1 deletion OMEdit/OMEditGUI/Git/CommitChangesDialog.h
Expand Up @@ -15,6 +15,7 @@ class CommitChangesDialog : public QDialog
Q_OBJECT
public:
CommitChangesDialog(QWidget *pParent = 0);
void generateFMUTraceabilityURI(QString activity, QString modelFileName, QString nameStructure, QString fmuFileName);
private:
QStandardItemModel *mpCommitChangedFilesModel;
QTreeView * mpCommitChangedFilesTreeView;
Expand All @@ -40,7 +41,7 @@ class CommitChangesDialog : public QDialog
private slots:
void commitFiles();
void commitDescriptionTextChanged();
void generateTraceabilityURI(QString fileName, QString filePath, QString activity, QString fileURI);
void generateTraceabilityURI(QString nameStructure, QString filePath, QString fileName, QString activity, QString fileURI);
};

#endif // COMMITCHANGESDIALOG_H
14 changes: 14 additions & 0 deletions OMEdit/OMEditGUI/Git/GitCommands.cpp
Expand Up @@ -292,3 +292,17 @@ void GitCommands::commitFiles(QString repositoryPath, QString commitMessage)
mpGitProcess->start("git", QStringList() << "commit" <<"-m" << commitMessage);
mpGitProcess->waitForFinished();
}

/*!
* \brief GitCommands::getGitHash
* Returns the git hash of the file .
* \return
*/
QString GitCommands::commitAndGetFileHash(QString fileName, QString activity)
{
mpGitProcess->start("git", QStringList() << "add" << fileName);
mpGitProcess->waitForFinished();
mpGitProcess->start("git", QStringList() << "commit" << fileName <<"-m" << activity);
mpGitProcess->waitForFinished();
return getGitHash(fileName);
}
1 change: 1 addition & 0 deletions OMEdit/OMEditGUI/Git/GitCommands.h
Expand Up @@ -33,6 +33,7 @@ class GitCommands : public QObject
QString getEmailName();
QString getGitHash(QString fileName);
void commitFiles(QString repositoryPath, QString commitMessage);
QString commitAndGetFileHash(QString fileName, QString activity);
private:
QProcess *mpGitProcess;
QString mGitProgram;
Expand Down
4 changes: 4 additions & 0 deletions OMEdit/OMEditGUI/MainWindow.cpp
Expand Up @@ -788,6 +788,10 @@ void MainWindow::exportModelFMU(LibraryTreeItem *pLibraryTreeItem)
GUIMessages::getMessage(GUIMessages::FMU_GENERATED).arg(fmuFileName),
Helper::scriptingKind, Helper::notificationLevel));
}
//trace export FMU
if (OptionsDialog::instance()->getTraceabilityPage()->getTraceabilityGroupBox()->isChecked() && !fmuFileName.isEmpty()) {
MainWindow::instance()->getCommitChangesDialog()->generateFMUTraceabilityURI("FMU Export", pLibraryTreeItem->getFileName(), pLibraryTreeItem->getNameStructure(), fmuFileName);
}
// hide progress bar
hideProgressBar();
// clear the status bar message
Expand Down
3 changes: 3 additions & 0 deletions OMEdit/OMEditGUI/MainWindow.h
Expand Up @@ -78,6 +78,7 @@ class Label;
class FileDataNotifier;
class LibraryTreeItem;
class GitCommands;
class CommitChangesDialog;


class MainWindow : public QMainWindow
Expand Down Expand Up @@ -116,6 +117,7 @@ class MainWindow : public QMainWindow
ModelWidgetContainer* getModelWidgetContainer() {return mpModelWidgetContainer;}
WelcomePageWidget* getWelcomePageWidget() {return mpWelcomePageWidget;}
GitCommands* getGitCommands() {return mpGitCommands;}
CommitChangesDialog* getCommitChangesDialog() {return mpCommitChangesDialog;}
QStatusBar* getStatusBar() {return mpStatusBar;}
QProgressBar* getProgressBar() {return mpProgressBar;}
void showProgressBar() {mpProgressBar->setVisible(true);}
Expand Down Expand Up @@ -241,6 +243,7 @@ class MainWindow : public QMainWindow
ModelWidgetContainer *mpModelWidgetContainer;
WelcomePageWidget *mpWelcomePageWidget;
GitCommands *mpGitCommands;
CommitChangesDialog *mpCommitChangesDialog;
QStackedWidget *mpCentralStackedWidget;
QProgressBar *mpProgressBar;
Label *mpPointerXPositionLabel;
Expand Down
57 changes: 52 additions & 5 deletions OMEdit/OMEditGUI/Options/OptionsDialog.cpp
Expand Up @@ -765,6 +765,18 @@ void OptionsDialog::readTraceabilitySettings()
if (mpSettings->contains("traceability/Traceability")) {
mpTraceabilityPage->getTraceabilityGroupBox()->setChecked(mpSettings->value("traceability/Traceability").toBool());
}
// read user name
if (mpSettings->contains("traceability/UserName")) {
mpTraceabilityPage->getUserName()->setText(mpSettings->value("traceability/UserName").toString());
}
// read Email
if (mpSettings->contains("traceability/Email")) {
mpTraceabilityPage->getEmail()->setText(mpSettings->value("traceability/Email").toString());
}
// read Git repository
if (mpSettings->contains("traceability/GitRepository")) {
mpTraceabilityPage->getGitRepository()->setText(mpSettings->value("traceability/GitRepository").toString());
}
// read the traceability daemon IP-adress
if (mpSettings->contains("traceability/IPAdress")) {
mpTraceabilityPage->getTraceabilityDaemonIpAdress()->setText(mpSettings->value("traceability/IPAdress").toString());
Expand Down Expand Up @@ -1179,8 +1191,14 @@ void OptionsDialog::saveTLMSettings()
*/
void OptionsDialog::saveTraceabilitySettings()
{
// read traceability checkBox
// save traceability checkBox
mpSettings->setValue("traceability/Traceability", mpTraceabilityPage->getTraceabilityGroupBox()->isChecked());
// save user name
mpSettings->setValue("traceability/UserName", mpTraceabilityPage->getUserName()->text());
// save email
mpSettings->setValue("traceability/Email", mpTraceabilityPage->getEmail()->text());
// save Git repository
mpSettings->setValue("traceability/GitRepository", mpTraceabilityPage->getGitRepository()->text());
// save the traceability daemon IP-Adress
mpSettings->setValue("traceability/IPAdress", mpTraceabilityPage->getTraceabilityDaemonIpAdress()->text());
// save the traceability daemon port
Expand Down Expand Up @@ -4374,6 +4392,18 @@ TraceabilityPage::TraceabilityPage(OptionsDialog *pOptionsDialog)
mpTraceabilityGroupBox = new QGroupBox(tr("Traceability"));
mpTraceabilityGroupBox->setCheckable(true);
mpTraceabilityGroupBox->setChecked(false);
// User name
mpUserNameLabel = new Label(tr("User Name:"));
mpUserNameTextBox = new QLineEdit;
// Email
mpEmailLabel = new Label(tr("Email:"));
mpEmailTextBox = new QLineEdit;
// Git repository
mpGitRepositoryLabel = new Label(tr("Git Repository:"));
mpGitRepositoryTextBox = new QLineEdit;
mpBrowseGitRepositoryButton = new QPushButton(Helper::browse);
mpBrowseGitRepositoryButton->setAutoDefault(false);
connect(mpBrowseGitRepositoryButton, SIGNAL(clicked()), SLOT(browseGitRepository()));
// Traceability Daemon Ip Adress
mpTraceabilityDaemonIpAdressLabel = new Label(tr("Traceability Daemon IP Adress:"));
mpTraceabilityDaemonIpAdressTextBox = new QLineEdit;
Expand All @@ -4383,10 +4413,17 @@ TraceabilityPage::TraceabilityPage(OptionsDialog *pOptionsDialog)
// set the layout
QGridLayout *pTraceabilityGroupBoxLayout = new QGridLayout;
pTraceabilityGroupBoxLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonIpAdressLabel, 0, 0);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonIpAdressTextBox, 0, 1);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonPortLabel, 1, 0);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonPortTextBox, 1, 1);
pTraceabilityGroupBoxLayout->addWidget(mpUserNameLabel, 0, 0);
pTraceabilityGroupBoxLayout->addWidget(mpUserNameTextBox, 0, 1);
pTraceabilityGroupBoxLayout->addWidget(mpEmailLabel, 1, 0);
pTraceabilityGroupBoxLayout->addWidget(mpEmailTextBox, 1, 1);
pTraceabilityGroupBoxLayout->addWidget(mpGitRepositoryLabel, 2, 0);
pTraceabilityGroupBoxLayout->addWidget(mpGitRepositoryTextBox, 2, 1);
pTraceabilityGroupBoxLayout->addWidget(mpBrowseGitRepositoryButton, 2, 2);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonIpAdressLabel, 3, 0);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonIpAdressTextBox, 3, 1);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonPortLabel, 4, 0);
pTraceabilityGroupBoxLayout->addWidget(mpTraceabilityDaemonPortTextBox, 4, 1);
mpTraceabilityGroupBox->setLayout(pTraceabilityGroupBoxLayout);
QVBoxLayout *pMainLayout = new QVBoxLayout;
pMainLayout->setAlignment(Qt::AlignTop);
Expand All @@ -4404,3 +4441,13 @@ TraceabilityPage::TraceabilityPage(OptionsDialog *pOptionsDialog)
// mpFMUOutputDirectoryTextBox->setText(StringHandler::getExistingDirectory(this, QString("%1 - %2").arg(Helper::applicationName)
// .arg(Helper::chooseDirectory), NULL));
//}

/*!
* \brief TraceabilityPage::browseFMUOutputDirectory
* Browse FMU Output Directory.
*/
void TraceabilityPage::browseGitRepository()
{
mpGitRepositoryTextBox->setText(StringHandler::getExistingDirectory(this, QString("%1 - %2").arg(Helper::applicationName)
.arg(Helper::chooseDirectory), NULL));
}
13 changes: 12 additions & 1 deletion OMEdit/OMEditGUI/Options/OptionsDialog.h
Expand Up @@ -877,12 +877,21 @@ class TraceabilityPage : public QWidget
QGroupBox* getTraceabilityGroupBox() {return mpTraceabilityGroupBox;}
// QLineEdit* getFMUOutputDirectory() {return mpFMUOutputDirectoryTextBox;}
// QPushButton *mpBrowseFMUOutputDirectoryButton;
QPushButton *mpBrowseGitRepositoryButton;
QLineEdit* getTraceabilityDaemonIpAdress() {return mpTraceabilityDaemonIpAdressTextBox;}
QLineEdit* getTraceabilityDaemonPort() {return mpTraceabilityDaemonPortTextBox;}
QLineEdit* getUserName() {return mpUserNameTextBox;}
QLineEdit* getEmail() {return mpEmailTextBox;}
QLineEdit* getGitRepository() {return mpGitRepositoryTextBox;}
private:
OptionsDialog *mpOptionsDialog;
QGroupBox *mpTraceabilityGroupBox;
// QCheckBox *mpTraceabilityCheckBox;
Label *mpUserNameLabel;
QLineEdit *mpUserNameTextBox;
Label *mpEmailLabel;
QLineEdit *mpEmailTextBox;
Label *mpGitRepositoryLabel;
QLineEdit *mpGitRepositoryTextBox;
// Label *mpFMUOutputDirectoryLabel;
// QLineEdit *mpFMUOutputDirectoryTextBox;
Label *mpTraceabilityDaemonIpAdressLabel;
Expand All @@ -891,6 +900,8 @@ class TraceabilityPage : public QWidget
QLineEdit *mpTraceabilityDaemonPortTextBox;
private slots:
// void browseFMUOutputDirectory();
void browseGitRepository();

};

#endif // OPTIONSDIALOG_H

0 comments on commit 081cef9

Please sign in to comment.