diff --git a/functional-test/pom.xml b/functional-test/pom.xml
index d9d1846123..ab077827e1 100644
--- a/functional-test/pom.xml
+++ b/functional-test/pom.xml
@@ -222,6 +222,10 @@
javassist
javassist
+
+ javax.annotation
+ jsr250-api
+
@@ -764,23 +768,6 @@
true
-
-
-
-
- org.jboss
- jboss-remote-naming
-
- org.jboss.naming.remote.*
-
-
-
-
-
- com.thoughtworks.selenium.*
- org.openqa.selenium.*
-
-
diff --git a/pom.xml b/pom.xml
index 1c2c7c9d98..fbe88154f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,6 +129,18 @@
import
+
+ commons-beanutils
+ commons-beanutils
+ 1.9.2
+
+
+ commons-logging
+ commons-logging
+
+
+
+
org.assertj
assertj-core
@@ -147,6 +159,16 @@
org.zanata
zanata-common-api
${zanata.api.version}
+
+
+ javax.servlet
+ servlet-api
+
+
+ javax.annotation
+ jsr250-api
+
+
@@ -484,6 +506,10 @@
commons-httpclient
commons-httpclient
+
+ javax.servlet
+ servlet-api
+
org.apache.solr
solr-solrj
@@ -707,66 +733,6 @@
maven-enforcer-plugin
-
-
-
-
- com.beust
- jcommander
-
- com.beust.jcommander.*
-
-
-
- com.google.gwt
- gwt-dev
-
- org.apache.*
-
-
-
-
- commons-fileupload
- commons-fileupload
-
- org.apache.commons.fileupload.*
-
-
-
-
- org.apache.maven
- maven*
-
- org.apache.maven.*
-
-
-
-
- org.picketbox
- picketbox
-
- org.picketbox.*
- org.jboss.*
-
-
-
-
- net.sf.ehcache
- ehcache-core
-
- net.sf.ehcache.*
-
-
-
-
- org.projectlombok
- lombok
-
- com.sun.jna.*
-
-
-
-
jboss-public-repository-group
diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml
index 85c40393f1..ade7e20d04 100644
--- a/zanata-war/pom.xml
+++ b/zanata-war/pom.xml
@@ -144,18 +144,10 @@
antlr:antlr
com.google.guava:guava-gwt
-
- com.ibm.icu:icu4j
-
- commons-codec:commons-codec
-
- commons-collections:commons-collections
- commons-lang:commons-lang
javax.el:el-api
javax.servlet.jsp:jsp-api
- org.richfaces.core:richfaces-core-impl
com.sun.faces:jsf-impl
org.apache.solr:solr-core
@@ -213,53 +205,45 @@
+
+
+
+ com.ning.maven.plugins
+ maven-duplicate-finder-plugin
-
-
-
-
-
-
-
- com.google.common.*
- com.google.gwt.*
- com.google.web.bindery.*
- com.ibm.icu.*
- com.steadystate.css.*
- javax.annotation.*
- javax.servlet.*
- javax.servlet.jsp.*
- javax.validation.ConstraintViolationException_CustomFieldSerializer
- javax.xml.*
- org.apache.commons.beanutils.*
- org.apache.commons.codec.*
- org.apache.commons.collections.*
- org.apache.commons.io.*
- org.apache.commons.lang.*
- org.apache.commons.logging.*
- org.apache.html.*
- org.apache.http.*
- org.apache.james.mime4j.*
- org.apache.regexp.*
- org.apache.wml.*
- org.apache.xerces.*
- org.apache.xml.*
- org.apache.xmlcommons.Version
- org.cyberneko.html.*
- org.hibernate.validator.*
- org.w3c.css.sac.*
- org.w3c.dom.*
- org.xml.sax.*
-
-
- org.osgi.util.*
-
- com.sun.tools.*
- sun.*
-
-
-
+
+
+ com.google.gwt
+ gwt-user
+
+
+
+
+ com/lowagie/text/pdf/fonts/cmap_info.txt
+
+ META-INF/components.xml
+
+ META-INF/faces-config.xml
+
+ META-INF/javamail.providers
+
+ META-INF/richfaces/resource-mappings.properties
+
+ META-INF/seam-deployment.properties
+
+ build.properties
+
+ seam.properties
+
+
+
+ validate
+
+ check
+
+
+
@@ -1154,12 +1138,6 @@
-
- com.google.gwt
- gwt-dev
- provided
-
-
com.google.gwt
gwt-servlet
@@ -1172,6 +1150,22 @@
provided
+
+ com.google.gwt.gwtmockito
+ gwtmockito
+ 1.1.3
+
+
+ com.google.gwt
+ gwt-dev
+
+
+ org.mockito
+ mockito-all
+
+
+
+
org.json
json
@@ -1223,6 +1217,10 @@
javassist
javassist
+
+ javax.annotation
+ jsr250-api
+
jcip-annotations
net.jcip
@@ -1361,7 +1359,6 @@
org.richfaces.ui
richfaces-components-ui
-
org.richfaces.core
richfaces-core-impl
@@ -1521,6 +1518,12 @@
com.google.guava
guava-gwt
+
+
+ com.google.code.findbugs
+ jsr305
+
+
com.google.code.findbugs
@@ -1631,8 +1634,8 @@
- javax.servlet
- javax.servlet-api
+ org.jboss.spec.javax.servlet
+ jboss-servlet-api_3.0_spec
provided
@@ -1674,8 +1677,8 @@
- javax.annotation
- jsr250-api
+ org.jboss.spec.javax.annotation
+ jboss-annotations-api_1.1_spec
provided
@@ -2024,6 +2027,10 @@
classloader-leak-prevention
1.9.3
+
+ javax.servlet
+ servlet-api
+
org.apache.cxf
cxf-rt-transports-http
diff --git a/zanata-war/src/main/java/org/zanata/ApplicationConfiguration.java b/zanata-war/src/main/java/org/zanata/ApplicationConfiguration.java
index bd486e77c9..135237c9ef 100644
--- a/zanata-war/src/main/java/org/zanata/ApplicationConfiguration.java
+++ b/zanata-war/src/main/java/org/zanata/ApplicationConfiguration.java
@@ -31,6 +31,7 @@
import javax.servlet.http.HttpServletRequest;
+import com.google.common.base.Optional;
import lombok.extern.slf4j.Slf4j;
import lombok.Getter;
import lombok.Setter;
@@ -46,6 +47,7 @@
import org.jboss.seam.annotations.Synchronized;
import org.jboss.seam.web.ServletContexts;
import org.zanata.config.DatabaseBackedConfig;
+import org.zanata.config.JaasConfig;
import org.zanata.config.JndiBackedConfig;
import org.zanata.log4j.ZanataHTMLLayout;
import org.zanata.log4j.ZanataSMTPAppender;
@@ -56,6 +58,7 @@
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import org.zanata.security.OpenIdLoginModule;
@Name("applicationConfiguration")
@Scope(ScopeType.APPLICATION)
@@ -76,6 +79,8 @@ public class ApplicationConfiguration implements Serializable {
private DatabaseBackedConfig databaseBackedConfig;
@In
private JndiBackedConfig jndiBackedConfig;
+ @In
+ private JaasConfig jaasConfig;
private static final ZanataSMTPAppender smtpAppenderInstance =
new ZanataSMTPAppender();
@@ -112,12 +117,15 @@ public class ApplicationConfiguration implements Serializable {
// set by component.xml
private String webAssetsVersion = "";
+ private Optional openIdProvider; // Cache the OpenId provider
+
@Create
public void load() {
log.info("Reloading configuration");
this.loadLoginModuleNames();
this.validateConfiguration();
this.applyLoggingConfiguration();
+ this.loadJaasConfig();
}
@Observer({ EVENT_CONFIGURATION_CHANGED })
@@ -202,6 +210,23 @@ public void applyLoggingConfiguration() {
}
}
+ /**
+ * Load configuration pertaining to JAAS.
+ */
+ private void loadJaasConfig() {
+ if (loginModuleNames.containsKey(AuthenticationType.OPENID)) {
+ openIdProvider =
+ Optional.fromNullable(jaasConfig
+ .getAppConfigurationProperty(
+ loginModuleNames
+ .get(AuthenticationType.OPENID),
+ OpenIdLoginModule.class,
+ OpenIdLoginModule.OPEN_ID_PROVIDER_KEY));
+ } else {
+ openIdProvider = Optional.absent();
+ }
+ }
+
public String getRegisterPath() {
return databaseBackedConfig.getRegistrationUrl();
}
@@ -275,6 +300,14 @@ public boolean isOpenIdAuth() {
return this.loginModuleNames.containsKey(AuthenticationType.OPENID);
}
+ public boolean isSingleOpenIdProvider() {
+ return openIdProvider.isPresent();
+ }
+
+ public String getOpenIdProviderUrl() {
+ return openIdProvider.orNull();
+ }
+
public boolean isKerberosAuth() {
return this.loginModuleNames.containsKey(AuthenticationType.KERBEROS);
}
diff --git a/zanata-war/src/main/java/org/zanata/action/ApplicationConfigurationAction.java b/zanata-war/src/main/java/org/zanata/action/ApplicationConfigurationAction.java
new file mode 100644
index 0000000000..6894428093
--- /dev/null
+++ b/zanata-war/src/main/java/org/zanata/action/ApplicationConfigurationAction.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
+ * @author tags. See the copyright.txt file in the distribution for a full
+ * listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.zanata.action;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.zanata.ApplicationConfiguration;
+
+/**
+ * This class serves as a UI proxy for the application configuration bean.
+ * It offers methods that help figuring out how to present certain options
+ * depending on the application configuration.
+ *
+ * @author Carlos Munoz camunoz@redhat.com
+ */
+@Name("applicationConfigurationAction")
+@Scope(ScopeType.STATELESS)
+public class ApplicationConfigurationAction {
+ @In
+ private ApplicationConfiguration applicationConfiguration;
+
+ public boolean isLoginHandledByInternalPage() {
+ return applicationConfiguration.isInternalAuth()
+ || applicationConfiguration.isJaasAuth()
+ || (applicationConfiguration.isOpenIdAuth() && !applicationConfiguration
+ .isSingleOpenIdProvider());
+ }
+
+ public boolean isRegistrationLinkNeeded() {
+ return !applicationConfiguration.isInternalAuth()
+ && applicationConfiguration.getRegisterPath() != null
+ && !applicationConfiguration.getRegisterPath().isEmpty();
+ }
+
+ public boolean isSingleOpenId() {
+ return applicationConfiguration.isOpenIdAuth()
+ && applicationConfiguration.isSingleOpenIdProvider();
+ }
+}
diff --git a/zanata-war/src/main/java/org/zanata/action/LoginAction.java b/zanata-war/src/main/java/org/zanata/action/LoginAction.java
index 34ac636796..e42ceab376 100644
--- a/zanata-war/src/main/java/org/zanata/action/LoginAction.java
+++ b/zanata-war/src/main/java/org/zanata/action/LoginAction.java
@@ -22,19 +22,21 @@
import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.zanata.ApplicationConfiguration;
-import org.zanata.dao.AccountDAO;
import org.zanata.security.AuthenticationManager;
import org.zanata.security.AuthenticationType;
import org.zanata.security.ZanataCredentials;
+import org.zanata.security.openid.FedoraOpenIdProvider;
+import org.zanata.security.openid.GoogleOpenIdProvider;
import org.zanata.security.openid.OpenIdProviderType;
-
-import lombok.Getter;
-import lombok.Setter;
+import org.zanata.security.openid.YahooOpenIdProvider;
/**
* This action takes care of logging a user into the system. It contains logic
@@ -120,4 +122,33 @@ public String openIdLogin(String authProvider) {
credentials.setOpenIdProviderType(providerType);
return authenticationManager.openIdLogin();
}
+
+ /**
+ * Another way of doing open id without knowing the provider first hand.
+ * Tries to match the given open id with a known provider. If it can't find
+ * one it uses a generic provider.
+ */
+ public String genericOpenIdLogin(String openId) {
+ setOpenId(openId);
+ OpenIdProviderType providerType = getBestSuitedProvider(openId);
+ return openIdLogin(providerType.name());
+ }
+
+ /**
+ * Returns the best suited provider for a given Open id.
+ *
+ * @param openId
+ * An Open id (They are usually in the form of a url).
+ */
+ public static OpenIdProviderType getBestSuitedProvider(String openId) {
+ if (new FedoraOpenIdProvider().accepts(openId)) {
+ return OpenIdProviderType.Fedora;
+ } else if (new GoogleOpenIdProvider().accepts(openId)) {
+ return OpenIdProviderType.Google;
+ } else if (new YahooOpenIdProvider().accepts(openId)) {
+ return OpenIdProviderType.Yahoo;
+ } else {
+ return OpenIdProviderType.Generic;
+ }
+ }
}
diff --git a/zanata-war/src/main/java/org/zanata/action/ServerConfigurationBean.java b/zanata-war/src/main/java/org/zanata/action/ServerConfigurationBean.java
index b36896cdd3..702e6ef4d1 100644
--- a/zanata-war/src/main/java/org/zanata/action/ServerConfigurationBean.java
+++ b/zanata-war/src/main/java/org/zanata/action/ServerConfigurationBean.java
@@ -21,14 +21,18 @@
package org.zanata.action;
import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.List;
import javax.validation.constraints.Pattern;
-import lombok.AccessLevel;
+import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanUtils;
import org.hibernate.validator.constraints.Email;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Create;
@@ -38,93 +42,126 @@
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.faces.FacesMessages;
-import org.jboss.seam.international.StatusMessage;
import org.zanata.ApplicationConfiguration;
import org.zanata.action.validator.EmailList;
import org.zanata.dao.ApplicationConfigurationDAO;
import org.zanata.model.HApplicationConfiguration;
import org.zanata.model.validator.Url;
import org.zanata.rest.service.ServerConfigurationService;
-import com.google.common.base.Strings;
+
+import static org.zanata.model.HApplicationConfiguration.*;
@Name("serverConfigurationBean")
@Scope(ScopeType.PAGE)
@Restrict("#{s:hasRole('admin')}")
-@Getter
-@Setter
@Slf4j
public class ServerConfigurationBean implements Serializable {
private static final long serialVersionUID = 1L;
@In
- @Setter(AccessLevel.NONE)
- @Getter(AccessLevel.NONE)
private ApplicationConfigurationDAO applicationConfigurationDAO;
@In
- @Setter(AccessLevel.NONE)
- @Getter(AccessLevel.NONE)
private ApplicationConfiguration applicationConfiguration;
@Url(canEndInSlash = true)
+ @Getter
+ @Setter
private String registerUrl;
@Url(canEndInSlash = false)
+ @Getter
+ @Setter
private String serverUrl;
+ @Getter
+ @Setter
private String emailDomain;
@EmailList
+ @Getter
+ @Setter
private String adminEmail;
@Email
+ @Getter
+ @Setter
private String fromEmailAddr;
+ private PropertyWithKey fromEmailAddrProperty = new PropertyWithKey("fromEmailAddr", KEY_EMAIL_FROM_ADDRESS);
private String homeContent;
+ private PropertyWithKey homeContentProperty = new PropertyWithKey("homeContent", KEY_HOME_CONTENT);
private String helpContent;
+ private PropertyWithKey helpContentProperty = new PropertyWithKey("helpContent", KEY_HELP_CONTENT);
+ @Getter
+ @Setter
private boolean enableLogEmail;
+ private PropertyWithKey enableLogEmailProperty = new PropertyWithKey("enableLogEmail", KEY_EMAIL_LOG_EVENTS);
+ @Getter
+ @Setter
private String logDestinationEmails;
+ @Getter
+ @Setter
private String logEmailLevel;
@Url(canEndInSlash = true)
+ @Getter
+ @Setter
private String piwikUrl;
+ @Getter
+ @Setter
private String piwikIdSite;
@Url(canEndInSlash = true)
+ @Getter
+ @Setter
private String termsOfUseUrl;
@Pattern(regexp = "\\d{0,5}")
+ @Getter
+ @Setter
private String maxConcurrentRequestsPerApiKey;
@Pattern(regexp = "\\d{0,5}")
+ @Getter
+ @Setter
private String maxActiveRequestsPerApiKey;
+ private List> commonStringProperties = Arrays.asList(
+ new PropertyWithKey("registerUrl", KEY_REGISTER),
+ new PropertyWithKey("serverUrl", KEY_HOST),
+ new PropertyWithKey("emailDomain", KEY_DOMAIN),
+ new PropertyWithKey("adminEmail", KEY_ADMIN_EMAIL),
+ new PropertyWithKey("logDestinationEmails", KEY_LOG_DESTINATION_EMAIL),
+ new PropertyWithKey("logEmailLevel", KEY_EMAIL_LOG_LEVEL),
+ new PropertyWithKey("piwikUrl", KEY_PIWIK_URL),
+ new PropertyWithKey("piwikIdSite", KEY_PIWIK_IDSITE),
+ new PropertyWithKey("termsOfUseUrl", KEY_TERMS_CONDITIONS_URL),
+ new PropertyWithKey("maxConcurrentRequestsPerApiKey", KEY_MAX_CONCURRENT_REQ_PER_API_KEY),
+ new PropertyWithKey("maxActiveRequestsPerApiKey", KEY_MAX_ACTIVE_REQ_PER_API_KEY)
+ );
+
public String getHomeContent() {
HApplicationConfiguration var =
applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HOME_CONTENT);
+ .findByKey(homeContentProperty.getKey());
return var != null ? var.getValue() : "";
}
public String getHelpContent() {
HApplicationConfiguration var =
applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HELP_CONTENT);
+ .findByKey(helpContentProperty.getKey());
return var != null ? var.getValue() : "";
}
public String updateHomeContent() {
- HApplicationConfiguration var =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HOME_CONTENT);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_HOME_CONTENT,
- var, homeContent, applicationConfigurationDAO);
+ persistPropertyToDatabase(homeContentProperty);
applicationConfigurationDAO.flush();
FacesMessages.instance().add("Home content was successfully updated.");
@@ -132,12 +169,7 @@ public String updateHomeContent() {
}
public String updateHelpContent() {
- HApplicationConfiguration var =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HELP_CONTENT);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_HELP_CONTENT,
- var, helpContent, applicationConfigurationDAO);
+ persistPropertyToDatabase(helpContentProperty);
applicationConfigurationDAO.flush();
FacesMessages.instance().add(
@@ -145,125 +177,51 @@ public String updateHelpContent() {
return "/help/view.xhtml";
}
- // TODO tech debt: all below code should really be cleaned up
@Create
public void onCreate() {
- HApplicationConfiguration registerUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_REGISTER);
- if (registerUrlValue != null) {
- this.registerUrl = registerUrlValue.getValue();
- }
- HApplicationConfiguration serverUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HOST);
- if (serverUrlValue != null) {
- this.serverUrl = serverUrlValue.getValue();
- }
- HApplicationConfiguration emailDomainValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_DOMAIN);
- if (emailDomainValue != null) {
- this.emailDomain = emailDomainValue.getValue();
- }
- HApplicationConfiguration adminEmailValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_ADMIN_EMAIL);
- if (adminEmailValue != null) {
- this.adminEmail = adminEmailValue.getValue();
- }
-
+ setPropertiesFromConfigIfNotNull(commonStringProperties);
+ setBooleanPropertyFromConfigIfNotNull(enableLogEmailProperty);
this.fromEmailAddr = applicationConfiguration.getFromEmailAddr();
+ }
- HApplicationConfiguration emailLogEventsValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_EMAIL_LOG_EVENTS);
- if (emailLogEventsValue != null) {
- this.enableLogEmail =
- Boolean.parseBoolean(emailLogEventsValue.getValue());
- }
- HApplicationConfiguration logDestinationValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_LOG_DESTINATION_EMAIL);
- if (logDestinationValue != null) {
- this.logDestinationEmails = logDestinationValue.getValue();
- }
- HApplicationConfiguration logEmailLevelValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_EMAIL_LOG_LEVEL);
- if (logEmailLevelValue != null) {
- this.logEmailLevel = logEmailLevelValue.getValue();
- }
- HApplicationConfiguration piwikUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_PIWIK_URL);
- if (piwikUrlValue != null) {
- this.piwikUrl = piwikUrlValue.getValue();
- }
- HApplicationConfiguration piwikIdSiteValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_PIWIK_IDSITE);
- if (piwikIdSiteValue != null) {
- this.piwikIdSite = piwikIdSiteValue.getValue();
+ private void setPropertiesFromConfigIfNotNull(List> properties) {
+ for (PropertyWithKey property : properties) {
+ setPropertyFromConfigIfNotNull(property);
}
+ }
- HApplicationConfiguration termsOfUseUrlValue =
+ private void setPropertyFromConfigIfNotNull(PropertyWithKey property) {
+ HApplicationConfiguration valueHolder =
applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_TERMS_CONDITIONS_URL);
- if (termsOfUseUrlValue != null) {
- this.termsOfUseUrl = termsOfUseUrlValue.getValue();
- }
-
- HApplicationConfiguration maxConcurrent = applicationConfigurationDAO.findByKey(
- HApplicationConfiguration.KEY_MAX_CONCURRENT_REQ_PER_API_KEY);
- if (maxConcurrent != null) {
- this.maxConcurrentRequestsPerApiKey = maxConcurrent.getValue();
+ .findByKey(property.getKey());
+ if (valueHolder != null) {
+ try {
+ property.set(valueHolder.getValue());
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
}
+ }
- HApplicationConfiguration maxActive = applicationConfigurationDAO.findByKey(
- HApplicationConfiguration.KEY_MAX_ACTIVE_REQ_PER_API_KEY);
- if (maxActive != null) {
- this.maxActiveRequestsPerApiKey = maxActive.getValue();
+ private void setBooleanPropertyFromConfigIfNotNull(PropertyWithKey property) {
+ HApplicationConfiguration valueHolder = applicationConfigurationDAO.findByKey(property.getKey());
+ if (valueHolder != null) {
+ try {
+ property.set(Boolean.parseBoolean(valueHolder.getValue()));
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
}
}
@Transactional
public String update() {
- HApplicationConfiguration registerUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_REGISTER);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_REGISTER,
- registerUrlValue, registerUrl, applicationConfigurationDAO);
-
- HApplicationConfiguration serverUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_HOST);
- ServerConfigurationService
- .persistApplicationConfig(HApplicationConfiguration.KEY_HOST,
- serverUrlValue, serverUrl, applicationConfigurationDAO);
-
- HApplicationConfiguration emailDomainValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_DOMAIN);
- ServerConfigurationService
- .persistApplicationConfig(HApplicationConfiguration.KEY_DOMAIN,
- emailDomainValue, emailDomain,
- applicationConfigurationDAO);
-
- HApplicationConfiguration adminEmailValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_ADMIN_EMAIL);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_ADMIN_EMAIL,
- adminEmailValue, adminEmail, applicationConfigurationDAO);
-
- HApplicationConfiguration fromEmailAddrValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_EMAIL_FROM_ADDRESS);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_EMAIL_FROM_ADDRESS,
- fromEmailAddrValue, fromEmailAddr, applicationConfigurationDAO);
+ persistPropertiesToDatabase(commonStringProperties);
+ persistPropertyToDatabase(fromEmailAddrProperty);
HApplicationConfiguration emailLogEventsValue =
applicationConfigurationDAO
@@ -278,60 +236,6 @@ public String update() {
}
applicationConfigurationDAO.makePersistent(emailLogEventsValue);
- HApplicationConfiguration logDestEmailValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_LOG_DESTINATION_EMAIL);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_LOG_DESTINATION_EMAIL,
- logDestEmailValue, logDestinationEmails,
- applicationConfigurationDAO);
-
- HApplicationConfiguration logEmailLevelValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_EMAIL_LOG_LEVEL);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_EMAIL_LOG_LEVEL,
- logEmailLevelValue, logEmailLevel, applicationConfigurationDAO);
-
- HApplicationConfiguration piwikUrlValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_PIWIK_URL);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_PIWIK_URL,
- piwikUrlValue, piwikUrl, applicationConfigurationDAO);
-
- HApplicationConfiguration piwikIdSiteValue =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_PIWIK_IDSITE);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_PIWIK_IDSITE,
- piwikIdSiteValue, piwikIdSite, applicationConfigurationDAO);
-
- HApplicationConfiguration termsOfUseUrlValue =
- applicationConfigurationDAO
- .findByKey(
- HApplicationConfiguration.KEY_TERMS_CONDITIONS_URL);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_TERMS_CONDITIONS_URL,
- termsOfUseUrlValue, termsOfUseUrl, applicationConfigurationDAO);
-
- HApplicationConfiguration maxConcurrent =
- applicationConfigurationDAO
- .findByKey(
- HApplicationConfiguration.KEY_MAX_CONCURRENT_REQ_PER_API_KEY);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_MAX_CONCURRENT_REQ_PER_API_KEY,
- maxConcurrent, maxConcurrentRequestsPerApiKey,
- applicationConfigurationDAO);
-
- HApplicationConfiguration maxActive =
- applicationConfigurationDAO
- .findByKey(HApplicationConfiguration.KEY_MAX_ACTIVE_REQ_PER_API_KEY);
- ServerConfigurationService.persistApplicationConfig(
- HApplicationConfiguration.KEY_MAX_ACTIVE_REQ_PER_API_KEY,
- maxActive, maxActiveRequestsPerApiKey,
- applicationConfigurationDAO);
-
applicationConfigurationDAO.flush();
FacesMessages facesMessages = FacesMessages.instance();
facesMessages.clearGlobalMessages();
@@ -339,7 +243,47 @@ public String update() {
return "success";
}
+ private void persistPropertiesToDatabase(List> properties) {
+ for (PropertyWithKey property : properties) {
+ persistPropertyToDatabase(property);
+ }
+ }
+
+ private void persistPropertyToDatabase(PropertyWithKey property) {
+ HApplicationConfiguration registerUrlValue =
+ applicationConfigurationDAO
+ .findByKey(property.getKey());
+ try {
+ ServerConfigurationService.persistApplicationConfig(
+ property.getKey(),
+ registerUrlValue, property.get(), applicationConfigurationDAO);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+
public String cancel() {
return "cancel";
}
+
+ /**
+ * Associates a field of type T with a HApplicationConfiguration key,
+ * allowing abstraction around setting fields only if keys are bound.
+ */
+ @Data
+ private class PropertyWithKey {
+ private final String propertyName;
+ private final String key;
+
+ public void set(T value) throws InvocationTargetException, IllegalAccessException {
+ BeanUtils.setProperty(ServerConfigurationBean.this, propertyName, value);
+ }
+ public T get() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+ return (T) BeanUtils.getProperty(ServerConfigurationBean.this, propertyName);
+ }
+ }
}
diff --git a/zanata-war/src/main/java/org/zanata/config/JaasConfig.java b/zanata-war/src/main/java/org/zanata/config/JaasConfig.java
new file mode 100644
index 0000000000..c64525b376
--- /dev/null
+++ b/zanata-war/src/main/java/org/zanata/config/JaasConfig.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
+ * @author tags. See the copyright.txt file in the distribution for a full
+ * listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.zanata.config;
+
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
+import javax.security.auth.spi.LoginModule;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+/**
+ * Store for JAAS configuration.
+ *
+ * @author Carlos Munoz camunoz@redhat.com
+ */
+@Name("jaasConfig")
+@AutoCreate
+@BypassInterceptors
+@Scope(ScopeType.APPLICATION)
+public class JaasConfig {
+
+ /**
+ * Retrieves all App configuration entries under a given name. In Jboss's
+ * standalone.xml, these are all the {@code }
+ * entries under @{code }
+ *
+ * @param loginModuleName
+ * The login module name as configured. In Jboss' standalone.xml
+ * this the name attribute at
+ * {@code }
+ * @return A collection of configuration entries. May be null if there are
+ * no configuration entries under that name.
+ */
+ public AppConfigurationEntry[] getAppConfigurationEntries(
+ String loginModuleName) {
+ return Configuration.getConfiguration().getAppConfigurationEntry(
+ loginModuleName);
+ }
+
+ /**
+ * Retrieves a single configuration entry under a given name and using a
+ * specific class. In JBoss' standalone.xml this type is specified under
+ * {@code }. Since there may be
+ * more than one configuration entry using the same code, this method
+ * returns the first one found.
+ *
+ * @param loginModuleName
+ * The login module name as configured. In Jboss' standalone.xml
+ * this the name attribute at
+ * {@code }
+ * @param loginModuleType
+ * The Login module type used.
+ * @return the first found configuration entry under the given name, and
+ * using the given login module class. Null if no such configuration
+ * is found.
+ */
+ public AppConfigurationEntry
+ getAppConfigurationEntry(String loginModuleName,
+ Class extends LoginModule> loginModuleType) {
+ AppConfigurationEntry[] entries =
+ getAppConfigurationEntries(loginModuleName);
+ if(entries != null) {
+ for (AppConfigurationEntry e : entries) {
+ if (e.getLoginModuleName().equals(loginModuleType.getName())) {
+ return e;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Retrieves a configuration property. In Jboss's standalone.xml, these are
+ * configured at {@code
+ *
+ *
+ * ...
+ *
+ * }
+ *
+ * @param loginModuleName
+ * The login module name as configured. In Jboss' standalone.xml
+ * this the name attribute at
+ * {@code }
+ * @param loginModuleType
+ * The Login module type used.
+ * @param key
+ * The option key.
+ * @return The configuration value for the property ofr null if the property
+ * cannot be found.
+ */
+ public String getAppConfigurationProperty(String loginModuleName,
+ Class extends LoginModule> loginModuleType, String key) {
+ AppConfigurationEntry configEntry =
+ getAppConfigurationEntry(loginModuleName, loginModuleType);
+ if (configEntry == null) {
+ return null;
+ } else if (configEntry.getOptions().containsKey(key)) {
+ return (String) configEntry.getOptions().get(key);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/zanata-war/src/main/java/org/zanata/security/AuthenticationType.java b/zanata-war/src/main/java/org/zanata/security/AuthenticationType.java
index ec61f2f2ca..01e792ab06 100644
--- a/zanata-war/src/main/java/org/zanata/security/AuthenticationType.java
+++ b/zanata-war/src/main/java/org/zanata/security/AuthenticationType.java
@@ -26,5 +26,12 @@
* @author camunoz@redhat.com
*/
public enum AuthenticationType {
- INTERNAL, KERBEROS, OPENID, JAAS
+ /* Internal authentication (username / password) */
+ INTERNAL,
+ /* Kerberos authentication. Ticket or form based. */
+ KERBEROS,
+ /* Open Id authentication */
+ OPENID,
+ /* Any other custom username & password-based jaas authentication mechanism */
+ JAAS,
}
diff --git a/zanata-war/src/main/java/org/zanata/security/OpenIdLoginModule.java b/zanata-war/src/main/java/org/zanata/security/OpenIdLoginModule.java
index eb675ff1bd..c328a60e8b 100644
--- a/zanata-war/src/main/java/org/zanata/security/OpenIdLoginModule.java
+++ b/zanata-war/src/main/java/org/zanata/security/OpenIdLoginModule.java
@@ -34,6 +34,7 @@
import org.zanata.util.ServiceLocator;
public class OpenIdLoginModule implements LoginModule {
+ public static final String OPEN_ID_PROVIDER_KEY = "providerURL";
protected Set roles = new HashSet();
protected Subject subject;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
index 005b834d73..342ce5ea54 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
@@ -57,7 +57,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.inject.Inject;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
index 16125cf0fc..4981072e6d 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
@@ -87,7 +87,7 @@
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.inject.Inject;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/GlossaryDetailsPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/GlossaryDetailsPresenter.java
index c23e498506..2dce312d8f 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/GlossaryDetailsPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/GlossaryDetailsPresenter.java
@@ -19,7 +19,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TargetContentsPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TargetContentsPresenter.java
index 0141957ce7..f87215686a 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TargetContentsPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TargetContentsPresenter.java
@@ -75,7 +75,7 @@
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryDetailsPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryDetailsPresenter.java
index 87272f7314..cf031bd802 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryDetailsPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryDetailsPresenter.java
@@ -13,7 +13,7 @@
import org.zanata.webtrans.shared.rpc.GetTransMemoryDetailsAction;
import org.zanata.webtrans.shared.rpc.TransMemoryDetailsList;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.inject.Inject;
public class TransMemoryDetailsPresenter extends
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java
index c8a629c882..28576528f5 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransMemoryPresenter.java
@@ -30,7 +30,7 @@
import org.zanata.webtrans.shared.rpc.HasSearchType.SearchType;
import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransUnitsTablePresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransUnitsTablePresenter.java
index 51011a3a23..60295d0563 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransUnitsTablePresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/TransUnitsTablePresenter.java
@@ -62,7 +62,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.inject.Inject;
import static org.zanata.webtrans.client.events.NotificationEvent.Severity.*;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/DelegatingDispatchAsync.java b/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/DelegatingDispatchAsync.java
index 2baa377072..42ade9012f 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/DelegatingDispatchAsync.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/DelegatingDispatchAsync.java
@@ -7,7 +7,7 @@
import org.zanata.webtrans.shared.auth.Identity;
import org.zanata.webtrans.shared.model.UserWorkspaceContext;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class DelegatingDispatchAsync implements CachingDispatchAsync {
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/SeamDispatchAsync.java b/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/SeamDispatchAsync.java
index 53d5dba61b..e7a05b99e8 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/SeamDispatchAsync.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/rpc/SeamDispatchAsync.java
@@ -20,7 +20,7 @@
import org.zanata.webtrans.shared.rpc.WrappedAction;
import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Breadcrumb.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Breadcrumb.java
index 2f3dfacc0f..546281b466 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Breadcrumb.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Breadcrumb.java
@@ -4,7 +4,7 @@
package org.zanata.webtrans.client.ui;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorEditor.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorEditor.java
index 28978cee7f..744bfd1ff1 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorEditor.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorEditor.java
@@ -1,7 +1,7 @@
package org.zanata.webtrans.client.ui;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.NativeEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorReadOnlyWidget.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorReadOnlyWidget.java
index db37417ac7..8e02147cf4 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorReadOnlyWidget.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/CodeMirrorReadOnlyWidget.java
@@ -1,7 +1,7 @@
package org.zanata.webtrans.client.ui;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.TextAreaElement;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DialogBoxCloseButton.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DialogBoxCloseButton.java
index 9b06f4a096..b84b8e0fa7 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DialogBoxCloseButton.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DialogBoxCloseButton.java
@@ -2,7 +2,7 @@
import org.zanata.webtrans.client.resources.WebTransMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.DialogBox;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DiffColorLegendPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DiffColorLegendPanel.java
index 2889ed86b5..d34d48011e 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DiffColorLegendPanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DiffColorLegendPanel.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.keys.ShortcutContext;
import org.zanata.webtrans.client.resources.WebTransMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Editor.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Editor.java
index 5485c53f30..b967768d90 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Editor.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Editor.java
@@ -12,7 +12,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorButtonsWidget.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorButtonsWidget.java
index 2e705c8739..2ca9bde29f 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorButtonsWidget.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorButtonsWidget.java
@@ -2,7 +2,7 @@
import org.zanata.webtrans.client.view.TargetContentsDisplay;
import org.zanata.webtrans.shared.model.TransUnitId;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/HistoryEntryComparisonPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/HistoryEntryComparisonPanel.java
index 9728ab322c..51b13d1825 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/HistoryEntryComparisonPanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/HistoryEntryComparisonPanel.java
@@ -4,7 +4,7 @@
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.shared.model.TransHistoryItem;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationDetailsBox.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationDetailsBox.java
index 4058066e34..91ca62427d 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationDetailsBox.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationDetailsBox.java
@@ -8,7 +8,7 @@
import org.zanata.webtrans.client.util.DateUtil;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationItem.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationItem.java
index a11853b809..b20ff3d6e0 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationItem.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/NotificationItem.java
@@ -26,7 +26,7 @@
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.util.DateUtil;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.CssResource;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.java
index 6ceb49e297..81d19544b1 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/Pager.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.resources.WebTransMessages;
import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReferencePanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReferencePanel.java
index bb7c2d1753..64f2dd1234 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReferencePanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReferencePanel.java
@@ -1,6 +1,6 @@
package org.zanata.webtrans.client.ui;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentInputWidget.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentInputWidget.java
index 4f8ef268fd..d0aca7c1b9 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentInputWidget.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentInputWidget.java
@@ -22,7 +22,7 @@
package org.zanata.webtrans.client.ui;
import org.zanata.webtrans.client.view.ForceReviewCommentDisplay;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentItemLine.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentItemLine.java
index f3baf2c39c..5749c036f2 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentItemLine.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ReviewCommentItemLine.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.util.DateUtil;
import org.zanata.webtrans.shared.model.ReviewComment;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchField.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchField.java
index e47fd34afc..163ec8fb6d 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchField.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchField.java
@@ -20,7 +20,7 @@
*/
package org.zanata.webtrans.client.ui;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchResultsDocumentTable.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchResultsDocumentTable.java
index 31b941c664..0894905734 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchResultsDocumentTable.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SearchResultsDocumentTable.java
@@ -36,7 +36,7 @@
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.ValueUpdater;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style.Unit;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SourcePanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SourcePanel.java
index 818d32fdc7..62fafd5659 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SourcePanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/SourcePanel.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.resources.NavigationMessages;
import org.zanata.webtrans.shared.model.TransUnitId;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TMMergeForm.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TMMergeForm.java
index ebe4ca436b..eed5d07b5d 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TMMergeForm.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TMMergeForm.java
@@ -28,7 +28,7 @@
import org.zanata.webtrans.shared.rpc.MergeOptions;
import com.google.common.base.Preconditions;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TooltipPopupPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TooltipPopupPanel.java
index 3ef95d461d..386d9a7fcd 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TooltipPopupPanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TooltipPopupPanel.java
@@ -20,7 +20,7 @@
*/
package org.zanata.webtrans.client.ui;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.CssResource;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransHistoryItemLine.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransHistoryItemLine.java
index 5fa76ca9c3..ac99cfee5e 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransHistoryItemLine.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransHistoryItemLine.java
@@ -25,7 +25,7 @@
import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.client.util.DateUtil;
import org.zanata.webtrans.shared.model.TransHistoryItem;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransMemoryMergePopupPanelView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransMemoryMergePopupPanelView.java
index 590f865a0a..08fde7cc6b 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransMemoryMergePopupPanelView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransMemoryMergePopupPanelView.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.resources.UiMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.Label;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java
index 472571d21e..b32a4bdeac 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java
@@ -8,7 +8,7 @@
import org.zanata.webtrans.client.util.TextFormatUtil;
import org.zanata.webtrans.shared.model.UserWorkspaceContext;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitDetailsPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitDetailsPanel.java
index f4a9d10774..a3934f376f 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitDetailsPanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitDetailsPanel.java
@@ -5,7 +5,7 @@
import org.zanata.webtrans.shared.model.TransUnit;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslationHistoryView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslationHistoryView.java
index 7b34610d87..dbb9b13d29 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslationHistoryView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslationHistoryView.java
@@ -9,7 +9,7 @@
import org.zanata.webtrans.shared.model.ReviewComment;
import org.zanata.webtrans.shared.model.TransHistoryItem;
import com.google.common.collect.Lists;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslatorListWidget.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslatorListWidget.java
index d8f048b764..8da00774d3 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslatorListWidget.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TranslatorListWidget.java
@@ -1,6 +1,6 @@
package org.zanata.webtrans.client.ui;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationMessagePanelView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationMessagePanelView.java
index 9e31998c96..f4f9db8a97 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationMessagePanelView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationMessagePanelView.java
@@ -26,7 +26,7 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.collect.Maps;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java
index 99868626e9..42df43e11e 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java
@@ -37,7 +37,7 @@
import org.zanata.webtrans.shared.model.TransUnitId;
import org.zanata.webtrans.shared.model.ValidationAction;
import com.google.common.collect.Lists;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java
index bacef6f71e..7dfadd8c6c 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AppView.java
@@ -36,7 +36,7 @@
import org.zanata.webtrans.client.ui.UnorderedListWidget;
import org.zanata.webtrans.shared.model.UserWorkspaceContext;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.UListElement;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AttentionKeyShortcutView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AttentionKeyShortcutView.java
index b184cf0001..1e78d4755b 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/AttentionKeyShortcutView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/AttentionKeyShortcutView.java
@@ -1,7 +1,7 @@
package org.zanata.webtrans.client.view;
import org.zanata.webtrans.client.resources.WebTransMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/ChangeReferenceLangView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/ChangeReferenceLangView.java
index 39321857c6..66d2d1290c 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/ChangeReferenceLangView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/ChangeReferenceLangView.java
@@ -20,7 +20,7 @@
*/
package org.zanata.webtrans.client.view;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.resources.client.CssResource;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListOptionsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListOptionsView.java
index 82a8a53cd8..03e2e65ae1 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListOptionsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListOptionsView.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.presenter.UserConfigHolder;
import org.zanata.webtrans.client.resources.WebTransMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.java
index fd0a712225..5e6a486156 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/DocumentListView.java
@@ -43,7 +43,7 @@
import org.zanata.webtrans.shared.model.UserWorkspaceContext;
import org.zanata.webtrans.shared.model.WorkspaceId;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/EditorOptionsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/EditorOptionsView.java
index eabb4b83fb..34b9cd9f62 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/EditorOptionsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/EditorOptionsView.java
@@ -30,7 +30,7 @@
import org.zanata.webtrans.shared.model.DiffMode;
import org.zanata.webtrans.shared.rpc.NavOption;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryDetailsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryDetailsView.java
index 28fe6cbd7b..c51720bcf4 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryDetailsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryDetailsView.java
@@ -9,7 +9,7 @@
import org.zanata.webtrans.client.util.DateUtil;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryView.java
index 4242beee91..024520f69a 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/GlossaryView.java
@@ -10,7 +10,7 @@
import org.zanata.webtrans.shared.model.GlossaryResultItem;
import org.zanata.webtrans.shared.rpc.HasSearchType.SearchType;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/KeyShortcutView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/KeyShortcutView.java
index 16361b70fb..7ccf65789e 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/KeyShortcutView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/KeyShortcutView.java
@@ -29,7 +29,7 @@
import com.google.common.base.Strings;
import com.google.gwt.cell.client.SafeHtmlCell;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeHtml;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/NotificationView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/NotificationView.java
index d474571a2c..45ccdbda4a 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/NotificationView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/NotificationView.java
@@ -29,7 +29,7 @@
import org.zanata.webtrans.client.ui.NotificationItem;
import org.zanata.webtrans.client.ui.UnorderedListWidget;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/OptionsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/OptionsView.java
index fdb0d6820b..90a490cee0 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/OptionsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/OptionsView.java
@@ -22,7 +22,7 @@
import org.zanata.webtrans.shared.rpc.ThemesOption;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/SearchResultsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/SearchResultsView.java
index 0bc86c6f84..590456b95e 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/SearchResultsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/SearchResultsView.java
@@ -30,7 +30,7 @@
import org.zanata.webtrans.client.ui.SearchResultsDocumentTable;
import com.google.gwt.cell.client.ActionCell.Delegate;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/SideMenuView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/SideMenuView.java
index f7c9879758..e50e1ce264 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/SideMenuView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/SideMenuView.java
@@ -3,7 +3,7 @@
import org.zanata.webtrans.client.events.NotificationEvent.Severity;
import org.zanata.webtrans.client.resources.WebTransMessages;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TargetContentsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TargetContentsView.java
index 1afd58a0a2..1a76a7a6f2 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TargetContentsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TargetContentsView.java
@@ -40,7 +40,7 @@
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java
index cb15f56f83..b8f1e121c6 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java
@@ -24,7 +24,7 @@
import org.zanata.webtrans.client.resources.UiMessages;
import org.zanata.webtrans.client.ui.EditorSearchField;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryDetailsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryDetailsView.java
index 02bbcaef27..7ed7c7404a 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryDetailsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryDetailsView.java
@@ -10,7 +10,7 @@
import org.zanata.webtrans.client.util.DateUtil;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java
index dfbe964449..9872244612 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransMemoryView.java
@@ -18,7 +18,7 @@
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java
index 9090c98914..366061f3c0 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitNavigationView.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.resources.NavigationMessages;
import org.zanata.webtrans.shared.rpc.NavOption;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitsTableView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitsTableView.java
index 42371de375..39f3e6df56 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitsTableView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransUnitsTableView.java
@@ -6,7 +6,7 @@
import org.zanata.webtrans.client.ui.FilterViewConfirmationDisplay;
import org.zanata.webtrans.client.ui.LoadingPanel;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java
index 24a1e13e79..fd1c1e5905 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationEditorView.java
@@ -24,7 +24,7 @@
import org.zanata.webtrans.client.ui.HasPager;
import org.zanata.webtrans.client.ui.Pager;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationView.java
index 8a5357a400..e37d4eecd6 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TranslationView.java
@@ -23,7 +23,7 @@
import org.zanata.webtrans.client.presenter.TranslationPresenter;
import org.zanata.webtrans.client.ui.SplitLayoutPanelHelper;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationOptionsView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationOptionsView.java
index ec897a09d7..d19cfeb796 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationOptionsView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/ValidationOptionsView.java
@@ -9,7 +9,7 @@
import org.zanata.webtrans.client.ui.UnorderedListWidget;
import org.zanata.webtrans.client.util.DateUtil;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.uibinder.client.UiBinder;
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/WorkspaceUsersView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/WorkspaceUsersView.java
index d1806e580c..de2d253d22 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/WorkspaceUsersView.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/WorkspaceUsersView.java
@@ -8,7 +8,7 @@
import org.zanata.webtrans.shared.rpc.HasWorkspaceChatData.MESSAGE_TYPE;
import com.google.common.base.Strings;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.FocusEvent;
diff --git a/zanata-war/src/main/webapp/WEB-INF/pages.xml b/zanata-war/src/main/webapp/WEB-INF/pages.xml
index 47fa5cbaa1..c3b53349ef 100644
--- a/zanata-war/src/main/webapp/WEB-INF/pages.xml
+++ b/zanata-war/src/main/webapp/WEB-INF/pages.xml
@@ -50,17 +50,24 @@
if="#{!identity.isLoggedIn() and authenticationManager.authenticatedAccountWaitingForActivation}">
+
+
+
+ if="#{identity.loggedIn and userRedirect.shouldRedirectToDashboard()}}">
+ if="#{identity.loggedIn and userRedirect.redirect}">
+
+
+
+
diff --git a/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml b/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml
index a2e6ff8a38..967131b853 100644
--- a/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml
+++ b/zanata-war/src/main/webapp/WEB-INF/template/banner.xhtml
@@ -146,7 +146,7 @@
rendered="#{applicationConfiguration.internalAuth}"/>
+ rendered="#{applicationConfigurationAction.registrationLinkNeeded}">
#{msgs['jsf.Signup']}
@@ -154,10 +154,18 @@
+ rendered="#{applicationConfigurationAction.loginHandledByInternalPage}">
#{msgs['jsf.Login']}
+
+
+ #{messages['jsf.Login']}
+
+
+
>> exceptionMappers =
- new HashSet>>();
- protected final Set