Skip to content

Commit

Permalink
Replaced name-based discovery of GUI components with annotation-based.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Jul 9, 2015
1 parent 92490d1 commit 202f85f
Show file tree
Hide file tree
Showing 38 changed files with 166 additions and 34 deletions.
@@ -0,0 +1,35 @@
package org.rapidoid.annotation;

/*
* #%L
* rapidoid-annotations
* %%
* Copyright (C) 2014 - 2015 Nikolche Mihajlovski and contributors
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Target({ TYPE })
@Retention(RUNTIME)
@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public @interface Page {

}
@@ -0,0 +1,35 @@
package org.rapidoid.annotation;

/*
* #%L
* rapidoid-annotations
* %%
* Copyright (C) 2014 - 2015 Nikolche Mihajlovski and contributors
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Target({ TYPE })
@Retention(RUNTIME)
@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public @interface Screen {

}
6 changes: 4 additions & 2 deletions rapidoid-app/src/main/java/org/rapidoid/app/AppClasses.java
Expand Up @@ -25,7 +25,9 @@

import org.rapidoid.annotation.App;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Page;
import org.rapidoid.annotation.RESTful;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.beany.Metadata;
import org.rapidoid.dispatch.PojoDispatcher;
Expand Down Expand Up @@ -63,9 +65,9 @@ public static AppClasses from(Class<?>... classes) {
main = cls;
} else if (Metadata.isAnnotated(cls, RESTful.class)) {
services.put(name, cls);
} else if (name.endsWith("Screen")) {
} else if (Metadata.isAnnotated(cls, Screen.class)) {
screens.put(name, cls);
} else if (name.endsWith("Page")) {
} else if (Metadata.isAnnotated(cls, Page.class)) {
pages.put(name, cls);
}
}
Expand Down
Expand Up @@ -22,6 +22,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.builtin.AppPageGeneric;
import org.rapidoid.dispatch.PojoDispatchException;
import org.rapidoid.dispatch.PojoHandlerNotFoundException;
import org.rapidoid.http.Handler;
Expand Down
15 changes: 9 additions & 6 deletions rapidoid-app/src/main/java/org/rapidoid/app/Apps.java
Expand Up @@ -25,7 +25,9 @@

import org.rapidoid.annotation.App;
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Page;
import org.rapidoid.annotation.RESTful;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.annotation.Transaction;
import org.rapidoid.aop.AOP;
Expand Down Expand Up @@ -120,10 +122,11 @@ private static void processArg(Set<String> config, Object arg) {

public static String screenName(Class<?> screenClass) {
String name = screenClass.getSimpleName();
if (name.endsWith(BUILT_IN_SCREEN_SUFFIX)) {
name = U.mid(name, 0, -BUILT_IN_SCREEN_SUFFIX.length());
}
return U.mid(name, 0, -6);

name = U.trimr(name, BUILT_IN_SCREEN_SUFFIX);
name = U.trimr(name, "Screen");

return name;
}

public static String screenUrl(Class<?> screenClass) {
Expand All @@ -138,9 +141,9 @@ public static AppClasses scanAppClasses(HttpExchange x) {
public static synchronized AppClasses scanAppClasses(HttpExchange x, ClassLoader classLoader) {

Map<String, Class<?>> services = Cls.classMap(Scan.annotated(RESTful.class, classLoader));
Map<String, Class<?>> pages = Cls.classMap(Scan.bySuffix("Page", null, classLoader));
Map<String, Class<?>> pages = Cls.classMap(Scan.annotated(Page.class, classLoader));
Map<String, Class<?>> apps = Cls.classMap(Scan.annotated(App.class, classLoader));
Map<String, Class<?>> screens = Cls.classMap(Scan.bySuffix("Screen", null, classLoader));
Map<String, Class<?>> screens = Cls.classMap(Scan.annotated(Screen.class, classLoader));

final Class<?> appClass = !apps.isEmpty() ? apps.values().iterator().next() : null;

Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand All @@ -22,6 +22,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.plugins.DB;

@Authors("Nikolche Mihajlovski")
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand Down Expand Up @@ -31,6 +31,11 @@
import org.rapidoid.annotation.Scaffold;
import org.rapidoid.annotation.Since;
import org.rapidoid.aop.AOP;
import org.rapidoid.app.AppClasses;
import org.rapidoid.app.AppGUI;
import org.rapidoid.app.AppScreens;
import org.rapidoid.app.Apps;
import org.rapidoid.app.Scaffolding;
import org.rapidoid.beany.Beany;
import org.rapidoid.cls.Cls;
import org.rapidoid.config.Conf;
Expand Down Expand Up @@ -459,9 +464,6 @@ protected Map<String, Class<?>> filterScreens() {
}
} else if (scr instanceof String) {
String name = U.capitalized((String) scr);
if (!name.endsWith("Screen")) {
name += "Screen";
}
Class<?> screenCls = appCls.screens.get(name);
if (isScreenAllowed(screenCls)) {
filtered.put(name, screenCls);
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand All @@ -22,6 +22,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.html.Tag;
import org.rapidoid.security.Secure;
import org.rapidoid.security.annotation.DevMode;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand All @@ -22,6 +22,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.html.Tag;
import org.rapidoid.log.Log;
import org.rapidoid.plugins.DB;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand All @@ -25,6 +25,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.html.Tag;
import org.rapidoid.http.HttpExchange;
import org.rapidoid.model.Items;
Expand Down
@@ -1,7 +1,8 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;

/*
* #%L
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
Expand Down
@@ -1,4 +1,4 @@
package org.rapidoid.app;
package org.rapidoid.app.builtin;

/*
* #%L
Expand Down
Expand Up @@ -21,6 +21,7 @@
*/

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.annotation.Transaction;
import org.rapidoid.app.GUI;
Expand All @@ -42,7 +43,8 @@ class Book {

@Authors("Nikolche Mihajlovski")
@Since("2.0.0")
public class AboutScreen extends GUI {
@Screen
public class About extends GUI {

public Object content() {
Tag mix = h2(a("Enter the mix").href("/mix"));
Expand Down
Expand Up @@ -21,6 +21,7 @@
*/

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.log.Log;
Expand All @@ -31,6 +32,7 @@
import org.rapidoid.security.annotation.Roles;
import org.rapidoid.util.Jobs;

@Screen
@Admin
@Manager
@Roles({ @Role("RESTARTER") })
Expand Down
@@ -1,6 +1,7 @@
package demo.taskplanner.gui;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.util.U;
Expand All @@ -26,6 +27,7 @@
* #L%
*/

@Screen
@Authors("Nikolche Mihajlovski")
@Since("2.4.0")
public class ControlsScreen extends GUI {
Expand Down
@@ -1,6 +1,7 @@
package demo.taskplanner.gui;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;
import org.rapidoid.html.Tag;
Expand Down Expand Up @@ -28,6 +29,7 @@
* #L%
*/

@Screen
@Authors("Nikolche Mihajlovski")
@Since("2.0.0")
public class HomeScreen extends GUI {
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Local;
import org.rapidoid.annotation.Order;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.annotation.Transaction;
import org.rapidoid.app.GUI;
Expand All @@ -38,6 +39,7 @@

import demo.taskplanner.model.Task;

@Screen
@Order(1)
@Authors("Nikolche Mihajlovski")
@Since("2.0.0")
Expand Down
@@ -1,6 +1,7 @@
package demo.taskplanner.gui;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Screen;
import org.rapidoid.annotation.Since;
import org.rapidoid.app.GUI;

Expand All @@ -24,9 +25,10 @@
* #L%
*/

@Screen
@Authors("Nikolche Mihajlovski")
@Since("4.0.0")
public class UploadScreen extends GUI {
public class Upload extends GUI {

public String title = "Upload!";

Expand Down
Expand Up @@ -21,6 +21,7 @@
*/

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Page;
import org.rapidoid.annotation.Session;
import org.rapidoid.annotation.Since;
import org.rapidoid.html.FieldType;
Expand All @@ -33,9 +34,10 @@
import org.rapidoid.widget.BootstrapWidgets;
import org.rapidoid.widget.ButtonWidget;

@Page
@Authors("Nikolche Mihajlovski")
@Since("2.0.0")
public class FormsPage extends BootstrapWidgets {
public class Forms extends BootstrapWidgets {

@Session
private Var<?>[] vars1 = Vars.vars("misc", "niko1", "rapidoid", "niko@rapi.doid", "No",
Expand Down

0 comments on commit 202f85f

Please sign in to comment.