/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.geofence.gui.server.service.impl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import org.geoserver.geofence.gui.client.ApplicationException; import org.geoserver.geofence.gui.client.model.GSUserModel; import org.geoserver.geofence.gui.client.model.UserGroupModel; import org.geoserver.geofence.gui.client.model.data.UserLimitsInfoModel; import org.geoserver.geofence.gui.client.model.data.rpc.RpcPageLoadResult; import org.geoserver.geofence.gui.server.service.IGsUsersManagerService; import org.geoserver.geofence.gui.service.GeofenceRemoteService; import org.geoserver.geofence.services.dto.ShortUser; import org.geoserver.geofence.services.exception.NotFoundServiceEx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.extjs.gxt.ui.client.data.PagingLoadResult; import org.geoserver.geofence.gui.client.model.UsernameModel; /** * The Class GsUsersManagerServiceImpl. */ @Component("gsUsersManagerServiceGWT") public class GsUsersManagerServiceImpl implements IGsUsersManagerService { /** The logger. */ private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** The geofence remote service. */ @Autowired private GeofenceRemoteService geofenceRemoteService; /* * (non-Javadoc) * * @see * org.geoserver.geofence.gui.server.service.IFeatureService#loadFeature(com.extjs.gxt.ui. * client.data.PagingLoadConfig, java.lang.String) */ public PagingLoadResult<GSUserModel> getGsUsers(int offset, int limit, boolean full) throws ApplicationException { int start = offset; List<GSUserModel> usersListDTO = new ArrayList<GSUserModel>(); if (full) { GSUserModel all_user = new GSUserModel(); all_user.setId(-1); all_user.setName("*"); all_user.setFullName("*"); all_user.setEnabled(true); all_user.setAdmin(false); all_user.setEmailAddress(null); all_user.setDateCreation(null); usersListDTO.add(all_user); } long usersCount = geofenceRemoteService.getUserAdminService().getCount(null) + 1; Long t = new Long(usersCount); int page = (start == 0) ? start : (start / limit); List<ShortUser> usersList = geofenceRemoteService.getUserAdminService().getList(null, page, limit); if (usersList == null) { if (logger.isErrorEnabled()) { logger.error("No user found on server"); } throw new ApplicationException("No user found on server"); } for (ShortUser short_usr : usersList) { org.geoserver.geofence.core.model.GSUser remote_user; try { remote_user = geofenceRemoteService.getUserAdminService().getFull(short_usr.getId()); } catch (NotFoundServiceEx e) { if (logger.isErrorEnabled()) { logger.error("Details for profile " + short_usr.getName() + " not found on Server!"); } throw new ApplicationException(e); } GSUserModel local_user = new GSUserModel(); local_user.setId(short_usr.getId()); local_user.setName(remote_user.getName()); local_user.setFullName(remote_user.getFullName()); local_user.setEnabled(remote_user.getEnabled()); local_user.setAdmin(remote_user.isAdmin()); local_user.setEmailAddress(remote_user.getEmailAddress()); local_user.setDateCreation(remote_user.getDateCreation()); local_user.setPassword(remote_user.getPassword()); /*logger.error("TODO: profile refactoring!!!");*/ //org.geoserver.geofence.core.model.UserGroup remote_profile = remote_user.getGroups().iterator().next(); for(org.geoserver.geofence.core.model.UserGroup remote_profile : remote_user.getGroups()) { UserGroupModel local_group = new UserGroupModel(); local_group.setId(remote_profile.getId()); local_group.setName(remote_profile.getName()); local_group.setDateCreation(remote_profile.getDateCreation()); local_group.setEnabled(remote_profile.getEnabled()); local_user.getUserGroups().add(local_group); } usersListDTO.add(local_user); } return new RpcPageLoadResult<GSUserModel>(usersListDTO, offset, t.intValue()); } public PagingLoadResult<UsernameModel> getGsUsernames(int offset, int limit, boolean full) throws ApplicationException { int start = offset; List<UsernameModel> returnList = new ArrayList<UsernameModel>(); logger.info("getGsUsernames()"); if (full) { UsernameModel all_user = new UsernameModel(); all_user.setUsername("*"); returnList.add(all_user); } long usersCount = geofenceRemoteService.getUserAdminService().getCount(null) + 1; logger.info("getGsUsernames(): count " + usersCount); Long t = new Long(usersCount); int page = (start == 0) ? start : (start / limit); List<ShortUser> usersList = geofenceRemoteService.getUserAdminService().getList(null, page, limit); if (usersList == null) { logger.error("No user found on server"); throw new ApplicationException("No user found on server"); } for (ShortUser user : usersList) { UsernameModel username = new UsernameModel(user.getName()); returnList.add(username); } logger.info("getGsUsernames(): returning " + returnList.size() + " users" ); return new RpcPageLoadResult<UsernameModel>(returnList, offset, t.intValue()); } /* (non-Javadoc) * @see org.geoserver.geofence.gui.server.service.IGsUsersManagerService#saveUser(org.geoserver.geofence.gui.client.model.GSUser) */ public void saveUser(GSUserModel user) throws ApplicationException { org.geoserver.geofence.core.model.GSUser remote_user = null; if (user.getId() >= 0) { try { remote_user = geofenceRemoteService.getUserAdminService().get(user.getId()); copyUser(user, remote_user); geofenceRemoteService.getUserAdminService().update(remote_user); } catch (NotFoundServiceEx e) { logger.error(e.getLocalizedMessage(), e.getCause()); throw new ApplicationException(e.getLocalizedMessage(), e.getCause()); } } else { try { remote_user = new org.geoserver.geofence.core.model.GSUser(); copyUser(user, remote_user); geofenceRemoteService.getUserAdminService().insert(remote_user); } catch (NotFoundServiceEx e) { logger.error(e.getLocalizedMessage(), e.getCause()); throw new ApplicationException(e.getLocalizedMessage(), e.getCause()); } } } /** * @param profile * @param remote_user * @throws ResourceNotFoundFault */ private void copyUser(GSUserModel user, org.geoserver.geofence.core.model.GSUser remote_user) throws NotFoundServiceEx { remote_user.setName(user.getName()); remote_user.setFullName(user.getFullName()); remote_user.setEmailAddress(user.getEmailAddress()); remote_user.setEnabled(user.isEnabled()); remote_user.setAdmin(user.isAdmin()); remote_user.setPassword(user.getPassword()); remote_user.setDateCreation(user.getDateCreation()); Set<org.geoserver.geofence.core.model.UserGroup> remote_groups = new HashSet<org.geoserver.geofence.core.model.UserGroup>(); for(UserGroupModel group : user.getUserGroups()) { org.geoserver.geofence.core.model.UserGroup remote_group = geofenceRemoteService.getUserGroupAdminService().get(group.getId()); logger.error("TODO: profile refactoring!!!"); remote_groups.add(remote_group); } remote_user.setGroups(remote_groups); } /* (non-Javadoc) * @see org.geoserver.geofence.gui.server.service.IGsUsersManagerService#deleteUser(org.geoserver.geofence.gui.client.model.GSUser) */ public void deleteUser(GSUserModel user) throws ApplicationException { org.geoserver.geofence.core.model.GSUser remote_user = null; try { remote_user = geofenceRemoteService.getUserAdminService().get(user.getId()); geofenceRemoteService.getUserAdminService().delete(remote_user.getId()); } catch (NotFoundServiceEx e) { logger.error(e.getLocalizedMessage(), e.getCause()); throw new ApplicationException(e.getLocalizedMessage(), e.getCause()); } } /* (non-Javadoc) * @see org.geoserver.geofence.gui.server.service.IGsUsersManagerService#getUserLimitsInfo(org.geoserver.geofence.gui.client.model.GSUser) */ public UserLimitsInfoModel getUserLimitsInfo(GSUserModel user) throws ApplicationException { Long userId = user.getId(); org.geoserver.geofence.core.model.GSUser gsUser = null; UserLimitsInfoModel userLimitInfo = null; logger.error("TODO: allowed area removed from base model!!!"); try { gsUser = geofenceRemoteService.getUserAdminService().get(userId); if (gsUser != null) { userLimitInfo = new UserLimitsInfoModel(); userLimitInfo.setUserId(userId); // MultiPolygon the_geom = gsUser.getAllowedArea(); // // if (the_geom != null) // { // userLimitInfo.setAllowedArea(the_geom.toText()); // userLimitInfo.setSrid(String.valueOf(the_geom.getSRID())); // } // else // { userLimitInfo.setAllowedArea(null); userLimitInfo.setSrid(null); // } } } catch (NotFoundServiceEx e) { logger.error(e.getMessage(), e); throw new ApplicationException(e.getMessage(), e); } return userLimitInfo; } /* (non-Javadoc) * @see org.geoserver.geofence.gui.server.service.IGsUsersManagerService#saveUserLimitsInfo(org.geoserver.geofence.gui.client.model.GSUser) */ public UserLimitsInfoModel saveUserLimitsInfo(UserLimitsInfoModel userLimitInfo) throws ApplicationException { logger.error("TODO: allowed area removed from base model!!!"); Long userId = userLimitInfo.getUserId(); org.geoserver.geofence.core.model.GSUser gsUser = null; try { gsUser = geofenceRemoteService.getUserAdminService().get(userId); // String allowedArea = userLimitInfo.getAllowedArea(); // // if (allowedArea != null) // { // WKTReader wktReader = new WKTReader(); // MultiPolygon the_geom = (MultiPolygon) wktReader.read(allowedArea); // the_geom.setSRID(Integer.valueOf(userLimitInfo.getSrid()).intValue()); // gsUser.setAllowedArea(the_geom); // } // else // { // gsUser.setAllowedArea(null); // } // // geofenceRemoteService.getUserAdminService().update(gsUser); } catch (NotFoundServiceEx e) { logger.error(e.getMessage(), e); throw new ApplicationException(e.getMessage(), e); } // catch (ParseException e) // { // logger.error(e.getMessage(), e); // throw new ApplicationException(e.getMessage(), e); // } return userLimitInfo; } /* (non-Javadoc) * @see org.geoserver.geofence.gui.server.service.IGsUsersManagerService#activateUserGroupTabs() */ public boolean activateUserGroupTabs() throws ApplicationException { Properties property = new Properties(); InputStream in = getClass().getResourceAsStream("activateTabs.properties"); try { property.load(in); String outcome = property.getProperty("activateUserGroupTab"); if(outcome.equalsIgnoreCase("true")){ return true; } } catch (IOException e) { // TODO Auto-generated catch block logger.error(e.getMessage(), e); throw new ApplicationException(e.getMessage(), e); } finally{ try { in.close(); } catch (IOException e) { logger.error(e.getMessage(), e); throw new ApplicationException(e.getMessage(), e); } } return false; } }