Resolving conflicts

revert-70aa11f8
kamidu 9 years ago
commit 9fde8c0442

@ -374,7 +374,7 @@ public interface PolicyManagementService {
required = true) required = true)
List<Integer> policyIds); List<Integer> policyIds);
@POST @PUT
@Path("/deactivate-policy") @Path("/deactivate-policy")
@ApiOperation( @ApiOperation(
consumes = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,

@ -150,6 +150,9 @@ public class Application implements Serializable {
if (applicationIdentifier != null ? !applicationIdentifier.equals(that.applicationIdentifier) : that.applicationIdentifier != null) { if (applicationIdentifier != null ? !applicationIdentifier.equals(that.applicationIdentifier) : that.applicationIdentifier != null) {
return false; return false;
} }
if (version != null ? !version.equals(that.version) : that.version != null) {
return false;
}
return true; return true;
} }

@ -97,8 +97,8 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
if (deviceIds.size() > 0) { if (deviceIds.size() > 0) {
type = deviceIds.get(0).getType().toLowerCase(); type = deviceIds.get(0).getType().toLowerCase();
} }
Activity activity = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider(). Activity activity = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().
addOperation(type, operation, deviceIds); addOperation(type, operation, deviceIds);
DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().notifyOperationToDevices DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().notifyOperationToDevices
(operation, deviceIds); (operation, deviceIds);
return activity; return activity;
@ -217,13 +217,14 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
appIdsToRemove.add(installedApp.getId()); appIdsToRemove.add(installedApp.getId());
} }
} }
applicationMappingDAO.removeApplicationMapping(device.getId(), appIdsToRemove, tenantId);
Application installedApp; Application installedApp;
List<Integer> applicationIds = new ArrayList<>(); List<Integer> applicationIds = new ArrayList<>();
for (Application application : applications) { for (Application application : applications) {
if (!installedAppList.contains(application)) { if (!installedAppList.contains(application)) {
installedApp = applicationDAO.getApplication(application.getApplicationIdentifier(), tenantId); installedApp = applicationDAO.getApplication(application.getApplicationIdentifier(),
application.getVersion(), tenantId);
if (installedApp == null) { if (installedApp == null) {
appsToAdd.add(application); appsToAdd.add(application);
} else { } else {
@ -244,7 +245,7 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("num of remove app Ids:" + appIdsToRemove.size()); log.debug("num of remove app Ids:" + appIdsToRemove.size());
} }
applicationMappingDAO.removeApplicationMapping(device.getId(), appIdsToRemove, tenantId);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();

@ -32,5 +32,7 @@ public interface ApplicationDAO {
Application getApplication(String identifier, int tenantId) throws DeviceManagementDAOException; Application getApplication(String identifier, int tenantId) throws DeviceManagementDAOException;
Application getApplication(String identifier, String version,int tenantId) throws DeviceManagementDAOException;
List<Application> getInstalledApplications(int deviceId) throws DeviceManagementDAOException; List<Application> getInstalledApplications(int deviceId) throws DeviceManagementDAOException;
} }

@ -228,6 +228,34 @@ public class ApplicationDAOImpl implements ApplicationDAO {
} }
} }
@Override
public Application getApplication(String identifier, String version, int tenantId) throws DeviceManagementDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet rs = null;
Application application = null;
try {
conn = this.getConnection();
stmt = conn.prepareStatement("SELECT ID, NAME, APP_IDENTIFIER, PLATFORM, CATEGORY, VERSION, TYPE, " +
"LOCATION_URL, IMAGE_URL, APP_PROPERTIES, MEMORY_USAGE, IS_ACTIVE, TENANT_ID FROM DM_APPLICATION WHERE APP_IDENTIFIER = ? " +
"AND VERSION = ? AND TENANT_ID = ?");
stmt.setString(1, identifier);
stmt.setString(2, version);
stmt.setInt(3, tenantId);
rs = stmt.executeQuery();
if (rs.next()) {
application = this.loadApplication(rs);
}
return application;
} catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while retrieving application application '" +
identifier + "' and version '" + version + "'.", e);
} finally {
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
}
}
private Connection getConnection() throws SQLException { private Connection getConnection() throws SQLException {
return DeviceManagementDAOFactory.getConnection(); return DeviceManagementDAOFactory.getConnection();
} }

