forked from community/device-mgt-core
Impproving the DAO layer, DeviceManagerService SPIs and implmenting initial bits of plugin management
parent
33812ec50f
commit
19256e2638
@ -0,0 +1,81 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.dao;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
||||
import org.wso2.carbon.device.mgt.core.dao.impl.DeviceDAOImpl;
|
||||
import org.wso2.carbon.device.mgt.core.dao.impl.DeviceTypeDAOImpl;
|
||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceManagementDAOFactory {
|
||||
|
||||
private static DataSource dataSource;
|
||||
private static final Log log = LogFactory.getLog(DeviceManagementDAOFactory.class);
|
||||
|
||||
public static DeviceDAO getDeviceDAO() {
|
||||
return new DeviceDAOImpl(dataSource);
|
||||
}
|
||||
|
||||
public static DeviceTypeDAO getDeviceTypeDAO() {
|
||||
return new DeviceTypeDAOImpl(dataSource);
|
||||
}
|
||||
|
||||
public static void init(DataSourceConfig config) {
|
||||
dataSource = resolveDataSource(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve data source from the data source definition
|
||||
*
|
||||
* @param config data source configuration
|
||||
* @return data source resolved from the data source definition
|
||||
*/
|
||||
public static DataSource resolveDataSource(DataSourceConfig config) {
|
||||
DataSource dataSource = null;
|
||||
if (config == null) {
|
||||
throw new RuntimeException("Device Management Repository data source configuration " +
|
||||
"is null and thus, is not initialized");
|
||||
}
|
||||
JNDILookupDefinition jndiConfig = config.getJndiLookupDefintion();
|
||||
if (jndiConfig != null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Initializing Device Management Repository data source using the JNDI " +
|
||||
"Lookup Definition");
|
||||
}
|
||||
List<JNDILookupDefinition.JNDIProperty> jndiPropertyList =
|
||||
jndiConfig.getJndiProperties();
|
||||
if (jndiPropertyList != null) {
|
||||
Hashtable<Object, Object> jndiProperties = new Hashtable<Object, Object>();
|
||||
for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) {
|
||||
jndiProperties.put(prop.getName(), prop.getValue());
|
||||
}
|
||||
dataSource =
|
||||
DeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), jndiProperties);
|
||||
} else {
|
||||
dataSource = DeviceManagementDAOUtil.lookupDataSource(jndiConfig.getJndiName(), null);
|
||||
}
|
||||
}
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.dao;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.exception.DeviceDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.exception.DeviceDatabaseConnectionException;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Device;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Status;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface DeviceMgtDAO {
|
||||
|
||||
void addDevice(Device device) throws DeviceDAOException, DeviceManagementException;
|
||||
|
||||
void updateDevice(Device device) throws DeviceDAOException, DeviceManagementException;
|
||||
|
||||
void updateDeviceStatus(Long deviceId, Status status) throws DeviceDAOException, DeviceManagementException;
|
||||
|
||||
void deleteDevice(Long deviceId) throws DeviceDAOException, DeviceManagementException;
|
||||
|
||||
List<Device> getDeviceByDeviceId(Long deviceId) throws DeviceDAOException, DeviceManagementException;
|
||||
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.dao.exception;
|
||||
|
||||
public class DeviceDatabaseConnectionException extends Exception {
|
||||
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified detail message and nested exception.
|
||||
*
|
||||
* @param message error message
|
||||
* @param nestedException exception
|
||||
*/
|
||||
public DeviceDatabaseConnectionException(String message, Exception nestedException) {
|
||||
super(message, nestedException);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified detail message and cause.
|
||||
*
|
||||
* @param message the detail message.
|
||||
* @param cause the cause of this exception.
|
||||
*/
|
||||
public DeviceDatabaseConnectionException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified detail message
|
||||
*
|
||||
* @param message the detail message.
|
||||
*/
|
||||
public DeviceDatabaseConnectionException(String message) {
|
||||
super(message);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new exception with the specified and cause.
|
||||
*
|
||||
* @param cause the cause of this exception.
|
||||
*/
|
||||
public DeviceDatabaseConnectionException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.message = errorMessage;
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
* WSO2 Inc. 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.
|
||||
* 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.wso2.carbon.device.mgt.core.dao.exception;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.RDBMSConfig;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* DAO factory class for creating RSS DAO objects.
|
||||
*/
|
||||
public class DeviceMgtDAOFactory {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DeviceMgtDAOFactory.class);
|
||||
|
||||
/**
|
||||
* Resolve data source from the data source definition
|
||||
*
|
||||
* @param dataSourceDef data source configuration
|
||||
* @return data source resolved from the data source definition
|
||||
*/
|
||||
public static DataSource resolveDataSource(DataSourceConfig dataSourceDef) {
|
||||
DataSource dataSource;
|
||||
if (dataSourceDef == null) {
|
||||
throw new RuntimeException("RSS Management Repository data source configuration " +
|
||||
"is null and thus, is not initialized");
|
||||
}
|
||||
JNDILookupDefinition jndiConfig = dataSourceDef.getJndiLookupDefintion();
|
||||
if (jndiConfig != null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Initializing RSS Management Repository data source using the JNDI " +
|
||||
"Lookup Definition");
|
||||
}
|
||||
List<JNDILookupDefinition.JNDIProperty> jndiPropertyList =
|
||||
jndiConfig.getJndiProperties();
|
||||
if (jndiPropertyList != null) {
|
||||
Hashtable<Object, Object> jndiProperties = new Hashtable<Object, Object>();
|
||||
for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) {
|
||||
jndiProperties.put(prop.getName(), prop.getValue());
|
||||
}
|
||||
dataSource =
|
||||
DeviceManagerUtil.lookupDataSource(jndiConfig.getJndiName(), jndiProperties);
|
||||
} else {
|
||||
dataSource = DeviceManagerUtil.lookupDataSource(jndiConfig.getJndiName(), null);
|
||||
}
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("No JNDI Lookup Definition found in the RSS Management Repository " +
|
||||
"data source configuration. Thus, continuing with in-line data source " +
|
||||
"configuration processing.");
|
||||
}
|
||||
RDBMSConfig rdbmsConfig = dataSourceDef.getRdbmsConfiguration();
|
||||
if (rdbmsConfig == null) {
|
||||
throw new RuntimeException(
|
||||
"No JNDI/In-line data source configuration found. " +
|
||||
"Thus, RSS Management Repository DAO is not initialized"
|
||||
);
|
||||
}
|
||||
dataSource =
|
||||
DeviceManagerUtil.createDataSource(DeviceManagerUtil.loadDataSourceProperties(
|
||||
rdbmsConfig), rdbmsConfig.getDataSourceClassName());
|
||||
}
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.dao.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceDAO;
|
||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Device;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Status;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceDAOImpl implements DeviceDAO {
|
||||
|
||||
private DataSource dataSource;
|
||||
private static final Log log = LogFactory.getLog(DeviceDAOImpl.class);
|
||||
|
||||
|
||||
public DeviceDAOImpl(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDevice(Device device) throws DeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String createDBQuery =
|
||||
"INSERT INTO DM_DEVICE(DESCRIPTION, NAME, DATE_OF_ENROLLMENT, DATE_OF_LAST_UPDATE, OWNERSHIP," +
|
||||
"STATUS, DEVICE_TYPE_ID, DEVICE_IDENTIFICATION, OWNER, TENANT_ID) VALUES " +
|
||||
"(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
stmt = conn.prepareStatement(createDBQuery);
|
||||
stmt.setString(1, device.getDescription());
|
||||
stmt.setString(2, device.getName());
|
||||
stmt.setLong(3, new Date().getTime());
|
||||
stmt.setLong(4, new Date().getTime());
|
||||
stmt.setString(5, device.getOwnerShip());
|
||||
stmt.setString(6, device.getStatus().toString());
|
||||
stmt.setLong(7, device.getDeviceType().getId());
|
||||
stmt.setLong(8, device.getDeviceIdentificationId());
|
||||
stmt.setString(9, device.getOwnerId());
|
||||
stmt.setInt(10, DeviceManagementDAOUtil.getTenantId());
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Failed to enroll device '" + device.getName() + "'";
|
||||
log.error(msg, e);
|
||||
throw new DeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDevice(Device device) throws DeviceManagementDAOException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceStatus(Long deviceId, Status status) throws DeviceManagementDAOException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDevice(Long deviceId) throws DeviceManagementDAOException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getDeviceByDeviceId(Long deviceId)
|
||||
throws DeviceManagementDAOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
private Connection getConnection() throws DeviceManagementDAOException {
|
||||
try {
|
||||
return dataSource.getConnection();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while obtaining a connection from the device " +
|
||||
"management metadata repository datasource", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.dao.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceDAO;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceMgtDAO;
|
||||
import org.wso2.carbon.device.mgt.core.dao.exception.DeviceDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.exception.DeviceDatabaseConnectionException;
|
||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceDAOUtil;
|
||||
import org.wso2.carbon.device.mgt.core.dao.util.ErrorHandler;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Device;
|
||||
import org.wso2.carbon.device.mgt.core.dto.Status;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceMgtDAOImpl implements DeviceMgtDAO {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DeviceMgtDAOImpl.class);
|
||||
private DataSource dataSource;
|
||||
|
||||
public DeviceMgtDAOImpl() {
|
||||
this.dataSource = DeviceManagerUtil.getDataSource();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDevice(Device device) throws DeviceDAOException, DeviceManagementException {
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement addDeviceDBStatement = null;
|
||||
try {
|
||||
conn = getDataSourceConnection();
|
||||
conn.setAutoCommit(false);
|
||||
String createDBQuery =
|
||||
"INSERT INTO DM_DEVICE(DESCRIPTION,NAME,DATE_OF_ENROLLMENT,DATE_OF_LAST_UPDATE,OWNERSHIP," +
|
||||
"STATUS,DEVICE_TYPE_ID,DEVICE_IDENTIFICATION,OWNER) VALUES (?,?,?,?,?,?,?,?,?)";
|
||||
|
||||
addDeviceDBStatement = conn.prepareStatement(createDBQuery);
|
||||
addDeviceDBStatement.setString(1, device.getDescription());
|
||||
addDeviceDBStatement.setString(2, device.getName());
|
||||
addDeviceDBStatement.setLong(3, new Date().getTime());
|
||||
addDeviceDBStatement.setLong(4, new Date().getTime());
|
||||
addDeviceDBStatement.setString(5, device.getOwnerShip());
|
||||
addDeviceDBStatement.setString(6, device.getStatus().toString());
|
||||
addDeviceDBStatement.setLong(7, device.getDeviceType().getId());
|
||||
addDeviceDBStatement.setLong(8, device.getDeviceIdentificationId());
|
||||
addDeviceDBStatement.setString(9, device.getOwnerId());
|
||||
addDeviceDBStatement.executeUpdate();
|
||||
conn.commit();
|
||||
|
||||
} catch (SQLException e) {
|
||||
DeviceDAOUtil.rollback(conn, DeviceManagementConstants.ADD_DEVICE_ENTRY);
|
||||
String msg = "Failed to enroll device " + device.getName() + " to CDM";
|
||||
ErrorHandler errorHandler = new ErrorHandler(msg, log);
|
||||
errorHandler.handleDAOException(msg, e);
|
||||
} finally {
|
||||
DeviceDAOUtil.cleanupResources(null, addDeviceDBStatement, conn, DeviceManagementConstants.ADD_DEVICE_ENTRY);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDevice(Device device) throws DeviceDAOException, DeviceManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceStatus(Long deviceId, Status status)
|
||||
throws DeviceDAOException, DeviceManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDevice(Long deviceId) throws DeviceDAOException, DeviceManagementException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getDeviceByDeviceId(Long deviceId)
|
||||
throws DeviceDAOException, DeviceManagementException {
|
||||
return null;
|
||||
}
|
||||
|
||||
private Connection getDataSourceConnection() throws DeviceManagementException {
|
||||
try {
|
||||
return dataSource.getConnection();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error while acquiring the database connection";
|
||||
throw new DeviceManagementException(msg, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.dao.impl;
|
||||
|
||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceTypeDAOImpl implements DeviceTypeDAO {
|
||||
|
||||
private DataSource dataSource;
|
||||
|
||||
public DeviceTypeDAOImpl(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDeviceType(DeviceType deviceType) throws DeviceManagementDAOException {
|
||||
Connection conn = this.getConnection();
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
stmt = conn.prepareStatement("INSERT INTO DM_DEVICE_TYPE (NAME) VALUES (?)");
|
||||
stmt.setString(1, deviceType.getName());
|
||||
stmt.execute();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while registering the device type '" +
|
||||
deviceType.getName() + "'", e);
|
||||
} finally {
|
||||
DeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceType(DeviceType deviceType) throws DeviceManagementDAOException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeviceType> getDeviceTypes() throws DeviceManagementDAOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
private Connection getConnection() throws DeviceManagementDAOException {
|
||||
try {
|
||||
return dataSource.getConnection();
|
||||
} catch (SQLException e) {
|
||||
throw new DeviceManagementDAOException("Error occurred while obtaining a connection from the device " +
|
||||
"management metadata repository datasource", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2013, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.dao.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagerDataHolder;
|
||||
import org.wso2.carbon.user.api.TenantManager;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* Util class for RSS DAO operations
|
||||
*/
|
||||
public class DeviceDAOUtil {
|
||||
private static final Log log = LogFactory.getLog(DeviceDAOUtil.class);
|
||||
|
||||
/**
|
||||
* Clean up database resources
|
||||
* @param resultSet result set to be closed
|
||||
* @param statement prepared statement to be closed
|
||||
* @param conn connection to be closed
|
||||
* @param task occurred when clean up the resources
|
||||
*/
|
||||
public static synchronized void cleanupResources(ResultSet resultSet, PreparedStatement statement,
|
||||
Connection conn, String task) {
|
||||
if (resultSet != null) {
|
||||
try {
|
||||
resultSet.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while closing the result set " + task, e);
|
||||
}
|
||||
}
|
||||
if (statement != null) {
|
||||
try {
|
||||
statement.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while closing the statement " + task, e);
|
||||
}
|
||||
}
|
||||
if (conn != null) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while closing the connection "+ task, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Roll back database updates on error
|
||||
*
|
||||
* @param connection database connection
|
||||
* @param task task which was executing at the error.
|
||||
*/
|
||||
public static synchronized void rollback(Connection connection, String task) {
|
||||
if (connection != null) {
|
||||
try {
|
||||
connection.rollback();
|
||||
} catch (SQLException e) {
|
||||
log.error("Rollback failed on " + task, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized static int getTenantId() throws DeviceManagementException {
|
||||
CarbonContext ctx = CarbonContext.getThreadLocalCarbonContext();
|
||||
int tenantId = ctx.getTenantId();
|
||||
if (tenantId != MultitenantConstants.INVALID_TENANT_ID) {
|
||||
return tenantId;
|
||||
}
|
||||
String tenantDomain = ctx.getTenantDomain();
|
||||
if (null != tenantDomain) {
|
||||
try {
|
||||
TenantManager tenantManager = DeviceManagerDataHolder.getInstance().getTenantManager();
|
||||
tenantId = tenantManager.getTenantId(tenantDomain);
|
||||
} catch (UserStoreException e) {
|
||||
throw new DeviceManagementException("Error while retrieving the tenant Id for " +
|
||||
"tenant domain : " + tenantDomain, e);
|
||||
}
|
||||
}
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public static synchronized int getTenantId(String tenantDomain) throws DeviceManagementException {
|
||||
int tenantId = MultitenantConstants.INVALID_TENANT_ID;
|
||||
if (null != tenantDomain) {
|
||||
try {
|
||||
TenantManager tenantManager = DeviceManagerDataHolder.getInstance().getTenantManager();
|
||||
tenantId = tenantManager.getTenantId(tenantDomain);
|
||||
} catch (UserStoreException e) {
|
||||
throw new DeviceManagementException("Error while retrieving the tenant Id for " +
|
||||
"tenant domain : " + tenantDomain, e);
|
||||
}
|
||||
}
|
||||
return tenantId;
|
||||
}
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
/**
|
||||
* Copyright (c) 2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.dao.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.core.tenant.TenantManager;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
|
||||
import javax.naming.InitialContext;
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public final class DeviceManagementDAOUtil {
|
||||
|
||||
private static final Log log = LogFactory.getLog(DeviceManagementDAOUtil.class);
|
||||
|
||||
public static void cleanupResources(Connection conn, PreparedStatement stmt, ResultSet rs) {
|
||||
if (rs != null) {
|
||||
try {
|
||||
rs.close();
|
||||
} catch (SQLException e) {
|
||||
log.warn("Error occurred while closing result set", e);
|
||||
}
|
||||
}
|
||||
if (stmt != null) {
|
||||
try {
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
log.warn("Error occurred while closing prepared statement", e);
|
||||
}
|
||||
}
|
||||
if (conn != null) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException e) {
|
||||
log.warn("Error occurred while closing database connection", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get id of the current tenant
|
||||
* @return tenant id
|
||||
* @throws DeviceManagementDAOException if an error is observed when getting tenant id
|
||||
*/
|
||||
public static int getTenantId() throws DeviceManagementDAOException {
|
||||
CarbonContext context = CarbonContext.getThreadLocalCarbonContext();
|
||||
int tenantId = context.getTenantId();
|
||||
if (tenantId != MultitenantConstants.INVALID_TENANT_ID) {
|
||||
return tenantId;
|
||||
}
|
||||
String tenantDomain = context.getTenantDomain();
|
||||
if (tenantDomain == null) {
|
||||
String msg = "Tenant domain is not properly set and thus, is null";
|
||||
throw new DeviceManagementDAOException(msg);
|
||||
}
|
||||
TenantManager tenantManager = DeviceManagementDataHolder.getInstance().getTenantManager();
|
||||
try {
|
||||
tenantId = tenantManager.getTenantId(tenantDomain);
|
||||
} catch (UserStoreException e) {
|
||||
String msg = "Error occurred while retrieving id from the domain of tenant " +
|
||||
tenantDomain;
|
||||
throw new DeviceManagementDAOException(msg);
|
||||
}
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
public static DataSource lookupDataSource(String dataSourceName, final Hashtable<Object, Object> jndiProperties) {
|
||||
try {
|
||||
if (jndiProperties == null || jndiProperties.isEmpty()) {
|
||||
return (DataSource) InitialContext.doLookup(dataSourceName);
|
||||
}
|
||||
final InitialContext context = new InitialContext(jndiProperties);
|
||||
return (DataSource) context.doLookup(dataSourceName);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error in looking up data source: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
* WSO2 Inc. 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.
|
||||
* 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.wso2.carbon.device.mgt.core.dao.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.wso2.carbon.device.mgt.core.dao.exception.DeviceDAOException;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class ErrorHandler {
|
||||
|
||||
private String errorMsg = "";
|
||||
private Log log;
|
||||
|
||||
public ErrorHandler(String msg, Log log) {
|
||||
errorMsg = msg;
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
public void handleDAOException(String msg, SQLException e) throws DeviceDAOException {
|
||||
|
||||
log.error(msg, e);
|
||||
throw new DeviceDAOException(msg, e);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.internal;
|
||||
|
||||
import org.wso2.carbon.device.mgt.core.DeviceManagementRepository;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
import org.wso2.carbon.user.core.tenant.TenantManager;
|
||||
|
||||
public class DeviceManagementDataHolder {
|
||||
|
||||
private RealmService realmService;
|
||||
private TenantManager tenantManager;
|
||||
private DeviceManagementRepository repository;
|
||||
private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder();
|
||||
|
||||
private DeviceManagementDataHolder() {}
|
||||
|
||||
public static DeviceManagementDataHolder getInstance() {
|
||||
return thisInstance;
|
||||
}
|
||||
|
||||
public RealmService getRealmService() {
|
||||
return realmService;
|
||||
}
|
||||
|
||||
public void setRealmService(RealmService realmService) {
|
||||
this.realmService = realmService;
|
||||
this.setTenantManager(realmService);
|
||||
}
|
||||
|
||||
private void setTenantManager(RealmService realmService) {
|
||||
if (realmService == null) {
|
||||
throw new IllegalStateException("Realm service is not initialized properly");
|
||||
}
|
||||
this.tenantManager = realmService.getTenantManager();
|
||||
}
|
||||
|
||||
public TenantManager getTenantManager() {
|
||||
return tenantManager;
|
||||
}
|
||||
|
||||
public DeviceManagementRepository getDeviceManagementRepository() {
|
||||
return repository;
|
||||
}
|
||||
|
||||
public void setDeviceManagementRepository(DeviceManagementRepository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.internal;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagerService;
|
||||
import org.wso2.carbon.device.mgt.core.DeviceManagementRepository;
|
||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
|
||||
/**
|
||||
* @scr.component name="org.wso2.carbon.device.manager" immediate="true"
|
||||
* @scr.reference name="user.realmservice.default"
|
||||
* interface="org.wso2.carbon.user.core.service.RealmService"
|
||||
* cardinality="1..1"
|
||||
* policy="dynamic"
|
||||
* bind="setRealmService"
|
||||
* unbind="unsetRealmService"
|
||||
* @scr.reference name="device.manager.service"
|
||||
* interface="org.wso2.carbon.device.mgt.common.spi.DeviceManagerService"
|
||||
* cardinality="1..n"
|
||||
* policy="dynamic"
|
||||
* bind="setDeviceManagerService"
|
||||
* unbind="unsetDeviceManagerService"
|
||||
*/
|
||||
public class DeviceManagementServiceComponent {
|
||||
|
||||
private static Log log = LogFactory.getLog(DeviceManagementServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext componentContext) {
|
||||
try {
|
||||
/* Initializing Device Management Configuration */
|
||||
DeviceConfigurationManager.getInstance().initConfig();
|
||||
|
||||
DataSourceConfig config = DeviceConfigurationManager.getInstance().getDataSourceConfig();
|
||||
DeviceManagementDAOFactory.init(config);
|
||||
|
||||
DeviceManagementDataHolder.getInstance().setDeviceManagementRepository(new DeviceManagementRepository());
|
||||
|
||||
String setupOption = System.getProperty("setup");
|
||||
/* If -Dsetup option specified then create device management database schema */
|
||||
if (setupOption != null) {
|
||||
setupDeviceManagementSchema(config);
|
||||
}
|
||||
|
||||
BundleContext bundleContext = componentContext.getBundleContext();
|
||||
bundleContext.registerService(DeviceManagementService.class.getName(),
|
||||
new DeviceManagementService(), null);
|
||||
|
||||
} catch (Throwable e) {
|
||||
String msg = "Error occurred while initializing device management core bundle";
|
||||
log.error(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupDeviceManagementSchema(DataSourceConfig config) throws DeviceManagementException {
|
||||
log.info("Setup option specified");
|
||||
DeviceManagementSchemaInitializer initializer = new DeviceManagementSchemaInitializer(config);
|
||||
log.info("Creating Meta Data tables");
|
||||
try {
|
||||
initializer.createRegistryDatabase();
|
||||
} catch (Exception e) {
|
||||
throw new DeviceManagementException("Error occurred while initializing Device Management " +
|
||||
"database schema", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Device Manager services
|
||||
* @param deviceManager An instance of DeviceManagerService
|
||||
*/
|
||||
protected void setDeviceManagerService(DeviceManagerService deviceManager) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Setting Device Management Service");
|
||||
}
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
addDeviceManagementProvider(deviceManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets Device Management services
|
||||
* @param deviceManager An instance of DeviceManagerService
|
||||
*/
|
||||
protected void unsetDeviceManagerService(DeviceManagerService deviceManager) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Unsetting Device Management Service");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Realm Service
|
||||
* @param realmService An instance of RealmService
|
||||
*/
|
||||
protected void setRealmService(RealmService realmService) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Setting Realm Service");
|
||||
}
|
||||
DeviceManagementDataHolder.getInstance().setRealmService(realmService);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets Realm Service
|
||||
* @param realmService An instance of RealmService
|
||||
*/
|
||||
protected void unsetRealmService(RealmService realmService) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Unsetting Realm Service");
|
||||
}
|
||||
DeviceManagementDataHolder.getInstance().setRealmService(null);
|
||||
}
|
||||
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.device.mgt.core.internal;
|
||||
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.ndatasource.core.DataSourceService;
|
||||
import org.wso2.carbon.securevault.SecretCallbackHandlerService;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
import org.wso2.carbon.user.core.tenant.TenantManager;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
import javax.transaction.TransactionManager;
|
||||
|
||||
public class DeviceManagerDataHolder {
|
||||
|
||||
private DataSourceService dataSourceService;
|
||||
|
||||
private RealmService realmService;
|
||||
|
||||
private TransactionManager transactionManager;
|
||||
|
||||
private SecretCallbackHandlerService secretCallbackHandlerService;
|
||||
|
||||
private TenantManager tenantManager;
|
||||
|
||||
private static DeviceManagerDataHolder thisInstance = new DeviceManagerDataHolder();
|
||||
|
||||
private DeviceManagerDataHolder() {
|
||||
}
|
||||
|
||||
public static DeviceManagerDataHolder getInstance() {
|
||||
return thisInstance;
|
||||
}
|
||||
|
||||
public DataSourceService getDataSourceService() {
|
||||
return dataSourceService;
|
||||
}
|
||||
|
||||
public void setDataSourceService(DataSourceService dataSourceService) {
|
||||
this.dataSourceService = dataSourceService;
|
||||
}
|
||||
|
||||
public RealmService getRealmService() {
|
||||
return realmService;
|
||||
}
|
||||
|
||||
public void setRealmService(RealmService realmService) {
|
||||
this.realmService = realmService;
|
||||
}
|
||||
|
||||
public TransactionManager getTransactionManager() {
|
||||
return transactionManager;
|
||||
}
|
||||
|
||||
public void setTransactionManager(TransactionManager transactionManager) {
|
||||
this.transactionManager = transactionManager;
|
||||
}
|
||||
|
||||
public SecretCallbackHandlerService getSecretCallbackHandlerService() {
|
||||
return secretCallbackHandlerService;
|
||||
}
|
||||
|
||||
public void setSecretCallbackHandlerService(
|
||||
SecretCallbackHandlerService secretCallbackHandlerService) {
|
||||
this.secretCallbackHandlerService = secretCallbackHandlerService;
|
||||
}
|
||||
|
||||
public static void setThisInstance(DeviceManagerDataHolder thisInstance) {
|
||||
DeviceManagerDataHolder.thisInstance = thisInstance;
|
||||
}
|
||||
|
||||
public TenantManager getTenantManager() throws DeviceManagementException {
|
||||
RealmService realmService = getRealmService();
|
||||
if (realmService == null) {
|
||||
throw new DeviceManagementException("Realm service is not initialized properly");
|
||||
}
|
||||
return realmService.getTenantManager();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tenant id of the current tenant
|
||||
*
|
||||
* @return tenant id
|
||||
* @throws DeviceManagementException if error occurred when getting tenant id
|
||||
*/
|
||||
public int getTenantId() throws DeviceManagementException {
|
||||
CarbonContext context = CarbonContext.getThreadLocalCarbonContext();
|
||||
int tenantId = context.getTenantId();
|
||||
if (tenantId != MultitenantConstants.INVALID_TENANT_ID) {
|
||||
return tenantId;
|
||||
}
|
||||
String tenantDomain = context.getTenantDomain();
|
||||
if (tenantDomain == null) {
|
||||
String msg = "Tenant domain is not properly set and thus, is null";
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
TenantManager tenantManager = getTenantManager();
|
||||
try {
|
||||
tenantId = tenantManager.getTenantId(tenantDomain);
|
||||
} catch (UserStoreException e) {
|
||||
String msg = "Error occurred while retrieving id from the domain of tenant " +
|
||||
tenantDomain;
|
||||
throw new DeviceManagementException(msg);
|
||||
}
|
||||
return tenantId;
|
||||
}
|
||||
|
||||
}
|
@ -1,113 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.internal;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagerService;
|
||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceMgtDbCreator;
|
||||
import org.wso2.carbon.utils.CarbonUtils;
|
||||
|
||||
import javax.naming.InitialContext;
|
||||
import javax.transaction.TransactionManager;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @scr.component name="org.wso2.carbon.device.manager" immediate="true"
|
||||
* @scr.reference name="device.manager.service"
|
||||
* interface="org.wso2.carbon.device.mgt.common.spi.DeviceManagerService" cardinality="1..n"
|
||||
* policy="dynamic" bind="setDeviceManagerService" unbind="unsetDeviceManagerService"
|
||||
*/
|
||||
public class DeviceMgtServiceComponent {
|
||||
|
||||
private static Log log = LogFactory.getLog(DeviceMgtServiceComponent.class);
|
||||
private final String deviceMgtSetupSql = CarbonUtils.getCarbonHome() + File.separator + "dbscripts" ;
|
||||
|
||||
protected void setDeviceManagerService(DeviceManagerService deviceManager) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Setting Device Management Service");
|
||||
}
|
||||
}
|
||||
|
||||
protected void unsetDeviceManagerService(DeviceManagerService deviceManager) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Unsetting Device Management Service");
|
||||
}
|
||||
}
|
||||
|
||||
protected void activate(ComponentContext componentContext) {
|
||||
BundleContext bundleContext = componentContext.getBundleContext();
|
||||
|
||||
|
||||
try {
|
||||
|
||||
/* Looks up for the JNDI registered transaction manager */
|
||||
DeviceManagerDataHolder.getInstance().setTransactionManager(this.lookupTransactionManager());
|
||||
/* Initializing RSS Configuration */
|
||||
DeviceConfigurationManager.getInstance().initConfig();
|
||||
|
||||
String setupOption = System.getProperty("setup");
|
||||
//if -Dsetup option specified then create rss manager tables
|
||||
if (setupOption != null) {
|
||||
log.info("Setup option specified");
|
||||
DeviceMgtDbCreator dbCreator = new DeviceMgtDbCreator(DeviceManagerUtil.getDataSource());
|
||||
dbCreator.setRssDBScriptDirectory(deviceMgtSetupSql);
|
||||
log.info("Creating Meta Data tables");
|
||||
dbCreator.createRegistryDatabase();
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
String msg = "Error occurred while initializing RSS Manager core bundle";
|
||||
log.error(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
private TransactionManager lookupTransactionManager() {
|
||||
TransactionManager transactionManager = null;
|
||||
try {
|
||||
Object txObj = InitialContext.doLookup(
|
||||
DeviceManagementConstants.STANDARD_USER_TRANSACTION_JNDI_NAME);
|
||||
if (txObj instanceof TransactionManager) {
|
||||
transactionManager = (TransactionManager) txObj;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Cannot find transaction manager at: "
|
||||
+ DeviceManagementConstants.STANDARD_USER_TRANSACTION_JNDI_NAME, e);
|
||||
}
|
||||
/* ignore, move onto next step */
|
||||
}
|
||||
if (transactionManager == null) {
|
||||
try {
|
||||
transactionManager = InitialContext.doLookup(
|
||||
DeviceManagementConstants.STANDARD_TRANSACTION_MANAGER_JNDI_NAME);
|
||||
} catch (Exception e) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Cannot find transaction manager at: " +
|
||||
DeviceManagementConstants.STANDARD_TRANSACTION_MANAGER_JNDI_NAME, e);
|
||||
}
|
||||
/* we'll do the lookup later, maybe user provided a custom JNDI name */
|
||||
}
|
||||
}
|
||||
return transactionManager;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.service;
|
||||
|
||||
import org.wso2.carbon.core.AbstractAdmin;
|
||||
|
||||
public class DeviceManagementAdminService extends AbstractAdmin {
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
/**
|
||||
* Copyright (c) 2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.wso2.carbon.device.mgt.core.service;
|
||||
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagerService;
|
||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceManagementService implements DeviceManagerService {
|
||||
|
||||
@Override
|
||||
public String getProviderType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enrollDevice(Device device) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(device.getType());
|
||||
dms.enrollDevice(device);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifyEnrollment(Device device) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(device.getType());
|
||||
dms.modifyEnrollment(device);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
dms.disenrollDevice(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRegistered(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
return dms.isRegistered(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
return dms.isActive(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setActive(DeviceIdentifier deviceId, boolean status) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
dms.setActive(deviceId, status);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Device> getAllDevices(String type) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(type);
|
||||
return dms.getAllDevices(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
return dms.getDevice(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceInfo(Device device) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(device.getType());
|
||||
dms.updateDeviceInfo(device);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOwnership(DeviceIdentifier deviceId, String ownershipType) throws DeviceManagementException {
|
||||
DeviceManagerService dms =
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementRepository().
|
||||
getDeviceManagementProvider(deviceId.getType());
|
||||
dms.setOwnership(deviceId, ownershipType);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue