Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Boron

Pages: [1] 2 3 ... 5
1
General Board / What is a "property"?
« on: July 31, 2017, 11:42:24 pm »
Hello,

since several weeks I am asking myself the hell is a "property" when dropping a class element in a diagram.
When dropping a class element in a diagram a dialog appears asking of what kind the dropped element shall be created: Link, Instance, Child, Property.

Links, Instance and Child are perfectly clear.
I just don't know what a property might be.

Can anyone bring light into my darkness?
All explanations in the internet did not really help (maybe bad explained or I am too stupid for that).

2
Many thanks :).
Tag grouping is OK for me. Not needed tags can simply be left empty.

Reference for interested people:
http://sparxsystems.com/enterprise_architect_user_guide/12.1/building_models/define_tag_groupings.html

3
Hello,
is it anyhow possible let EA create/remove tags based on the value of another tag?

Example:
I created an stereotype <<Signal>> (based on metaclass Interface).
A <<Signal>> will always have the tag "Conversion", which is an enum with "Analog" and "Linear" as selectable values.
I would no like to do EA the following magic:
 - If I select "Linear" two additional tags shall be added.
 - If I select "Analog": the two new tags should disappear, if existing.

Any idea how this can be realized?
Maybe UML profiles and stereotypes are the wrong way to do this. I appreciate any other idea.

4
We have some similar "problem" with our approach of designing/modelling the software in our company.
We additionally have our packages under version control that also prevents adding relationships in other diagrams.

Our solution:
We are not using the originals elements (e.g. classes) in diagrams outside the original package, but we are using instances or properties of the elements.
Thus the original elements remain unchanged but the instances are related somehow via any kind of thinkable relationships.

