Add ProfileService Server and Client

Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/cbe1c280
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/cbe1c280
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/cbe1c280

Branch: refs/heads/develop
Commit: cbe1c280ca50c75af7bfe0146a15472aa073eba4
Parents: fcc06e0
Author: Gourav Shenoy <[email protected]>
Authored: Sun Mar 5 18:16:01 2017 -0500
Committer: Gourav Shenoy <[email protected]>
Committed: Sun Mar 5 18:16:01 2017 -0500

----------------------------------------------------------------------
 .../profile-service-server/pom.xml              |  30 ++++
 .../handlers/UserProfileServiceHandler.java     | 141 ++++++++++++++++
 .../profile/server/ProfileServiceServer.java    | 168 +++++++++++++++++++
 .../client/ProfileServiceClientFactory.java     |  46 +++++
 .../user/cpi/profile_user_cpiConstants.java     |   2 +
 .../main/resources/airavata-server.properties   |   2 +-
 .../profile-user/profile-user-cpi.thrift        |   1 +
 7 files changed, 389 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/airavata-services/profile-service/profile-service-server/pom.xml
----------------------------------------------------------------------
diff --git a/airavata-services/profile-service/profile-service-server/pom.xml 
b/airavata-services/profile-service/profile-service-server/pom.xml
new file mode 100644
index 0000000..1bf16b8
--- /dev/null
+++ b/airavata-services/profile-service/profile-service-server/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <groupId>org.apache.airavata</groupId>
+        <artifactId>profile-service</artifactId>
+        <version>0.17-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>profile-service-server</artifactId>
+    <name>Airavata Profile Service Server</name>
+    <description>Module to expose a profile service as a thrift 
service</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>profile-service-stubs</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>profile-user-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+    
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/UserProfileServiceHandler.java
----------------------------------------------------------------------
diff --git 
a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/UserProfileServiceHandler.java
 
