Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Emulate CDI events with Seam Events
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed Jan 21, 2015
1 parent 2f9da44 commit e22728b
Show file tree
Hide file tree
Showing 49 changed files with 782 additions and 223 deletions.
12 changes: 12 additions & 0 deletions zanata-war/pom.xml
Expand Up @@ -1830,6 +1830,18 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
</dependency>

<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.1_spec</artifactId>
Expand Down
Expand Up @@ -29,6 +29,8 @@
import java.util.Map;
import java.util.Set;

import javax.enterprise.event.Observes;
import javax.enterprise.event.TransactionPhase;
import javax.servlet.http.HttpServletRequest;

import com.google.common.base.Optional;
Expand All @@ -49,6 +51,7 @@
import org.zanata.config.DatabaseBackedConfig;
import org.zanata.config.JaasConfig;
import org.zanata.config.JndiBackedConfig;
import org.zanata.events.ConfigurationChanged;
import org.zanata.log4j.ZanataHTMLLayout;
import org.zanata.log4j.ZanataSMTPAppender;
import org.zanata.security.AuthenticationType;
Expand All @@ -70,8 +73,6 @@ public class ApplicationConfiguration implements Serializable {

private static final String EMAIL_APPENDER_NAME =
"zanata.log.appender.email";
public static final String EVENT_CONFIGURATION_CHANGED =
"zanata.configuration.changed";

private static final String STYLESHEET_LOCAL_PATH = "/assets/css/style.min.css";

Expand Down Expand Up @@ -133,8 +134,11 @@ public void load() {
this.loadJaasConfig();
}

@Observer({ EVENT_CONFIGURATION_CHANGED })
public void resetConfigValue(String configName) {
@Observer(ConfigurationChanged.EVENT_NAME)
public void resetConfigValue(
@Observes(during = TransactionPhase.AFTER_SUCCESS)
ConfigurationChanged configChange) {
String configName = configChange.getConfigKey();
// Remove the value from all stores
databaseBackedConfig.reset(configName);
jndiBackedConfig.reset(configName);
Expand Down
10 changes: 6 additions & 4 deletions zanata-war/src/main/java/org/zanata/ZanataInit.java
Expand Up @@ -63,7 +63,8 @@
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.ServletLifecycle;
import org.jboss.seam.core.Events;
import org.zanata.events.ServerStarted;
import org.zanata.util.Event;
import org.zanata.exception.ZanataInitializationException;
import org.zanata.rest.dto.VersionInfo;
import org.zanata.util.VersionUtility;
Expand Down Expand Up @@ -99,11 +100,12 @@ public class ZanataInit {
Level.SEVERE);
}

public static final String EVENT_Zanata_Startup = "Zanata.startup";

@In
private ApplicationConfiguration applicationConfiguration;

@In("event")
private Event<ServerStarted> startupEvent;

@Observer("org.jboss.seam.postInitialization")
public void initZanata() throws Exception {
AppServerVersion appServerVersion = checkJBossVersion();
Expand Down Expand Up @@ -170,7 +172,7 @@ public void initZanata() throws Exception {
+ this.applicationConfiguration.getEmailServerHost() + ":"
+ this.applicationConfiguration.getEmailServerPort());

Events.instance().raiseEvent(EVENT_Zanata_Startup);
startupEvent.fire(new ServerStarted());

log.info("Started Zanata...");
}
Expand Down
Expand Up @@ -34,8 +34,10 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.core.Events;
import org.zanata.dao.LocaleDAO;
import org.zanata.events.LanguageDisabled;
import org.zanata.events.LanguageEnabled;
import org.zanata.util.Event;
import org.zanata.model.HLocale;
import org.zanata.model.HProjectIteration;
import org.zanata.service.LocaleService;
Expand All @@ -54,6 +56,14 @@ public class LanguageSearchAction extends InMemoryListFilter<HLocale> implements

private List<HLocale> allLanguages;

@In("event")
private Event<LanguageEnabled> languageEnabledEvent;

@In("event")
private Event<LanguageDisabled> languageDisabledEvent;



@Getter
private SortingType LanguageSortingList = new SortingType(
Lists.newArrayList(SortingType.SortOption.ALPHABETICAL,
Expand All @@ -72,7 +82,7 @@ public void enable(HLocale locale) {
localeDAO.makePersistent(locale);
localeDAO.flush();

Events.instance().raiseEvent("enableLanguage");
languageEnabledEvent.fire(new LanguageEnabled(locale.getLocaleId()));
}

@Restrict("#{s:hasRole('admin')}")
Expand All @@ -81,7 +91,7 @@ public void disable(HLocale locale) {
localeDAO.makePersistent(locale);
localeDAO.flush();

Events.instance().raiseEvent("disableLanguage");
languageDisabledEvent.fire(new LanguageDisabled(locale.getLocaleId()));
}

@Restrict("#{s:hasRole('admin')}")
Expand Down
76 changes: 36 additions & 40 deletions zanata-war/src/main/java/org/zanata/action/LanguageTeamAction.java
Expand Up @@ -34,24 +34,24 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage.Severity;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.common.LocaleId;
import org.zanata.dao.LocaleDAO;
import org.zanata.dao.LocaleMemberDAO;
import org.zanata.dao.PersonDAO;
import org.zanata.events.JoinedLanguageTeam;
import org.zanata.events.LanguageTeamPermissionChangedEvent;
import org.zanata.events.LeftLanguageTeam;
import org.zanata.i18n.Messages;
import org.zanata.model.HAccount;
import org.zanata.model.HLocale;
import org.zanata.model.HLocaleMember;
import org.zanata.model.HPerson;
import org.zanata.service.LanguageTeamService;
import org.zanata.service.LocaleService;

import static org.zanata.events.LanguageTeamPermissionChangedEvent.LANGUAGE_TEAM_PERMISSION_CHANGED;
import org.zanata.util.Event;

@Name("languageTeamAction")
@Scope(ScopeType.PAGE)
Expand Down Expand Up @@ -80,6 +80,15 @@ public class LanguageTeamAction implements Serializable {
@In
private Messages msgs;

@In("event")
private Event<JoinedLanguageTeam> joinLanguageTeamEvent;

@In("event")
private Event<LanguageTeamPermissionChangedEvent> languageTeamPermissionChangedEvent;

@In("event")
private Event<LeftLanguageTeam> leaveLanguageTeamEvent;

@Getter
@Setter
private String language;
Expand Down Expand Up @@ -146,6 +155,7 @@ public void joinTribe() {
languageTeamServiceImpl.joinOrUpdateRoleInLanguageTeam(
this.language, authenticatedAccount.getPerson().getId(),
true, true, true);
joinLanguageTeamEvent.fire(new JoinedLanguageTeam(authenticatedAccount.getUsername(), new LocaleId(language)));
log.info("{} joined tribe {}",
authenticatedAccount.getUsername(), this.language);
FacesMessages.instance().add(msgs.format("jsf.MemberOfTeam",
Expand All @@ -164,6 +174,7 @@ public void leaveTribe() {
}
languageTeamServiceImpl.leaveLanguageTeam(this.language,
authenticatedAccount.getPerson().getId());
leaveLanguageTeamEvent.fire(new LeftLanguageTeam(authenticatedAccount.getUsername(), new LocaleId(language)));
log.info("{} left tribe {}", authenticatedAccount.getUsername(),
this.language);
FacesMessages.instance().add(msgs.format("jsf.LeftTeam",
Expand All @@ -173,52 +184,37 @@ public void leaveTribe() {
@Restrict("#{s:hasPermission(languageTeamAction.locale, 'manage-language-team')}")
public void saveTeamCoordinator(HLocaleMember member) {
savePermission(member, msgs.get("jsf.Translator"), member.isCoordinator());
if (Events.exists()) {
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedCoordinatorPermission(member);
Events.instance()
.raiseTransactionSuccessEvent(
LANGUAGE_TEAM_PERMISSION_CHANGED,
changedEvent);
}
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedCoordinatorPermission(member);
languageTeamPermissionChangedEvent.fire(changedEvent);
}

@Restrict("#{s:hasPermission(languageTeamAction.locale, 'manage-language-team')}")
public void saveTeamReviewer(HLocaleMember member) {
savePermission(member, msgs.get("jsf.Reviewer"), member.isReviewer());
if (Events.exists()) {
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedReviewerPermission(member);
Events.instance()
.raiseTransactionSuccessEvent(
LANGUAGE_TEAM_PERMISSION_CHANGED,
changedEvent);
}
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedReviewerPermission(member);
languageTeamPermissionChangedEvent.fire(changedEvent);
}

@Restrict("#{s:hasPermission(languageTeamAction.locale, 'manage-language-team')}")
public void saveTeamTranslator(HLocaleMember member) {
savePermission(member, msgs.get("jsf.Translator"), member.isTranslator());
if (Events.exists()) {
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedTranslatorPermission(member);
Events.instance()
.raiseTransactionSuccessEvent(
LANGUAGE_TEAM_PERMISSION_CHANGED,
changedEvent);
}
HPerson doneByPerson = authenticatedAccount.getPerson();
LanguageTeamPermissionChangedEvent changedEvent =
new LanguageTeamPermissionChangedEvent(
member.getPerson(), getLocale().getLocaleId(),
doneByPerson)
.changedTranslatorPermission(member);
languageTeamPermissionChangedEvent.fire(changedEvent);
}

private void savePermission(HLocaleMember member, String permissionDesc,
Expand All @@ -233,7 +229,7 @@ private void savePermission(HLocaleMember member, String permissionDesc,
} else {
FacesMessages.instance().add(
msgs.format("jsf.RemovedAPermission",
person.getAccount().getUsername(), permissionDesc));
person.getAccount().getUsername(), permissionDesc));
}
}

Expand Down
19 changes: 13 additions & 6 deletions zanata-war/src/main/java/org/zanata/action/ProjectHome.java
Expand Up @@ -44,7 +44,6 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage;
import org.jboss.seam.security.management.JpaIdentityStore;
Expand All @@ -53,6 +52,8 @@
import org.zanata.common.ProjectType;
import org.zanata.dao.AccountRoleDAO;
import org.zanata.dao.WebHookDAO;
import org.zanata.events.ProjectIterationUpdate;
import org.zanata.events.ProjectUpdate;
import org.zanata.i18n.Messages;
import org.zanata.model.HAccount;
import org.zanata.model.HAccountRole;
Expand All @@ -71,6 +72,7 @@
import org.zanata.ui.autocomplete.LocaleAutocomplete;
import org.zanata.ui.autocomplete.MaintainerAutocomplete;
import org.zanata.util.ComparatorUtil;
import org.zanata.util.Event;
import org.zanata.util.UrlUtil;
import org.zanata.webtrans.shared.model.ValidationAction;
import org.zanata.webtrans.shared.model.ValidationId;
Expand Down Expand Up @@ -107,6 +109,12 @@ public class ProjectHome extends SlugHome<HProject> {
@In
private EntityManager entityManager;

@In("event")
private Event<ProjectUpdate> projectUpdateEvent;

@In("event")
private Event<ProjectIterationUpdate> projectIterationUpdateEvent;

@In
private Messages msgs;

Expand Down Expand Up @@ -329,7 +337,7 @@ public String persist() {
validationAction.getState().name());
}
retValue = super.persist();
Events.instance().raiseEvent("projectAdded");
projectUpdateEvent.fire(new ProjectUpdate(getInstance()));
}
return retValue;
}
Expand Down Expand Up @@ -391,8 +399,7 @@ public void updateStatus(char initial) {
if (version.getStatus() == EntityStatus.ACTIVE) {
version.setStatus(EntityStatus.READONLY);
entityManager.merge(version);
Events.instance().raiseEvent(
VersionHome.PROJECT_ITERATION_UPDATE, version);
projectIterationUpdateEvent.fire(new ProjectIterationUpdate(version));
}
}
} else if (getInstance().getStatus() == EntityStatus.OBSOLETE) {
Expand All @@ -401,8 +408,8 @@ public void updateStatus(char initial) {
if (version.getStatus() != EntityStatus.OBSOLETE) {
version.setStatus(EntityStatus.OBSOLETE);
entityManager.merge(version);
Events.instance().raiseEvent(
VersionHome.PROJECT_ITERATION_UPDATE, version);
projectIterationUpdateEvent.fire(
new ProjectIterationUpdate(version));
}
}
}
Expand Down
Expand Up @@ -64,6 +64,9 @@ public class ServerConfigurationBean implements Serializable {
@In
private ApplicationConfiguration applicationConfiguration;

@In
private ServerConfigurationService serverConfigurationResource;

@Url(canEndInSlash = true)
@Getter
@Setter
Expand Down Expand Up @@ -252,7 +255,7 @@ private void persistPropertyToDatabase(PropertyWithKey<String> property) {
applicationConfigurationDAO
.findByKey(property.getKey());
try {
ServerConfigurationService.persistApplicationConfig(
serverConfigurationResource.persistApplicationConfig(
property.getKey(),
registerUrlValue, property.get(), applicationConfigurationDAO);
} catch (IllegalAccessException e) {
Expand Down

0 comments on commit e22728b

Please sign in to comment.