forked from community/device-mgt-core
Merge pull request #493 from Supun94/release-2.0.x
Support for Device Management Policy Mergingrevert-70aa11f8
commit
6eb8beaa2a
@ -0,0 +1,43 @@
|
|||||||
|
{{!
|
||||||
|
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="Policy Management | View Policy"}}
|
||||||
|
|
||||||
|
{{#zone "breadcrumbs"}}
|
||||||
|
<li>
|
||||||
|
<a href="{{@app.context}}/">
|
||||||
|
<i class="icon fw fw-home"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<!--suppress HtmlUnknownTarget -->
|
||||||
|
<a href="{{@app.context}}/policies">
|
||||||
|
Policies
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">
|
||||||
|
View
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{/zone}}
|
||||||
|
|
||||||
|
{{#zone "content"}}
|
||||||
|
{{unit "cdmf.unit.device.operation-mod"}}
|
||||||
|
{{unit "cdmf.unit.effective-policy.view"}}
|
||||||
|
{{/zone}}
|
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRequest(context) {
|
||||||
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
|
var deviceType = context.uriParams.deviceType;
|
||||||
|
var deviceId = context.uriParams.deviceId;
|
||||||
|
return {"deviceTypePolicyView": utility.getTenantedDeviceUnitName(deviceType, deviceId,"policy-view")};
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0",
|
||||||
|
"uri": "/policy/effective-policy/",
|
||||||
|
"layout": "cdmf.layout.default"
|
||||||
|
}
|
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var policy = {};
|
||||||
|
var displayPolicy = function (policyPayloadObj) {
|
||||||
|
policy["name"] = policyPayloadObj["policyName"];
|
||||||
|
policy["platform"] = policyPayloadObj["profile"]["deviceType"];
|
||||||
|
// updating next-page wizard title with selected platform
|
||||||
|
$("#policy-heading").text(policy["platform"].toUpperCase() + " POLICY - " + policy["name"].toUpperCase());
|
||||||
|
$("#policy-platform").text(policy["platform"].toUpperCase());
|
||||||
|
$("#policy-assignment").text(policyPayloadObj.deviceGroups);
|
||||||
|
$("#policy-action").text(policyPayloadObj.compliance.toUpperCase());
|
||||||
|
$("#policy-description").text(policyPayloadObj["description"]);
|
||||||
|
var policyStatus = "Active";
|
||||||
|
if (policyPayloadObj["active"] == true && policyPayloadObj["updated"] == true) {
|
||||||
|
policyStatus = '<i class="fw fw-warning icon-success"></i> Active/Updated</span>';
|
||||||
|
} else if (policyPayloadObj["active"] == true && policyPayloadObj["updated"] == false) {
|
||||||
|
policyStatus = '<i class="fw fw-ok icon-success"></i> Active</span>';
|
||||||
|
} else if (policyPayloadObj["active"] == false && policyPayloadObj["updated"] == true) {
|
||||||
|
policyStatus = '<i class="fw fw-warning icon-warning"></i> Inactive/Updated</span>';
|
||||||
|
} else if (policyPayloadObj["active"] == false && policyPayloadObj["updated"] == false) {
|
||||||
|
policyStatus = '<i class="fw fw-error icon-danger"></i> Inactive</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#policy-status").html(policyStatus);
|
||||||
|
|
||||||
|
if (policyPayloadObj.users == null) {
|
||||||
|
$("#policy-users").text("NONE");
|
||||||
|
}
|
||||||
|
else if (policyPayloadObj.users.length > 0) {
|
||||||
|
$("#policy-users").text(policyPayloadObj.users.toString().split(",").join(", "));
|
||||||
|
} else {
|
||||||
|
$("#users-row").addClass("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (policyPayloadObj.deviceGroups == null) {
|
||||||
|
$("#policy-groups").text("NONE");
|
||||||
|
} else if (policyPayloadObj.deviceGroups.length > 0) {
|
||||||
|
debugger;
|
||||||
|
var deviceGroups = policyPayloadObj.deviceGroups;
|
||||||
|
var assignedGroups = [];
|
||||||
|
for (var index in deviceGroups) {
|
||||||
|
if (deviceGroups.hasOwnProperty(index)) {
|
||||||
|
assignedGroups.push(deviceGroups[index].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$("#policy-groups").text(assignedGroups.toString().split(",").join(", "));
|
||||||
|
} else {
|
||||||
|
$("#policy-groups").text("NONE");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (policyPayloadObj.roles == null) {
|
||||||
|
$("#policy-roles").text("NONE");
|
||||||
|
}
|
||||||
|
else if (policyPayloadObj.roles.length > 0) {
|
||||||
|
$("#policy-roles").text(policyPayloadObj.roles.toString().split(",").join(", "));
|
||||||
|
} else {
|
||||||
|
$("#roles-row").addClass("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
|
var deviceType = policy["platform"];
|
||||||
|
var policyOperationsTemplateSrc = context + '/public/cdmf.unit.device.type.' + deviceType +
|
||||||
|
'.policy-view/templates/' + deviceType + '-policy-view.hbs';
|
||||||
|
var policyOperationsScriptSrc = context + '/public/cdmf.unit.device.type.' + deviceType +
|
||||||
|
'.policy-view/js/' + deviceType + '-policy-view.js';
|
||||||
|
var policyOperationsStylesSrc = context + '/public/cdmf.unit.device.type.' + deviceType +
|
||||||
|
'.policy-view/css/' + deviceType + '-policy-view.css';
|
||||||
|
var policyOperationsTemplateCacheKey = deviceType + '-policy-operations';
|
||||||
|
|
||||||
|
$.isResourceExists(policyOperationsTemplateSrc, function (status) {
|
||||||
|
if (status) {
|
||||||
|
$.template(policyOperationsTemplateCacheKey, policyOperationsTemplateSrc, function (template) {
|
||||||
|
var content = template();
|
||||||
|
$("#device-type-policy-operations").html(content).removeClass("hidden");
|
||||||
|
$(".policy-platform").addClass("hidden");
|
||||||
|
$.isResourceExists(policyOperationsScriptSrc, function (status) {
|
||||||
|
if (status) {
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.type = 'text/javascript';
|
||||||
|
script.src = policyOperationsScriptSrc;
|
||||||
|
$(".wr-advance-operations").prepend(script);
|
||||||
|
/*
|
||||||
|
This method should be implemented in the relevant plugin side and should include the logic to
|
||||||
|
populate the policy profile in the plugin specific UI.
|
||||||
|
*/
|
||||||
|
polulateProfileOperations(policyPayloadObj["profile"]["profileFeaturesList"]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$.isResourceExists(policyOperationsStylesSrc, function (status) {
|
||||||
|
if (status) {
|
||||||
|
var style = document.createElement('link');
|
||||||
|
style.type = 'text/css';
|
||||||
|
style.rel = 'stylesheet';
|
||||||
|
style.href = policyOperationsStylesSrc;
|
||||||
|
$(".wr-advance-operations").prepend(style);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$("#generic-policy-operations").removeClass("hidden");
|
||||||
|
}
|
||||||
|
$(".wr-advance-operations-init").addClass("hidden");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will return query parameter value given its name.
|
||||||
|
* @param name Query parameter name
|
||||||
|
* @returns {string} Query parameter value
|
||||||
|
*/
|
||||||
|
var getParameterByName = function (name) {
|
||||||
|
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||||
|
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
||||||
|
results = regex.exec(location.search);
|
||||||
|
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||||
|
};
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
var policyPayloadObj;
|
||||||
|
// Adding initial state of wizard-steps.
|
||||||
|
invokerUtil.get(
|
||||||
|
"/api/device-mgt/v1.0" + "/policies/effective-policy/" + getParameterByName("type") + "/" + getParameterByName("id"),
|
||||||
|
// on success
|
||||||
|
function (data, textStatus, jqXHR) {
|
||||||
|
if (jqXHR.status == 200 && data) {
|
||||||
|
policyPayloadObj = JSON.parse(data);
|
||||||
|
displayPolicy(policyPayloadObj);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// on error
|
||||||
|
function (jqXHR) {
|
||||||
|
console.log(jqXHR);
|
||||||
|
// should be redirected to an error page
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
@ -0,0 +1,83 @@
|
|||||||
|
{{#zone "content"}}
|
||||||
|
{{!--#if isAuthorized--}}
|
||||||
|
{{#defineZone "policy-profile-top"}}
|
||||||
|
<div class="row wr-device-board">
|
||||||
|
<div class="col-lg-12 wr-secondary-bar">
|
||||||
|
<label id="policy-heading" class="device-id device-select">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/defineZone}}
|
||||||
|
|
||||||
|
<!-- #page-content-wrapper -->
|
||||||
|
<div class="page-content-wrapper">
|
||||||
|
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
|
||||||
|
<div class="media">
|
||||||
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||||
|
Policy Overview
|
||||||
|
</div>
|
||||||
|
{{#defineZone "policy-detail-properties"}}
|
||||||
|
<table class="table table-responsive table-striped" id="members">
|
||||||
|
<tbody>
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px; width: 14%;">Platform</td>
|
||||||
|
<td id="policy-platform" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row" class="odd">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px;">Groups</td>
|
||||||
|
<td id="policy-groups" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px;">Action upon non-compliance</td>
|
||||||
|
<td id="policy-action" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px;">Status</td>
|
||||||
|
<td id="policy-status" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row" id="users-row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px;">Assigned Users</td>
|
||||||
|
<td id="policy-users" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr role="row" id="roles-row" class="even">
|
||||||
|
<td class="sorting_1" style="padding:10px 15px;">Assigned Roles</td>
|
||||||
|
<td id="policy-roles" style="padding:10px 15px;"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{{/defineZone}}
|
||||||
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Description
|
||||||
|
</div>
|
||||||
|
<div class="add-margin-top-4x">
|
||||||
|
<div id="policy-description" class="panel-title-description"></div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">
|
||||||
|
Profile Information
|
||||||
|
</div>
|
||||||
|
<div class="add-margin-top-4x">
|
||||||
|
<div id="policy-profile-main-error-msg" class="alert alert-danger hidden" role="alert">
|
||||||
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
|
</div>
|
||||||
|
<div class="wr-advance-operations">
|
||||||
|
<div class='wr-advance-operations-init'>
|
||||||
|
<br/>
|
||||||
|
<i class='fw fw-settings fw-spin fw-2x'></i>
|
||||||
|
Loading Platform Features . . .
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<div id="device-type-policy-operations" class="hidden">
|
||||||
|
</div>
|
||||||
|
<div id="generic-policy-operations" class="hidden">
|
||||||
|
{{unit "cdmf.unit.device.type.generic.policy-wizard"}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/zone}}
|
||||||
|
{{#zone "bottomJs"}}
|
||||||
|
{{js "js/view.js"}}
|
||||||
|
{{/zone}}
|
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function onRequest(context) {
|
||||||
|
|
||||||
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
|
var deviceType = context.uriParams.deviceType;
|
||||||
|
var deviceId = context.uriParams.deviceId;
|
||||||
|
|
||||||
|
return {"deviceTypePolicyView": utility.getTenantedDeviceUnitName(deviceType, deviceId,"policy-view")};
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"version" : "1.0.0"
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 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.policy.decision.point.internal;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
import org.wso2.carbon.policy.decision.point.merged.MergedEvaluationPoint;
|
||||||
|
import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||||
|
import org.wso2.carbon.user.core.service.RealmService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.policy.decision.MergedPolicyEvaluationServiceComponent" 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="org.wso2.carbon.devicemgt.policy.manager"
|
||||||
|
* interface="org.wso2.carbon.policy.mgt.core.PolicyManagerService"
|
||||||
|
* cardinality="0..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setPolicyManagerService"
|
||||||
|
* unbind="unsetPolicyManagerService"
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class MergedPolicyEvaluationServiceComponent {
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(MergedPolicyEvaluationServiceComponent.class);
|
||||||
|
|
||||||
|
protected void activate(ComponentContext componentContext) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Activating the policy evaluation bundle.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
componentContext.getBundleContext().registerService(PolicyEvaluationPoint.class.getName(),
|
||||||
|
new MergedEvaluationPoint(), null);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
log.error("Error occurred while initializing the policy evaluation bundle");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void deactivate(ComponentContext componentContext) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("De-activating the policy evaluation bundle.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets Realm Service
|
||||||
|
*
|
||||||
|
* @param realmService An instance of RealmService
|
||||||
|
*/
|
||||||
|
protected void setRealmService(RealmService realmService) {
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Setting Realm Service");
|
||||||
|
}
|
||||||
|
PolicyDecisionPointDataHolder.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");
|
||||||
|
}
|
||||||
|
PolicyDecisionPointDataHolder.getInstance().setRealmService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setPolicyManagerService(PolicyManagerService policyManagerService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Unsetting PolicyManagerService Service");
|
||||||
|
}
|
||||||
|
PolicyDecisionPointDataHolder.getInstance().setPolicyManagerService(policyManagerService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unsetPolicyManagerService(PolicyManagerService policyManagerService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Unsetting PolicyManagerService Service");
|
||||||
|
}
|
||||||
|
PolicyDecisionPointDataHolder.getInstance().setPolicyManagerService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// protected String getName() {
|
||||||
|
// return MergedPolicyEvaluationServiceComponent.class.getName();
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
2
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/internal/PolicyDecisionPointDataHolder.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/internal/PolicyDecisionPointDataHolder.java
2
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/internal/PolicyDecisionPointDataHolder.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/internal/PolicyDecisionPointDataHolder.java
12
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/internal/PolicyEvaluationServiceComponent.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/internal/PolicyEvaluationServiceComponent.java
12
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/internal/PolicyEvaluationServiceComponent.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/internal/PolicyEvaluationServiceComponent.java
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015 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.policy.decision.point.merged;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
import org.wso2.carbon.policy.mgt.common.*;
|
||||||
|
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||||
|
import org.wso2.carbon.policy.decision.point.internal.PolicyDecisionPointDataHolder;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class helps to merge related policies and return as a effective policy.
|
||||||
|
*/
|
||||||
|
public class MergedEvaluationPoint implements PolicyEvaluationPoint {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(MergedEvaluationPoint.class);
|
||||||
|
private PolicyManagerService policyManagerService;
|
||||||
|
private static final String effectivePolicyName = "Effective-Policy";
|
||||||
|
private static final String policyEvaluationPoint = "Merged";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProfileFeature> getEffectiveFeatures(DeviceIdentifier deviceIdentifier)
|
||||||
|
throws PolicyEvaluationException {
|
||||||
|
return this.getEffectivePolicy(deviceIdentifier).getProfile().getProfileFeaturesList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return policyEvaluationPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws PolicyEvaluationException {
|
||||||
|
PIPDevice pipDevice;
|
||||||
|
List<Policy> policyList;
|
||||||
|
Policy policy;
|
||||||
|
try {
|
||||||
|
policyManagerService = getPolicyManagerService();
|
||||||
|
if (policyManagerService == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
PolicyInformationPoint policyInformationPoint = policyManagerService.getPIP();
|
||||||
|
pipDevice = policyInformationPoint.getDeviceData(deviceIdentifier);
|
||||||
|
policyList = policyInformationPoint.getRelatedPolicies(pipDevice);
|
||||||
|
|
||||||
|
if (policyList.size() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set effective-policy information
|
||||||
|
Profile profile = new Profile();
|
||||||
|
policy = policyResolve(policyList);
|
||||||
|
profile.setProfileFeaturesList(policy.getProfile().getProfileFeaturesList());
|
||||||
|
policy.setProfile(profile);
|
||||||
|
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
|
||||||
|
profile.setCreatedDate(currentTimestamp);
|
||||||
|
profile.setUpdatedDate(currentTimestamp);
|
||||||
|
profile.setDeviceType(deviceIdentifier.getType());
|
||||||
|
profile.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
|
||||||
|
// Set effective policy name
|
||||||
|
policy.setPolicyName(effectivePolicyName);
|
||||||
|
policy.setOwnershipType(pipDevice.getOwnershipType());
|
||||||
|
// Set effective policy Active and Updated
|
||||||
|
policy.setActive(true);
|
||||||
|
policy.setUpdated(true);
|
||||||
|
policy.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
|
||||||
|
String policyIds = "";
|
||||||
|
Collections.sort(policyList);
|
||||||
|
for (Policy appliedPolicy : policyList) {
|
||||||
|
policyIds += appliedPolicy.getId() + ", ";
|
||||||
|
}
|
||||||
|
policyIds = policyIds.substring(0, policyIds.length() - 2);
|
||||||
|
policy.setDescription("This is a system generated effective policy by merging Policy Id : " + policyIds);
|
||||||
|
// Need to set compliance of the effective policy. Get compliance of first policy using priority order
|
||||||
|
policy.setCompliance(policyList.get(0).getCompliance());
|
||||||
|
// Change default 0 effective policy id to (-1)
|
||||||
|
policy.setId(-1);
|
||||||
|
return policy;
|
||||||
|
} catch (PolicyManagementException e) {
|
||||||
|
String msg = "Error occurred when retrieving the policy related data from policy management service.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new PolicyEvaluationException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Policy policyResolve(List<Policy> policyList) throws PolicyEvaluationException, PolicyManagementException {
|
||||||
|
Collections.sort(policyList, Collections.reverseOrder());
|
||||||
|
|
||||||
|
// Iterate through all policies
|
||||||
|
Map<String, ProfileFeature> featureMap = new HashMap<>();
|
||||||
|
for (Policy policy : policyList) {
|
||||||
|
List<ProfileFeature> profileFeaturesList = policy.getProfile().getProfileFeaturesList();
|
||||||
|
if (profileFeaturesList != null) {
|
||||||
|
for (ProfileFeature feature : profileFeaturesList) {
|
||||||
|
featureMap.put(feature.getFeatureCode(), feature);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get prioritized features list
|
||||||
|
List<ProfileFeature> newFeaturesList = new ArrayList<>(featureMap.values());
|
||||||
|
Profile profile = new Profile();
|
||||||
|
profile.setProfileFeaturesList(newFeaturesList);
|
||||||
|
Policy effectivePolicy = new Policy();
|
||||||
|
effectivePolicy.setProfile(profile);
|
||||||
|
return effectivePolicy;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PolicyManagerService getPolicyManagerService() {
|
||||||
|
return PolicyDecisionPointDataHolder.getInstance().getPolicyManagerService();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/PolicyEvaluationServiceImpl.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/simple/PolicyEvaluationServiceImpl.java
24
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/PolicyEvaluationServiceImpl.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/simple/PolicyEvaluationServiceImpl.java
10
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/SimpleEvaluationImpl.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/simple/SimpleEvaluationImpl.java
10
components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/src/main/java/org/wso2/carbon/simple/policy/decision/point/SimpleEvaluationImpl.java → components/policy-mgt/org.wso2.carbon.policy.decision.point/src/main/java/org/wso2/carbon/policy/decision/point/simple/SimpleEvaluationImpl.java
Binary file not shown.
Loading…
Reference in new issue