diff --git a/src/main/java/org/codelibs/fess/app/web/admin/group/CreateForm.java b/src/main/java/org/codelibs/fess/app/web/admin/group/CreateForm.java index 0b34ec1ecff847f3889c4feaac206eba8c70cde6..9cb3ca0d226267a1ecf39809526870b4f0c0f3d1 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/group/CreateForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/group/CreateForm.java @@ -15,6 +15,9 @@ */ package org.codelibs.fess.app.web.admin.group; +import java.util.HashMap; +import java.util.Map; + import javax.validation.constraints.Size; import org.lastaflute.web.validation.Required; @@ -33,8 +36,7 @@ public class CreateForm { @Size(max = 100) public String name; - @ValidateTypeFailure - public Long gidNumber; + public Map attributes = new HashMap<>(); public void initialize() { } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/role/CreateForm.java b/src/main/java/org/codelibs/fess/app/web/admin/role/CreateForm.java index ec5a4171d4badee643c5fd47b8e14b06f937b043..c974fdec871da20edcbd5f795c707d296a7f6982 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/role/CreateForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/role/CreateForm.java @@ -15,6 +15,9 @@ */ package org.codelibs.fess.app.web.admin.role; +import java.util.HashMap; +import java.util.Map; + import javax.validation.constraints.Size; import org.lastaflute.web.validation.Required; @@ -33,6 +36,8 @@ public class CreateForm { @Size(max = 100) public String name; + public Map attributes = new HashMap<>(); + public void initialize() { } } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/user/CreateForm.java b/src/main/java/org/codelibs/fess/app/web/admin/user/CreateForm.java index 251b8bf21e40bf049f0de0185c1ba0965a98ed30..b1af32603e00ffbf5d42a92a5ed6a1573593b85c 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/user/CreateForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/user/CreateForm.java @@ -15,9 +15,11 @@ */ package org.codelibs.fess.app.web.admin.user; +import java.util.HashMap; +import java.util.Map; + import javax.validation.constraints.Size; -import org.hibernate.validator.constraints.Email; import org.lastaflute.web.validation.Required; import org.lastaflute.web.validation.theme.conversion.ValidateTypeFailure; @@ -40,114 +42,7 @@ public class CreateForm { @Size(max = 100) public String confirmPassword; - @Size(max = 1000) - public String surname; - - @Size(max = 1000) - public String givenName; - - @Email - @Size(max = 1000) - public String mail; - - @Size(max = 1000) - public String employeeNumber; - - @Size(max = 1000) - public String telephoneNumber; - - @Size(max = 1000) - public String homePhone; - - @Size(max = 1000) - public String homePostalAddress; - - @Size(max = 1000) - public String labeledURI; - - @Size(max = 1000) - public String roomNumber; - - @Size(max = 1000) - public String description; - - @Size(max = 1000) - public String title; - - @Size(max = 1000) - public String pager; - - @Size(max = 1000) - public String street; - - @Size(max = 1000) - public String postalCode; - - @Size(max = 1000) - public String physicalDeliveryOfficeName; - - @Size(max = 1000) - public String destinationIndicator; - - @Size(max = 1000) - public String internationaliSDNNumber; - - @Size(max = 1000) - public String state; - - @Size(max = 1000) - public String employeeType; - - @Size(max = 1000) - public String facsimileTelephoneNumber; - - @Size(max = 1000) - public String postOfficeBox; - - @Size(max = 1000) - public String initials; - - @Size(max = 1000) - public String carLicense; - - @Size(max = 1000) - public String mobile; - - @Size(max = 1000) - public String postalAddress; - - @Size(max = 1000) - public String city; - - @Size(max = 1000) - public String teletexTerminalIdentifier; - - @Size(max = 1000) - public String x121Address; - - @Size(max = 1000) - public String businessCategory; - - @Size(max = 1000) - public String registeredAddress; - - @Size(max = 1000) - public String displayName; - - @Size(max = 1000) - public String preferredLanguage; - - @Size(max = 1000) - public String departmentNumber; - - @ValidateTypeFailure - public Long uidNumber; - - @ValidateTypeFailure - public Long gidNumber; - - @Size(max = 1000) - public String homeDirectory; + public Map attributes = new HashMap<>(); public String[] roles; diff --git a/src/main/java/org/codelibs/fess/es/user/exbhv/GroupBhv.java b/src/main/java/org/codelibs/fess/es/user/exbhv/GroupBhv.java index feb007fffeae87a0c0e26e0e88dbc5006186c1f3..214e92c5c0580fae5aba3519dd0af4a401c3f1cd 100644 --- a/src/main/java/org/codelibs/fess/es/user/exbhv/GroupBhv.java +++ b/src/main/java/org/codelibs/fess/es/user/exbhv/GroupBhv.java @@ -15,11 +15,32 @@ */ package org.codelibs.fess.es.user.exbhv; +import java.util.Map; +import java.util.stream.Collectors; + +import org.codelibs.core.misc.Pair; import org.codelibs.fess.es.user.bsbhv.BsGroupBhv; +import org.codelibs.fess.es.user.exentity.Group; +import org.dbflute.exception.IllegalBehaviorStateException; +import org.dbflute.util.DfTypeUtil; /** * @author FreeGen */ public class GroupBhv extends BsGroupBhv { + @Override + protected RESULT createEntity(Map source, Class entityType) { + try { + final RESULT result = entityType.newInstance(); + result.setName(DfTypeUtil.toString(source.get("name"))); + result.setAttributes(source.entrySet().stream().filter(e -> !"name".equals(e.getKey())) + .map(e -> new Pair<>(e.getKey(), (String) e.getValue())) + .collect(Collectors.toMap(t -> t.getFirst(), t -> t.getSecond()))); + return result; + } catch (InstantiationException | IllegalAccessException e) { + final String msg = "Cannot create a new instance: " + entityType.getName(); + throw new IllegalBehaviorStateException(msg, e); + } + } } diff --git a/src/main/java/org/codelibs/fess/es/user/exbhv/RoleBhv.java b/src/main/java/org/codelibs/fess/es/user/exbhv/RoleBhv.java index 6f1e380ca79b8784f0cf56be546de04d184a5b0c..ae5f6cfb89314ba8c5928c1d018524969fe03761 100644 --- a/src/main/java/org/codelibs/fess/es/user/exbhv/RoleBhv.java +++ b/src/main/java/org/codelibs/fess/es/user/exbhv/RoleBhv.java @@ -15,11 +15,31 @@ */ package org.codelibs.fess.es.user.exbhv; +import java.util.Map; +import java.util.stream.Collectors; + +import org.codelibs.core.misc.Pair; import org.codelibs.fess.es.user.bsbhv.BsRoleBhv; +import org.codelibs.fess.es.user.exentity.Role; +import org.dbflute.exception.IllegalBehaviorStateException; +import org.dbflute.util.DfTypeUtil; /** * @author FreeGen */ public class RoleBhv extends BsRoleBhv { - + @Override + protected RESULT createEntity(Map source, Class entityType) { + try { + final RESULT result = entityType.newInstance(); + result.setName(DfTypeUtil.toString(source.get("name"))); + result.setAttributes(source.entrySet().stream().filter(e -> !"name".equals(e.getKey())) + .map(e -> new Pair<>(e.getKey(), (String) e.getValue())) + .collect(Collectors.toMap(t -> t.getFirst(), t -> t.getSecond()))); + return result; + } catch (InstantiationException | IllegalAccessException e) { + final String msg = "Cannot create a new instance: " + entityType.getName(); + throw new IllegalBehaviorStateException(msg, e); + } + } } diff --git a/src/main/java/org/codelibs/fess/es/user/exbhv/UserBhv.java b/src/main/java/org/codelibs/fess/es/user/exbhv/UserBhv.java index 607099b85636a4d626c7f1fb0e820a9e249ff61b..ac0293d7323ad14a2e9e780b5e369aa87f0ac36d 100644 --- a/src/main/java/org/codelibs/fess/es/user/exbhv/UserBhv.java +++ b/src/main/java/org/codelibs/fess/es/user/exbhv/UserBhv.java @@ -15,11 +15,45 @@ */ package org.codelibs.fess.es.user.exbhv; +import java.util.Map; +import java.util.stream.Collectors; + +import org.codelibs.core.misc.Pair; import org.codelibs.fess.es.user.bsbhv.BsUserBhv; +import org.codelibs.fess.es.user.exentity.User; +import org.dbflute.exception.IllegalBehaviorStateException; +import org.dbflute.util.DfTypeUtil; /** * @author FreeGen */ public class UserBhv extends BsUserBhv { + private static final String ROLES = "roles"; + private static final String GROUPS = "groups"; + private static final String PASSWORD = "password"; + private static final String NAME = "name"; + + @Override + protected RESULT createEntity(Map source, Class entityType) { + try { + final RESULT result = entityType.newInstance(); + result.setName(DfTypeUtil.toString(source.get(NAME))); + result.setPassword(DfTypeUtil.toString(source.get(PASSWORD))); + result.setGroups(toStringArray(source.get(GROUPS))); + result.setRoles(toStringArray(source.get(ROLES))); + result.setAttributes(source.entrySet().stream().filter(e -> isAttribute(e.getKey())) + .map(e -> new Pair<>(e.getKey(), (String) e.getValue())) + .collect(Collectors.toMap(t -> t.getFirst(), t -> t.getSecond()))); + return result; + } catch (InstantiationException | IllegalAccessException e) { + final String msg = "Cannot create a new instance: " + entityType.getName(); + throw new IllegalBehaviorStateException(msg, e); + } + } + + private boolean isAttribute(final String key) { + return !NAME.equals(key) && !PASSWORD.equals(key) && !GROUPS.equals(key) && !ROLES.equals(key); + } + } diff --git a/src/main/java/org/codelibs/fess/es/user/exentity/Group.java b/src/main/java/org/codelibs/fess/es/user/exentity/Group.java index 9968aa1b11a1ecf4c7838077f12daacfcfe2818a..b542c4ab5530589efcdf49668ab3663c16e91f3c 100644 --- a/src/main/java/org/codelibs/fess/es/user/exentity/Group.java +++ b/src/main/java/org/codelibs/fess/es/user/exentity/Group.java @@ -15,6 +15,9 @@ */ package org.codelibs.fess.es.user.exentity; +import java.util.HashMap; +import java.util.Map; + import org.codelibs.fess.es.user.bsentity.BsGroup; /** @@ -24,6 +27,8 @@ public class Group extends BsGroup { private static final long serialVersionUID = 1L; + private Map attributes; + public Long getVersionNo() { return asDocMeta().version(); } @@ -45,4 +50,23 @@ public class Group extends BsGroup { return "Group [name=" + name + "]"; } + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } + + @Override + public Map toSource() { + Map sourceMap = new HashMap<>(); + if (name != null) { + sourceMap.put("name", name); + } + if (attributes != null) { + sourceMap.putAll(attributes); + } + return sourceMap; + } } diff --git a/src/main/java/org/codelibs/fess/es/user/exentity/Role.java b/src/main/java/org/codelibs/fess/es/user/exentity/Role.java index 2943007101b1699de2e311c01ac5b00172893036..fceafaabfbf4d028d7f1e7ca3c4972bd40bb5e04 100644 --- a/src/main/java/org/codelibs/fess/es/user/exentity/Role.java +++ b/src/main/java/org/codelibs/fess/es/user/exentity/Role.java @@ -15,6 +15,9 @@ */ package org.codelibs.fess.es.user.exentity; +import java.util.HashMap; +import java.util.Map; + import org.codelibs.fess.es.user.bsentity.BsRole; /** @@ -24,6 +27,8 @@ public class Role extends BsRole { private static final long serialVersionUID = 1L; + private Map attributes; + public Long getVersionNo() { return asDocMeta().version(); } @@ -44,4 +49,24 @@ public class Role extends BsRole { public String toString() { return "Role [name=" + name + "]"; } + + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } + + @Override + public Map toSource() { + Map sourceMap = new HashMap<>(); + if (name != null) { + sourceMap.put("name", name); + } + if (attributes != null) { + sourceMap.putAll(attributes); + } + return sourceMap; + } } diff --git a/src/main/java/org/codelibs/fess/es/user/exentity/User.java b/src/main/java/org/codelibs/fess/es/user/exentity/User.java index d7df97564a06f53a7d3e90abda3c94eecbbf7636..479ad337f29f59bbf33839ed088118f890586b8e 100644 --- a/src/main/java/org/codelibs/fess/es/user/exentity/User.java +++ b/src/main/java/org/codelibs/fess/es/user/exentity/User.java @@ -20,7 +20,9 @@ import static org.codelibs.core.stream.StreamUtil.stream; import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.codelibs.fess.Constants; import org.codelibs.fess.entity.FessUser; @@ -37,6 +39,8 @@ public class User extends BsUser implements FessUser { private String originalPassword; + private Map attributes; + public Long getVersionNo() { return asDocMeta().version(); } @@ -96,4 +100,32 @@ public class User extends BsUser implements FessUser { return true; } + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } + + @Override + public Map toSource() { + Map sourceMap = new HashMap<>(); + if (name != null) { + sourceMap.put("name", name); + } + if (password != null) { + sourceMap.put("password", password); + } + if (groups != null) { + sourceMap.put("groups", groups); + } + if (roles != null) { + sourceMap.put("roles", roles); + } + if (attributes != null) { + sourceMap.putAll(attributes); + } + return sourceMap; + } } diff --git a/src/main/webapp/WEB-INF/view/admin/group/admin_group_details.jsp b/src/main/webapp/WEB-INF/view/admin/group/admin_group_details.jsp index 9067997023c685f9c18a1dbe71006ba8b08d5692..ee496332a97b6a61e4371cbcc8dc4d8ca349d201 100644 --- a/src/main/webapp/WEB-INF/view/admin/group/admin_group_details.jsp +++ b/src/main/webapp/WEB-INF/view/admin/group/admin_group_details.jsp @@ -54,7 +54,7 @@ - ${f:h(gidNumber)} + ${f:h(attributes.gidNumber)} diff --git a/src/main/webapp/WEB-INF/view/admin/group/admin_group_edit.jsp b/src/main/webapp/WEB-INF/view/admin/group/admin_group_edit.jsp index 488807f7184d5c0c2dee8398c7b986da42823340..1041663cd6600eb18669ca50f8b842ff3975d09f 100644 --- a/src/main/webapp/WEB-INF/view/admin/group/admin_group_edit.jsp +++ b/src/main/webapp/WEB-INF/view/admin/group/admin_group_edit.jsp @@ -58,8 +58,8 @@
- - + +
diff --git a/src/main/webapp/WEB-INF/view/admin/user/admin_user_details.jsp b/src/main/webapp/WEB-INF/view/admin/user/admin_user_details.jsp index 1a7ac2fe1528cd8bd3212822da9c3e3174f5ff05..8d00607d93fb4e0d23b2fb13c95dc06d2c145f65 100644 --- a/src/main/webapp/WEB-INF/view/admin/user/admin_user_details.jsp +++ b/src/main/webapp/WEB-INF/view/admin/user/admin_user_details.jsp @@ -52,148 +52,148 @@ - ${f:h(surname)} + ${f:h(attributes.surname)} - ${f:h(givenName)} + ${f:h(attributes.givenName)} - ${f:h(mail)} + ${f:h(attributes.mail)} - ${f:h(employeeNumber)} + ${f:h(attributes.employeeNumber)} - ${f:h(telephoneNumber)} + ${f:h(attributes.telephoneNumber)} - ${f:h(homePhone)} + ${f:h(attributes.homePhone)} - ${f:h(homePostalAddress)} + ${f:h(attributes.homePostalAddress)} - ${f:h(labeledURI)} + ${f:h(attributes.labeledURI)} - ${f:h(roomNumber)} + ${f:h(attributes.roomNumber)} - ${f:h(description)} + ${f:h(attributes.description)} - ${f:h(title)} + ${f:h(attributes.title)} - ${f:h(pager)} + ${f:h(attributes.pager)} - ${f:h(street)} + ${f:h(attributes.street)} - ${f:h(postalCode)} + ${f:h(attributes.postalCode)} - ${f:h(physicalDeliveryOfficeName)} + ${f:h(attributes.physicalDeliveryOfficeName)} - ${f:h(destinationIndicator)} + ${f:h(attributes.destinationIndicator)} - ${f:h(internationaliSDNNumber)} + ${f:h(attributes.internationaliSDNNumber)} - ${f:h(state)} + ${f:h(attributes.state)} - ${f:h(facsimileTelephoneNumber)} + ${f:h(attributes.facsimileTelephoneNumber)} - ${f:h(facsimileTelephoneNumber)} + ${f:h(attributes.facsimileTelephoneNumber)} - ${f:h(postOfficeBox)} + ${f:h(attributes.postOfficeBox)} - ${f:h(initials)} + ${f:h(attributes.initials)} - ${f:h(carLicense)} + ${f:h(attributes.carLicense)} - ${f:h(mobile)} + ${f:h(attributes.mobile)} - ${f:h(postalAddress)} + ${f:h(attributes.postalAddress)} - ${f:h(city)} + ${f:h(attributes.city)} - ${f:h(teletexTerminalIdentifier)} + ${f:h(attributes.teletexTerminalIdentifier)} - ${f:h(x121Address)} + ${f:h(attributes.x121Address)} - ${f:h(businessCategory)} + ${f:h(attributes.businessCategory)} - ${f:h(registeredAddress)} + ${f:h(attributes.registeredAddress)} - ${f:h(displayName)} + ${f:h(attributes.displayName)} - ${f:h(preferredLanguage)} + ${f:h(attributes.preferredLanguage)} - ${f:h(departmentNumber)} + ${f:h(attributes.departmentNumber)} - ${f:h(uidNumber)} + ${f:h(attributes.uidNumber)} - ${f:h(gidNumber)} + ${f:h(attributes.gidNumber)} - ${f:h(homeDirectory)} + ${f:h(attributes.homeDirectory)} diff --git a/src/main/webapp/WEB-INF/view/admin/user/admin_user_edit.jsp b/src/main/webapp/WEB-INF/view/admin/user/admin_user_edit.jsp index 87fbf449488e961912d3dfb41d33b7fc336b71f7..e8f4f40a5299b5ba635b29b198096c2b6213a233 100644 --- a/src/main/webapp/WEB-INF/view/admin/user/admin_user_edit.jsp +++ b/src/main/webapp/WEB-INF/view/admin/user/admin_user_edit.jsp @@ -77,24 +77,24 @@
- - + +
- - + +
- - + +
@@ -102,264 +102,264 @@
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +
- - + +