merge-requests/7/head
mharindu 9 years ago
commit cfe24229fc

@ -112,7 +112,7 @@ public interface DeviceNotification {
value = "Sending a Device Notification", value = "Sending a Device Notification",
notes = "Notify users on device operation failures and other information using this REST API") notes = "Notify users on device operation failures and other information using this REST API")
@ApiResponses(value = { @ApiResponses(value = {
@ApiResponse(code = 201, message = "NNotification has added successfully"), @ApiResponse(code = 201, message = "Notification has been added successfully"),
@ApiResponse(code = 500, message = "Error occurred while updating notification status") @ApiResponse(code = 500, message = "Error occurred while updating notification status")
}) })
@Permission(scope = "device-notification-modify", @Permission(scope = "device-notification-modify",

@ -97,7 +97,7 @@ public class DeviceNotificationImpl implements DeviceNotification{
ResponsePayload responseMsg = new ResponsePayload(); ResponsePayload responseMsg = new ResponsePayload();
try { try {
DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification); DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification);
responseMsg.setMessageFromServer("Notification has added successfully."); responseMsg.setMessageFromServer("Notification has been added successfully.");
responseMsg.setStatusCode(HttpStatus.SC_CREATED); responseMsg.setStatusCode(HttpStatus.SC_CREATED);
return Response.status(Response.Status.CREATED).entity(responseMsg).build(); return Response.status(Response.Status.CREATED).entity(responseMsg).build();
} catch (NotificationManagementException e) { } catch (NotificationManagementException e) {

@ -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;">
&nbsp;&nbsp;&nbsp;&nbsp;Cancel&nbsp;&nbsp;&nbsp;&nbsp;</button> &nbsp;&nbsp;&nbsp;&nbsp;Cancel&nbsp;&nbsp;&nbsp;&nbsp;</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">
&nbsp;&nbsp;&nbsp;&nbsp;Ok&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Ok&nbsp;&nbsp;&nbsp;&nbsp;

@ -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…
Cancel
Save