/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpuserreg.apsadmin.config;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.services.authorization.authorizator.IApsAuthorityManager;
import com.agiletec.aps.system.services.group.Group;
import com.agiletec.aps.system.services.group.IGroupManager;
import com.agiletec.aps.system.services.lang.Lang;
import com.agiletec.aps.system.services.page.IPage;
import com.agiletec.aps.system.services.page.IPageManager;
import com.agiletec.aps.system.services.role.IRoleManager;
import com.agiletec.aps.system.services.role.Role;
import com.agiletec.apsadmin.system.BaseAction;
import com.agiletec.apsadmin.util.SelectItem;
import com.agiletec.plugins.jpmail.aps.services.mail.IMailManager;
import com.agiletec.plugins.jpuserreg.aps.system.services.userreg.IUserRegManager;
import com.agiletec.plugins.jpuserreg.aps.system.services.userreg.model.IUserRegConfig;
import com.agiletec.plugins.jpuserreg.aps.system.services.userreg.model.Template;
import com.agiletec.plugins.jpuserreg.aps.system.services.userreg.model.UserRegConfig;
public class UserRegConfigAction extends BaseAction implements IUserRegConfigAction {
@Override
public void validate() {
super.validate();
try {
IUserRegConfig config = this.getConfig();
this.checkTemplates(config.getActivationTemplates(), "config.activationTemplates");
this.checkTemplates(config.getReactivationTemplates(), "config.reactivationTemplates");
this.checkAuthorities(config.getRoles(), (IApsAuthorityManager) this.getRoleManager(), "config.roles");
this.checkAuthorities(config.getGroups(), (IApsAuthorityManager) this.getGroupManager(), "config.groups");
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "validate", "Error during validation");
this.addActionError(this.getText("jpuserreg.errors.genericError"));
}
}
private void checkTemplates(Map<String, Template> templates, String fieldName) {
Iterator<Lang> langs = this.getLangManager().getLangs().iterator();
while (langs.hasNext()) {
Lang lang = langs.next();
Template template = templates.get(lang.getCode());
if (template==null) {
this.addFieldError(fieldName, this.getText("jpuserreg.errors.templates.notValued", new String[] { this.getText(fieldName), lang.getDescr() }));
} else {
String subject = template.getSubject();
if (subject==null || subject.trim().length()==0) {
this.addFieldError(fieldName, this.getText("jpuserreg.errors.templates.subject.notValued", new String[] { this.getText(fieldName), lang.getDescr() }));
}
String body = template.getBody();
if (body==null || body.trim().length()==0) {
this.addFieldError(fieldName, this.getText("jpuserreg.errors.templates.body.notValued", new String[] { this.getText(fieldName), lang.getDescr() }));
}
}
}
}
private void checkAuthorities(Collection<String> authorities, IApsAuthorityManager authorityManager, String fieldName) {
if (authorities!=null) {
Iterator<String> authIter = authorities.iterator();
while (authIter.hasNext()) {
String authName = authIter.next();
if (authorityManager.getAuthority(authName)==null) {
this.addFieldError(fieldName, this.getText("jpuserreg.errors.authority.notFound", new String[] { this.getText(fieldName), authName }));
}
}
}
}
/*
* Used in validation xml
*/
public boolean checkPage(String pageCode) {
return this.getPageManager().getPage(pageCode)!=null;
}
/*
* Used in validation xml
*/
public boolean checkSenderCode() {
boolean existsSender = false;
try {
String senderCode = this.getConfig().getEMailSenderCode();
existsSender = null!=this.getMailManager().getMailConfig().getSender(senderCode);
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "Error loading mail configuration");
}
return existsSender;
}
@Override
public String edit() {
try {
IUserRegConfig config = this.getUserRegManager().getUserRegConfig();
this.setConfig(config);
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "edit");
return FAILURE;
}
return SUCCESS;
}
@Override
public String save() {
try {
this.getUserRegManager().saveUserRegConfig(this.getConfig());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "edit");
return FAILURE;
}
return SUCCESS;
}
@Override
public String addGroup() {
try {
String groupName = this.getGroupName();
Collection<String> groups = this.getConfig().getGroups();
if (null!=groupName && !groups.contains(groupName) && null!=this.getGroupManager().getGroup(groupName)) {
groups.add(groupName);
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "addGroup");
return FAILURE;
}
return SUCCESS;
}
@Override
public String removeGroup() {
try {
this.getConfig().getGroups().remove(this.getGroupName());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "removeGroup");
return FAILURE;
}
return SUCCESS;
}
@Override
public String addRole() {
try {
String roleName = this.getRoleName();
Collection<String> roles = this.getConfig().getRoles();
if (null!=roleName && !roles.contains(roleName) && null!=this.getRoleManager().getRole(roleName)) {
roles.add(roleName);
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "addRole");
return FAILURE;
}
return SUCCESS;
}
@Override
public String removeRole() {
try {
this.getConfig().getRoles().remove(this.getRoleName());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "removeRoles");
return FAILURE;
}
return SUCCESS;
}
public List<SelectItem> getMailSenders() {
try {
Map<String, String> senders = this.getMailManager().getMailConfig().getSenders();
List<SelectItem> items = new ArrayList<SelectItem>(senders.size());
Iterator<String> iter = senders.keySet().iterator();
while (iter.hasNext()) {
String string = (String) iter.next();
SelectItem item = new SelectItem(string, senders.get(string));
items.add(item);
}
return items;
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getMailSenders");
throw new RuntimeException(t);
}
}
public List<Role> getSystemRoles() {
return this.getRoleManager().getRoles();
}
public List<Group> getSystemGroups() {
return this.getGroupManager().getGroups();
}
public List<IPage> getPages() {
if (this._pages==null) {
this._pages = new ArrayList<IPage>();
IPage root = this.getPageManager().getRoot();
this.addPages(root, this._pages);
}
return this._pages;
}
protected void addPages(IPage page, List<IPage> pages) {
pages.add(page);
IPage[] children = page.getChildren();
for (int i=0; i<children.length; i++) {
this.addPages(children[i], pages);
}
}
public List<Lang> getLangs() {
return this.getLangManager().getLangs();
}
public IUserRegConfig getConfig() {
return _config;
}
public void setConfig(IUserRegConfig config) {
this._config = config;
}
public String getGroupName() {
return _groupName;
}
public void setGroupName(String groupName) {
this._groupName = groupName;
}
public String getRoleName() {
return _roleName;
}
public void setRoleName(String roleName) {
this._roleName = roleName;
}
protected IUserRegManager getUserRegManager() {
return _userRegManager;
}
public void setUserRegManager(IUserRegManager userRegManager) {
this._userRegManager = userRegManager;
}
protected IMailManager getMailManager() {
return _mailManager;
}
public void setMailManager(IMailManager mailManager) {
this._mailManager = mailManager;
}
protected IPageManager getPageManager() {
return _pageManager;
}
public void setPageManager(IPageManager pageManager) {
this._pageManager = pageManager;
}
protected IGroupManager getGroupManager() {
return _groupManager;
}
public void setGroupManager(IGroupManager groupManager) {
this._groupManager = groupManager;
}
protected IRoleManager getRoleManager() {
return _roleManager;
}
public void setRoleManager(IRoleManager roleManager) {
this._roleManager = roleManager;
}
private IUserRegConfig _config = new UserRegConfig();
private String _groupName;
private String _roleName;
private List<IPage> _pages;
private IUserRegManager _userRegManager;
private IMailManager _mailManager;
private IPageManager _pageManager;
private IGroupManager _groupManager;
private IRoleManager _roleManager;
}