Preferences -- Registry


package org.jboss.seam.wiki.preferences.metamodel;

import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.wiki.preferences.PreferenceVisibility;
import org.jboss.seam.wiki.preferences.annotations.Preferences;
import org.jboss.seam.wiki.util.AnnotationDeploymentHelper;

import java.util.*;

@Name("preferenceRegistry")
@Scope(ScopeType.APPLICATION)
@Startup(depends = "pluginI18NBinder")
@BypassInterceptors
public class PreferenceRegistry {

private static final LogProvider log = Logging.getLogProvider(PreferenceRegistry.class);

Set<PreferenceEntity> preferenceEntities = new HashSet<PreferenceEntity>();
Map<String, PreferenceEntity> preferenceEntitiesByName = new HashMap<String, PreferenceEntity>();

Set<PreferenceEntity> preferenceEntitiesSystem = new HashSet<PreferenceEntity>();
Set<PreferenceEntity> preferenceEntitiesUser = new HashSet<PreferenceEntity>();
Set<PreferenceEntity> preferenceEntitiesInstance = new HashSet<PreferenceEntity>();

@Create
public void startup() {
log.debug("initializing preferences registry");

Set<Class<?>> preferencesClasses = AnnotationDeploymentHelper.getAnnotatedClasses(Preferences.class);

if (preferencesClasses == null)
throw new RuntimeException("No preference entities found, add @Preferences annotation to META-INF/seam-deployment.properties");

for (Class preferencesClass : preferencesClasses) {
PreferenceEntity preferenceEntity = new PreferenceEntity(preferencesClass);

log.debug("adding '" + preferenceEntity.getEntityName() + "', " + preferenceEntity);

if (preferenceEntitiesByName.containsKey(preferenceEntity.getEntityName())) {
throw new RuntimeException("Duplicate preference entity name: " + preferenceEntity.getEntityName());
}

preferenceEntities.add(preferenceEntity);
preferenceEntitiesByName.put(preferenceEntity.getEntityName(), preferenceEntity);

if (preferenceEntity.isSystemPropertiesVisible())
preferenceEntitiesSystem.add(preferenceEntity);
if (preferenceEntity.isUserPropertiesVisible())
preferenceEntitiesUser.add(preferenceEntity);
if (preferenceEntity.isInstancePropertiesVisible())
preferenceEntitiesInstance.add(preferenceEntity);
}

log.info("registered preference entities: " + preferenceEntities.size());

}

public Set<PreferenceEntity> getPreferenceEntities() {
return preferenceEntities;
}

public Map<String, PreferenceEntity> getPreferenceEntitiesByName() {
return preferenceEntitiesByName;
}

public Set<PreferenceEntity> getPreferenceEntitiesSystem() {
return preferenceEntitiesSystem;
}

public Set<PreferenceEntity> getPreferenceEntitiesUser() {
return preferenceEntitiesUser;
}

public Set<PreferenceEntity> getPreferenceEntitiesInstance() {
return preferenceEntitiesInstance;
}

public SortedSet<PreferenceEntity> getPreferenceEntities(PreferenceVisibility... visibilities) {
if (visibilities == null) return null;
SortedSet<PreferenceEntity> entities = new TreeSet<PreferenceEntity>();
List<PreferenceVisibility> visibilityList = Arrays.asList(visibilities);
if (visibilityList.contains(PreferenceVisibility.SYSTEM)) entities.addAll(getPreferenceEntitiesSystem());
if (visibilityList.contains(PreferenceVisibility.USER)) entities.addAll(getPreferenceEntitiesUser());
if (visibilityList.contains(PreferenceVisibility.INSTANCE)) entities.addAll(getPreferenceEntitiesInstance());
return entities;
}

public static PreferenceRegistry instance() {
return (PreferenceRegistry) Component.getInstance(PreferenceRegistry.class);
}

}


/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.util;

import org.jboss.seam.deployment.AnnotationDeploymentHandler;
import org.jboss.seam.deployment.DeploymentStrategy;
import org.jboss.seam.Component;

import java.util.Set;

/**
* A convenience class that allows us to access Seam deployment handlers without @In'jecting them.
* <p>
* This is useful because we can optimize things such as registries with @BypassInterceptors.
* </p>
*
* @author Christian Bauer
*/
public class AnnotationDeploymentHelper {

public static Set<Class<?>> getAnnotatedClasses(String annotationFQN) {
DeploymentStrategy deployment = (DeploymentStrategy) Component.getInstance("deploymentStrategy");
AnnotationDeploymentHandler handler =
(AnnotationDeploymentHandler)deployment.getDeploymentHandlers().get(AnnotationDeploymentHandler.NAME);
return handler.getClassMap().get(annotationFQN);
}

public static Set<Class<?>> getAnnotatedClasses(Class annotationType) {
return getAnnotatedClasses(annotationType.getName());
}

}

1.从ClassLoader中塞选所有Preferences Annotation Class.
2.Registry there prefernece class to seession scope.
3.That registry class it is plugin install,real have power is Preferences class @see Preferences
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值