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
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?

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

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?

General Board / Login to EA models - in some model Yes in some not
« on: December 14, 2016, 08:45:20 pm »
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?

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:

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

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.

Pages: [1] 2 3 ... 5