GIT Merge mit Eclipse durchführen

  1. Merge-Quell-Branch auschecken
  2. Pull
  3. Merge-Zielbranch auschecken
  4. Rechtsklick auf Zielbranch und dann ‚Rebase on‘, dann Quell-Branch auswählen
  5. Bei Merge-Konflikten war es für mich immer am einfachsten ich habe die Dateien, die Konflikte aufwiesen roh angezeigt und die Konflikte, (markiert mit ‚>>>>>‘ und ‚<<<<‚) von Hand bereinigt. Danach müssen diese Dateien ‚added‘, ‚commited‘ und der Branch dann ‚gepushed‘ werden.
  6. Und fertig ist der Merge

Spezifische Feld-Auswahl bei CriteriaAPI Mehrfach-Joins

Folgendes Beispiel zeigt, wie man spezifische Felder aus einem Join für die Resultat-Tabelle selektiert, indem man eine eingene Empfängerklasse (hier Container) definiert und in CriteriaQuery.multiselect(..) die felder selektiert, die man eben in der Resultattabelle haben will.

Gelehrt hat mich dies diese Stackoverflow-Seite.

    /**
     * Container, dem das spezifisch selektierten Feld übergeben wird
     */
    public static class Container {
        private String orderList;
        private String businessCd;

        /**
         * CriteriaAPI übergibt an den Constructor.
         */
        public Container(String orderList, String businessCd) {
            this.orderList = orderList;
            this.businessCd = businessCd;
        }

        public String getOrderList() {
            return orderList;
        }

        public String getBusinessCd() {
            return businessCd;
        }
    }

    Set<String> getWithCriteriApiExercise(UniqueId businessExecutionId) {
        CriteriaBuilder criteriaBuilder = daoProvider.getEntityManager().getCriteriaBuilder();
        CriteriaQuery<Container> query = criteriaBuilder.createQuery(Container.class);  // <-- !!! selbst definierte Empängerklasse (Container.class)
        Root<HpsBusiness> root = query.from(HpsBusiness.class);
        Join<HpsBusiness, HpsBusinessExec> joinBusiness = root.join(HpsBusiness._ATTR_businessExec, JoinType.INNER); //n:1
        Join<HpsBusiness, HpsExcludedPos> joinExcludedPos  = root.join(HpsBusiness._ATTR_excludedPosList, JoinType.INNER); //1:n

        query.multiselect(joinExcludedPos.get(HpsExcludedPos._ATTR_orderIdList), root.get(HpsBusiness._ATTR_businessCd))  // <-- !!! multiselect Methode benutzen!!
                .where(criteriaBuilder.and(criteriaBuilder.equal(joinBusiness.get(HpsBusinessExec._ATTR_id), businessExecutionId),
                criteriaBuilder.equal(joinExcludedPos.get(HpsExcludedPos._ATTR_reason), "deprecated")));

        TypedQuery<Container> typedQuery = daoProvider.getEntityManager().createQuery(query);

        return typedQuery.getResultList().stream().map(c -> c.getOrderList() + "/" + c.getBusinessCd()).collect(Collectors.toSet());  // get the fields from Container
    }

Mehrfach-Join in CriteriaAPI

Beachte, dass bei den Joins sowohl in richtung n:1 als auch in Richtung 1:n (mit _ATTR_excludedPosList) referenziert wird!

    Set<String> getBusinessTypesWithExclusions(UniqueId businessExecutionId) {
        CriteriaBuilder criteriaBuilder = daoProvider.getEntityManager().getCriteriaBuilder();
        CriteriaQuery<HpsBusiness> query = criteriaBuilder.createQuery(HpsBusiness.class);
        Root<HpsBusiness> root = query.from(HpsBusiness.class);
        Join<HpsBusiness, HpsBusinessExec> joinBusiness = root.join(HpsBusiness._ATTR_businessExec, JoinType.INNER);        // <-- n : 1
        Join<HpsBusiness, HpsExcludedPos> joinExcludedPos  = root.join(HpsBusiness._ATTR_excludedPosList, JoinType.INNER);  // <-- 1 : n 

        query.select(root).where(criteriaBuilder.and(criteriaBuilder.equal(joinBusiness.get(HpsBusinessExec._ATTR_id), businessExecutionId),
                criteriaBuilder.equal(joinExcludedPos.get(HpsExcludedPos._ATTR_exclusionReasonType), ExclusionReasonType.EXCLUDED.name())));

        return daoProvider.getHpsBusinessDao().find(query).stream().map(HpsBusiness::getBusinessCd).collect(Collectors.toSet());
    }

Starten mit WEMOS LOLIIN ESP32

Basiert auf dem Artikel „Smarte Helfer selbst gebaut“ im CT Heft Nr. 2018/2 S. 64ff.

Software-Links dazu.

Sehr guten Einstieg in den ESP32 bietet auch: https://youtu.be/xPlN_Tk3VLQ

 

Schritt 1: Arduino IDE herunter laden

Schritt 2: ESP32 SW-Ausrüstung in Arduino-IDE einspielen

Dazu ist es einfacher die Installation via „Board-Manager“ durchzuführen: Anleitung (aus der Espressive Page)

Anleitung Backup: Dazu unter Preferences ‚Additional Board Managers‘ den hier https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json eintragen (mehrere solche URL würden mit Komma separiert). Dann „Boards Manager“ aus „Tools > Board menu“ öffnen „esp32 platform“ installieren.

Schritt 3: CT Software Libraries einspielen

