Skip to content

Commit

Permalink
Improved the Plugin components (type hierarchy, named instances).
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Aug 12, 2015
1 parent 1bc7528 commit e52a901
Show file tree
Hide file tree
Showing 46 changed files with 302 additions and 60 deletions.
Expand Up @@ -2,7 +2,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.plugins.cache.CachePlugin;
import org.rapidoid.plugins.cache.AbstractCachePlugin;
import org.rapidoid.plugins.cache.ICache;

/*
Expand All @@ -27,7 +27,11 @@

@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public class GuavaCachePlugin implements CachePlugin {
public class GuavaCachePlugin extends AbstractCachePlugin {

public GuavaCachePlugin() {
super("guava");
}

@Override
public <K, V> ICache<K, V> create(String cacheName, long timeToLiveMs, boolean resetTimeToLiveWhenAccessed) {
Expand Down
Expand Up @@ -73,6 +73,7 @@ public static Cluster defaultCluster() {
}

public CassandraDBPlugin(Cluster cluster) {
super("cassandra");
this.cluster = cluster;
}

Expand Down
Expand Up @@ -44,6 +44,10 @@
@Since("3.0.0")
public class HibernateDBPlugin extends DBPluginBase {

public HibernateDBPlugin() {
super("hibernate");
}

@Override
public String insert(Object entity) {
ensureNotInReadOnlyTransation();
Expand Down
Expand Up @@ -10,7 +10,7 @@
import org.rapidoid.beany.Beany;
import org.rapidoid.cls.Cls;
import org.rapidoid.entity.IEntity;
import org.rapidoid.plugins.entities.EntitiesPlugin;
import org.rapidoid.plugins.entities.AbstractEntitiesPlugin;
import org.rapidoid.util.U;

/*
Expand All @@ -35,7 +35,11 @@

@Authors("Nikolche Mihajlovski")
@Since("3.0.0")
public class AppClasspathEntitiesPlugin implements EntitiesPlugin {
public class AppClasspathEntitiesPlugin extends AbstractEntitiesPlugin {

public AppClasspathEntitiesPlugin() {
super("classpath");
}

@SuppressWarnings("unchecked")
@Override
Expand Down
@@ -0,0 +1,40 @@
package org.rapidoid.plugins;

/*
* #%L
* rapidoid-plugins
* %%
* 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 org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;

@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public abstract class AbstractPlugin implements Plugin {

private final String name;

public AbstractPlugin(String name) {
this.name = name;
}

public String name() {
return name;
}

}
32 changes: 32 additions & 0 deletions rapidoid-plugins/src/main/java/org/rapidoid/plugins/Plugin.java
@@ -0,0 +1,32 @@
package org.rapidoid.plugins;

/*
* #%L
* rapidoid-plugins
* %%
* 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 org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;

@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public interface Plugin {

String name();

}
78 changes: 50 additions & 28 deletions rapidoid-plugins/src/main/java/org/rapidoid/plugins/Plugins.java
@@ -1,7 +1,10 @@
package org.rapidoid.plugins;

import java.util.Map;

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.cls.Cls;
import org.rapidoid.log.Log;
import org.rapidoid.plugins.cache.CachePlugin;
import org.rapidoid.plugins.cache.DefaultCachePlugin;
Expand All @@ -17,9 +20,11 @@
import org.rapidoid.plugins.lifecycle.LifecyclePlugin;
import org.rapidoid.plugins.sms.DefaultSMSPlugin;
import org.rapidoid.plugins.sms.SMSPlugin;
import org.rapidoid.plugins.templates.DefaultTemplatesPlugin;
import org.rapidoid.plugins.templates.TemplatesPlugin;
import org.rapidoid.plugins.users.DefaultUsersPlugin;
import org.rapidoid.plugins.users.UsersPlugin;
import org.rapidoid.util.U;

/*
* #%L
Expand All @@ -41,10 +46,26 @@
* #L%
*/

/*
Used for code generation:
Lifecycle|lifecycle
Languages|languages
DB|db
Entities|entities
Users|users
Email|email
SMS|sms
Cache|cache
Templates|templates
*/

