Merge pull request 'Adding the DAO layer for vpp user management' (#155) from osh.silva/device-mgt-core:vpp-user-dao-10169 into vpp-v2

Reviewed-on: community/device-mgt-core#155
otp-db-change
Inosh Perara 1 year ago
commit fa565eb1ea

@ -0,0 +1,32 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.application.mgt.core.dao;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
public interface VppApplicationDAO {
int addVppUser(VppUserDTO userDTO, int tenantId) throws ApplicationManagementDAOException;
VppUserDTO updateVppUser(VppUserDTO userDTO, int tenantId) throws ApplicationManagementDAOException;
VppUserDTO getUserByDMUsername(String emmUsername, int tenantId) throws ApplicationManagementDAOException;
}

@ -17,7 +17,7 @@
*/ */
package io.entgra.device.mgt.core.application.mgt.core.dao.common; package io.entgra.device.mgt.core.application.mgt.core.dao.common;
import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.*;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.GenericSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.GenericSPApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.OracleSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.OracleSPApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.PostgreSQLSPApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.spapplication.PostgreSQLSPApplicationDAOImpl;
@ -26,16 +26,14 @@ import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.Generi
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.OracleVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.OracleVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.PostgreSQLVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.PostgreSQLVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.SQLServerVisibilityDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.visibility.SQLServerVisibilityDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.GenericVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.OracleVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.PostgreSQLVppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp.SQLServerVppApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants; import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import io.entgra.device.mgt.core.application.mgt.common.exception.UnsupportedDatabaseEngineException; import io.entgra.device.mgt.core.application.mgt.common.exception.UnsupportedDatabaseEngineException;
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationReleaseDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.LifecycleStateDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.ReviewDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.SubscriptionDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.PostgreSQLApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.PostgreSQLApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.SQLServerApplicationDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.SQLServerApplicationDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.release.OracleApplicationReleaseDAOImpl; import io.entgra.device.mgt.core.application.mgt.core.dao.impl.application.release.OracleApplicationReleaseDAOImpl;
@ -232,4 +230,28 @@ public class ApplicationManagementDAOFactory {
} }
throw new IllegalStateException("Database engine has not initialized properly."); throw new IllegalStateException("Database engine has not initialized properly.");
} }
/**
* To get the instance of VppApplicationImplementation of the particular database engine.
* @return specific VppApplicationImplementation
*/
public static VppApplicationDAO getVppApplicationDAO() {
if (databaseEngine != null) {
switch (databaseEngine) {
case Constants.DataBaseTypes.DB_TYPE_H2:
case Constants.DataBaseTypes.DB_TYPE_MYSQL:
return new GenericVppApplicationDAOImpl();
case Constants.DataBaseTypes.DB_TYPE_POSTGRESQL:
return new PostgreSQLVppApplicationDAO();
case Constants.DataBaseTypes.DB_TYPE_ORACLE:
return new OracleVppApplicationDAOImpl();
case Constants.DataBaseTypes.DB_TYPE_MSSQL:
return new SQLServerVppApplicationDAOImpl();
default:
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
}
}
throw new IllegalStateException("Database engine has not initialized properly.");
}
} }

