From 24ad39eec2a0fdca1ef9768de0b92e45a34c1a24 Mon Sep 17 00:00:00 2001 From: ulrich Date: Tue, 03 Dec 2024 13:35:37 +0000 Subject: [PATCH] Anwendungsspezifische Parameter im Scanner auf generisches Object-Array umgestellt --- src/de/uhilger/neon/Factory.java | 17 +++++++- src/de/uhilger/neon/Scanner.java | 58 +++++++++++++---------------- 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/de/uhilger/neon/Factory.java b/src/de/uhilger/neon/Factory.java index ddbb717..3748d5b 100644 --- a/src/de/uhilger/neon/Factory.java +++ b/src/de/uhilger/neon/Factory.java @@ -397,7 +397,20 @@ /* -------------- ScannerListener Implementierung --------------- */ @Override - public void annotationFound(Class foundClass, Handler h, String contextName) { - wire(h, foundClass, contextName); + public void annotationFound(Class foundClass, Object[] params) { + Handler h = null; + String contextName = null; + for(Object param : params) { + if(param instanceof Handler) { + h = (Handler) param; + } else if(param instanceof String) { + contextName = (String) param; + } + } + if(h == null || contextName == null) { + Logger.getLogger(Factory.class.getName()).log(Level.FINER, "Handler oder contextName ist null"); + } else { + wire(h, foundClass, contextName); + } } } \ No newline at end of file diff --git a/src/de/uhilger/neon/Scanner.java b/src/de/uhilger/neon/Scanner.java index 8efdec0..1ebf846 100644 --- a/src/de/uhilger/neon/Scanner.java +++ b/src/de/uhilger/neon/Scanner.java @@ -70,7 +70,7 @@ public Class getAnnotation() { return annotation; } - + /** * Klassen suchen, die die dem Konstruktor gegebene Annotation besitzen. * @@ -81,28 +81,17 @@ * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde - * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll - * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen + * @param params Parameter, die an den Listener weitergereicht werden */ - public void process(ScannerListener l, String packageName, Handler h, String contextName) { + public void process(ScannerListener l, String packageName, Object... params) { if (isJar()) { - processZipContent(packageName, l, h, contextName); + processZipContent(packageName, l, params); } else { - processClasses(l, packageName, h, contextName); + processClasses(l, packageName, params); } } - /** - * Den Inhalt einer Jar-Datei nach Klassen durchsuchen, die die dem Konstruktor gegebene - * Annotation besitzen. - * - * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen - * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft - * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde - * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll - * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen - */ - private void processZipContent(String packageName, ScannerListener l, Handler h, String contextName) { + private void processZipContent(String packageName, ScannerListener l, Object... params) { try { ZipFile zipfile = new ZipFile(new File(path)); Enumeration en = zipfile.entries(); @@ -110,7 +99,7 @@ while (en.hasMoreElements()) { ZipEntry zipentry = (ZipEntry) en.nextElement(); if (!zipentry.isDirectory()) { - processZipEntry(zipentry, packageName, l, h, contextName); + processZipEntry(zipentry, packageName, l, params); } else { // ZIP-Dir muss nicht bearbeitet werden } @@ -119,9 +108,17 @@ log(Level.SEVERE, ex.getLocalizedMessage()); } } - - @SuppressWarnings("unchecked") - private void processZipEntry(ZipEntry zipentry, String packageName, ScannerListener l, Handler h, String contextName) { + + /** + * Den Inhalt einer Jar-Datei nach Klassen durchsuchen, die die dem Konstruktor gegebene + * Annotation besitzen. + * + * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen + * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft + * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde + * @param params Parameter, die an den Listener weitergereicht werden + */ + private void processZipEntry(ZipEntry zipentry, String packageName, ScannerListener l, Object... params) { finest(zipentry.getName()); String zName = zipentry.getName(); if (zName.toLowerCase().endsWith(".class")) { @@ -138,7 +135,7 @@ if (c != null) { if (c.isAnnotationPresent(annotation)) { finest(" ---- ACTOR ---- " + fullClassNameDots); - l.annotationFound(c, h, contextName); + l.annotationFound(c, params); } else { finest("kein Actor " + fullClassNameDots); } @@ -151,18 +148,16 @@ } } } - + /** * Einen Ordner mit Klassen durchsuchen * * @param packageName Name der Package, die einschl. Unterpackages durchsucht wird, nur Klassen * dieser Package und ihrer Unterpackages werden geladen und auf die Anotation ueberprueft * @param l ein Objekt, das verstaendigt wird, wenn eine annotierte Klasse gefunden wurde - * @param h der Handler, dem die gefundene Klasse hinzugefuegt werden soll - * @param contextName Name des Kontext, dem gefundene Klassen hinzugefuegt werden sollen + * @param params Parameter, die an den Listener weitergereicht werden */ - @SuppressWarnings("unchecked") - private void processClasses(ScannerListener l, String packageName, Handler h, String contextName) { + private void processClasses(ScannerListener l, String packageName, Object... params) { ClassLoader cl = getCl(); InputStream stream = cl.getResourceAsStream(packageName.replaceAll("[.]", "/")); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); @@ -175,18 +170,18 @@ + line.substring(0, line.lastIndexOf('.'))); if (actorClass != null && actorClass.isAnnotationPresent(getAnnotation())) { //wire(h, actorClass, contextName); - l.annotationFound(actorClass, h, contextName); + l.annotationFound(actorClass, params); } } catch (ClassNotFoundException ex) { // Klasse nicht gefunden. Muss das geloggt oder sonstwie behandel werden? } } else { //wireActors(js, packageName + "." + line, h, contextName); - processClasses(l, packageName + "." + line, h, contextName); + processClasses(l, packageName + "." + line, params); } } } - + private String getPackageName(String fullClassName) { String packageName; int pos = fullClassName.lastIndexOf("."); @@ -262,7 +257,6 @@ } public interface ScannerListener { - - public void annotationFound(Class foundClass, Handler h, String contextName); + public void annotationFound(Class foundClass, Object... params); } } \ No newline at end of file -- Gitblit v1.9.3