@ -239,8 +239,7 @@ var userModule = function () {
* Get User Roles from user store (Internal roles not included). * Get User Roles from user store (Internal roles not included).
* @returns {object} a response object with status and content on success. * @returns {object} a response object with status and content on success.
*/ */
publicMethods.getRolesByUserStore = function () { publicMethods.getRolesByUserStore = function (userStore) {
var ROLE_LIMIT = devicemgtProps["pageSize"];
var carbonUser = session.get(constants["USER_SESSION_KEY"]); var carbonUser = session.get(constants["USER_SESSION_KEY"]);
var utility = require("/app/modules/utility.js")["utility"]; var utility = require("/app/modules/utility.js")["utility"];
if (!carbonUser) { if (!carbonUser) {
@ -249,7 +248,8 @@ var userModule = function () {
} }
try { try {
utility.startTenantFlow(carbonUser); utility.startTenantFlow(carbonUser);
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles?limit=" + ROLE_LIMIT; var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
"/roles?user-store=" + userStore + "&limit=100";
var response = privateMethods.callBackend(url, constants["HTTP_GET"]); var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
if (response.status == "success") { if (response.status == "success") {
response.content = parse(response.content).roles; response.content = parse(response.content).roles;

@ -15,7 +15,7 @@
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
}} }}
{{unit "cdmf.unit.ui.title" pageTitle="Policy Management"}} {{unit "cdmf.unit.ui.title" pageTitle="Policy Management | Policy Priorities"}}
{{#zone "breadcrumbs"}} {{#zone "breadcrumbs"}}
<li> <li>
@ -24,10 +24,17 @@
</a> </a>
</li> </li>
<li> <li>
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/policies"> <a href="{{@app.context}}/policies">
Policies Policies
</a> </a>
</li> </li>
<li>
<!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/policy/priority">
Priorities
</a>
</li>
{{/zone}} {{/zone}}
{{#zone "content"}} {{#zone "content"}}

@ -1,5 +1,5 @@
{ {
"version": "1.0.0", "version": "1.0.0",
"uri": "/policy/priority", "uri": "/policy/priority",
"layout": "cdmf.layout.default" "layout": "cdmf.layout.default"
} }

@ -67,25 +67,19 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</label> </label>
<div id="usernameInputField" class="form-group wr-input-control"> <div id="usernameInputField" class="form-group wr-input-control">
<input limit="{{charLimit}}" type="text" id="username" data-regex="{{usernameJSRegEx}}" <input limit="{{charLimit}}" type="text" id="username" data-regex="{{usernameJSRegEx}}" data-errormsg="{{usernameRegExViolationErrorMsg}}" class="form-control"/>
data-errormsg="{{usernameRegExViolationErrorMsg}}" class="form-control"/>
<span class=" usernameError hidden glyphicon glyphicon-remove form-control-feedback"></span> <span class=" usernameError hidden glyphicon glyphicon-remove form-control-feedback"></span>
<label class="error usernameEmpty hidden" for="summary">This field is required. Username <label class="error usernameEmpty hidden" for="summary">This field is required. Username should be in minimum 3 characters long and do not include any whitespaces.</label>
should be in minimum 3
characters long and do not
include any whitespaces.</label>
</div> </div>
<label class="wr-input-label">First Name *</label> <label class="wr-input-label">First Name *</label>
<div id="firstNameField" class="form-group wr-input-control"> <div id="firstNameField" class="form-group wr-input-control">
<input type="text" id="firstname" data-regex="{{firstnameJSRegEx}}" <input type="text" id="firstname" data-regex="{{firstnameJSRegEx}}" data-errormsg="{{firstnameRegExViolationErrorMsg}}" class="form-control"/>
data-errormsg="{{firstnameRegExViolationErrorMsg}}" class="form-control"/>
<span class="glyphicon glyphicon-remove form-control-feedback hidden fnError"></span> <span class="glyphicon glyphicon-remove form-control-feedback hidden fnError"></span>
<label class=" hidden error fnError" for="summary">This field is required.</label> <label class=" hidden error fnError" for="summary">This field is required.</label>
</div> </div>
<label class="wr-input-label">Last Name *</label> <label class="wr-input-label">Last Name *</label>
<div id="lastNameField" class="form-group wr-input-control"> <div id="lastNameField" class="form-group wr-input-control">
<input type="text" id="lastname" data-regex="{{lastnameJSRegEx}}" <input type="text" id="lastname" data-regex="{{lastnameJSRegEx}}" data-errormsg="{{lastnameRegExViolationErrorMsg}}" class="form-control"/>
data-errormsg="{{lastnameRegExViolationErrorMsg}}" class="form-control"/>
<span class="glyphicon glyphicon-remove form-control-feedback hidden lnError"></span> <span class="glyphicon glyphicon-remove form-control-feedback hidden lnError"></span>
<label class=" hidden error lnError" for="summary">This field is required.</label> <label class=" hidden error lnError" for="summary">This field is required.</label>
</div> </div>
@ -121,6 +115,8 @@
<p class="page-sub-title">User was added successfully.</p> <p class="page-sub-title">User was added successfully.</p>
<br> <br>
An invitation mail will be sent to this user to initiate device enrollment. An invitation mail will be sent to this user to initiate device enrollment.
Below QR code can also be used to enroll a device.
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div class="qr-code col-lg-5 col-md-6 col-centered"></div> <div class="qr-code col-lg-5 col-md-6 col-centered"></div>

@ -18,18 +18,16 @@
/** /**
* Returns the dynamic state to be populated by add-user page. * Returns the dynamic state to be populated by add-user 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 * @returns {*} A context object that returns the dynamic state of this page to be presented
*/ */
function onRequest(context) { function onRequest() {
//var log = new Log("/app/pages/cdmf.page.user.create server-side js"); //var log = new Log("/app/pages/cdmf.page.user.create server-side js");
var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"];
var page = {}; var page = {};
var response = userModule.getRolesByUserStore(); var response = userModule.getRolesByUserStore("PRIMARY");
if (response["status"] == "success") { if (response["status"] == "success") {
page["roles"] = response["content"]; page["roles"] = response["content"];
} }

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* *
* WSO2 Inc. licenses this file to you under the Apache License, * WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except * Version 2.0 (the "License"); you may not use this file except
@ -72,8 +72,8 @@ var disableInlineError = function (inputField, errorMsg, errorSign) {
* Validate if provided username is valid against RegEx configures. * Validate if provided username is valid against RegEx configures.
*/ */
validateInline["user-name"] = function () { validateInline["user-name"] = function () {
var usernameinput = $("input#username"); var usernameInput = $("input#username");
if (inputIsValid(usernameinput.data("regex"), usernameinput.val())) { if (inputIsValid(usernameInput.data("regex"), usernameInput.val())) {
disableInlineError("usernameInputField", "usernameEmpty", "usernameError"); disableInlineError("usernameInputField", "usernameEmpty", "usernameError");
} else { } else {
enableInlineError("usernameInputField", "usernameEmpty", "usernameError"); enableInlineError("usernameInputField", "usernameEmpty", "usernameError");
@ -84,9 +84,9 @@ validateInline["user-name"] = function () {
* Validate if provided first name is valid against RegEx configures. * Validate if provided first name is valid against RegEx configures.
*/ */
validateInline["first-name"] = function () { validateInline["first-name"] = function () {
var firstnameinput = $("input#firstname"); var firstnameInput = $("input#firstname");
if (firstnameinput.val()) { if (firstnameInput.val()) {
disableInlineError("firstNameField", "fnError"); disableInlineError("firstNameField", "fnError");
} else { } else {
enableInlineError("firstNameField", "fnError"); enableInlineError("firstNameField", "fnError");
} }
@ -96,8 +96,8 @@ validateInline["first-name"] = function () {
* Validate if provided last name is valid against RegEx configures. * Validate if provided last name is valid against RegEx configures.
*/ */
validateInline["last-name"] = function () { validateInline["last-name"] = function () {
var lastnameinput = $("input#lastname"); var lastnameInput = $("input#lastname");
if (lastnameinput.val()) { if (lastnameInput.val()) {
disableInlineError("lastNameField", "lnError"); disableInlineError("lastNameField", "lnError");
} else { } else {
enableInlineError("lastNameField", "lnError"); enableInlineError("lastNameField", "lnError");
@ -165,9 +165,9 @@ $("#userStore").change(
function () { function () {
var str = ""; var str = "";
$("select option:selected").each(function () { $("select option:selected").each(function () {
str += $(this).text() + " "; str += $(this).text() + "";
}); });
var getRolesAPI = deviceMgtAPIsBasePath + "/roles/"+ str; var getRolesAPI = deviceMgtAPIsBasePath + "/roles?user-store=" + str + "&limit=100";
invokerUtil.get( invokerUtil.get(
getRolesAPI, getRolesAPI,
@ -188,8 +188,7 @@ $("#userStore").change(
} }
); );
} }).change();
).change();
$(document).ready(function () { $(document).ready(function () {
$("#emailValidationText").hide(); $("#emailValidationText").hide();
@ -207,7 +206,7 @@ $(document).ready(function () {
var usernameInput = $("input#username"); var usernameInput = $("input#username");
var firstnameInput = $("input#firstname"); var firstnameInput = $("input#firstname");
var lastnameInput = $("input#lastname"); var lastnameInput = $("input#lastname");
//var charLimit = parseInt($("input#username").attr("limit")); var charLimit = parseInt($("input#username").attr("limit"));
var domain = $("#userStore").val(); var domain = $("#userStore").val();
var username = usernameInput.val().trim(); var username = usernameInput.val().trim();
var firstname = firstnameInput.val(); var firstname = firstnameInput.val();

@ -27,8 +27,10 @@ var invokerUtil = function () {
restAPIRequestDetails["requestURL"] = requestURL; restAPIRequestDetails["requestURL"] = requestURL;
restAPIRequestDetails["requestPayload"] = JSON.stringify(requestPayload); restAPIRequestDetails["requestPayload"] = JSON.stringify(requestPayload);
var appContext = $("#app-context").data("app-context");
var request = { var request = {
url: context + "/api/invoker/execute/", url: appContext + "/api/invoker/execute/",
type: "POST", type: "POST",
contentType: "application/json", contentType: "application/json",
data: JSON.stringify(restAPIRequestDetails), data: JSON.stringify(restAPIRequestDetails),

@ -31,12 +31,15 @@
</div> </div>
</div> </div>
</div> </div>
<div id="app-context" data-app-context="{{@app.context}}" class="hidden"></div>
{{/zone}} {{/zone}}
{{#zone "topJs"}} {{#zone "topJs"}}
<script type="text/javascript"> <script type="text/javascript">
var context = "{{@app.context}}" var context = "{{@app.context}}"
</script> </script>
{{/zone}} {{/zone}}
{{#zone "bottomJs"}} {{#zone "bottomJs"}}
{{js "js/js.cookie.js"}} {{js "js/js.cookie.js"}}
{{js "js/invoker-lib.js"}} {{js "js/invoker-lib.js"}}

@ -15,20 +15,19 @@
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
}} }}
<div class="row wr-device-board"> <div class="row wr-device-board">
<div class="col-lg-12 wr-secondary-bar"> <div class="col-lg-12 wr-secondary-bar">
<span class="page-sub-title"> <span class="page-sub-title">
&nbsp;Policy List by priority order &nbsp;Policy List by priority order
</span> </span>
</div> </div>
</div> <div class="row">
<div class="row"> <div class="col-md-12">
<div class="col-md-12"> <span id="policy-listing-status-msg">{{policyListingStatusMsg}}</span>
<span id="policy-listing-status-msg">{{policyListingStatusMsg}}</span> <div class="wr-list-group wr-sortable policy-list">
{{#each policyListToView}}
<div class="wr-list-group wr-sortable policy-list"> <span class="list-group-item " place="place_{{id}}" id="{{id}}">
{{#each policyListToView}}
<span class="list-group-item " place="place_{{id}}" id="{{id}}">
<div class="row no-gutter"> <div class="row no-gutter">
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 clearfix"> <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 clearfix">
<span class="wr-sortable-icon"><i class="fw fw-sort"></i></span> <span class="wr-sortable-icon"><i class="fw fw-sort"></i></span>
@ -40,15 +39,7 @@
</span> </span>
</span> </span>
<span class="wr-list-icon"> <span class="wr-list-icon">
{{#equal platform "android"}} <i class=" fw fw-{{platform}}"></i>
<i class=" fw fw-android"></i>
{{/equal}}
{{#equal platform "windows"}}
<i class=" fw fw-windows"></i>
{{/equal}}
{{#equal platform "ios"}}
<i class=" fw fw-apple"></i>
{{/equal}}
</span> </span>
<span class="wr-list-desc"> <span class="wr-list-desc">
<h3 class="wr-list-name">{{name}}</h3> <h3 class="wr-list-name">{{name}}</h3>
@ -62,19 +53,20 @@
<b>Ownership Type : </b> {{ownershipType}} <b>Ownership Type : </b> {{ownershipType}}
</div> </div>
</div> </div>
{{#if roles}} {{#equal roles "None"}}
<div class="wr-desc-list-configs highlight col-xs-12 col-sm-4 col-md-4 col-lg-4"> <div class="wr-desc-list-configs highlight col-xs-12 col-sm-4 col-md-4 col-lg-4">
<div> <div>
<b>Assigned Role(s) : </b> {{roles}} <b>Assigned User(s) : </b> {{users}}
</div> </div>
</div> </div>
{{else}} {{/equal}}
{{#equal users "None"}}
<div class="wr-desc-list-configs highlight col-xs-12 col-sm-4 col-md-4 col-lg-4"> <div class="wr-desc-list-configs highlight col-xs-12 col-sm-4 col-md-4 col-lg-4">
<div> <div>
<b>Assigned User(s) : </b> {{users}} <b>Assigned Role(s) : </b> {{roles}}
</div> </div>
</div> </div>
{{/if}} {{/equal}}
<div class="wr-desc-list-configs col-xs-12 col-sm-4 col-md-4 col-lg-4"> <div class="wr-desc-list-configs col-xs-12 col-sm-4 col-md-4 col-lg-4">
<div> <div>
<b>Compliance Type :</b> {{compliance}} <b>Compliance Type :</b> {{compliance}}
@ -84,120 +76,112 @@
</div> </div>
</div> </div>
</span> </span>
{{/each}} {{/each}}
</div>
{{#equal noPolicy false}}
<div id="save-new-priorities-button" class="wr-input-control wr-btn-grp">
<button class="wr-btn hide" id="sortUpdateBtn" data-policycount="{{policyCount}}"
data-enabled="{{saveNewPrioritiesButtonEnabled}}" disabled>Save New Priority
Order
</button>
<button class="wr-btn" id="applyChangesBtn">Apply Changes to Devices</button>
</div> </div>
{{/equal}} {{#equal noPolicy false}}
<div id="save-new-priorities-button" class="wr-input-control wr-btn-grp">
<button class="wr-btn hide" id="sortUpdateBtn" data-policycount="{{policyCount}}"
data-enabled="{{saveNewPrioritiesButtonEnabled}}" disabled>Save New Priority Order
</button>
<button class="wr-btn" id="applyChangesBtn">Apply Changes to Devices</button>
</div>
{{/equal}}
</div>
</div> </div>
</div>
<div id="change-policy-modal-content" class="hide"> <div id="apply-changes-modal-content" class="hide">
<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>Do you really want to apply changes to all policies?</h3> <h3>Do you really want to apply changes to all policies?</h3>
<div class="buttons"> <div class="buttons">
<a href="javascript:void(0)" id="change-policy-yes-link" class="btn-operations"> <a href="javascript:void(0)" id="apply-changes-yes-link" class="btn-operations">
Yes Yes
</a> </a>
<a href="javascript:void(0)" id="change-policy-cancel-link" <a href="javascript:void(0)" id="apply-changes-cancel-link" class="btn-operations">
class="btn-operations"> No
No </a>
</a> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div id="change-policy-success-content" class="hide"> <div id="apply-changes-success-content" class="hide">
<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>Done. Changes applied successfully.</h3> <h3>Done. Changes applied successfully.</h3>
<div class="buttons"> <div class="buttons">
<a href="javascript:void(0)" id="change-policy-success-link" <a href="javascript:void(0)" id="apply-changes-success-link" class="btn-operations">
class="btn-operations"> Ok
Ok </a>
</a> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div id="change-policy-error-content" class="hide"> <div id="apply-changes-error-content" class="hide">
<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>An unexpected error occurred. Please try again later.</h3> <h3>An unexpected error occurred. Please try again later.</h3>
<div class="buttons"> <div class="buttons">
<a href="javascript:void(0)" id="change-policy-error-link" <a href="javascript:void(0)" id="apply-changes-error-link" class="btn-operations">
class="btn-operations"> Ok
Ok </a>
</a> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div id="remove-policy-error-content" class="hide"> <div id="remove-policy-error-content" class="hide">
<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>An unexpected error occurred. Please try again later.</h3> <h3>An unexpected error occurred. Please try again later.</h3>
<div class="buttons"> <div class="buttons">
<a href="javascript:void(0)" id="remove-policy-error-link" <a href="javascript:void(0)" id="remove-policy-error-link" class="btn-operations">
class="btn-operations"> Ok
Ok </a>
</a> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div id="save-policy-priorities-success-content" class="hide"> <div id="save-policy-priorities-success-content" class="hide">
<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>Done. New Policy priorities were successfully updated.</h3> <h3>Done. New Policy priorities were successfully updated.</h3>
<div class="buttons"> <div class="buttons">
<a href="javascript:void(0)" id="save-policy-priorities-success-link" <a href="javascript:void(0)" id="save-policy-priorities-success-link" class="btn-operations">
class="btn-operations"> Ok
Ok </a>
</a> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div id="save-policy-priorities-error-content" class="hide"> <div id="save-policy-priorities-error-content" class="hide">
<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>An unexpected error occurred. Please try again later.</h3> <h3>An unexpected error occurred. Please try again later.</h3>
<h4 class="message-from-server"></h4> <div class="buttons">
<a href="javascript:void(0)" id="save-policy-priorities-error-link" class="btn-operations">
<div class="buttons"> Ok
<a href="javascript:void(0)" id="save-policy-priorities-error-link" </a>
class="btn-operations"> </div>
Ok
</a>
</div> </div>
</div> </div>
</div> </div>

@ -1,17 +1,17 @@
/* /*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* *
* WSO2 Inc. licenses this file to you under the Apache License, * WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except * Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. * in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, * Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an * software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* KIND, either express or implied. See the License for the * either express or implied. See the License for the
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
@ -27,8 +27,9 @@ function onRequest(context) {
return options.fn(this); return options.fn(this);
} }
}); });
var policyModule = require("/app/modules/business-controllers/group.js")["groupModule"]; var policyModule = require("/app/modules/business-controllers/policy.js")["policyModule"];
var response = policyModule.getAllPolicies(); var response = policyModule.getAllPolicies();
if (response["status"] == "success") { if (response["status"] == "success") {
var policyListToView = response["content"]; var policyListToView = response["content"];
context["policyListToView"] = policyListToView; context["policyListToView"] = policyListToView;
@ -38,7 +39,7 @@ function onRequest(context) {
context["saveNewPrioritiesButtonEnabled"] = false; context["saveNewPrioritiesButtonEnabled"] = false;
context["noPolicy"] = true; context["noPolicy"] = true;
} else if (policyCount == 1) { } else if (policyCount == 1) {
context["policyListingStatusMsg"] = "Add more policies to set up a priority order."; context["policyListingStatusMsg"] = "Two or more policies should be available to set up a priority order.";
context["saveNewPrioritiesButtonEnabled"] = false; context["saveNewPrioritiesButtonEnabled"] = false;
context["noPolicy"] = false; context["noPolicy"] = false;
} else { } else {
@ -47,9 +48,11 @@ function onRequest(context) {
context["noPolicy"] = false; context["noPolicy"] = false;
} }
} else { } else {
// here, response["status"] == "error"
context["policyListToView"] = []; context["policyListToView"] = [];
context["policyListingStatusMsg"] = response["content"]; context["policyListingStatusMsg"] = "Error in retrieving policies. Please try reloading the page.";
context["saveNewPrioritiesButtonEnabled"] = false; context["saveNewPrioritiesButtonEnabled"] = false;
} }
return context; return context;
} }

@ -1,17 +1,17 @@
/* /*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* *
* WSO2 Inc. licenses this file to you under the Apache License, * WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except * Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. * in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, * Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an * software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* KIND, either express or implied. See the License for the * either express or implied. See the License for the
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
@ -78,58 +78,66 @@ $(document).ready(function () {
newPolicyPriorityList.push(policy); newPolicyPriorityList.push(policy);
} }
var updatePolicyAPI = "/devicemgt_admin/policies/priorities"; var updatePolicyAPI = "/api/device-mgt/v1.0/policies/priorities";
invokerUtil.put( invokerUtil.put(
updatePolicyAPI, updatePolicyAPI,
newPolicyPriorityList, newPolicyPriorityList,
function () { // on success
$(modalPopupContent).html($('#save-policy-priorities-success-content').html()); function (data, textStatus, jqXHR) {
showPopup(); if (jqXHR.status == 200) {
$("a#save-policy-priorities-success-link").click(function () { $(modalPopupContent).html($('#save-policy-priorities-success-content').html());
hidePopup(); showPopup();
}); $("a#save-policy-priorities-success-link").click(function () {
hidePopup();
});
}
}, },
function () { // on error
$("#save-policy-priorities-error-content").find(".message-from-server").html( function (jqXHR) {
"Message From Server : " + data["statusText"]); if (jqXHR.status == 400 || jqXHR.status == 500) {
$(modalPopupContent).html($('#save-policy-priorities-error-content').html()); $(modalPopupContent).html($("#save-policy-priorities-error-content").html());
showPopup(); showPopup();
$("a#save-policy-priorities-error-link").click(function () { $("a#save-policy-priorities-error-link").click(function () {
hidePopup(); hidePopup();
}); });
}
} }
); );
}); });
$(applyChangesBtn).click(function () { $(applyChangesBtn).click(function () {
var applyPolicyChangesAPI = "/devicemgt_admin/policies/apply-changes"; var applyPolicyChangesAPI = "/api/device-mgt/v1.0/policies/apply-changes";
$(modalPopupContent).html($('#change-policy-modal-content').html()); $(modalPopupContent).html($("#apply-changes-modal-content").html());
showPopup(); showPopup();
$("a#change-policy-yes-link").click(function () { $("a#apply-changes-yes-link").click(function () {
invokerUtil.put( invokerUtil.put(
applyPolicyChangesAPI, applyPolicyChangesAPI,
null, null,
// on success // on success
function () { function (data, textStatus, jqXHR) {
$(modalPopupContent).html($('#change-policy-success-content').html()); if (jqXHR.status == 200) {
showPopup(); $(modalPopupContent).html($("#apply-changes-success-content").html());
$("a#change-policy-success-link").click(function () { showPopup();
hidePopup(); $("a#apply-changes-success-link").click(function () {
}); hidePopup();
});
}
}, },
// on error // on error
function () { function (jqXHR) {
$(modalPopupContent).html($('#change-policy-error-content').html()); if (jqXHR.status == 500) {
showPopup(); $(modalPopupContent).html($("#apply-changes-error-content").html());
$("a#change-policy-error-link").click(function () { showPopup();
hidePopup(); $("a#apply-changes-error-link").click(function () {
}); hidePopup();
});
}
} }
); );
}); });
$("a#change-policy-cancel-link").click(function () { $("a#apply-changes-cancel-link").click(function () {
hidePopup(); hidePopup();
}); });
}); });

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* *
* WSO2 Inc. licenses this file to you under the Apache License, * WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except * Version 2.0 (the "License"); you may not use this file except
@ -47,7 +47,7 @@ var sortableListFunction = (function () {
} }
/** /**
* on input text field focus autocomplete bind function * on input text field focus auto-complete bind function
*/ */
$(sortableElem).on('focus', '.wr-sort-index input.index', function () { $(sortableElem).on('focus', '.wr-sort-index input.index', function () {
currentElemId = $(this).val(); currentElemId = $(this).val();

Loading…
Cancel
Save