mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #281 from charithag/master
FIx for https://wso2.org/jira/browse/IOTS-169
This commit is contained in:
commit
d763d81404
@ -25,7 +25,7 @@ import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
|||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
||||||
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
||||||
@ -50,6 +50,9 @@ import java.util.List;
|
|||||||
@SuppressWarnings("NonJaxWsWebServices")
|
@SuppressWarnings("NonJaxWsWebServices")
|
||||||
public class GroupImpl implements Group {
|
public class GroupImpl implements Group {
|
||||||
|
|
||||||
|
private static final String GROUP_CANNOT_NULL_MSG = "Group cannot be null.";
|
||||||
|
private static final String GROUP_NAME_INVALID_MSG = "Provided group name is invalid. Should be in minimum 3 " +
|
||||||
|
"characters long and should not include any whitespaces.";
|
||||||
private static Log log = LogFactory.getLog(GroupImpl.class);
|
private static Log log = LogFactory.getLog(GroupImpl.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -58,7 +61,9 @@ public class GroupImpl implements Group {
|
|||||||
public Response createGroup(DeviceGroup group) {
|
public Response createGroup(DeviceGroup group) {
|
||||||
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
return Response.status(Response.Status.BAD_REQUEST).entity(GROUP_CANNOT_NULL_MSG).build();
|
||||||
|
} else if (group.getName() == null || !group.getName().matches("^[\\S]{3,30}$")) {
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity(GROUP_NAME_INVALID_MSG).build();
|
||||||
}
|
}
|
||||||
group.setOwner(owner);
|
group.setOwner(owner);
|
||||||
group.setDateOfCreation(new Date().getTime());
|
group.setDateOfCreation(new Date().getTime());
|
||||||
@ -78,7 +83,7 @@ public class GroupImpl implements Group {
|
|||||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_EVENTS,
|
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_EVENTS,
|
||||||
DeviceGroupConstants.Permissions.DEFAULT_VIEW_EVENTS_PERMISSIONS);
|
DeviceGroupConstants.Permissions.DEFAULT_VIEW_EVENTS_PERMISSIONS);
|
||||||
return Response.status(Response.Status.CREATED).build();
|
return Response.status(Response.Status.CREATED).build();
|
||||||
} catch (GroupAlreadyEixistException e) {
|
} catch (GroupAlreadyExistException e) {
|
||||||
return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build();
|
return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build();
|
||||||
} catch (GroupManagementException e) {
|
} catch (GroupManagementException e) {
|
||||||
log.error(e.getErrorMessage(), e);
|
log.error(e.getErrorMessage(), e);
|
||||||
@ -92,9 +97,12 @@ public class GroupImpl implements Group {
|
|||||||
@Consumes("application/json")
|
@Consumes("application/json")
|
||||||
@Produces("application/json")
|
@Produces("application/json")
|
||||||
public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||||
DeviceGroup deviceGroup) {
|
DeviceGroup group) {
|
||||||
|
if (group.getName() == null || !group.getName().matches("^[\\S]{3,30}$")) {
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity(GROUP_NAME_INVALID_MSG).build();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner);
|
DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(group, groupName, owner);
|
||||||
return Response.status(Response.Status.OK).build();
|
return Response.status(Response.Status.OK).build();
|
||||||
} catch (GroupManagementException e) {
|
} catch (GroupManagementException e) {
|
||||||
log.error(e.getErrorMessage(), e);
|
log.error(e.getErrorMessage(), e);
|
||||||
|
|||||||
@ -21,31 +21,31 @@ package org.wso2.carbon.device.mgt.common.group.mgt;
|
|||||||
/**
|
/**
|
||||||
* This class represents a custom exception specified for group management
|
* This class represents a custom exception specified for group management
|
||||||
*/
|
*/
|
||||||
public class GroupAlreadyEixistException extends Exception {
|
public class GroupAlreadyExistException extends Exception {
|
||||||
|
|
||||||
private static final long serialVersionUID = -312678379574816874L;
|
private static final long serialVersionUID = -312678379574816874L;
|
||||||
private String errorMessage;
|
private String errorMessage;
|
||||||
|
|
||||||
public GroupAlreadyEixistException(String msg, Exception nestedEx) {
|
public GroupAlreadyExistException(String msg, Exception nestedEx) {
|
||||||
super(msg, nestedEx);
|
super(msg, nestedEx);
|
||||||
setErrorMessage(msg);
|
setErrorMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupAlreadyEixistException(String message, Throwable cause) {
|
public GroupAlreadyExistException(String message, Throwable cause) {
|
||||||
super(message, cause);
|
super(message, cause);
|
||||||
setErrorMessage(message);
|
setErrorMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupAlreadyEixistException(String msg) {
|
public GroupAlreadyExistException(String msg) {
|
||||||
super(msg);
|
super(msg);
|
||||||
setErrorMessage(msg);
|
setErrorMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupAlreadyEixistException() {
|
public GroupAlreadyExistException() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupAlreadyEixistException(Throwable cause) {
|
public GroupAlreadyExistException(Throwable cause) {
|
||||||
super(cause);
|
super(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ import org.wso2.carbon.device.mgt.common.Device;
|
|||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
||||||
import org.wso2.carbon.user.core.multiplecredentials.UserDoesNotExistException;
|
import org.wso2.carbon.user.core.multiplecredentials.UserDoesNotExistException;
|
||||||
@ -43,7 +43,7 @@ public interface GroupManagementProviderService {
|
|||||||
* @throws GroupManagementException
|
* @throws GroupManagementException
|
||||||
*/
|
*/
|
||||||
void createGroup(DeviceGroup deviceGroup, String defaultRole,
|
void createGroup(DeviceGroup deviceGroup, String defaultRole,
|
||||||
String[] defaultPermissions) throws GroupManagementException, GroupAlreadyEixistException;
|
String[] defaultPermissions) throws GroupManagementException, GroupAlreadyExistException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update existing device group.
|
* Update existing device group.
|
||||||
|
|||||||
@ -29,7 +29,7 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
|||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||||
import org.wso2.carbon.device.mgt.common.TransactionManagementException;
|
import org.wso2.carbon.device.mgt.common.TransactionManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyExistException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
||||||
import org.wso2.carbon.device.mgt.core.group.mgt.DeviceGroupBuilder;
|
import org.wso2.carbon.device.mgt.core.group.mgt.DeviceGroupBuilder;
|
||||||
@ -69,7 +69,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void createGroup(DeviceGroup deviceGroup, String defaultRole, String[] defaultPermissions)
|
public void createGroup(DeviceGroup deviceGroup, String defaultRole, String[] defaultPermissions)
|
||||||
throws GroupManagementException, GroupAlreadyEixistException {
|
throws GroupManagementException, GroupAlreadyExistException {
|
||||||
if (deviceGroup == null) {
|
if (deviceGroup == null) {
|
||||||
throw new GroupManagementException("DeviceGroup cannot be null.", new NullPointerException());
|
throw new GroupManagementException("DeviceGroup cannot be null.", new NullPointerException());
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ public class GroupManagementProviderServiceImpl implements GroupManagementProvid
|
|||||||
groupId = this.groupDAO.addGroup(groupBroker, tenantId);
|
groupId = this.groupDAO.addGroup(groupBroker, tenantId);
|
||||||
GroupManagementDAOFactory.commitTransaction();
|
GroupManagementDAOFactory.commitTransaction();
|
||||||
} else {
|
} else {
|
||||||
throw new GroupAlreadyEixistException("Group exist with name " + deviceGroup.getName());
|
throw new GroupAlreadyExistException("Group exist with name " + deviceGroup.getName());
|
||||||
}
|
}
|
||||||
} catch (GroupManagementDAOException e) {
|
} catch (GroupManagementDAOException e) {
|
||||||
GroupManagementDAOFactory.rollbackTransaction();
|
GroupManagementDAOFactory.rollbackTransaction();
|
||||||
|
|||||||
@ -37,6 +37,11 @@
|
|||||||
"emailJSRegEx" : "/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/",
|
"emailJSRegEx" : "/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/",
|
||||||
"emailRegExViolationErrorMsg" : "Provided email is invalid."
|
"emailRegExViolationErrorMsg" : "Provided email is invalid."
|
||||||
},
|
},
|
||||||
|
"groupValidationConfig": {
|
||||||
|
"groupNameJSRegEx": "^[\\S]{3,30}$",
|
||||||
|
"groupNameRegExViolationErrorMsg": "Provided group name is invalid.",
|
||||||
|
"groupNameHelpMsg": "Should be in minimum 3 characters long and should not include any whitespaces."
|
||||||
|
},
|
||||||
"roleValidationConfig" : {
|
"roleValidationConfig" : {
|
||||||
"rolenameJSRegEx" : "^[\\S]{3,30}$",
|
"rolenameJSRegEx" : "^[\\S]{3,30}$",
|
||||||
"rolenameRegExViolationErrorMsg" : "Provided role name is invalid.",
|
"rolenameRegExViolationErrorMsg" : "Provided role name is invalid.",
|
||||||
|
|||||||
@ -1,20 +1,3 @@
|
|||||||
{{!
|
|
||||||
Copyright (c) 2016, 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.
|
|
||||||
}}
|
|
||||||
{{unit "cdmf.unit.ui.title" pageTitle="Group Management"}}
|
{{unit "cdmf.unit.ui.title" pageTitle="Group Management"}}
|
||||||
|
|
||||||
{{#zone "breadcrumbs"}}
|
{{#zone "breadcrumbs"}}
|
||||||
@ -49,11 +32,12 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<form method="GET" class="form-login-box" action="groups">
|
<div class="form-login-box">
|
||||||
<label class="wr-input-label">Group Name</label>
|
<label class="wr-input-label">Group Name</label>
|
||||||
|
|
||||||
<div class="wr-input-control">
|
<div class="wr-input-control">
|
||||||
<input type="text right" id="name" placeholder="Group Name">
|
<input type="text right" id="name" placeholder="Group Name" data-regex="{{groupNameJSRegEx}}"
|
||||||
|
data-errormsg="{{groupNameRegExViolationErrorMsg}}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label class="wr-input-label">Description</label>
|
<label class="wr-input-label">Description</label>
|
||||||
@ -68,7 +52,7 @@
|
|||||||
<button class="wr-btn" onclick="window.location = '{{@app.context}}/groups';return false;">
|
<button class="wr-btn" onclick="window.location = '{{@app.context}}/groups';return false;">
|
||||||
Cancel </button>
|
Cancel </button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the dynamic state to be populated by add-group page.
|
||||||
|
*
|
||||||
|
* @param context Object that gets updated with the dynamic state of this page to be presented
|
||||||
|
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
||||||
|
*/
|
||||||
|
function onRequest(context) {
|
||||||
|
var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
|
||||||
|
var page = {};
|
||||||
|
page["groupNameJSRegEx"] = devicemgtProps.groupValidationConfig.groupNameJSRegEx;
|
||||||
|
page["groupNameRegExViolationErrorMsg"] = devicemgtProps.groupValidationConfig.groupNameRegExViolationErrorMsg;
|
||||||
|
page["groupNameHelpMsg"] = devicemgtProps.groupValidationConfig.groupNameHelpMsg;
|
||||||
|
return page;
|
||||||
|
}
|
||||||
@ -16,6 +16,18 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if provided input is valid against RegEx input.
|
||||||
|
*
|
||||||
|
* @param regExp Regular expression
|
||||||
|
* @param inputString Input string to check
|
||||||
|
* @returns {boolean} Returns true if input matches RegEx
|
||||||
|
*/
|
||||||
|
function inputIsValid(regExp, inputString) {
|
||||||
|
regExp = new RegExp(regExp);
|
||||||
|
return regExp.test(inputString);
|
||||||
|
}
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$("button#add-group-btn").click(function () {
|
$("button#add-group-btn").click(function () {
|
||||||
|
|
||||||
@ -26,6 +38,10 @@ $(function () {
|
|||||||
$('.wr-validation-summary strong').text("Group Name is a required field. It cannot be empty.");
|
$('.wr-validation-summary strong').text("Group Name is a required field. It cannot be empty.");
|
||||||
$('.wr-validation-summary').removeClass("hidden");
|
$('.wr-validation-summary').removeClass("hidden");
|
||||||
return false;
|
return false;
|
||||||
|
} else if (!inputIsValid($("input#name").data("regex"), name)) {
|
||||||
|
$('.wr-validation-summary strong').text($("input#name").data("errormsg"));
|
||||||
|
$('.wr-validation-summary').removeClass("hidden");
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
var group = {"name": name, "description": description};
|
var group = {"name": name, "description": description};
|
||||||
|
|
||||||
|
|||||||
@ -226,8 +226,7 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-5 col-md-6 col-centered">
|
<div class="col-lg-5 col-md-6 col-centered">
|
||||||
<h3>Exception at backend. Try Later.</h3>
|
<h3 id="error-msg">Bad Request. Please contact your administrator.</h3>
|
||||||
|
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<a href="#" id="group-400-link" class="btn-operations">
|
<a href="#" id="group-400-link" class="btn-operations">
|
||||||
Ok
|
Ok
|
||||||
|
|||||||
@ -484,6 +484,9 @@ function displayErrors(jqXHR) {
|
|||||||
showPopup();
|
showPopup();
|
||||||
if (jqXHR.status == 400) {
|
if (jqXHR.status == 400) {
|
||||||
$(modalPopupContent).html($('#group-400-content').html());
|
$(modalPopupContent).html($('#group-400-content').html());
|
||||||
|
if (jqXHR.responseText) {
|
||||||
|
$('#error-msg').html(jqXHR.responseText.replace(new RegExp("\"", 'g'), ""));
|
||||||
|
}
|
||||||
$("a#group-400-link").click(function () {
|
$("a#group-400-link").click(function () {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user