@Authors("Nikolche Mihajlovski")
@Since("3.0.0")
public final class Plugins {

private static final Map<String, Map<String, Plugin>> PLUGINS = U.mapOfMaps();

private static volatile LifecyclePlugin lifecyclePlugin = new DefaultLifecyclePlugin();
private static volatile LanguagesPlugin languagesPlugin = new DefaultLanguagesPlugin();
private static volatile DBPlugin dbPlugin = new DefaultDBPlugin();
Expand Down Expand Up @@ -91,49 +112,50 @@ public static TemplatesPlugin templates() {
return templatesPlugin;
}

public static void register(LifecyclePlugin lifecyclePlugin) {
Log.info("Registering Lifecycle plugin", "plugin", lifecyclePlugin);
Plugins.lifecyclePlugin = lifecyclePlugin;
public static void register(Plugin plugin) {
for (Class<?> interf : Cls.getImplementedInterfaces(plugin.getClass())) {
if (Plugin.class.isAssignableFrom(interf) && !Plugin.class.equals(interf)) {
String name = plugin.name();
Log.info("Registering plugin", "plugin", plugin, "name", name, "type", interf);
PLUGINS.get(interf).put(name, plugin);
}
}
}

public static LifecyclePlugin lifecycle(String name) {
return (LifecyclePlugin) PLUGINS.get(LifecyclePlugin.class).get(name);
}

public static void register(LanguagesPlugin languagesPlugin) {
Log.info("Registering Languages plugin", "plugin", languagesPlugin);
Plugins.languagesPlugin = languagesPlugin;
public static LanguagesPlugin languages(String name) {
return (LanguagesPlugin) PLUGINS.get(LanguagesPlugin.class).get(name);
}

public static void register(DBPlugin dbPlugin) {
Log.info("Registering DB plugin", "plugin", dbPlugin);
Plugins.dbPlugin = dbPlugin;
public static DBPlugin db(String name) {
return (DBPlugin) PLUGINS.get(DBPlugin.class).get(name);
}

public static void register(EntitiesPlugin entitiesPlugin) {
Log.info("Registering Entities plugin", "plugin", entitiesPlugin);
Plugins.entitiesPlugin = entitiesPlugin;
public static EntitiesPlugin entities(String name) {
return (EntitiesPlugin) PLUGINS.get(EntitiesPlugin.class).get(name);
}

public static void register(UsersPlugin usersPlugin) {
Log.info("Registering Users plugin", "plugin", usersPlugin);
Plugins.usersPlugin = usersPlugin;
public static UsersPlugin users(String name) {
return (UsersPlugin) PLUGINS.get(UsersPlugin.class).get(name);
}

public static void register(EmailPlugin emailPlugin) {
Log.info("Registering Email plugin", "plugin", emailPlugin);
Plugins.emailPlugin = emailPlugin;
public static EmailPlugin email(String name) {
return (EmailPlugin) PLUGINS.get(EmailPlugin.class).get(name);
}

public static void register(SMSPlugin smsPlugin) {
Log.info("Registering SMS plugin", "plugin", smsPlugin);
Plugins.smsPlugin = smsPlugin;
public static SMSPlugin sms(String name) {
return (SMSPlugin) PLUGINS.get(SMSPlugin.class).get(name);
}

public static void register(CachePlugin cachePlugin) {
Log.info("Registering Cache plugin", "plugin", cachePlugin);
Plugins.cachePlugin = cachePlugin;
public static CachePlugin cache(String name) {
return (CachePlugin) PLUGINS.get(CachePlugin.class).get(name);
}

public static void register(TemplatesPlugin templatesPlugin) {
Log.info("Registering Templates plugin", "plugin", templatesPlugin);
Plugins.templatesPlugin = templatesPlugin;
public static TemplatesPlugin templates(String name) {
return (TemplatesPlugin) PLUGINS.get(TemplatesPlugin.class).get(name);
}

}
}
Expand Up @@ -2,6 +2,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.plugins.AbstractPlugin;

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

@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public abstract class AbstractCachePlugin implements CachePlugin {
public abstract class AbstractCachePlugin extends AbstractPlugin implements CachePlugin {

public AbstractCachePlugin(String name) {
super(name);
}

@Override
public <K, V> ICache<K, V> create(String cacheName, long timeToLiveMs, boolean resetTimeToLiveWhenAccessed) {
Expand Down
Expand Up @@ -28,6 +28,10 @@
@Since("4.1.0")
public class Cache {

public static CachePlugin instance(String name) {
return Plugins.cache(name);
}

public static <K, V> ICache<K, V> create(String cacheName, long timeToLiveMs, boolean resetTimeToLiveWhenAccessed) {
return Plugins.cache().create(cacheName, timeToLiveMs, resetTimeToLiveWhenAccessed);
}
Expand Down
Expand Up @@ -2,6 +2,7 @@

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.plugins.Plugin;

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

@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public interface CachePlugin {
public interface CachePlugin extends Plugin {

<K, V> ICache<K, V> create(String cacheName, long timeToLiveMs, boolean resetTimeToLiveWhenAccessed);

Expand Down
Expand Up @@ -27,6 +27,10 @@
@Since("4.1.0")
public class DefaultCachePlugin extends AbstractCachePlugin {

public DefaultCachePlugin() {
super("default");
}

@Override
public <K, V> ICache<K, V> create(String cacheName, long timeToLiveMs, boolean resetTimeToLiveWhenAccessed) {
return new NoCache<K, V>(cacheName, timeToLiveMs, resetTimeToLiveWhenAccessed);
Expand Down
Expand Up @@ -8,6 +8,7 @@
import org.rapidoid.concurrent.Callback;
import org.rapidoid.lambda.Operation;
import org.rapidoid.lambda.Predicate;
import org.rapidoid.plugins.AbstractPlugin;

/*
* #%L
Expand All @@ -31,7 +32,11 @@

@Authors("Nikolche Mihajlovski")
@Since("3.0.0")
public abstract class AbstractDBPlugin implements DBPlugin {
public abstract class AbstractDBPlugin extends AbstractPlugin implements DBPlugin {

public AbstractDBPlugin(String name) {
super(name);
}

@Override
public String insert(Object entity) {
Expand Down
Expand Up @@ -35,6 +35,10 @@
@Since("3.0.0")
public class DB {

public static DBPlugin instance(String name) {
return Plugins.db(name);
}

public static String insert(Object record) {
return Plugins.db().insert(record);
}
Expand Down
Expand Up @@ -28,10 +28,11 @@
import org.rapidoid.concurrent.Callback;
import org.rapidoid.lambda.Operation;
import org.rapidoid.lambda.Predicate;
import org.rapidoid.plugins.Plugin;

@Authors("Nikolche Mihajlovski")
@Since("3.0.0")
public interface DBPlugin {
public interface DBPlugin extends Plugin {

String insert(Object entity);

Expand Down
Expand Up @@ -57,6 +57,10 @@ public boolean eval(Prop prop) throws Exception {
}
};

public DBPluginBase(String name) {
super(name);
}

@Override
public String persist(Object record) {
String id = Beany.getIdIfExists(record);
Expand Down
Expand Up @@ -27,4 +27,8 @@
@Since("3.0.0")
public class DefaultDBPlugin extends AbstractDBPlugin {

public DefaultDBPlugin() {
super("default");
}

}

0 comments on commit e52a901

Please sign in to comment.