5
General Board / Re: Respository Usage Statistics
« on: January 17, 2017, 05:53:42 pm »
The keystore service logfiles only show if licenses have been checke-out, -in etc.
They do not show which models have been opened, closed etc.
So this is not a solution for Phil  :(.

6
Another site to register :(.
Just had the idea to put the source code directly in a post.
No complaints about the code :). It works for me.
Code: [Select]
#include <QDir>
#include <QFile>
#include <QTimer>
#include <QStringList>
#include <QCoreApplication>
#include <QTextStream>

static bool checkIfValidArguments(QStringList arguments);
static void printSyntax(const QStringList arguments);
static void parseLogFile();
static void printErrorMessage(QString message);

static QFile logFile;
static QFile reportFile;
static QTextStream qout(stdout);

int main( int argc, char** argv)
{
   int returnValue = EXIT_SUCCESS;

   QCoreApplication app(argc, argv); //renamed the a to app
   QStringList arguments = app.arguments();

   if( checkIfValidArguments(arguments))
   {
      parseLogFile();
   }
   else
   {
      // wrong usage of command line arguments     
      printSyntax(arguments);
      returnValue = EXIT_FAILURE;
   }

   QTimer::singleShot(0, &app, SLOT(quit())); //stop after 0 seconds
   app.exec();

   return returnValue; //and we run the application
}

/******************************************************************************/
static bool checkIfValidArguments(QStringList arguments)
{
   bool returnValue = true;

   int whereLogFileArgument;
   int whereLogFileName;

   int whereReportFileArgument;
   int whereReportFileName;

   if(arguments.size() < 5)
   {
      // too less arguments
      printErrorMessage( "Too few arguments given." );
      returnValue = false;
   }
   else
   {
      /*******************************/
      // Check for log file
      whereLogFileArgument = arguments.indexOf("-l");
      if(whereLogFileArgument > 0)
      {
         whereLogFileName = whereLogFileArgument + 1;   // expect log file name right behind "-l" argument
         if(  QFile::exists(arguments.at(whereLogFileName)) // if argument is an existing file
           && !QDir().cd(arguments.at(whereLogFileName)))   // and if argument is not a directory
         {
            logFile.setFileName( arguments.at(whereLogFileName) );
         }
         else
         {
            // LogFileName is not valid (file cannot be found)
            printErrorMessage( QString("Given logFile cannot be found: ").append(arguments.at(whereLogFileName)) );
            returnValue = false;
         }
      }
      else
      {
         // no "-l" argument found
         printErrorMessage( "No -l argument given" );
         returnValue = false;
      }

      /*******************************/
      // Check for report file
      whereReportFileArgument = arguments.indexOf("-r");
      if(whereReportFileArgument > 0)
      {
         whereReportFileName = whereReportFileArgument + 1;   // expect report file name right behind "-r" argument
         reportFile.setFileName( arguments.at(whereReportFileName) );
      }
      else
      {
         // no "-r" argument found
         printErrorMessage( "No -r argument given" );
         returnValue = false;
      }

   }

   return returnValue;
}

/******************************************************************************/
static void printSyntax(const QStringList arguments)
{
   qout << "Usage: " << arguments.at(0) << " -l <logFile> -r <reportFile>" << endl;
   qout << "   logFile     Path to the logfile created by the Sparx KeystoreService" << endl;
   qout << "   reportFile  Path to the report file" << endl;
   qout << "               The report file is written in csv format (*.csv extension is encouraged)" << endl;
   qout << "               If the given file name already exists the file will be overwritten" << endl;
   qout << "Example: " << arguments.at(0) << " -l C:\\Sparx\\ssksLog-1.log -r C:\\LicenseReport.csv" << endl;
}

/******************************************************************************/
static void printErrorMessage(QString message)
{
   qout << "Error: " << message << endl;
}

/******************************************************************************/
static void parseLogFile()
{
   QStringList splittedLine;
   QTextStream* inStream;
   QTextStream* outStream;
   bool errorOccured = false;

   /***********/
   // Open log file
   FILE* inFile;
   QString copyFileName("CopyOf_");
   logFile.copy(copyFileName.append(QFileInfo(logFile.fileName()).fileName()));
   QFile copyFile(copyFileName);
   if( fopen_s(&inFile, copyFile.fileName().toLatin1(), "r") == 0 )
   {
      inStream = new QTextStream(inFile, QIODevice::ReadOnly);
      inStream->setAutoDetectUnicode(true);
   }
   else
   {
      errorOccured = true;
      printErrorMessage( "Log file could not be opened." );
   }

   /***********/
   // Open report file
   FILE* outFile;
   if( fopen_s(&outFile, reportFile.fileName().toLatin1(), "w") == 0 )
   {
      outStream = new QTextStream(outFile, QIODevice::ReadWrite);
   }
   else
   {
      errorOccured = true;
      printErrorMessage( "Report file could not be written." );
   }

   /***********/
   if( !errorOccured )
   {
      QString line;
  *outStream << "Date ; Time ; Edition; Available ; Expired ; Checked Out ; Checkouts ; Reasserts ; Failues ;" << endl;
      do
      {
         if( line.contains("[REPORT]: [AUDIT]"))
         {
            line.remove("[REPORT]: [AUDIT]");
            line = line.simplified();
//            qout << line << endl;
            splittedLine = line.split("|");

            QString dateTime = splittedLine[0];
            splittedLine.removeAt(0);
            QStringList dateTimeList = dateTime.split(" ");

QString edition;
for (int i = 2; i < dateTimeList.size(); i++)
{
edition.append(dateTimeList[i]);
edition.append(" ");
}

// Edition
splittedLine.prepend(edition);
// Time
            splittedLine.prepend(dateTimeList.at(1));
// Date
            splittedLine.prepend(dateTimeList.at(0));
            //for( int i=0; i<splittedLine.size(); i++ )
            //{
            //   splittedLine[i] = splittedLine[i].simplified();
            //}

            // Date
            *outStream << splittedLine[0] << ";";
            // Time
            *outStream << splittedLine[1].remove(splittedLine[1].lastIndexOf(":"), 3) << ";";
// Edition
*outStream << splittedLine[2] << ";";
// Available
*outStream << splittedLine[3].remove("Available:") << ";";
// Expired
            *outStream << splittedLine[4].remove("Expired:") << ";";
            // Checked-out
            *outStream << splittedLine[5].remove("Checked Out:") << ";";
            // Checkouts
            *outStream << splittedLine[6].remove("Checkouts:") << ";";
            // Reasserts
            *outStream << splittedLine[7].remove("Reasserts:") << ";";
            // Failures
            *outStream << splittedLine[8].remove("Failures:") << ";";

            *outStream << endl;
         }
         line = inStream->readLine();
      } while (!line.isNull());
   }

   // delete temporary file
   fclose(inFile);
   fclose(outFile);
   copyFile.remove();

   delete inStream;
   delete outStream;
}

7
General Board / Re: Login to EA models - in some model Yes in some not
« on: December 14, 2016, 10:38:46 pm »
The "Accept Windows Authentication" option was not set.
After activation EA logs in the users automatically :).

