/** * geo-platform * Rich webgis framework * http://geo-platform.org * ==================================================================== * <p> * Copyright (C) 2008-2017 geoSDI Group (CNR IMAA - Potenza - ITALY). * <p> * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program 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 General Public License * for more details. You should have received a copy of the GNU General * Public License along with this program. If not, see http://www.gnu.org/licenses/ * <p> * ==================================================================== * <p> * Linking this library statically or dynamically with other modules is * making a combined work based on this library. Thus, the terms and * conditions of the GNU General Public License cover the whole combination. * <p> * As a special exception, the copyright holders of this library give you permission * to link this library with independent modules to produce an executable, regardless * of the license terms of these independent modules, and to copy and distribute * the resulting executable under terms of your choice, provided that you also meet, * for each linked independent module, the terms and conditions of the license of * that module. An independent module is a module which is not derived from or * based on this library. If you modify this library, you may extend this exception * to your version of the library, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ package org.geosdi.geoplatform.gui.server.service.impl; import com.extjs.gxt.ui.client.data.BasePagingLoadResult; import com.extjs.gxt.ui.client.data.PagingLoadConfig; import com.google.common.collect.Lists; import it.geosolutions.geoserver.rest.GeoServerRESTReader; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.IOUtils; import org.geosdi.geoplatform.core.model.GPAccount; import org.geosdi.geoplatform.core.model.GPFolder; import org.geosdi.geoplatform.core.model.GPProject; import org.geosdi.geoplatform.core.model.GPUser; import org.geosdi.geoplatform.exception.IllegalParameterFault; import org.geosdi.geoplatform.exception.ResourceNotFoundFault; import org.geosdi.geoplatform.gui.client.model.composite.TreeElement; import org.geosdi.geoplatform.gui.client.model.memento.save.bean.MementoSaveAddedFolder; import org.geosdi.geoplatform.gui.client.model.memento.save.bean.MementoSaveCheck; import org.geosdi.geoplatform.gui.client.model.memento.save.bean.MementoSaveDragDrop; import org.geosdi.geoplatform.gui.client.model.memento.save.bean.MementoSaveRemove; import org.geosdi.geoplatform.gui.client.model.memento.save.storage.MementoLayerOriginalProperties; import org.geosdi.geoplatform.gui.client.model.projects.GPClientProject; import org.geosdi.geoplatform.gui.client.model.projects.GPShortClientProject; import org.geosdi.geoplatform.gui.configuration.map.client.layer.GPFolderClientInfo; import org.geosdi.geoplatform.gui.configuration.map.client.layer.IGPFolderElements; import org.geosdi.geoplatform.gui.global.GeoPlatformException; import org.geosdi.geoplatform.gui.model.tree.GPLayerAttributes; import org.geosdi.geoplatform.gui.model.user.GPSimpleUser; import org.geosdi.geoplatform.gui.server.ILayerService; import org.geosdi.geoplatform.gui.server.SessionUtility; import org.geosdi.geoplatform.gui.server.converter.DTOMementoConverter; import org.geosdi.geoplatform.gui.server.service.converter.DTOLayerConverter; import org.geosdi.geoplatform.gui.shared.GPMessageCommandType; import org.geosdi.geoplatform.gui.utility.GPSessionTimeout; import org.geosdi.geoplatform.request.PaginatedSearchRequest; import org.geosdi.geoplatform.request.PutAccountsProjectRequest; import org.geosdi.geoplatform.request.SearchRequest; import org.geosdi.geoplatform.request.folder.InsertFolderRequest; import org.geosdi.geoplatform.request.folder.WSAddFolderAndTreeModificationsRequest; import org.geosdi.geoplatform.request.folder.WSDDFolderAndTreeModifications; import org.geosdi.geoplatform.request.folder.WSDeleteFolderAndTreeModifications; import org.geosdi.geoplatform.request.layer.WSDDLayerAndTreeModificationsRequest; import org.geosdi.geoplatform.request.layer.WSDeleteLayerAndTreeModificationsRequest; import org.geosdi.geoplatform.request.project.CloneProjectRequest; import org.geosdi.geoplatform.request.project.SaveProjectRequest; import org.geosdi.geoplatform.responce.LayerAttribute; import org.geosdi.geoplatform.response.*; import org.geosdi.geoplatform.response.collection.GPWebServiceMapData; import org.geosdi.geoplatform.response.collection.TreeFolderElements; import org.geosdi.geoplatform.services.GPPublisherService; import org.geosdi.geoplatform.services.GPTrackingService; import org.geosdi.geoplatform.services.GeoPlatformService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; /** * @author Nazzareno Sileno - CNR IMAA geoSDI Group * @email nazzareno.sileno@geosdi.org */ @Service("layerService") public class LayerService implements ILayerService { private static final Logger logger = LoggerFactory.getLogger( LayerService.class); // private GeoPlatformService geoPlatformServiceClient; // private GPTrackingService geoPlatformTrackingClient; // private GPPublisherService geoPlatformPublishClient; // @Autowired private DTOLayerConverter dtoLayerConverter; @Autowired private DTOMementoConverter dtoMementoConverter; // @Autowired private SessionUtility sessionUtility; // private GeoServerRESTReader sharedRestReader; @Autowired public void setRestReader( @Qualifier(value = "sharedRestReader") GeoServerRESTReader sharedRestReader) { this.sharedRestReader = sharedRestReader; } /** * @param geoPlatformServiceClient the geoPlatformServiceClient to set */ @Autowired public void setGeoPlatformServiceClient( @Qualifier("geoPlatformServiceClient") GeoPlatformService geoPlatformServiceClient) { this.geoPlatformServiceClient = geoPlatformServiceClient; } /** * @param geoPlatformTrackingClient the geoPlatformTrackingClient to set */ @Autowired public void setGeoPlatformTrackingClient( @Qualifier("geoPlatformTrackingClient") GPTrackingService geoPlatformTrackingClient) { this.geoPlatformTrackingClient = geoPlatformTrackingClient; } /** * @param geoPlatformPublisherClient the geoPlatformPublisherClient to set */ @Autowired public void setGeoPlatformPublishClient( @Qualifier("geoPlatformPublishClient") GPPublisherService geoPlatformPublishClient) { this.geoPlatformPublishClient = geoPlatformPublishClient; } @Override public GPClientProject loadDefaultProjectElements( HttpServletRequest httpServletRequest) throws GeoPlatformException { Long projectId = null; GPAccount account; try { account = this.sessionUtility.getLoggedAccount(httpServletRequest); projectId = this.sessionUtility.getDefaultProject(httpServletRequest); } catch (GPSessionTimeout timeout) { // System.out.println("Session timeout on loadDefaultProjectElements"); throw new GeoPlatformException(timeout); } ProjectDTO projectDTO = null; try { GPProject project = this.geoPlatformServiceClient.getProjectDetail( projectId); if (account.isLoadExpandedFolders() || project.isShared()) { projectDTO = this.geoPlatformServiceClient.getProjectWithExpandedFolders( projectId, account.getId()); } else { projectDTO = geoPlatformServiceClient. getProjectWithRootFolders(projectId, account.getId()); } } catch (ResourceNotFoundFault rnf) { logger.error("Returning no elements: " + rnf); } return this.dtoLayerConverter.convertToGPClientProject(projectDTO); } @Override public GPShortClientProject loadRootElements(Long projectID, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { ShortProjectDTO shortProjectDTO = this.geoPlatformServiceClient.getShortProject(projectID); return new GPShortClientProject(shortProjectDTO.getVersion(), shortProjectDTO.getNumberOfElements()); } catch (ResourceNotFoundFault ex) { ex.printStackTrace(); throw new GeoPlatformException(ex.getMessage()); } } @Override public ArrayList<GPFolderClientInfo> loadProject(long projectId, HttpServletRequest httpServletRequest) throws GeoPlatformException { GPAccount account; try { account = this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } List<FolderDTO> folderList = null; try { ProjectDTO project; if (account.isLoadExpandedFolders()) { project = geoPlatformServiceClient.getProjectWithExpandedFolders( projectId, account.getId()); } else { project = geoPlatformServiceClient. getProjectWithRootFolders(projectId, account.getId()); } folderList = project.getRootFolders(); } catch (ResourceNotFoundFault rnf) { logger.debug("Returning no elements: " + rnf); } return this.dtoLayerConverter.convertOnlyFolders(folderList); } @Override public ArrayList<IGPFolderElements> loadFolderElements(Long folderID, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } TreeFolderElements folderElements = geoPlatformServiceClient.getChildrenElements( folderID).getFolderElements(); logger.debug("\n\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ TreeFolderElements " + "{}\n\n", folderElements); ArrayList<IGPFolderElements> elementsToReturn = Lists.newArrayListWithCapacity( 0); try { elementsToReturn = this.dtoLayerConverter.convertFolderElements( folderElements); } catch (Exception e) { logger.error("Returning no elements: " + e); } return elementsToReturn; } @Override public Long saveFolderForUser(String folderName, int position, int numberOfDescendants, boolean isChecked, HttpServletRequest httpServletRequest) throws GeoPlatformException { GPFolder folder = new GPFolder(); folder.setName(folderName); folder.setPosition(position); folder.setShared(false); Long projectId; try { projectId = this.sessionUtility.getDefaultProject(httpServletRequest); this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } folder.setNumberOfDescendants(numberOfDescendants); folder.setChecked(isChecked); Long savedFolderId = null; try { savedFolderId = this.geoPlatformServiceClient.insertFolder( new InsertFolderRequest(projectId, folder)); } catch (IllegalParameterFault ilg) { logger.error( "Error on LayerService: " + ilg); throw new GeoPlatformException( "Parameter incorrect on saveFoldeForUser"); } catch (ResourceNotFoundFault rnff) { logger.error("Error on LayerService: " + rnff); throw new GeoPlatformException(rnff); } return savedFolderId; } @Override public Long saveFolder(Long idParentFolder, String folderName, int position, int numberOfDescendants, boolean isChecked, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } GPFolder gpFolder = null; try { gpFolder = geoPlatformServiceClient.getFolderDetail(idParentFolder); } catch (Exception e) { logger.error("LayerService", "Ubable to load Folder with ID : " + idParentFolder); throw new GeoPlatformException( "The Folder with ID : " + idParentFolder + " was deleted."); } GPFolder folder = new GPFolder(); folder.setName(folderName); folder.setPosition(position); folder.setShared(false); folder.setParent(gpFolder); folder.setNumberOfDescendants(numberOfDescendants); folder.setChecked(isChecked); Long projectId; // folder.setProject(project); Long savedFolderId = null; try { projectId = this.sessionUtility.getDefaultProject(httpServletRequest); savedFolderId = this.geoPlatformServiceClient.insertFolder( new InsertFolderRequest(projectId, folder)); } catch (IllegalParameterFault ilg) { logger.error( "Error on LayerService: " + ilg); throw new GeoPlatformException("Parameter incorrect on saveFolde"); } catch (ResourceNotFoundFault rnff) { logger.error( "Error on LayerService: " + rnff); throw new GeoPlatformException(rnff); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } return savedFolderId; } @Override public void deleteElement(Long id, TreeElement elementType, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } switch (elementType) { case FOLDER: this.deleteFolder(id); break; case LAYER: this.deleteLayer(id); break; } } @Override public Long saveAddedFolderAndTreeModifications( MementoSaveAddedFolder memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } GPFolder gpFolder = this.dtoLayerConverter.convertMementoFolder( memento.getAddedFolder()); GPWebServiceMapData map = this.dtoMementoConverter.convertDescendantMap( memento.getWsDescendantMap()); Long idSavedFolder = null; try { Long projectId = this.sessionUtility.getDefaultProject( httpServletRequest); idSavedFolder = this.geoPlatformServiceClient.saveAddedFolderAndTreeModifications( new WSAddFolderAndTreeModificationsRequest(projectId, memento.getAddedFolder().getIdParent(), gpFolder, map)); } catch (ResourceNotFoundFault ex) { this.logger.error("Failed to save folder on LayerService: " + ex); throw new GeoPlatformException(ex); } catch (IllegalParameterFault ilg) { logger.error( "Error on LayerService: " + ilg); throw new GeoPlatformException( "Parameter incorrect on saveAddedFolderAndTreeModifications"); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } return idSavedFolder; } @Override @Deprecated public boolean saveDeletedFolderAndTreeModifications( MementoSaveRemove memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } GPWebServiceMapData map = this.dtoMementoConverter.convertDescendantMap( memento.getWsDescendantMap()); boolean result = false; try { result = this.geoPlatformServiceClient.saveDeletedFolderAndTreeModifications( new WSDeleteFolderAndTreeModifications( memento.getIdBaseElement(), map)); } catch (ResourceNotFoundFault ex) { this.logger.error("Failed to delete folder on LayerService: " + ex); throw new GeoPlatformException(ex); } return result; } @Override @Deprecated public boolean saveDeletedLayerAndTreeModifications( MementoSaveRemove memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } GPWebServiceMapData map = this.dtoMementoConverter.convertDescendantMap( memento.getWsDescendantMap()); boolean result = false; try { result = this.geoPlatformServiceClient.saveDeletedLayerAndTreeModifications( new WSDeleteLayerAndTreeModificationsRequest( memento.getIdBaseElement(), map)); } catch (ResourceNotFoundFault ex) { this.logger.error("Failed to delete layer on LayerService: " + ex); throw new GeoPlatformException(ex); } return result; } @Override public boolean saveDragAndDropLayerAndTreeModifications( MementoSaveDragDrop memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { GPWebServiceMapData map = this.dtoMementoConverter.convertDescendantMap( memento.getWsDescendantMap()); boolean result = false; try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } try { result = this.geoPlatformServiceClient.saveDragAndDropLayerAndTreeModifications( new WSDDLayerAndTreeModificationsRequest( memento.getIdBaseElement(), memento.getIdNewParent(), memento.getNewZIndex(), map)); } catch (ResourceNotFoundFault ex) { this.logger.error( "Failed to save layer drag&drop on LayerService: " + ex); throw new GeoPlatformException(ex); } catch (IllegalParameterFault ilg) { logger.error( "Error on LayerService: " + ilg); throw new GeoPlatformException( "Parameter incorrect on saveDragAndDropLayerAndTreeModifications"); } return result; } @Override public boolean saveDragAndDropFolderAndTreeModifications( MementoSaveDragDrop memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { GPWebServiceMapData map = this.dtoMementoConverter.convertDescendantMap( memento.getWsDescendantMap()); boolean result = false; try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } try { result = this.geoPlatformServiceClient.saveDragAndDropFolderAndTreeModifications( new WSDDFolderAndTreeModifications( memento.getIdBaseElement(), memento.getIdNewParent(), memento.getNewZIndex(), map)); } catch (ResourceNotFoundFault ex) { this.logger.error( "Failed to save folder drag&drop on LayerService: " + ex); throw new GeoPlatformException(ex); } return result; } @Override @Deprecated public boolean saveCheckStatusFolderAndTreeModifications( MementoSaveCheck memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } boolean result = false; try { result = this.geoPlatformServiceClient.saveCheckStatusFolderAndTreeModifications( memento.getIdBaseElement(), memento.isChecked()); } catch (ResourceNotFoundFault ex) { this.logger.error( "Failed to save checked folder on LayerService: " + ex); throw new GeoPlatformException(ex); } return result; } @Override @Deprecated public boolean saveCheckStatusLayerAndTreeModifications( MementoSaveCheck memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } boolean result = false; try { result = this.geoPlatformServiceClient.saveCheckStatusLayerAndTreeModifications( memento.getIdBaseElement(), memento.isChecked()); } catch (ResourceNotFoundFault ex) { this.logger.error( "Failed to save checked layer on LayerService: " + ex); throw new GeoPlatformException(ex); } return result; } @Override public boolean saveLayerProperties(MementoLayerOriginalProperties memento, HttpServletRequest httpServletRequest) throws GeoPlatformException { boolean result = false; try { this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } RasterPropertiesDTO dto = this.dtoMementoConverter.convertMementoProperties( memento); try { result = geoPlatformServiceClient.saveLayerProperties(dto); } catch (ResourceNotFoundFault ex) { this.logger.error("Failed to save layers on LayerService: {}", ex.getMessage()); throw new GeoPlatformException(ex); } catch (IllegalParameterFault ex) { this.logger.error("Failed to save layers on LayerService: {}", ex.getMessage()); throw new GeoPlatformException(ex); } return result; } @Override public boolean checkWmsGetMapUrl(String urlString) throws GeoPlatformException { try { URL url = new URL(urlString); URLConnection myURLConnection = url.openConnection(); myURLConnection.connect(); logger.debug("#################RESPONSE : {}\n\n", IOUtils.toString(myURLConnection.getInputStream())); String contentType = myURLConnection.getContentType(); logger.info("#####################CONTENT_TYPE : {}\n", contentType); if (!contentType.contains("xml")) { return true; } } catch (IOException ex) { logger.error("Error on executing Check url: {}", ex.getMessage()); throw new GeoPlatformException("Error on executing ParseURLServlet."); } return false; } // TODO Check @Override public boolean checkKmlUrl(String urlString) throws GeoPlatformException { try { URL url = new URL(urlString); URLConnection myURLConnection = url.openConnection(); myURLConnection.connect(); // String contentType = myURLConnection.getContentType(); // if (!contentType.contains("xml")) { // return true; // } } catch (IOException ex) { logger.info("Error on executing Check url: " + ex); throw new GeoPlatformException("Error on executing ParseURLServlet."); } return false; } @Deprecated private void deleteFolder(Long id) throws GeoPlatformException { try { this.geoPlatformServiceClient.deleteFolder(id); } catch (Exception ex) { logger.error("LayerService", "Ubable to delete Folder with ID : " + id); throw new GeoPlatformException( "The Folder with ID : " + id + " was deleted."); } } @Deprecated private void deleteLayer(Long id) throws GeoPlatformException { try { this.geoPlatformServiceClient.deleteLayer(id); } catch (Exception ex) { logger.error("LayerService", "Ubable to delete Layer with ID : " + id); throw new GeoPlatformException( "The Layer with ID : " + id + " was deleted."); } } @Override public BasePagingLoadResult<GPClientProject> searchProjects(PagingLoadConfig config, String searchText, String imageURL, HttpServletRequest httpServletRequest) throws GeoPlatformException { GPAccount account = null; try { account = this.sessionUtility.getLoggedAccount(httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } int start = config.getOffset(); SearchRequest srq = new SearchRequest(searchText); try { Long projectsCount = this.geoPlatformServiceClient.getAccountProjectsCount( account.getId(), srq); if(projectsCount == 0l) { throw new GeoPlatformException("There are no results"); } logger.debug("#############################PROJECT_COUNT : {}\n", projectsCount); int page = start == 0 ? start : start / config.getLimit(); PaginatedSearchRequest psr = new PaginatedSearchRequest(searchText, config.getLimit(), page); List<ProjectDTO> projectsDTO = this.geoPlatformServiceClient.searchAccountProjects(account.getId(), psr); if (projectsDTO == null) { throw new GeoPlatformException("There are no results"); } ArrayList<GPClientProject> clientProjects = new ArrayList<GPClientProject>(); for (ProjectDTO projectDTO : projectsDTO) { GPClientProject clientProject = this.dtoLayerConverter.convertToGPCLientProject(projectDTO, imageURL); clientProjects.add(clientProject); } return new BasePagingLoadResult<GPClientProject>(clientProjects, config.getOffset(), projectsCount.intValue()); } catch (ResourceNotFoundFault ex) { ex.printStackTrace(); throw new GeoPlatformException(ex.getMessage()); } } @Override public void setDefaultProject(Long projectID, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); GPProject updatedProjecd = this.geoPlatformServiceClient.updateDefaultProject( account.getId(), projectID); this.sessionUtility.storeLoggedAccountAndDefaultProject(account, updatedProjecd.getId(), httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault ex) { logger.error("An Error Occured : " + ex.getMessage()); throw new GeoPlatformException(ex); } } @Override public Long saveProject(GPClientProject project, HttpServletRequest httpServletRequest) throws GeoPlatformException { Long projectId = null; try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); projectId = this.geoPlatformServiceClient.saveProject( new SaveProjectRequest(account.getNaturalID(), this.dtoLayerConverter.convertToGProject(project), project.isDefaultProject())); this.sessionUtility.storeLoggedAccountAndDefaultProject(account, projectId, httpServletRequest); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault rnf) { this.logger.error("Failed to save project on SecurityService: {}", rnf); throw new GeoPlatformException(rnf); } catch (IllegalParameterFault ilg) { logger.error("Error on SecurityService: {}", ilg); throw new GeoPlatformException("Parameter incorrect on saveProject"); } return projectId; } @Override public void updateProject(GPClientProject project, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); AccountProjectPropertiesDTO dto = this.dtoLayerConverter.convertToAccountProjectPropertiesDTO( account.getId(), project); if (this.geoPlatformServiceClient.saveAccountProjectProperties(dto)) { this.sessionUtility.storeLoggedAccountAndDefaultProject(account, project.getId(), httpServletRequest); } } catch (ResourceNotFoundFault rnf) { logger.error("Failed to update project on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } catch (IllegalParameterFault ilg) { logger.error( "Error on SecurityService: " + ilg); throw new GeoPlatformException("Parameter incorrect on saveProject"); } catch (GPSessionTimeout timeout) { System.out.println("Session timeout"); throw new GeoPlatformException(timeout); } } @Override public void deleteProject(Long projectID, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.geoPlatformServiceClient.deleteProject(projectID); } catch (ResourceNotFoundFault rnf) { logger.error("Failed to Delete project on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } } @Override public void setLayerRefreshTime(String emiteResource, String layerUUID, int secondToRefresh, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); if (account instanceof GPUser) { String username = ((GPUser) account).getUsername(); if (secondToRefresh > 0) { logger.debug( "Request to subscribe layer refresh for: " + username + " - " + layerUUID); httpServletRequest.getSession().setMaxInactiveInterval(-1); this.geoPlatformTrackingClient.subscribeLayerNotification( username, emiteResource, layerUUID, secondToRefresh); } else if (account instanceof GPUser) { logger.debug( "Request to UNsubscribe layer refresh for: " + username + " - " + layerUUID); this.geoPlatformTrackingClient.unscribeLayerNotification( username, layerUUID); } } } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } } @Override public ArrayList<GPSimpleUser> getOrganizationUsers( HttpServletRequest httpServletRequest) throws GeoPlatformException { ArrayList<GPSimpleUser> simpleUserList = null; try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); List<ShortAccountDTO> accounts = this.geoPlatformServiceClient.getAccounts( account.getOrganization().getName()).getAccounts(); simpleUserList = Lists.newArrayList( this.dtoLayerConverter.convertToGPSimpleUser(accounts)); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault rnf) { logger.error( "Failed to load Organization Users on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } return simpleUserList; } @Override public ArrayList<GPSimpleUser> getOrganizationUsersToShareProject( long projectId, HttpServletRequest httpServletRequest) throws GeoPlatformException { ArrayList<GPSimpleUser> simpleUserList = null; try { this.sessionUtility.getLoggedAccount(httpServletRequest); List<ShortAccountDTO> accounts = this.geoPlatformServiceClient.getAccountsToShareByProjectID( projectId).getAccounts(); simpleUserList = Lists.newArrayList( this.dtoLayerConverter.convertToGPSimpleUser(accounts)); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault rnf) { logger.error( "Failed to load Organization Users on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } return simpleUserList; } @Override public ArrayList<GPSimpleUser> getAccountsFromSharedProject( long idSharedProject, HttpServletRequest httpServletRequest) throws GeoPlatformException { ArrayList<GPSimpleUser> simpleUserList = null; try { this.sessionUtility.getLoggedAccount(httpServletRequest); List<ShortAccountDTO> accounts = this.geoPlatformServiceClient.getAccountsByProjectID( idSharedProject).getAccounts(); simpleUserList = Lists.newArrayList( this.dtoLayerConverter.convertToGPSimpleUser(accounts)); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault rnf) { logger.error( "Failed to load Accounts for Shared Project with id: " + idSharedProject + "on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } return simpleUserList; } @Override public boolean shareProjectToUsers(long idSharedProject, List<Long> accountIDsProject, HttpServletRequest httpServletRequest) throws GeoPlatformException { boolean result = false; try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); result = this.geoPlatformServiceClient.updateAccountsProjectSharing( new PutAccountsProjectRequest(idSharedProject, accountIDsProject)); if (result) { MessageDTO message = new MessageDTO(); message.setCommands(Lists.newArrayList( GPMessageCommandType.OPEN_PROJECT)); message.setCommandsProperties("" + idSharedProject); message.setCreationDate(new Date()); message.setSenderID(account.getId()); message.setSubject("Project Shared"); String sharerName; if (account instanceof GPUser) { GPUser user = (GPUser) account; sharerName = user.getName(); } else { sharerName = account.getNaturalID(); } GPProject project = this.geoPlatformServiceClient.getProjectDetail( idSharedProject); message.setText( sharerName + " shared with you the " + project.getName() + " project. Do you want to open it?"); message.setRecipientIDs(accountIDsProject); this.geoPlatformServiceClient.insertMultiMessage(message); } } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault | IllegalParameterFault rnf) { logger.error("Failed to save Shared project to Accounts for Shared " + "Project with id: " + idSharedProject + "on SecurityService: " + rnf); throw new GeoPlatformException(rnf); } return result; } @Override public GPClientProject loadDefaultProject( HttpServletRequest httpServletRequest) throws GeoPlatformException { ProjectDTO projectDTO = null; try { GPAccount account = this.sessionUtility.getLoggedAccount( httpServletRequest); projectDTO = this.geoPlatformServiceClient.getDefaultProjectDTO( account.getId()); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (ResourceNotFoundFault ex) { logger.error("An Error Occured : " + ex.getMessage()); throw new GeoPlatformException(ex.getMessage()); } return this.dtoLayerConverter.convertToGPClientProject(projectDTO); } @Override public String getLayerDimension(String layerName, HttpServletRequest httpServletRequest) throws GeoPlatformException { try { this.sessionUtility.getLoggedAccount(httpServletRequest); return this.sharedRestReader.getDimensions(layerName); } catch (GPSessionTimeout timeout) { throw new GeoPlatformException(timeout); } catch (MalformedURLException ex) { throw new GeoPlatformException(ex); } } @Override public List<GPLayerAttributes> describeFeatureType(String layerName) throws GeoPlatformException { List<GPLayerAttributes> attributeList = Lists.<GPLayerAttributes>newArrayList(); try { List<LayerAttribute> result = this.geoPlatformPublishClient.describeFeatureType( layerName).getLayerAttributes(); for (LayerAttribute layerAttribute : result) { GPLayerAttributes gpLayerAttributes = new GPLayerAttributes(); gpLayerAttributes.setAttributeType(layerAttribute.getType()); gpLayerAttributes.setAttributeValue( layerAttribute.getValue()); attributeList.add(gpLayerAttributes); } } catch (ResourceNotFoundFault rnff) { throw new GeoPlatformException(rnff.getMessage()); } return attributeList; } @Override public Long cloneProject(CloneProjectRequest request) throws GeoPlatformException { try { return this.geoPlatformServiceClient.cloneProject(request); } catch (Exception e) { logger.error("An Error Occured : " + e.getMessage()); throw new GeoPlatformException(e.getMessage()); } } }