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 4 ... 7
General Board / Empty tags of a class not shown in diagram
« on: September 14, 2018, 11:48:33 pm »
I just observed that EA 14.1 does not display tags with no value (empty tags) in a diagram, even if the compartment visibility is set for tags (or even inherited tags).
As soon as I give the empty tags a value they are displayed.

Is this behavior normal/intended?
How is the behavior in EA version <= EA 14.0?

I would like to see all tags, even those with no value, if compartment visibility is set for tags.

since a long time (>> 1 year) I have a really annoying behavior when creating a message/call in a sequence chart.
Today it really makes me >:( >:( >:( >:(.

When creating a message between existing messages the message jumps down after creation.
Sometimes it is located at the very bottom, sometimes somewhere in the middle of the diagram.
I always have to move it with press Alt-key to the intended location.

This does not happen the created message is the last in the sequence.
The behavior is the same in EA 12 and 13 (14 not yet tested).

Any idea what might cause this behavior?
Or even better: how to get rid of this?
I do not think this is intended.
A re-installation did not help.

General Board / Re: Where are user passwords stored?
« on: April 20, 2018, 12:19:22 am »
I found the new password storage.
It is in table t_xref. All entries with name = 'SHA-256' are passwords of users in table t_secuser (passwords that have been created with EA version >= 11).
The guid of a user can be found in t_xref.client.

Maybe this information also helps anyone else :).

General Board / Re: Where are user passwords stored?
« on: April 19, 2018, 10:18:28 pm »
It is true that there is still a column named "passwd", but that is the old password hash that has been used before EA 11.
Somehwere else are the new SHA hashes,but not in t_secuser

General Board / Where are user passwords stored?
« on: April 19, 2018, 07:43:12 pm »
In EA 11 Sparx has changed to a SHA hash of the user security passwords.
Along with that change, the storage location of the user passwords has changed. Before the passwords where in table t_secuser, now they are somewhere else.
Does anybody know where the passwords are stored?

General Board / Re: Weird copy/paste diagram behaviour
« on: January 15, 2018, 09:52:06 pm »
OK, copying the diagram content instead of the diagram itself should have been my idea :).
That works for us. It even is faster than copying a diagram incl. content.

But nevertheless the observed behavior, as linked by Nizam, is really weird and illogical.

Thanks a lot.

General Board / Weird copy/paste diagram behaviour
« on: January 15, 2018, 08:15:20 pm »
I observed a strange behavior when copying and pasting a diagram than I cannot explain (EA 13.5 and EA 12.1).
Source diagram:
- contains class elements
- contains instances of classes
All elements are in the same package as the source diagram.

Newly pasted diagram (paste as shallow copy):
Good: The diagram also contains classes and instances, and the classes refer to the original elements (links to them).
Bad: The instances are copies of the "original instances". So in the project browser now I have copies of all instances. The new diagram now links to the duplicated instances, instead of linking to the original ones.

Any other copy method (deep, smart) does also duplicated the elements in the diagram, as expected. But this is not what I want.

Any idea if this behavior is normal? And (more important) why is this normal?
Any idea how to get a copy/clone of a diagram, without duplicating the elements in the copied diagram?

How about this:,37561.msg235657.html#msg235657

Maybe the code from the last post helps.

General Board / What is a "property"?
« on: July 31, 2017, 11:42:24 pm »

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).

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

Reference for interested people:

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

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.

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.

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  :(.

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))
      // wrong usage of command line arguments     
      returnValue = EXIT_FAILURE;

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

   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;
      // 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( // if argument is an existing file
           && !QDir().cd(   // and if argument is not a directory
            logFile.setFileName( );
            // LogFileName is not valid (file cannot be found)
            printErrorMessage( QString("Given logFile cannot be found: ").append( );
            returnValue = false;
         // 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( );
         // no "-r" argument found
         printErrorMessage( "No -r argument given" );
         returnValue = false;


   return returnValue;

static void printSyntax(const QStringList arguments)
   qout << "Usage: " << << " -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: " << << " -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_");
   QFile copyFile(copyFileName);
   if( fopen_s(&inFile, copyFile.fileName().toLatin1(), "r") == 0 )
      inStream = new QTextStream(inFile, QIODevice::ReadOnly);
      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);
      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;
         if( line.contains("[REPORT]: [AUDIT]"))
            line.remove("[REPORT]: [AUDIT]");
            line = line.simplified();
//            qout << line << endl;
            splittedLine = line.split("|");

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

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

// Edition
// Time
// Date
            //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

   delete inStream;
   delete outStream;

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*.

Pages: 1 [2] 3 4 ... 7