@ -0,0 +1,171 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.impl.AbstractDAOImpl;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import io.entgra.device.mgt.core.application.mgt.core.exception.UnexpectedServerErrorException;
import io.entgra.device.mgt.core.application.mgt.core.util.DAOUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class GenericVppApplicationDAOImpl extends AbstractDAOImpl implements VppApplicationDAO {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
@Override
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
public VppUserDTO updateVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
String sql = "UPDATE "
+ "AP_VPP_USER "
+ "SET "
+ "CLIENT_USER_ID = ?,"
+ "DM_USERNAME = ?, "
+ "TENANT_ID = ?, "
+ "EMAIL = ?, "
+ "INVITE_CODE = ?, "
+ "STATUS = ?, "
+ "LAST_UPDATED_TIME = ?, "
+ "MANAGED_ID = ?, "
+ "TEMP_PASSWORD = ? "
+ "WHERE ID = ?";
try {
Connection conn = this.getDBConnection();
long updatedTime = System.currentTimeMillis();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, updatedTime);
stmt.setString(8, userDTO.getManagedId());
stmt.setString(9, userDTO.getTmpPassword());
stmt.setInt(10, userDTO.getId());
stmt.executeUpdate();
if (stmt.executeUpdate() == 1) {
return userDTO;
}
return null;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when updating the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to updating the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
public VppUserDTO getUserByDMUsername(String emmUsername, int tenantId)
throws ApplicationManagementDAOException {
String sql = "SELECT "
+ "ID, "
+ "CLIENT_USER_ID, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS, "
+ "CREATED_TIME, "
+ "LAST_UPDATED_TIME, "
+ "MANAGED_ID, "
+ "TEMP_PASSWORD "
+ "FROM AP_VPP_USER "
+ "WHERE DM_USERNAME = ? AND TENANT_ID = ?";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, emmUsername);
stmt.setInt(2, tenantId);
try (ResultSet rs = stmt.executeQuery()) {
return DAOUtil.loadVppUser(rs);
}
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when retrieving vpp user by EMM Username.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to retrieve vpp user by EMM Username.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (UnexpectedServerErrorException e) {
String msg = "Found more than one user for: " + emmUsername;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,82 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class OracleVppApplicationDAOImpl extends GenericVppApplicationDAOImpl {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
@Override
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, new String[] {"ID"})) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,81 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
public class PostgreSQLVppApplicationDAO extends GenericVppApplicationDAOImpl {
private static final Log log = LogFactory.getLog(GenericVppApplicationDAOImpl.class);
public int addVppUser(VppUserDTO userDTO, int tenantId)
throws ApplicationManagementDAOException {
int vppUserId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_USER("
+ "CLIENT_USER_ID, "
+ "DM_USERNAME, "
+ "TENANT_ID, "
+ "EMAIL, "
+ "INVITE_CODE, "
+ "STATUS,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "MANAGED_ID,"
+ "TEMP_PASSWORD) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, new String[]{"ID"})) {
long currentTime = System.currentTimeMillis();
stmt.setString(1, userDTO.getClientUserId());
stmt.setString(2, userDTO.getDmUsername());
stmt.setInt(3, tenantId);
stmt.setString(4, userDTO.getEmail());
stmt.setString(5, userDTO.getInviteCode());
stmt.setString(6, userDTO.getStatus());
stmt.setLong(7, currentTime);
stmt.setLong(8, currentTime);
stmt.setString(9, userDTO.getManagedId());
stmt.setString(10, userDTO.getTmpPassword());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
vppUserId = rs.getInt(1);
}
}
return vppUserId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -0,0 +1,22 @@
/*
* Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
public class SQLServerVppApplicationDAOImpl extends GenericVppApplicationDAOImpl {
}

@ -24,6 +24,8 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import io.entgra.device.mgt.core.application.mgt.common.dto.ProxyResponse; import io.entgra.device.mgt.core.application.mgt.common.dto.ProxyResponse;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppItuneUserDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppItuneUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.common.exception.TransactionManagementException;
import io.entgra.device.mgt.core.application.mgt.common.wrapper.VppItuneUserRequestWrapper; import io.entgra.device.mgt.core.application.mgt.common.wrapper.VppItuneUserRequestWrapper;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException; import io.entgra.device.mgt.core.application.mgt.common.exception.ApplicationManagementException;
@ -32,14 +34,18 @@ import io.entgra.device.mgt.core.application.mgt.common.wrapper.VppItuneUserResp
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.SPApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.VisibilityDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.common.ApplicationManagementDAOFactory; import io.entgra.device.mgt.core.application.mgt.core.dao.common.ApplicationManagementDAOFactory;
import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
import io.entgra.device.mgt.core.application.mgt.core.internal.DataHolder; import io.entgra.device.mgt.core.application.mgt.core.internal.DataHolder;
import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager; import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager;
import io.entgra.device.mgt.core.application.mgt.core.util.ConnectionManagerUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants; import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil; import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import java.io.IOException; import java.io.IOException;
@ -56,6 +62,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
private SPApplicationDAO spApplicationDAO; private SPApplicationDAO spApplicationDAO;
private VisibilityDAO visibilityDAO; private VisibilityDAO visibilityDAO;
private final LifecycleStateManager lifecycleStateManager; private final LifecycleStateManager lifecycleStateManager;
private VppApplicationDAO vppApplicationDAO;
public VppApplicationManagerImpl() { public VppApplicationManagerImpl() {
initDataAccessObjects(); initDataAccessObjects();
@ -66,10 +73,14 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO(); this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
this.visibilityDAO = ApplicationManagementDAOFactory.getVisibilityDAO(); this.visibilityDAO = ApplicationManagementDAOFactory.getVisibilityDAO();
this.spApplicationDAO = ApplicationManagementDAOFactory.getSPApplicationDAO(); this.spApplicationDAO = ApplicationManagementDAOFactory.getSPApplicationDAO();
this.vppApplicationDAO = ApplicationManagementDAOFactory.getVppApplicationDAO();
} }
@Override @Override
public VppUserDTO addUser(VppUserDTO userDTO) throws ApplicationManagementException { public VppUserDTO addUser(VppUserDTO userDTO) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
// Call the API to add // Call the API to add
try { try {
VppItuneUserDTO ituneUserDTO = userDTO; VppItuneUserDTO ituneUserDTO = userDTO;
@ -96,11 +107,31 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
.getInviteCode()); .getInviteCode());
userDTO.setStatus(vppItuneUserResponseWrapper.getUser().get(0).getStatus()); userDTO.setStatus(vppItuneUserResponseWrapper.getUser().get(0).getStatus());
log.error("userDTO " + userDTO.toString()); log.error("userDTO " + userDTO.toString());
// TODO: Save the userDTO in the DAO try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.addVppUser(userDTO, tenantId) != -1) {
ConnectionManagerUtil.commitDBTransaction();
return userDTO; return userDTO;
} }
ConnectionManagerUtil.rollbackDBTransaction();
return null;
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while adding the Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for adding Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for adding Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
}
} }
} catch (IOException e) { } catch (IOException e) {
@ -113,12 +144,26 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
@Override @Override
public VppUserDTO getUserByDMUsername(String emmUsername) throws ApplicationManagementException { public VppUserDTO getUserByDMUsername(String emmUsername) throws ApplicationManagementException {
// TODO: Return from DAO in a tenanted manner int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
return null; try {
ConnectionManagerUtil.openDBConnection();
return vppApplicationDAO.getUserByDMUsername(emmUsername, tenantId);
} catch (DBConnectionException e) {
String msg = "DB Connection error occurs while getting vpp User data related to EMM user " + emmUsername + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (ApplicationManagementDAOException e) {
String msg = "Error occurred while getting vpp User data related to EMM user " + emmUsername + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} }
@Override @Override
public void updateUser(VppUserDTO userDTO) throws ApplicationManagementException { public void updateUser(VppUserDTO userDTO) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
VppItuneUserDTO ituneUserDTO = userDTO; VppItuneUserDTO ituneUserDTO = userDTO;
VppItuneUserRequestWrapper wrapper = new VppItuneUserRequestWrapper(); VppItuneUserRequestWrapper wrapper = new VppItuneUserRequestWrapper();
wrapper.getUser().add(ituneUserDTO); wrapper.getUser().add(ituneUserDTO);
@ -131,12 +176,35 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) {
log.error("userDTO " + userDTO.toString()); log.error("userDTO " + userDTO.toString());
// TODO: Save the userDTO in the DAO
try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.updateVppUser(userDTO, tenantId) == null) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Unable to update the Vpp user " +userDTO.getId();
log.error(msg);
throw new ApplicationManagementException(msg);
}
ConnectionManagerUtil.commitDBTransaction();
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while updating the Vpp User.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for Vpp User update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for Vpp User update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} }
} catch (IOException e) { } catch (IOException e) {
String msg = "Error while callng VPP backend to update"; String msg = "Error while calling VPP backend to update";
log.error(msg, e); log.error(msg, e);
throw new ApplicationManagementException(msg, e); throw new ApplicationManagementException(msg, e);
} }

@ -32,6 +32,7 @@ import io.entgra.device.mgt.core.application.mgt.common.dto.ApplicationReleaseDT
import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ReviewDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.ReviewDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier; import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -43,6 +44,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Date;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -344,6 +346,42 @@ public class DAOUtil {
return subscriptionDTOS; return subscriptionDTOS;
} }
public static VppUserDTO loadVppUser(ResultSet rs) throws SQLException, UnexpectedServerErrorException {
List<VppUserDTO> vppUserDTOS = loadVppUsers(rs);
if (vppUserDTOS.isEmpty()) {
return null;
}
if (vppUserDTOS.size() > 1) {
String msg = "Internal server error. Found more than one vpp user for requested emmUsername";
log.error(msg);
throw new UnexpectedServerErrorException(msg);
}
return vppUserDTOS.get(0);
}
public static List<VppUserDTO> loadVppUsers (ResultSet rs) throws SQLException {
List<VppUserDTO> vppUserDTOS = new ArrayList<>();
while (rs.next()) {
VppUserDTO vppUserDTO = new VppUserDTO();
vppUserDTO.setId(rs.getInt("ID"));
vppUserDTO.setClientUserId(rs.getString("CLIENT_USER_ID"));
vppUserDTO.setTenantId(rs.getInt("TENANT_ID"));
vppUserDTO.setEmail(rs.getString("EMAIL"));
vppUserDTO.setInviteCode(rs.getString("INVITE_CODE"));
vppUserDTO.setStatus(rs.getString("STATUS"));
vppUserDTO.setManagedId(rs.getString("MANAGED_ID"));
vppUserDTO.setTmpPassword(rs.getString("TEMP_PASSWORD"));
if (rs.getLong("CREATED_TIME") != 0) {
vppUserDTO.setCreatedTime(new Date(rs.getLong(("CREATED_TIME")) * 1000).toString());
}
if (rs.getLong("LAST_UPDATED_TIME") != 0) {
vppUserDTO.setLastUpdatedTime(new Date(rs.getLong(("LAST_UPDATED_TIME")) * 1000).toString());
}
vppUserDTOS.add(vppUserDTO);
}
return vppUserDTOS;
}
/** /**
* Cleans up the statement and resultset after executing the query * Cleans up the statement and resultset after executing the query
* *

Loading…
Cancel
Save