b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/UserProfileServiceHandler.java
new file mode 100644
index 0000000..5ddfc19
--- /dev/null
+++ 
b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/UserProfileServiceHandler.java
@@ -0,0 +1,141 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.service.profile.handlers;
+
+import org.apache.airavata.model.user.UserProfile;
+import 
org.apache.airavata.service.profile.user.core.entities.UserProfileEntity;
+import 
org.apache.airavata.service.profile.user.core.repositories.UserProfileRepository;
+import org.apache.airavata.service.profile.user.cpi.UserProfileService;
+import 
org.apache.airavata.service.profile.user.cpi.exception.UserProfileServiceException;
+import org.apache.thrift.TException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class UserProfileServiceHandler implements UserProfileService.Iface {
+
+    private final static Logger logger = 
LoggerFactory.getLogger(UserProfileServiceHandler.class);
+
+    private UserProfileRepository userProfileRepository;
+
+    public UserProfileServiceHandler() {
+
+        userProfileRepository = new UserProfileRepository(UserProfile.class, 
UserProfileEntity.class);
+    }
+
+    public String addUserProfile(UserProfile userProfile) throws 
UserProfileServiceException {
+        try{
+            userProfileRepository.create(userProfile);
+            if (null != userProfile)
+                return userProfile.getUserId();
+            return null;
+        } catch (Exception e){
+            logger.error("Error while creating user profile", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while creating user profile. More info 
: " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    public boolean updateUserProfile(UserProfile userProfile) throws 
UserProfileServiceException, TException {
+        try {
+            if(userProfileRepository.update(userProfile) != null)
+                return true;
+            return false;
+        } catch (Exception e) {
+            logger.error("Error while Updating user profile", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while Updating user profile. More info 
: " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    public UserProfile getUserProfileById(String userId, String gatewayId) 
throws UserProfileServiceException {
+        try{
+            UserProfile userProfile = 
userProfileRepository.getUserProfileByIdAndGateWay(userId, gatewayId);
+            if(userProfile != null)
+                return userProfile;
+            return null;
+        } catch (Exception e) {
+            logger.error("Error retrieving user profile by ID", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error retrieving user profile by ID. More 
info : " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    // FIXME: shouldn't deleteUserProfile require the gatewayId as well?
+    public boolean deleteUserProfile(String userId) throws 
UserProfileServiceException {
+        try{
+            boolean deleteResult = userProfileRepository.delete(userId);
+            return deleteResult;
+        } catch (Exception e) {
+            logger.error("Error while deleting user profile", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while deleting user profile. More info 
: " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    public List<UserProfile> getAllUserProfilesInGateway(String gatewayId, int 
offset, int limit) throws UserProfileServiceException {
+        try{
+            List<UserProfile> usersInGateway = 
userProfileRepository.getAllUserProfilesInGateway(gatewayId, offset, limit);
+            if(usersInGateway != null)
+                return usersInGateway;
+            return null;
+        } catch (Exception e) {
+            logger.error("Error while retrieving user profile List", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while retrieving user profile List. 
More info : " + e.getMessage());
+            throw exception;
+        }
+    }
+
+
+    public UserProfile getUserProfileByName(String userName, String gatewayId) 
throws UserProfileServiceException {
+        try{
+            UserProfile userProfile = 
userProfileRepository.getUserProfileByNameAndGateWay(userName, gatewayId);
+            if(userProfile != null)
+                return userProfile;
+            return null;
+        } catch (Exception e) {
+            logger.error("Error while retrieving user profile", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while retrieving user profile. More 
info : " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    public boolean doesUserExist(String userName, String gatewayId) throws 
UserProfileServiceException, TException {
+        try{
+            UserProfile userProfile = 
userProfileRepository.getUserProfileByNameAndGateWay(userName, gatewayId);
+            if (null != userProfile)
+                return true;
+            return false;
+        } catch (Exception e) {
+            logger.error("Error while finding user profile", e);
+            UserProfileServiceException exception = new 
UserProfileServiceException();
+            exception.setMessage("Error while finding user profile. More info 
: " + e.getMessage());
+            throw exception;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/server/ProfileServiceServer.java
----------------------------------------------------------------------
diff --git 
a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/server/ProfileServiceServer.java
 
b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/server/ProfileServiceServer.java
new file mode 100644
index 0000000..459fd36
--- /dev/null
+++ 
b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/server/ProfileServiceServer.java
@@ -0,0 +1,168 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.airavata.service.profile.server;
+
+import org.apache.airavata.common.utils.IServer;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.service.profile.handlers.UserProfileServiceHandler;
+import org.apache.airavata.service.profile.user.cpi.UserProfileService;
+import org.apache.airavata.service.profile.user.cpi.profile_user_cpiConstants;
+import org.apache.thrift.TMultiplexedProcessor;
+import org.apache.thrift.server.TServer;
+import org.apache.thrift.server.TThreadPoolServer;
+import org.apache.thrift.transport.TServerSocket;
+import org.apache.thrift.transport.TServerTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetSocketAddress;
+import java.util.Date;
+
+public class ProfileServiceServer implements IServer {
+
+    private final static Logger logger = 
LoggerFactory.getLogger(ProfileServiceServer.class);
+
+    private static final String SERVER_NAME = "Profile Service Server";
+    private static final String SERVER_VERSION = "1.0";
+
+    private ServerStatus status;
+    private TServer server;
+
+    public ProfileServiceServer() {
+        setStatus(ServerStatus.STOPPED);
+    }
+
+    public void updateTime() {
+
+    }
+
+    public Date getTime() {
+        return null;
+    }
+
+    public String getName() {
+        return SERVER_NAME;
+    }
+
+    public String getVersion() {
+        return SERVER_VERSION;
+    }
+
+    public void start() throws Exception {
+
+        try {
+            setStatus(ServerStatus.STARTING);
+            final int serverPort = 
Integer.parseInt(ServerSettings.getProfileServiceServerPort());
+            final String serverHost = 
ServerSettings.getProfileServiceServerHost();
+
+            // create multiple processors for each profile-service
+            UserProfileService.Processor userProfileProcessor = new 
UserProfileService.Processor(new UserProfileServiceHandler());
+
+            // create a multiplexed processor
+            TMultiplexedProcessor profileServiceProcessor = new 
TMultiplexedProcessor();
+            
profileServiceProcessor.registerProcessor(profile_user_cpiConstants.USER_PROFILE_CPI_NAME,
 userProfileProcessor);
+
+            TServerTransport serverTransport;
+
+            if (serverHost == null) {
+                serverTransport = new TServerSocket(serverPort);
+            } else {
+                InetSocketAddress inetSocketAddress = new 
InetSocketAddress(serverHost, serverPort);
+                serverTransport = new TServerSocket(inetSocketAddress);
+            }
+            TThreadPoolServer.Args options = new 
TThreadPoolServer.Args(serverTransport);
+            options.minWorkerThreads = 30;
+            server = new 
TThreadPoolServer(options.processor(profileServiceProcessor));
+
+            new Thread() {
+                public void run() {
+                    server.serve();
+                    setStatus(ServerStatus.STOPPED);
+                    logger.info("Profile Service Server Stopped.");
+                }
+            }.start();
+            new Thread() {
+                public void run() {
+                    while (!server.isServing()) {
+                        try {
+                            Thread.sleep(500);
+                        } catch (InterruptedException e) {
+                            break;
+                        }
+                    }
+                    if (server.isServing()) {
+                        setStatus(ServerStatus.STARTED);
+                        logger.info("Starting Profile Service Server on Port " 
+ serverPort);
+                        logger.info("Listening to Profile Service Server 
clients ....");
+                    }
+                }
+            }.start();
+        } catch (TTransportException e) {
+            setStatus(ServerStatus.FAILED);
+            throw new Exception("Error while starting the Profile Service 
Server", e);
+        }
+    }
+
+    public void stop() throws Exception {
+
+        if (server != null && server.isServing()) {
+            setStatus(ServerStatus.STOPING);
+            server.stop();
+        }
+    }
+
+    public void restart() throws Exception {
+
+        stop();
+        start();
+    }
+
+    public void configure() throws Exception {
+
+    }
+
+    public ServerStatus getStatus() throws Exception {
+        return status;
+    }
+
+    private void setStatus(ServerStatus stat) {
+        status = stat;
+        status.updateTime();
+    }
+
+    public TServer getServer() {
+        return server;
+    }
+
+    public void setServer(TServer server) {
+        this.server = server;
+    }
+
+    public static void main(String[] args) {
+        try {
+            new ProfileServiceServer().start();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/client/ProfileServiceClientFactory.java
----------------------------------------------------------------------
diff --git 
a/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/client/ProfileServiceClientFactory.java
 
b/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/client/ProfileServiceClientFactory.java
new file mode 100644
index 0000000..2c14813
--- /dev/null
+++ 
b/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/client/ProfileServiceClientFactory.java
@@ -0,0 +1,46 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.airavata.service.profile.client;
+
+import org.apache.airavata.service.profile.user.cpi.UserProfileService;
+import 
org.apache.airavata.service.profile.user.cpi.exception.UserProfileServiceException;
+import org.apache.airavata.service.profile.user.cpi.profile_user_cpiConstants;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TMultiplexedProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
+
+
+public class ProfileServiceClientFactory {
+    public static UserProfileService.Client 
createUserProfileServiceClient(String serverHost, int serverPort)  throws 
UserProfileServiceException {
+        try {
+            TTransport transport = new TSocket(serverHost, serverPort);
+            transport.open();
+            TProtocol protocol = new TBinaryProtocol(transport);
+            TMultiplexedProtocol multiplexedProtocol = new 
TMultiplexedProtocol(protocol, profile_user_cpiConstants.USER_PROFILE_CPI_NAME);
+            return new UserProfileService.Client(multiplexedProtocol);
+        } catch (TTransportException e) {
+            throw new UserProfileServiceException();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/user/cpi/profile_user_cpiConstants.java
----------------------------------------------------------------------
diff --git 
a/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/user/cpi/profile_user_cpiConstants.java
 
b/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/user/cpi/profile_user_cpiConstants.java
index 9d583ee..4cc4a89 100644
--- 
a/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/user/cpi/profile_user_cpiConstants.java
+++ 
b/airavata-services/profile-service/profile-service-stubs/src/main/java/org/apache/airavata/service/profile/user/cpi/profile_user_cpiConstants.java
@@ -54,4 +54,6 @@ public class profile_user_cpiConstants {
 
   public static final String USER_PROFILE_CPI_VERSION = "0.17";
 
+  public static final String USER_PROFILE_CPI_NAME = "UserProfileService";
+
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git 
a/modules/configuration/server/src/main/resources/airavata-server.properties 
b/modules/configuration/server/src/main/resources/airavata-server.properties
index 55f6086..07a373a 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -349,5 +349,5 @@ user.profile.catalog.validationQuery=SELECT 1
 # Profile Service Configuration
 ###########################################################################
 profile.service.server.host=localhost
-profile.service.server.port=8961
+profile.service.server.port=8962
 profile_service=org.apache.airavata.service.profile.server.ProfileServiceServer
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/cbe1c280/thrift-interface-descriptions/service-cpis/profile-service/profile-user/profile-user-cpi.thrift
----------------------------------------------------------------------
diff --git 
a/thrift-interface-descriptions/service-cpis/profile-service/profile-user/profile-user-cpi.thrift
 
b/thrift-interface-descriptions/service-cpis/profile-service/profile-user/profile-user-cpi.thrift
index ebf21f7..e575a4b 100644
--- 
a/thrift-interface-descriptions/service-cpis/profile-service/profile-user/profile-user-cpi.thrift
+++ 
b/thrift-interface-descriptions/service-cpis/profile-service/profile-user/profile-user-cpi.thrift
@@ -30,6 +30,7 @@ include "profile_user_cpi_errors.thrift"
 namespace java org.apache.airavata.service.profile.user.cpi
 
 const string USER_PROFILE_CPI_VERSION = "0.17"
+const string USER_PROFILE_CPI_NAME = "UserProfileService"
 
 service UserProfileService {
 

Reply via email to