From b00764b49fed3d4f21cebddb05e1ecfa174cf592 Mon Sep 17 00:00:00 2001 From: Michael Gerber Date: Sat, 21 Feb 2015 17:36:47 +0100 Subject: [PATCH] add localization support to realm --- .../META-INF/jpa-changelog-1.2.0.Beta1.xml | 11 ++++++ .../java/org/keycloak/models/RealmModel.java | 8 ++++- .../keycloak/models/entities/RealmEntity.java | 28 +++++++++++++++ .../keycloak/models/cache/RealmAdapter.java | 35 ++++++++++++++++++ .../models/cache/entities/CachedRealm.java | 19 ++++++++++ .../org/keycloak/models/jpa/RealmAdapter.java | 33 +++++++++++++++++ .../models/jpa/entities/RealmEntity.java | 36 +++++++++++++++++++ .../mongo/keycloak/adapters/RealmAdapter.java | 35 ++++++++++++++++++ 8 files changed, 204 insertions(+), 1 deletion(-) diff --git a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml index 0de32d86506..8783ca18c57 100755 --- a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml +++ b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml @@ -72,9 +72,19 @@ + + + + + + + + + + @@ -86,6 +96,7 @@ + diff --git a/model/api/src/main/java/org/keycloak/models/RealmModel.java b/model/api/src/main/java/org/keycloak/models/RealmModel.java index badc6bdbb90..af1610577aa 100755 --- a/model/api/src/main/java/org/keycloak/models/RealmModel.java +++ b/model/api/src/main/java/org/keycloak/models/RealmModel.java @@ -236,5 +236,11 @@ public interface RealmModel extends RoleContainerModel { void updateProtocolMapper(ProtocolMapperModel mapping); public ProtocolMapperModel getProtocolMapperById(String id); - + //i18n + boolean isLocalizationEnabled(); + void setLocalizationEnabled(boolean enabled); + Set getSupportedLocales(); + void setSupportedLocales(Set locales); + String getDefaultLocale(); + void setDefaultLocale(String locale); } diff --git a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java index 7db0bac78ff..7efd942dc67 100755 --- a/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java +++ b/model/api/src/main/java/org/keycloak/models/entities/RealmEntity.java @@ -65,6 +65,10 @@ public class RealmEntity extends AbstractIdentifiableEntity { private String adminAppId; + private boolean localizationEnabled; + private List supportedLocales = new ArrayList(); + private String defaultLocale; + public String getName() { return name; } @@ -408,6 +412,30 @@ public class RealmEntity extends AbstractIdentifiableEntity { public void setClaimMappings(List claimMappings) { this.claimMappings = claimMappings; } + + public boolean isLocalizationEnabled() { + return localizationEnabled; + } + + public void setLocalizationEnabled(boolean localizationEnabled) { + this.localizationEnabled = localizationEnabled; + } + + public List getSupportedLocales() { + return supportedLocales; + } + + public void setSupportedLocales(List supportedLocales) { + this.supportedLocales = supportedLocales; + } + + public String getDefaultLocale() { + return defaultLocale; + } + + public void setDefaultLocale(String defaultLocale) { + this.defaultLocale = defaultLocale; + } } diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java index 21d32cc0372..006e4ff29dc 100755 --- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java +++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java @@ -932,4 +932,39 @@ public class RealmAdapter implements RealmModel { public int hashCode() { return getId().hashCode(); } + + @Override + public boolean isLocalizationEnabled() { + if (updated != null) return updated.isLocalizationEnabled(); + return cached.isLocalizationEnabled(); + } + + @Override + public void setLocalizationEnabled(boolean enabled) { + getDelegateForUpdate(); + updated.setLocalizationEnabled(enabled); + } + + @Override + public Set getSupportedLocales() { + if (updated != null) return updated.getSupportedLocales(); + return cached.getSupportedLocales(); + } + + @Override + public void setSupportedLocales(Set locales) { + getDelegateForUpdate(); + updated.setSupportedLocales(locales); + } + + @Override + public String getDefaultLocale() { + if (updated != null) return updated.getDefaultLocale(); + return cached.getDefaultLocale(); + } + + @Override + public void setDefaultLocale(String locale) { + updated.setDefaultLocale(locale); + } } diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java index 81ddc57cd94..5409c167b94 100755 --- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java +++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java @@ -83,6 +83,9 @@ public class CachedRealm { private Map realmRoles = new HashMap(); private Map applications = new HashMap(); private Map clients = new HashMap(); + private boolean localizationEnabled; + private Set supportedLocales = new HashSet(); + private String defaultLocale; public CachedRealm() { } @@ -166,6 +169,10 @@ public class CachedRealm { cache.addCachedOAuthClient(cachedApp); } + localizationEnabled = model.isLocalizationEnabled(); + supportedLocales.addAll(model.getSupportedLocales()); + defaultLocale = model.getDefaultLocale(); + } @@ -356,4 +363,16 @@ public class CachedRealm { public Set getClaimMappings() { return claimMappings; } + + public boolean isLocalizationEnabled() { + return localizationEnabled; + } + + public Set getSupportedLocales() { + return supportedLocales; + } + + public String getDefaultLocale() { + return defaultLocale; + } } diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java index f294bbde4b7..27689a6642b 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java @@ -1342,4 +1342,37 @@ public class RealmAdapter implements RealmModel { mapping.setSourceAttribute(entity.getSourceAttribute()); return mapping; } + + @Override + public boolean isLocalizationEnabled() { + return realm.isLocalizationEnabled(); + } + + @Override + public void setLocalizationEnabled(boolean enabled) { + realm.setLocalizationEnabled(enabled); + em.flush(); + } + + @Override + public Set getSupportedLocales() { + return realm.getSupportedLocales(); + } + + @Override + public void setSupportedLocales(Set locales) { + realm.setSupportedLocales(locales); + em.flush(); + } + + @Override + public String getDefaultLocale() { + return realm.getDefaultLocale(); + } + + @Override + public void setDefaultLocale(String locale) { + realm.setDefaultLocale(locale); + em.flush(); + } } \ No newline at end of file diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java index e9cdda1e782..83128140533 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java @@ -139,6 +139,18 @@ public class RealmEntity { @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") protected List identityProviders = new ArrayList(); + @Column(name="LOCALIZATION_ENABLED") + protected boolean localizationEnabled; + + @ElementCollection + @Column(name="VALUE") + @CollectionTable(name="REALM_SUPPORTED_LOCALES", joinColumns={ @JoinColumn(name="REALM_ID") }) + protected Set supportedLocales = new HashSet(); + + @Column(name="DEFAULT_LOCALE") + protected String defaultLocale; + + public String getId() { return id; } @@ -454,5 +466,29 @@ public class RealmEntity { public void setProtocolClaimMappings(Collection protocolClaimMappings) { this.protocolClaimMappings = protocolClaimMappings; } + + public boolean isLocalizationEnabled() { + return localizationEnabled; + } + + public void setLocalizationEnabled(boolean localizationEnabled) { + this.localizationEnabled = localizationEnabled; + } + + public Set getSupportedLocales() { + return supportedLocales; + } + + public void setSupportedLocales(Set supportedLocales) { + this.supportedLocales = supportedLocales; + } + + public String getDefaultLocale() { + return defaultLocale; + } + + public void setDefaultLocale(String defaultLocale) { + this.defaultLocale = defaultLocale; + } } diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java index 0dfac8be716..e17beb1e970 100755 --- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java +++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java @@ -1192,5 +1192,40 @@ public class RealmAdapter extends AbstractMongoAdapter impleme return getId().hashCode(); } + @Override + public boolean isLocalizationEnabled() { + return realm.isLocalizationEnabled(); + } + @Override + public void setLocalizationEnabled(boolean enabled) { + realm.setLocalizationEnabled(enabled); + updateRealm(); + } + + @Override + public Set getSupportedLocales() { + return new HashSet(realm.getSupportedLocales()); + } + + @Override + public void setSupportedLocales(Set locales) { + if (locales != null) { + realm.setEventsListeners(new ArrayList(locales)); + } else { + realm.setEventsListeners(Collections.EMPTY_LIST); + } + updateRealm(); + } + + @Override + public String getDefaultLocale() { + return realm.getDefaultLocale(); + } + + @Override + public void setDefaultLocale(String locale) { + realm.setDefaultLocale(locale); + updateRealm(); + } }