Many thanks *beer*.

8
General Board / Re: Login to EA models - in some model Yes in some not
« on: December 14, 2016, 09:12:09 pm »
We never intentionally used any "Active Directory linking".
Out company has AD server(s) but we did not officially connect EA with AD.

How can I find out if an user account is linked with our AD server?

9
General Board / Login to EA models - in some model Yes in some not
« on: December 14, 2016, 08:45:20 pm »
Hello,
we have
  • all models on a PostgreSQL server
  • all models configured with "Enable Security" and "Require User Lock to Edit"
  • every developer has its own "account" (user) configured in the models
Now we discover that on some models all users always get a login dialog ("Login to EA Repository" with UserID and Password) is shown, when opening the model.
After providing UserID and password and checking "Remember UserID" the models opens.
When reopening the model, after it has been closed, the dialog is shown again, with User Id already filled out.

On most other models this dialog does not appear.
As stated above: all models are configured identical.

Any idea what might cause some models always to ask for login but not in other models?

10
General Board / Re: Tagged values on a package
« on: December 14, 2016, 08:29:16 pm »
You could create a specialized UML profile with a new stereotyped package containing the tags.
We did this as we want to use packages with stereotypes like <<Functionality>> or <<Component>>. Along with the stereotypes we have tags like "ASIL" where we can select an enum value (QM, ASIL-A, ASIL-B, ASIL-C, ASIL-D, undefined). You see that I am working in automotive industry :).

Not sure if this is the best starting point: http://sparxsystems.com/enterprise_architect_user_guide/13.0/model_domains/umlprofiles.html.

11
I wrote a parser for the logfiles of the keystore service myself.
It uses the Qt library.
The output is a *.csv file that can then be used in Excel for any imaginable evaluation.

Unfortunately we cannot attach files to forum posts.
It is just one *.cpp file. I would have shared with you :(.

12
Bugs and Issues / Re: Enterprise Architect 13 cannot display tooltips
« on: November 09, 2016, 01:08:06 am »
Oh my god  :o.
Did Sparx really remove tooltips in favor of text in the status bar?
I also was wondering where the tooltips are, since I installed EA 13. Good thing I mostly know the icons.
Nevertheless, this is crazy. Tooltips are standard nowadays.

13
Bugs and Issues / Re: Get All Latest that never completed
« on: November 03, 2016, 11:14:33 pm »
... but also prohibits wrong use of get all latest.
Use EA security and create a "Developer" user group that does not have the right to invoke "Get all latest...".
All users except "key users" (e.g. dedicated admins or SW architects) should be part of that group.

14
Bugs and Issues / Re: Get All Latest that never completed
« on: November 02, 2016, 06:13:01 pm »
I don't know if the unfinished "Get all latest" can be cancelled "globally" for the model.

What I do know: A user trying to checkout a package and getting  the message "Get all latest in progress. Continue anyway?" (or something like that) can simply continue.
The checkout will be performed without problems.
This is not a real solution, but it ensures that working can be continued.

15
General Board / Re: EA with repositories on PostgreSQL
« on: October 18, 2016, 12:43:35 am »
Thanks a lot for your help :).

Pages: [1] 2 3 ... 5