Vorgehen gemäss Heft. SW Links unter ct.de/y73t

Nachtrag 14.03.2021: Jedoch: Statt ‚Bootcamp‘ (SW library von CT) besser EspMQTTClient benutzen. -> Siehe unbedingt Dachfenster-Sensor mit Alarm auf dem Handy!

Stolperstein: (Nicht mehr relevant wenn  EspMQTTClient benutzt wird)
Bei ArduinoJson ist auf dem GITHub bereits die Version 6. Basecamp arbeitet aber nur mit Version 5 zusammen. Zum Glück hat der Arduino IDE Library-Manager eine ArduinoJson Version 5 verfügbar. —> Installiere von dort!
Nachtrag:  ct.de/y73t liefert die Bibliotheken auch direkt als ZIP. Da hätte man wahrscheinlich das Versionsproblem auch nicht.

Schritt 4: Sketch übertragen

CT stellt die Beispielcodes zu Verfügung. -> Z.B. Beispielcodes für Dachfenster-Sensor mit Alarm auf dem Handy (siehe dort)!

Zuerst Sketch in Editor der IDE laden.

Zu Übertragung:
– Unter ‚Tools‘ > ‚Board‘ das passende ESP Board einstellen. Unter dem ‚Board‘-Menu muss es ein ‚ESP32 Arduino‘-Menu haben, ansonsten ist wahrscheinlich Schritt 2 nicht richtig ausgeführt worden.
Wähle ‚WEMOS LOLIN32‚. Wenn der nicht geht ‚ESP32 Dev Module‚.
– Reduziere allenfalls die Übertragungsgeschwindigkeit
– Wähle den richtigen Port, nämlich jenen, der im Gerätemanager (devmgmt.msc (Windows)) unter „Anschlüsse (COM & LPT)“ die Bezeichnung „USB to UART Bridge“ trägt. Falls kein solcher vorliegt, sieh weiter unten, Stichwort ‚Übertragungsfehler‚.
– Menu ‚Sketch‘ > ‚Upload‘
– Die Meldung „Leaving…  Hard resetting via RTS pin… “ ist nicht als Fehlermeldung zu betrachten.

Bei Übertragungsfehlern (typischerweise Timout) prüfen:
– Innerhalb des Gerätemanager (devmgmt.msc (Windows)) prüfen ob unter „Anschlüsse (COM & LPT)“ ein „Silicon Labs CP210x USB to UART Bridge“ vorhanden ist. Wenn nicht, liegt das eventuell daran, dass ein Wackel vorliegt. Kabel am ESP anpressen kann schon helfen, oder aber das USB Kabel wechseln. Möglich wäre auch das Windows tatsächlich den Treiber nicht installiert hat. Man ihn also manuell nachinstallieren müsste.

 

Criteria API: Join mit Filter auf beiden joined Tables

Der Knackpunkt is dieser:

Mit

Root<TabelleA> root = query.from(TabelleA.class)

wird die Ausgangstabelle (root) bezeichnet.

Mit

Join<TabelleA, TablleB> join = root.join(TabelleA.bRef);

wir HealthCheck hinzu ge-joined.

Wichig Referenzen (z.B. der Filter auf das Feld feldXY) müssen nun von join aus gehen:

join.get(TablleB.feldXY)

Oder die ganze Where-Clause:

.where(criteriaBuilder.equal(root.get(TabelleA.id), "id000001"),
 criteriaBuilder.like( join.get(TablleB.feldXY), "%gesuchterInhalt%"))

 

Ganze Beispiel

CriteriaBuilder criteriaBuilder = ippDaoProvider.getEntityManager().getCriteriaBuilder();
CriteriaQuery<TabelleA> query = criteriaBuilder.createQuery(TabelleA.class);
Root<TabelleA> root = query.from(TabelleA.class);
Join<TabelleA, TablleB> join = root.join(TabelleA.bRef);

String healthCheckType = "BelowInvest";
query.select(root).where(criteriaBuilder.equal(root.get(TabelleA.id), "id000001"),
        criteriaBuilder.like( join.get(TablleB.feldXY), "%gesuchterInhalt%"));

List<TabelleA> aList =  ippDaoProvider.getHealthCheckExecutionDao().find(query);

 

 

Eclipse RCP JUnit tests with SWT checks

The basing question:
How to do JUnit tests for RCP classes that create SWT GUI?

Vorgehen/Hinweise:

  • The „Run As“ dialog of Eclipse offers a „Run as Plugin“ option which must be used if OSGI features are used in the test.
  • If OSGI features are needed (e.g. an OSGI service is part of the game) than OSGI a BundleContext  has to be set up. Read OSGI Component Testing (Integration testing / “black-box-testing”) and perhaps OSGI BundleContext.java.
    If this is done, then a Bundle can be invoked/setup by FrameworkUtil.getBundle(AnyClassInTheTestPlugin.java)

To read:

OSGI Component Testing

OSGI BundleContext.java    –> siehe Mindmap unten!

Eclipse-test-plugin

Testing OSGI Based Applications –> PDF Version

Bundle Context

 

Setting up Eclipse like context for dependency injection:

If the class A has an annotation like

@Inject
C c;

Then a class A can be retrieved that has an object of C already injected like that:

IEclipseContext context = EclipseContextFactory.create("test context");
context.set(C.class, new C(...));
A a = ContextInjectionFactory.make(A.class, context);

 

Problem while running on Linux Jenkins

org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]

 

xxx

Schließen