From 10f4143a26b5d1ff488b7c5d1f34921839f5a85f Mon Sep 17 00:00:00 2001 From: adibmbrk Date: Wed, 30 Oct 2024 12:16:30 +0530 Subject: [PATCH 1/8] Keep abstract implementation and remove XACMLBasedRuleHandler --- .../OutboundProvisioningManager.java | 20 +- .../IdentityProvisionServiceComponent.java | 36 +-- .../ProvisioningServiceDataHolder.java | 21 +- .../rules/XACMLBasedRuleHandler.java | 264 ------------------ 4 files changed, 42 insertions(+), 299 deletions(-) delete mode 100644 components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/rules/XACMLBasedRuleHandler.java diff --git a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/OutboundProvisioningManager.java b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/OutboundProvisioningManager.java index 1e19cc58a71a..d274d3ad5719 100644 --- a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/OutboundProvisioningManager.java +++ b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/OutboundProvisioningManager.java @@ -44,7 +44,7 @@ import org.wso2.carbon.identity.provisioning.dao.ProvisioningManagementDAO; import org.wso2.carbon.identity.provisioning.internal.IdentityProvisionServiceComponent; import org.wso2.carbon.identity.provisioning.internal.ProvisioningServiceDataHolder; -import org.wso2.carbon.identity.provisioning.rules.XACMLBasedRuleHandler; +import org.wso2.carbon.identity.provisioning.rules.ProvisioningHandler; import org.wso2.carbon.identity.role.v2.mgt.core.RoleConstants; import org.wso2.carbon.identity.role.v2.mgt.core.exception.IdentityRoleManagementException; import org.wso2.carbon.identity.role.v2.mgt.core.model.RoleBasicInfo; @@ -592,13 +592,19 @@ public void provision(ProvisioningEntity provisioningEntity, String serviceProvi boolean isAllowed = true; boolean isBlocking = entry.getValue().isBlocking(); boolean isPolicyEnabled = entry.getValue().isPolicyEnabled(); - if (isPolicyEnabled) { - isAllowed = XACMLBasedRuleHandler.getInstance().isAllowedToProvision(spTenantDomainName, - provisioningEntity, - serviceProvider, - idPName, - connectorType); + + if (isPolicyEnabled){ + try { + ProvisioningHandler provisioningHandler = ProvisioningServiceDataHolder.getInstance() + .getProvisioningHandler(); + + isAllowed = provisioningHandler.isAllowedToProvision(spTenantDomainName, + provisioningEntity, serviceProvider, idPName, connectorType); + } catch (NullPointerException e) { + log.error("ProvisioningHandler service is not available."); + } } + if (isAllowed) { executeOutboundProvisioning(provisioningEntity, executors, connectorType, idPName, proThread, isBlocking); } diff --git a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/IdentityProvisionServiceComponent.java b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/IdentityProvisionServiceComponent.java index 50c70f55a3f6..fecfc2f16ca9 100644 --- a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/IdentityProvisionServiceComponent.java +++ b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/IdentityProvisionServiceComponent.java @@ -30,7 +30,7 @@ import org.wso2.carbon.identity.application.common.model.Property; import org.wso2.carbon.identity.application.common.model.ProvisioningConnectorConfig; import org.wso2.carbon.identity.application.mgt.listener.ApplicationMgtListener; -import org.wso2.carbon.identity.entitlement.EntitlementService; +import org.wso2.carbon.identity.provisioning.rules.ProvisioningHandler; import org.wso2.carbon.identity.provisioning.AbstractProvisioningConnectorFactory; import org.wso2.carbon.identity.provisioning.listener.DefaultInboundUserProvisioningListener; import org.wso2.carbon.identity.provisioning.listener.ProvisioningApplicationMgtListener; @@ -167,31 +167,31 @@ protected void unsetProvisioningConnectorFactory(AbstractProvisioningConnectorFa } } - /** - * @param entitlementService - */ @Reference( - name = "identity.entitlement.service", - service = org.wso2.carbon.identity.entitlement.EntitlementService.class, - cardinality = ReferenceCardinality.AT_LEAST_ONE, - policy = ReferencePolicy.DYNAMIC, - unbind = "unsetEntitlementService") - protected void setEntitlementService(EntitlementService entitlementService) { + name = "identity.provisioning.rule.handler.xacml", + service = org.wso2.carbon.identity.provisioning.rules.ProvisioningHandler.class, + cardinality = ReferenceCardinality.AT_LEAST_ONE, + policy = ReferencePolicy.DYNAMIC, + unbind = "unsetOutboundProvisioningHandler" + ) + protected void setOutboundProvisioningHandler(ProvisioningHandler provisioningHandler) { + if (log.isDebugEnabled()) { - log.debug("EntitlementService is set in the Application Authentication Framework bundle"); + log.debug("Outbound provisioning handler is set in the Identity Provisioning bundle"); } - ProvisioningServiceDataHolder.getInstance().setEntitlementService(entitlementService); + ProvisioningServiceDataHolder.getInstance().setProvisioningHandler(provisioningHandler); } - /** - * @param entitlementService - */ - protected void unsetEntitlementService(EntitlementService entitlementService) { + protected void unsetOutboundProvisioningHandler(ProvisioningHandler provisioningHandler) { if (log.isDebugEnabled()) { - log.debug("EntitlementService is unset in the Application Authentication Framework bundle"); + log.debug("Outbound provisioning handler is unset in the Identity Provisioning bundle"); } - ProvisioningServiceDataHolder.getInstance().setEntitlementService(null); + ProvisioningServiceDataHolder.getInstance().setProvisioningHandler(null); + } + + public static ProvisioningHandler getProvisioningHandler() { + return ProvisioningServiceDataHolder.getInstance().getProvisioningHandler(); } @Reference( diff --git a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/ProvisioningServiceDataHolder.java b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/ProvisioningServiceDataHolder.java index ddd3d5562ba0..510b319b345d 100644 --- a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/ProvisioningServiceDataHolder.java +++ b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/internal/ProvisioningServiceDataHolder.java @@ -19,9 +19,9 @@ package org.wso2.carbon.identity.provisioning.internal; import org.osgi.framework.BundleContext; -import org.wso2.carbon.identity.entitlement.EntitlementService; import org.wso2.carbon.identity.provisioning.AbstractProvisioningConnectorFactory; import org.wso2.carbon.identity.provisioning.listener.DefaultInboundUserProvisioningListener; +import org.wso2.carbon.identity.provisioning.rules.ProvisioningHandler; import org.wso2.carbon.identity.role.v2.mgt.core.RoleManagementService; import org.wso2.carbon.user.core.service.RealmService; import org.wso2.carbon.user.mgt.RolePermissionManagementService; @@ -34,11 +34,11 @@ public class ProvisioningServiceDataHolder { private static ProvisioningServiceDataHolder instance = new ProvisioningServiceDataHolder(); private RealmService realmService; private BundleContext bundleContext; - private EntitlementService entitlementService; private RolePermissionManagementService rolePermissionManagementService; private Map connectorFactories = new HashMap(); private DefaultInboundUserProvisioningListener defaultInboundUserProvisioningListener; private RoleManagementService roleManagementService; + private ProvisioningHandler provisioningHandler; private ProvisioningServiceDataHolder() { } @@ -71,15 +71,7 @@ public Map getConnectorFactories() return connectorFactories; } - public EntitlementService getEntitlementService() { - return entitlementService; - } - - public void setEntitlementService(EntitlementService entitlementService) { - - this.entitlementService = entitlementService; - } public void setRolePermissionManagementService(RolePermissionManagementService rolePermissionManagementService) { @@ -119,6 +111,15 @@ public void setRoleManagementService(RoleManagementService roleManagementService this.roleManagementService = roleManagementService; } + + + public ProvisioningHandler getProvisioningHandler() { + return provisioningHandler; + } + + public void setProvisioningHandler(ProvisioningHandler provisioningHandler) { + this.provisioningHandler = provisioningHandler; + } } diff --git a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/rules/XACMLBasedRuleHandler.java b/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/rules/XACMLBasedRuleHandler.java deleted file mode 100644 index 1a9a3f316873..000000000000 --- a/components/provisioning/org.wso2.carbon.identity.provisioning/src/main/java/org/wso2/carbon/identity/provisioning/rules/XACMLBasedRuleHandler.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.wso2.carbon.identity.provisioning.rules; - - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; -import org.wso2.balana.utils.exception.PolicyBuilderException; -import org.wso2.balana.utils.policy.PolicyBuilder; -import org.wso2.balana.utils.policy.dto.RequestElementDTO; -import org.wso2.carbon.identity.application.common.model.ClaimMapping; -import org.wso2.carbon.identity.application.common.model.ServiceProvider; -import org.wso2.carbon.identity.core.util.IdentityUtil; -import org.wso2.carbon.identity.entitlement.EntitlementException; -import org.wso2.carbon.identity.entitlement.common.EntitlementPolicyConstants; -import org.wso2.carbon.identity.entitlement.common.dto.RequestDTO; -import org.wso2.carbon.identity.entitlement.common.dto.RowDTO; -import org.wso2.carbon.identity.entitlement.common.util.PolicyCreatorUtil; -import org.wso2.carbon.identity.provisioning.IdentityProvisioningConstants; -import org.wso2.carbon.identity.provisioning.IdentityProvisioningException; -import org.wso2.carbon.identity.provisioning.ProvisioningEntity; -import org.wso2.carbon.identity.provisioning.ProvisioningOperation; -import org.wso2.carbon.identity.provisioning.internal.ProvisioningServiceDataHolder; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import java.io.IOException; -import java.io.StringReader; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - - -public class XACMLBasedRuleHandler { - - private static final Log log = LogFactory.getLog(XACMLBasedRuleHandler.class); - private static volatile XACMLBasedRuleHandler instance; - - public static XACMLBasedRuleHandler getInstance() { - - if (instance == null) { - synchronized (XACMLBasedRuleHandler.class) { - if (instance == null) { - instance = new XACMLBasedRuleHandler(); - } - } - } - return instance; - } - - - public boolean isAllowedToProvision(String tenantDomainName, ProvisioningEntity provisioningEntity, - ServiceProvider serviceProvider, - String idPName, - String connectorType) { - - if (log.isDebugEnabled()) { - log.debug("In policy provisioning flow..."); - } - - try { - RequestDTO requestDTO = createRequestDTO(tenantDomainName, provisioningEntity, serviceProvider, - idPName, connectorType); - RequestElementDTO requestElementDTO = PolicyCreatorUtil.createRequestElementDTO(requestDTO); - - String requestString = PolicyBuilder.getInstance().buildRequest(requestElementDTO); - if (log.isDebugEnabled()) { - log.debug("XACML request :\n" + requestString); - } - - String responseString = - ProvisioningServiceDataHolder.getInstance().getEntitlementService().getDecision(requestString); - if (log.isDebugEnabled()) { - log.debug("XACML response :\n" + responseString); - } - Boolean isAuthorized = evaluateXACMLResponse(responseString); - if (isAuthorized) { - return true; - } - } catch (PolicyBuilderException e) { - log.error("Policy Builder Exception occurred", e); - } catch (EntitlementException e) { - log.error("Entitlement Exception occurred", e); - } catch (IdentityProvisioningException e) { - log.error("Error when evaluating the XACML response", e); - } - return false; - } - - - private RequestDTO createRequestDTO(String tenantDomainName, ProvisioningEntity provisioningEntity, - ServiceProvider serviceProvider, - String idPName, - String connectorType) { - List rowDTOs = new ArrayList<>(); - //Setting up user-info category - RowDTO tenatDomainDTO = - createRowDTO(tenantDomainName, EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_TENAT_DOMAIN, - ProvisioningRuleConstanats.XACML_CATAGORY_USER); - RowDTO userDTO = - createRowDTO(provisioningEntity.getEntityName(), EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_USER, ProvisioningRuleConstanats - .XACML_CATAGORY_USER); - - RowDTO spNameDTO = - createRowDTO(serviceProvider.getApplicationName(), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_SP_NAME, - ProvisioningRuleConstanats.XACML_CATAGORY_SERVICE_PROVIDER); - RowDTO spTenantDomainNameDTO = - createRowDTO(serviceProvider.getOwner().getTenantDomain(), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_SP_TENANT_DOMAIN, - ProvisioningRuleConstanats.XACML_CATAGORY_SERVICE_PROVIDER); - //Setting up IDP category - RowDTO idpNameDTO = - createRowDTO(idPName, - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_IDP_NAME, - ProvisioningRuleConstanats.XACML_CATAGORY_IDENTITY_PROVIDER); - RowDTO connectorTypeDTO = - createRowDTO(connectorType, - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_CONNECTOR_TYPE, - ProvisioningRuleConstanats.XACML_CATAGORY_IDENTITY_PROVIDER); - - //Setting up Identity Action - RowDTO provisioningFlowDTO = - createRowDTO(ProvisioningRuleConstanats.IDENTITY_ACTION_PROVISIONING, - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_IDENTITY_ACTION, - ProvisioningRuleConstanats.XACML_CATAGORY_IDENTITY_ACTION); - - if (provisioningEntity.getOperation().equals(ProvisioningOperation.POST)) { - RowDTO provisioningClaimGroupDTO = - createRowDTO(StringUtils.substringBetween(provisioningEntity.getAttributes().get(ClaimMapping.build( - IdentityProvisioningConstants.GROUP_CLAIM_URI, null, null, false)).toString(), "[", "]"), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_CLAIM_GROUPS, - ProvisioningRuleConstanats.XACML_CATAGORY_PROVISIONING); - rowDTOs.add(provisioningClaimGroupDTO); - } - RowDTO provisioningOperationDTO = - createRowDTO(provisioningEntity.getOperation().toString(), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_OPERATION, - ProvisioningRuleConstanats.XACML_CATAGORY_PROVISIONING); - - if (provisioningEntity.getInboundAttributes() != null) { - Iterator> claimIterator = provisioningEntity.getInboundAttributes().entrySet - ().iterator(); - while (claimIterator.hasNext()) { - Map.Entry claim = claimIterator.next(); - String claimUri = claim.getKey(); - String claimValue = claim.getValue(); - RowDTO claimRowDTO = - createRowDTO(claimValue, EntitlementPolicyConstants.STRING_DATA_TYPE, - claimUri, ProvisioningRuleConstanats.XACML_CATAGORY_USER); - rowDTOs.add(claimRowDTO); - } - } - RowDTO environmentTypeDTO = - createRowDTO(tenantDomainName, - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_ENVIRONMENT, - ProvisioningRuleConstanats.XACML_CATAGORY_ENVIRONMENT); - RowDTO dateDTO = - createRowDTO(getCurrentDateTime(ProvisioningRuleConstanats.DATE_FORMAT), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_DATE, - ProvisioningRuleConstanats.XACML_CATAGORY_ENVIRONMENT); - RowDTO timeDTO = - createRowDTO(getCurrentDateTime(ProvisioningRuleConstanats.TIME_FORMAT), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_TIME, - ProvisioningRuleConstanats.XACML_CATAGORY_ENVIRONMENT); - RowDTO dateTimeDTO = - createRowDTO(getCurrentDateTime(ProvisioningRuleConstanats.DATE_TIME_FORMAT), - EntitlementPolicyConstants.STRING_DATA_TYPE, - ProvisioningRuleConstanats.XACML_ATTRIBUTE_DATE_TIME, - ProvisioningRuleConstanats.XACML_CATAGORY_ENVIRONMENT); - - rowDTOs.add(tenatDomainDTO); - rowDTOs.add(userDTO); - rowDTOs.add(spNameDTO); - rowDTOs.add(spTenantDomainNameDTO); - rowDTOs.add(idpNameDTO); - rowDTOs.add(provisioningFlowDTO); - rowDTOs.add(connectorTypeDTO); - rowDTOs.add(environmentTypeDTO); - rowDTOs.add(dateDTO); - rowDTOs.add(timeDTO); - rowDTOs.add(dateTimeDTO); - rowDTOs.add(provisioningOperationDTO); - RequestDTO requestDTO = new RequestDTO(); - requestDTO.setRowDTOs(rowDTOs); - return requestDTO; - } - - private RowDTO createRowDTO(String resourceName, String dataType, String attributeId, String categoryValue) { - - RowDTO rowDTOTenant = new RowDTO(); - rowDTOTenant.setAttributeValue(resourceName); - rowDTOTenant.setAttributeDataType(dataType); - rowDTOTenant.setAttributeId(attributeId); - rowDTOTenant.setCategory(categoryValue); - return rowDTOTenant; - } - - private boolean evaluateXACMLResponse(String xacmlResponse) throws IdentityProvisioningException { - - try { - DocumentBuilderFactory documentBuilderFactory = IdentityUtil.getSecuredDocumentBuilderFactory(); - DocumentBuilder db = documentBuilderFactory.newDocumentBuilder(); - InputSource is = new InputSource(); - is.setCharacterStream(new StringReader(xacmlResponse)); - Document doc = db.parse(is); - - String decision = ""; - NodeList decisionNode = doc.getDocumentElement().getElementsByTagName( - ProvisioningRuleConstanats.XACML_RESPONSE_DECISION_NODE); - if (decisionNode != null && decisionNode.item(0) != null) { - decision = decisionNode.item(0).getTextContent(); - } - if (decision.equalsIgnoreCase(EntitlementPolicyConstants.RULE_EFFECT_PERMIT) - || decision.equalsIgnoreCase(EntitlementPolicyConstants.RULE_EFFECT_NOT_APPLICABLE)) { - return true; - } - } catch (ParserConfigurationException | SAXException | IOException e) { - throw new IdentityProvisioningException("Exception occurred while xacmlResponse processing", e); - } - return false; - } - - private String getCurrentDateTime(String dateTimeFormat) { - DateFormat dateFormat = new SimpleDateFormat(dateTimeFormat); - Calendar cal = Calendar.getInstance(); - return dateFormat.format(cal.getTime()).toString(); - } -} From 856de2880cfaccba3228192516f4cacc26359efa Mon Sep 17 00:00:00 2001 From: adibmbrk Date: Wed, 30 Oct 2024 12:19:06 +0530 Subject: [PATCH 2/8] Remove XACML related modules --- .../endpoint/auth/BasicAuthHandler.java | 160 - .../auth/EntitlementAuthConfigReader.java | 60 - .../EntitlementAuthenticationHandler.java | 66 - .../EntitlementAuthenticatorRegistry.java | 79 - .../AbstractEntitlementException.java | 86 - .../endpoint/exception/ExceptionBean.java | 70 - .../exception/RequestParseException.java | 43 - .../exception/ResponseWriteException.java | 43 - .../exception/UnauthorizedException.java | 35 - .../endpoint/filter/ApiOriginFilter.java | 43 - .../endpoint/filter/AuthenticationFilter.java | 78 - .../filter/EntitlementExceptionMapper.java | 55 - .../endpoint/impl/ApplicationInitializer.java | 81 - .../endpoint/resources/AbstractResource.java | 44 - .../endpoint/resources/DecisionResource.java | 300 -- .../models/AllEntitlementsRequestModel.java | 65 - .../models/AllEntitlementsResponseModel.java | 50 - .../models/DecisionRequestModel.java | 89 - .../EntitledAttributesRequestModel.java | 100 - .../EntitledAttributesResponseModel.java | 51 - .../resources/models/HomeResponseModel.java | 55 - .../endpoint/resources/models/LinkModel.java | 42 - .../resources/models/ResourceModel.java | 58 - .../util/ClearThreadLocalInterceptor.java | 43 - .../util/EntitlementEndpointConstants.java | 188 - .../endpoint/util/JSONRequestParser.java | 529 --- .../endpoint/util/JSONResponseWriter.java | 462 --- .../main/resources/META-INF/spring.schemas | 2 - .../TestService.java | 340 -- .../endpoint/util/JSONRequestParserTest.java | 138 - .../endpoint/util/TestJSONRequestParser.java | 96 - .../endpoint/util/TestJSONResponseWriter.java | 125 - .../json/request-all-entitlements-1.json | 10 - .../resources/json/request-by-attrib-1.json | 5 - .../json/request-by-attrib-bool-1.json | 5 - .../json/request-entitled-attribs-1.json | 4 - .../test/resources/json/request-pdp-1.json | 20 - .../json/response-all-entitlements-1.json | 30 - .../resources/json/response-by-attrib-1.xml | 8 - .../json/response-by-attrib-bool-1.json | 1 - .../json/response-entitled-attribs-1.json | 17 - .../test/resources/json/response-home.json | 11 - .../test/resources/json/response-pdp-1.json | 12 - .../xml/request-all-entitlements-1.xml | 8 - .../resources/xml/request-by-attrib-1.xml | 5 - .../xml/request-by-attrib-bool-1.xml | 5 - .../xml/request-entitled-attribs-1.xml | 4 - .../src/test/resources/xml/request-pdp-1.xml | 13 - .../xml/response-all-entitlements-1.xml | 22 - .../resources/xml/response-by-attrib-1.xml | 8 - .../xml/response-by-attrib-bool-1.xml | 1 - .../xml/response-entitled-attribs-1.xml | 12 - .../src/test/resources/xml/response-home.xml | 6 - .../src/test/resources/xml/response-pdp-1.xml | 8 - .../common/DataPersistenceManager.java | 51 - .../common/EntitlementConstants.java | 119 - .../common/EntitlementPolicyBean.java | 479 --- .../common/EntitlementPolicyConstants.java | 204 -- .../EntitlementPolicyCreationException.java | 32 - .../common/InMemoryPersistenceManager.java | 1734 ---------- .../common/PolicyEditorConstants.java | 207 -- .../common/PolicyEditorEngine.java | 92 - .../common/PolicyEditorException.java | 35 - .../common/RegistryPersistenceManager.java | 134 - .../identity/entitlement/common/Utils.java | 69 - .../common/dto/BasicRequestDTO.java | 100 - .../common/dto/ElementCountDTO.java | 62 - .../common/dto/ExtendAttributeDTO.java | 128 - .../entitlement/common/dto/ObligationDTO.java | 94 - .../entitlement/common/dto/PolicyDTO.java | 106 - .../common/dto/PolicyEditorDataHolder.java | 384 --- .../common/dto/PolicyRefIdDTO.java | 53 - .../entitlement/common/dto/PolicySetDTO.java | 146 - .../entitlement/common/dto/RequestDTO.java | 65 - .../entitlement/common/dto/RowDTO.java | 116 - .../entitlement/common/dto/RuleDTO.java | 118 - .../common/dto/SimplePolicyEditorDTO.java | 143 - .../dto/SimplePolicyEditorElementDTO.java | 133 - .../entitlement/common/dto/TargetDTO.java | 42 - .../common/util/PolicyCreatorUtil.java | 119 - .../common/util/PolicyEditorUtil.java | 3019 ---------------- .../src/test/resources/testng.xml | 26 - .../README.md | 24 - .../REQUIRED_CHANGES.md | 26 - .../webapp/META-INF/webapp-classloading.xml | 34 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 99 - .../src/main/webapp/WEB-INF/web.xml | 131 - .../entitlement/ui/EntitlementPolicyBean.java | 485 --- .../ui/EntitlementPolicyConstants.java | 251 -- .../EntitlementPolicyCreationException.java | 38 - .../ui/EntitlementPolicyCreator.java | 219 -- .../entitlement/ui/PolicyEditorConstants.java | 213 -- .../entitlement/ui/PropertyDTOComparator.java | 48 - .../client/EntitlementAdminServiceClient.java | 236 -- .../EntitlementPolicyAdminServiceClient.java | 480 --- .../EntitlementPolicyUploadExecutor.java | 115 - .../ui/client/EntitlementServiceClient.java | 103 - .../entitlement/ui/dto/BasicRequestDTO.java | 102 - .../entitlement/ui/dto/ElementCountDTO.java | 66 - .../ui/dto/ExtendAttributeDTO.java | 133 - .../entitlement/ui/dto/ObligationDTO.java | 99 - .../entitlement/ui/dto/PolicyDTO.java | 109 - .../entitlement/ui/dto/PolicyRefIdDTO.java | 55 - .../entitlement/ui/dto/PolicySetDTO.java | 149 - .../entitlement/ui/dto/RequestDTO.java | 68 - .../identity/entitlement/ui/dto/RowDTO.java | 119 - .../identity/entitlement/ui/dto/RuleDTO.java | 121 - .../ui/dto/SimplePolicyEditorDTO.java | 146 - .../ui/dto/SimplePolicyEditorElementDTO.java | 136 - .../entitlement/ui/dto/TargetDTO.java | 45 - .../entitlement/ui/util/ClientUtil.java | 108 - .../ui/util/PolicyCreatorUtil.java | 2199 ------------ .../entitlement/ui/util/PolicyEditorUtil.java | 3025 ----------------- .../src/main/resources/META-INF/component.xml | 145 - .../entitlement/ui/i18n/Resources.properties | 469 --- .../resources/web/entitlement/add-policy.jsp | 131 - .../web/entitlement/add-subscriber.jsp | 340 -- .../web/entitlement/advance-search.jsp | 358 -- .../web/entitlement/attribute-search.jsp | 267 -- .../web/entitlement/authorization-add.jsp | 117 - .../web/entitlement/authorization-index.jsp | 281 -- .../web/entitlement/basic-policy-editor.jsp | 1467 -------- .../web/entitlement/basic-policy-finish.jsp | 139 - .../web/entitlement/basic-policy-update.jsp | 314 -- .../clear-attribute-cache-ajaxprocessor.jsp | 59 - .../entitlement/clear-cache-ajaxprocessor.jsp | 65 - .../entitlement/create-evaluation-request.jsp | 292 -- .../web/entitlement/create-policy-set.jsp | 1008 ------ .../web/entitlement/css/entitlement.css | 91 - .../web/entitlement/css/tree-styles.css | 86 - .../web/entitlement/delete-policy-entry.jsp | 38 - .../web/entitlement/delete-rule-entry.jsp | 48 - .../resources/web/entitlement/edit-policy.jsp | 134 - .../enable-disable-policy-ajaxprocessor.jsp | 75 - .../web/entitlement/eval-policy-submit.jsp | 170 - .../resources/web/entitlement/eval-policy.jsp | 273 -- .../web/entitlement/finish-policy-set.jsp | 127 - .../main/resources/web/entitlement/finish.jsp | 129 - .../web/entitlement/images/Policy-type.gif | Bin 387 -> 0 bytes .../web/entitlement/images/PolicySet-type.gif | Bin 216 -> 0 bytes .../web/entitlement/images/actions.png | Bin 915 -> 0 bytes .../web/entitlement/images/add-new-policy.png | Bin 42768 -> 0 bytes .../web/entitlement/images/add-policy.png | Bin 49690 -> 0 bytes .../resources/web/entitlement/images/add.gif | Bin 407 -> 0 bytes .../web/entitlement/images/advance-search.png | Bin 23816 -> 0 bytes .../web/entitlement/images/advanceview.png | Bin 769 -> 0 bytes .../web/entitlement/images/basic-pap.png | Bin 42978 -> 0 bytes .../images/basic-policy-editor.png | Bin 37515 -> 0 bytes .../web/entitlement/images/calendar.jpg | Bin 572 -> 0 bytes .../web/entitlement/images/cancel.gif | Bin 411 -> 0 bytes .../web/entitlement/images/cleanCache.png | Bin 779 -> 0 bytes .../web/entitlement/images/close.png | Bin 681 -> 0 bytes .../web/entitlement/images/config.gif | Bin 1006 -> 0 bytes .../web/entitlement/images/delete.gif | Bin 555 -> 0 bytes .../web/entitlement/images/disable.gif | Bin 595 -> 0 bytes .../resources/web/entitlement/images/down.gif | Bin 386 -> 0 bytes .../resources/web/entitlement/images/down.png | Bin 555 -> 0 bytes .../resources/web/entitlement/images/edit.gif | Bin 1036 -> 0 bytes .../web/entitlement/images/enable.gif | Bin 603 -> 0 bytes .../web/entitlement/images/ent-options.png | Bin 35621 -> 0 bytes .../web/entitlement/images/entitlement.png | Bin 22488 -> 0 bytes .../web/entitlement/images/evaluate.png | Bin 714 -> 0 bytes .../entitlement/images/evaluation-request.png | Bin 28506 -> 0 bytes .../web/entitlement/images/icon-refresh.gif | Bin 639 -> 0 bytes .../web/entitlement/images/import-policy.png | Bin 14820 -> 0 bytes .../web/entitlement/images/import.gif | Bin 1051 -> 0 bytes .../web/entitlement/images/minus.gif | Bin 891 -> 0 bytes .../web/entitlement/images/nodata.gif | Bin 879 -> 0 bytes .../web/entitlement/images/pdp-config.png | Bin 41369 -> 0 bytes .../web/entitlement/images/pdp-policy.png | Bin 22948 -> 0 bytes .../resources/web/entitlement/images/plus.gif | Bin 899 -> 0 bytes .../web/entitlement/images/policies.gif | Bin 387 -> 0 bytes .../web/entitlement/images/policy-admin.png | Bin 29060 -> 0 bytes .../web/entitlement/images/policy-pub.png | Bin 21862 -> 0 bytes .../web/entitlement/images/policy-set-pap.png | Bin 45543 -> 0 bytes .../web/entitlement/images/policy-set.png | Bin 44312 -> 0 bytes .../web/entitlement/images/policy.gif | Bin 1017 -> 0 bytes .../web/entitlement/images/publish-all.gif | Bin 614 -> 0 bytes .../web/entitlement/images/publish-pdp.gif | Bin 1023 -> 0 bytes .../web/entitlement/images/publish.gif | Bin 619 -> 0 bytes .../web/entitlement/images/registry.gif | Bin 1046 -> 0 bytes .../web/entitlement/images/save-button.gif | Bin 623 -> 0 bytes .../resources/web/entitlement/images/save.gif | Bin 285 -> 0 bytes .../entitlement/images/search-attribute.png | Bin 883 -> 0 bytes .../web/entitlement/images/search-policy.gif | Bin 1046 -> 0 bytes .../web/entitlement/images/search-top.png | Bin 785 -> 0 bytes .../web/entitlement/images/search.gif | Bin 191 -> 0 bytes .../web/entitlement/images/simple-pap.png | Bin 26021 -> 0 bytes .../web/entitlement/images/standard-pap.png | Bin 48586 -> 0 bytes .../resources/web/entitlement/images/sync.png | Bin 966 -> 0 bytes .../web/entitlement/images/try-pdp.png | Bin 23142 -> 0 bytes .../resources/web/entitlement/images/up.gif | Bin 387 -> 0 bytes .../resources/web/entitlement/images/up.png | Bin 562 -> 0 bytes .../web/entitlement/images/user-store.gif | Bin 617 -> 0 bytes .../resources/web/entitlement/images/view.gif | Bin 596 -> 0 bytes .../resources/web/entitlement/images/view.png | Bin 369 -> 0 bytes .../web/entitlement/images/wsdiscovery.gif | Bin 1019 -> 0 bytes .../import-policy-submit-ajaxprocessor.jsp | 68 - .../web/entitlement/import-policy.jsp | 184 - .../main/resources/web/entitlement/index.jsp | 526 --- .../js/animation-min/animation-min.js | 20 - .../web/entitlement/js/create-basic-policy.js | 48 - .../resources/web/entitlement/js/popup.js | 51 - .../web/entitlement/js/treecontrol.js | 126 - .../js/yahoo-dom-event/yahoo-dom-event.js | 14 - .../main/resources/web/entitlement/my-pdp.jsp | 485 --- .../resources/web/entitlement/pdp-manage.jsp | 273 -- .../entitlement/policy-editor-config-view.jsp | 112 - .../web/entitlement/policy-editor.jsp | 1767 ---------- .../web/entitlement/policy-publish.jsp | 382 --- .../web/entitlement/policy-search.jsp | 292 -- .../web/entitlement/policy-view-pdp.jsp | 131 - .../resources/web/entitlement/policy-view.jsp | 106 - .../prettyPrinter_ajaxprocessor.jsp | 20 - .../publish-finish-ajaxprocessor.jsp | 103 - .../web/entitlement/re-order-policy.jsp | 81 - .../web/entitlement/refresh-finder.jsp | 69 - .../remove-policy-ajaxprocessor.jsp | 74 - .../remove-subscriber-ajaxprocessor.jsp | 63 - .../rollback-policy-ajaxprocessor.jsp | 63 - .../entitlement/select-attribute-values.jsp | 470 --- .../web/entitlement/select-attribute.jsp | 518 --- .../select-extended-attributes.jsp | 353 -- .../web/entitlement/show-policy-status.jsp | 224 -- .../web/entitlement/show-policy-version.jsp | 224 -- .../entitlement/show-subscriber-status.jsp | 224 -- .../web/entitlement/simple-policy-editor.jsp | 1054 ------ .../simple-policy-finish-ajaxprocessor.jsp | 281 -- .../web/entitlement/start-publish.jsp | 735 ---- .../update-policy-ajaxprocessor.jsp | 21 - .../web/entitlement/update-policy-order.jsp | 111 - .../web/entitlement/update-policy-set.jsp | 245 -- .../web/entitlement/update-policy-submit.jsp | 86 - .../resources/web/entitlement/update-rule.jsp | 485 --- .../web/entitlement/update-search.jsp | 139 - .../update_order-ajaxprocessor.jsp | 72 - .../resources/web/entitlement/view-finder.jsp | 193 -- .../entitlement/EntitlementAdminService.java | 547 --- .../entitlement/EntitlementException.java | 39 - .../entitlement/EntitlementLRUCache.java | 46 - .../EntitlementNotificationExtension.java | 176 - .../EntitlementPolicyAdminService.java | 955 ------ .../entitlement/EntitlementService.java | 163 - .../identity/entitlement/EntitlementUtil.java | 785 ----- .../entitlement/NotificationConstants.java | 45 - .../entitlement/PAPStatusDataHandler.java | 71 - .../identity/entitlement/PDPConstants.java | 324 -- .../entitlement/PolicyOrderComparator.java | 61 - .../PolicyStatusClusterMessage.java | 71 - .../SimplePAPStatusDataHandler.java | 336 -- .../entitlement/StatusHolderComparator.java | 56 - .../entitlement/cache/ConfigCache.java | 41 - .../entitlement/cache/DecisionCache.java | 96 - .../cache/EntitlementBaseCache.java | 232 -- .../cache/EntitlementEngineCache.java | 168 - .../entitlement/cache/IdentityCacheEntry.java | 105 - .../entitlement/cache/IdentityCacheKey.java | 65 - .../cache/PIPAbstractAttributeCache.java | 59 - .../entitlement/cache/PIPAttributeCache.java | 55 - .../entitlement/cache/PapPolicyCache.java | 62 - .../entitlement/cache/PapPolicyListCache.java | 73 - .../entitlement/cache/PdpPolicyCache.java | 62 - .../entitlement/cache/PdpPolicyListCache.java | 72 - .../entitlement/cache/PolicyCache.java | 348 -- .../cache/PolicyCacheCreatedListener.java | 49 - .../cache/PolicyCacheUpdateListener.java | 48 - .../entitlement/cache/PolicySearchCache.java | 128 - .../entitlement/cache/PolicyStatus.java | 60 - .../cache/SimpleDecisionCache.java | 57 - .../entitlement/cache/SubscriberCache.java | 42 - .../cache/SubscriberIdListCache.java | 43 - .../entitlement/dto/AttributeDTO.java | 95 - .../dto/EntitledAttributesDTO.java | 121 - .../entitlement/dto/EntitledResultSetDTO.java | 92 - .../dto/EntitlementFinderDataHolder.java | 107 - .../dto/EntitlementTreeNodeDTO.java | 65 - .../entitlement/dto/PDPDataHolder.java | 68 - .../entitlement/dto/PIPFinderDataHolder.java | 57 - .../dto/PaginatedPolicySetDTO.java | 43 - .../dto/PaginatedStatusHolder.java | 46 - .../entitlement/dto/PaginatedStringDTO.java | 46 - .../identity/entitlement/dto/PolicyDTO.java | 248 -- .../dto/PolicyFinderDataHolder.java | 69 - .../entitlement/dto/PolicyStoreDTO.java | 125 - .../entitlement/dto/PublisherDataHolder.java | 144 - .../entitlement/dto/PublisherPropertyDTO.java | 97 - .../entitlement/dto/StatusHolder.java | 172 - .../extension/EvalPermissionTreeFunction.java | 89 - .../internal/EntitlementConfigHolder.java | 296 -- .../internal/EntitlementExtensionBuilder.java | 565 --- .../internal/EntitlementServiceComponent.java | 637 ---- .../entitlement/internal/SchemaBuilder.java | 94 - .../CacheClearingUserOperationListener.java | 323 -- .../pap/CarbonEntitlementDataFinder.java | 174 - .../pap/EntitlementAdminEngine.java | 169 - .../pap/EntitlementDataFinder.java | 120 - .../pap/EntitlementDataFinderModule.java | 131 - .../entitlement/pap/PAPPolicyReader.java | 206 -- .../pap/store/PAPPolicyFinder.java | 237 -- .../pap/store/PAPPolicyStoreManager.java | 81 - .../pap/store/PAPPolicyStoreReader.java | 238 -- .../entitlement/pdp/EntitlementEngine.java | 707 ---- .../persistence/ConfigPersistenceManager.java | 56 - .../HybridConfigPersistenceManager.java | 70 - .../HybridPAPStatusDataHandler.java | 70 - .../HybridPolicyPersistenceManager.java | 400 --- .../HybridSubscriberPersistenceManager.java | 90 - .../JDBCConfigPersistenceManager.java | 86 - .../JDBCPolicyPersistenceManager.java | 658 ---- .../JDBCSimplePAPStatusDataHandler.java | 151 - .../JDBCSubscriberPersistenceManager.java | 246 -- .../PersistenceManagerConstants.java | 314 -- .../PersistenceManagerFactory.java | 102 - .../persistence/PolicyPersistenceManager.java | 109 - .../RegistryConfigPersistenceManager.java | 129 - .../RegistryPolicyPersistenceManager.java | 1245 ------- .../RegistrySubscriberPersistenceManager.java | 335 -- .../SubscriberPersistenceManager.java | 73 - .../cache/CacheBackedConfigDAO.java | 79 - .../cache/CacheBackedPolicyDAO.java | 195 -- .../cache/CacheBackedSubscriberDAO.java | 114 - .../persistence/dao/ConfigDAO.java | 113 - .../persistence/dao/PolicyDAO.java | 1031 ------ .../persistence/dao/StatusDAO.java | 302 -- .../persistence/dao/SubscriberDAO.java | 279 -- .../pip/AbstractPIPAttributeFinder.java | 309 -- .../pip/AbstractPIPResourceFinder.java | 153 - .../pip/CarbonAttributeFinder.java | 323 -- .../entitlement/pip/CarbonResourceFinder.java | 273 -- .../pip/DefaultAttributeFinder.java | 214 -- .../pip/DefaultResourceFinder.java | 109 - .../entitlement/pip/PIPAttributeFinder.java | 97 - .../entitlement/pip/PIPExtension.java | 48 - .../entitlement/pip/PIPResourceFinder.java | 82 - .../policy/PolicyAttributeBuilder.java | 1062 ------ .../entitlement/policy/PolicyReader.java | 200 -- .../policy/PolicyRequestBuilder.java | 77 - .../entitlement/policy/PolicyTarget.java | 56 - .../collection/DefaultPolicyCollection.java | 410 --- .../policy/collection/PolicyCollection.java | 93 - .../collection/SimplePolicyCollection.java | 184 - .../finder/AbstractPolicyFinderModule.java | 143 - .../policy/finder/CarbonPolicyFinder.java | 358 -- .../policy/finder/PolicyFinderModule.java | 158 - .../registry/RegistryPolicyHandler.java | 67 - .../RegistryPolicyMediaTypeMatcher.java | 58 - .../AbstractPolicyPublisherModule.java | 195 -- .../CarbonBasicPolicyPublisherModule.java | 223 -- .../policy/publisher/CarbonPDPPublisher.java | 72 - .../publisher/PolicyPublishExecutor.java | 316 -- .../policy/publisher/PolicyPublisher.java | 150 - .../publisher/PolicyPublisherModule.java | 69 - .../policy/publisher/PostPublisherModule.java | 50 - .../PublisherVerificationModule.java | 57 - .../policy/search/PolicySearch.java | 547 --- ...rchCacheInvalidationClusteringMessage.java | 74 - .../policy/search/SearchResult.java | 45 - .../policy/store/DefaultPolicyDataStore.java | 143 - .../policy/store/PolicyDataStore.java | 101 - .../policy/store/PolicyStoreManageModule.java | 69 - .../policy/store/PolicyStoreManager.java | 200 -- .../thrift/EntitlementException.java | 387 --- .../thrift/EntitlementService.java | 2669 --------------- .../thrift/ThriftConfigConstants.java | 33 - .../thrift/ThriftEntitlementServiceImpl.java | 192 -- .../wsxacml/WSXACMLMessageReceiver.java | 523 --- .../wsxacml/X509CredentialImpl.java | 131 - .../entitlement/wsxacml/XACMLHandler.java | 24 - .../src/main/resources/META-INF/component.xml | 132 - .../src/main/resources/META-INF/services.xml | 214 -- .../src/main/resources/entitlement.thrift | 35 - .../src/main/resources/pip-config.xml | 8 - .../src/main/resources/template.xml | 96 - .../src/main/resources/xacml-request.xml | 27 - .../src/main/resources/xacml1.xsd | 253 -- .../src/main/resources/xacml2.xsd | 407 --- .../src/main/resources/xacml3.xsd | 345 -- .../src/main/resources/xml.xsd | 287 -- .../ConfigPersistenceManagerFailureTest.java | 184 - .../ConfigPersistenceManagerTest.java | 121 - .../HybridConfigPersistenceManagerTest.java | 103 - .../HybridPAPStatusDataHandlerTest.java | 184 - .../HybridPolicyPersistenceManagerTest.java | 407 --- ...ybridSubscriberPersistenceManagerTest.java | 198 -- .../JDBCConfigPersistenceManagerTest.java | 49 - .../JDBCPolicyPersistenceManagerTest.java | 65 - .../JDBCSimplePAPStatusDataHandlerTest.java | 46 - .../JDBCSubscriberPersistenceManagerTest.java | 57 - .../persistence/PAPStatusDataHandlerTest.java | 289 -- .../PersistenceManagerFactoryTest.java | 228 -- .../PolicyPersistenceManagerFailureTest.java | 350 -- .../PolicyPersistenceManagerTest.java | 506 --- .../RegistryConfigPersistenceManagerTest.java | 50 - .../RegistryPolicyPersistenceManagerTest.java | 61 - ...egistrySimplePAPStatusDataHandlerTest.java | 48 - ...istrySubscriberPersistenceManagerTest.java | 57 - ...bscriberPersistenceManagerFailureTest.java | 262 -- .../SubscriberPersistenceManagerTest.java | 294 -- .../HybridPolicyPersistenceManagerTest.java | 112 - .../JDBCPolicyPersistenceManagerTest.java | 43 - .../finder/PolicyPersistenceManagerTest.java | 136 - .../RegistryPolicyPersistenceManagerTest.java | 48 - .../test/resources/repository/conf/carbon.xml | 686 ---- .../repository/conf/identity/identity.xml | 743 ---- .../src/test/resources/testng.xml | 45 - .../ui/i18n/JSResources.properties | 30 - .../policyeditor/ui/i18n/Resources.properties | 24 - .../web/policyeditor/css/local-styles.css | 50 - .../main/resources/web/policyeditor/index.jsp | 234 -- .../js/policy-editor-service-stub.js | 925 ----- .../web/policyeditor/js/policy-editor.js | 582 ---- .../web/policyeditor/js/sax-policy-menu.js | 317 -- .../resources/web/policyeditor/js/sax-tree.js | 335 -- .../js/xml-for-script/tinyxmlsax.js | 245 -- .../js/xml-for-script/tinyxmlw3cdom.js | 402 --- .../web/policyeditor/js/yui/button/README | 297 -- .../js/yui/button/assets/button-core.css | 42 - .../button/assets/skins/sam/button-skin.css | 222 -- .../js/yui/button/assets/skins/sam/button.css | 7 - .../skins/sam/menu-button-arrow-disabled.png | Bin 173 -> 0 bytes .../assets/skins/sam/menu-button-arrow.png | Bin 173 -> 0 bytes .../skins/sam/split-button-arrow-active.png | Bin 280 -> 0 bytes .../skins/sam/split-button-arrow-disabled.png | Bin 185 -> 0 bytes .../skins/sam/split-button-arrow-focus.png | Bin 185 -> 0 bytes .../skins/sam/split-button-arrow-hover.png | Bin 185 -> 0 bytes .../assets/skins/sam/split-button-arrow.png | Bin 185 -> 0 bytes .../js/yui/button/button-beta-min.js | 11 - .../web/policyeditor/js/yui/container/README | 862 ----- .../js/yui/container/assets/alrt16_1.gif | Bin 971 -> 0 bytes .../js/yui/container/assets/blck16_1.gif | Bin 591 -> 0 bytes .../js/yui/container/assets/close12_1.gif | Bin 85 -> 0 bytes .../yui/container/assets/container-core.css | 150 - .../js/yui/container/assets/container.css | 303 -- .../js/yui/container/assets/hlp16_1.gif | Bin 928 -> 0 bytes .../js/yui/container/assets/info16_1.gif | Bin 601 -> 0 bytes .../assets/skins/sam/container-skin.css | 293 -- .../container/assets/skins/sam/container.css | 251 -- .../js/yui/container/assets/tip16_1.gif | Bin 552 -> 0 bytes .../js/yui/container/assets/warn16_1.gif | Bin 580 -> 0 bytes .../js/yui/container/container-min.js | 2611 -------------- .../js/yui/container/container_core-min.js | 1477 -------- .../js/yui/element/element-beta-min.js | 8 - .../policyeditor/js/yui/menu/assets/map.gif | Bin 236 -> 0 bytes .../js/yui/menu/assets/menu-core.css | 143 - .../policyeditor/js/yui/menu/assets/menu.css | 355 -- .../yui/menu/assets/skins/sam/menu-skin.css | 458 --- .../js/yui/menu/assets/skins/sam/menu.css | 7 - .../web/policyeditor/js/yui/menu/menu-min.js | 16 - .../js/yui/tabview/assets/border_tabs.css | 54 - .../js/yui/tabview/assets/loading.gif | Bin 729 -> 0 bytes .../js/yui/tabview/assets/skin-sam.css | 77 - .../skins/policyeditor/tabview-skin.css | 187 - .../assets/skins/policyeditor/tabview.css | 255 -- .../js/yui/tabview/assets/tabview-core.css | 110 - .../js/yui/tabview/assets/tabview.css | 75 - .../js/yui/tabview/tabview-min.js | 8 - .../assets/skins/sam/treeview-loading.gif | Bin 2673 -> 0 bytes .../assets/skins/sam/treeview-skin.css | 113 - .../assets/skins/sam/treeview-sprite.gif | Bin 3900 -> 0 bytes .../treeview/assets/skins/sam/treeview.css | 7 - .../js/yui/treeview/assets/sprite-menu.gif | Bin 452 -> 0 bytes .../js/yui/treeview/assets/sprite-orig.gif | Bin 3289 -> 0 bytes .../js/yui/treeview/assets/treeview-core.css | 6 - .../yui/treeview/assets/treeview-loading.gif | Bin 2673 -> 0 bytes .../js/yui/treeview/assets/treeview-menu.css | 107 - .../js/yui/treeview/assets/treeview.css | 112 - .../js/yui/treeview/treeview-min.js | 10 - .../js/yui/yahoo-dom-event/yahoo-dom-event.js | 12 - .../prettyPrinter_ajaxprocessor.jsp | 24 - .../web/policyeditor/xslt/XMLFormatter.xsl | 28 - .../policyeditor/PolicyEditorService.java | 224 -- .../src/main/resources/META-INF/services.xml | 44 - .../wso2/carbon/policyeditor/xsd/policies.xml | 25 - .../carbon/policyeditor/xsd/ws-policy.xsd | 117 - .../policyeditor/xsd/ws-securitypolicy.xsd | 996 ------ .../carbon/policyeditor/xsd/wsrm-policy.xsd | 87 - .../xsd/wssecurity-secext-1.0.xsd | 200 -- .../xsd/wssecurity-utility-1.0.xsd | 108 - .../src/test/resources/testng.xml | 26 - .../pom.xml | 14 - .../resources/balana-config.xml | 16 - .../resources/entitlement.properties | 71 - .../resources/entitlement.properties.j2 | 139 - ...identity.xacml.server.feature.default.json | 46 - ...ity.xacml.server.feature.unit-resolve.json | 10 - .../resources/p2.inf | 26 - .../sample-app-authz-by-role-policy.xml | 56 - ...e-app-authz-by-userstore-domain-policy.xml | 56 - .../policies/sample-kmarket-blue-policy.xml | 93 - .../policies/sample-kmarket-gold-policy.xml | 67 - .../policies/sample-kmarket-policy-set.xml | 7 - .../policies/sample-kmarket-sliver-policy.xml | 115 - .../policies/sample-provisioning-policy.xml | 70 - .../policies/sample-xpath-policy-1.xml | 48 - .../policies/sample-xpath-policy-2.xml | 45 - pom.xml | 61 - .../resources/EntitlementAdminService.wsdl | 873 ----- .../EntitlementPolicyAdminService.wsdl | 1446 -------- .../main/resources/EntitlementService.wsdl | 448 --- service-stubs/identity/pom.xml | 1 - 500 files changed, 90945 deletions(-) delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/BasicAuthHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthConfigReader.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticationHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticatorRegistry.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/AbstractEntitlementException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ExceptionBean.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/RequestParseException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ResponseWriteException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/UnauthorizedException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/ApiOriginFilter.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/AuthenticationFilter.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/EntitlementExceptionMapper.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/impl/ApplicationInitializer.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/AbstractResource.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/DecisionResource.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsRequestModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsResponseModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/DecisionRequestModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesRequestModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesResponseModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/HomeResponseModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/LinkModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/ResourceModel.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/ClearThreadLocalInterceptor.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/EntitlementEndpointConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParser.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONResponseWriter.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/resources/META-INF/spring.schemas delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org.wso2.carbon.identity.entitlement.endpoint.test/TestService.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParserTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONRequestParser.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONResponseWriter.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-all-entitlements-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-bool-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-entitled-attribs-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-pdp-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-all-entitlements-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-bool-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-entitled-attribs-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-home.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-pdp-1.json delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-all-entitlements-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-bool-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-entitled-attribs-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-pdp-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-all-entitlements-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-bool-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-entitled-attribs-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-home.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-pdp-1.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/DataPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyBean.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyCreationException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/InMemoryPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorEngine.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/RegistryPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/Utils.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/BasicRequestDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ElementCountDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ExtendAttributeDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ObligationDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyEditorDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyRefIdDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicySetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RequestDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RowDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RuleDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorElementDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/TargetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyCreatorUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyEditorUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.common/src/test/resources/testng.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/README.md delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/REQUIRED_CHANGES.md delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyBean.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreationException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreator.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PolicyEditorConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PropertyDTOComparator.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementAdminServiceClient.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyAdminServiceClient.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyUploadExecutor.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementServiceClient.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/BasicRequestDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ElementCountDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ExtendAttributeDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ObligationDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyRefIdDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicySetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RequestDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RowDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RuleDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorElementDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/TargetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/ClientUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyCreatorUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyEditorUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/META-INF/component.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/org/wso2/carbon/identity/entitlement/ui/i18n/Resources.properties delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-policy.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-subscriber.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/advance-search.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/attribute-search.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-add.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-index.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-editor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-finish.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-update.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-attribute-cache-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-cache-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-evaluation-request.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-policy-set.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/entitlement.css delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/tree-styles.css delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-policy-entry.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-rule-entry.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/edit-policy.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/enable-disable-policy-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy-submit.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish-policy-set.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/Policy-type.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/PolicySet-type.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/actions.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/add-new-policy.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/add-policy.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/add.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/advance-search.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/advanceview.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-pap.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-policy-editor.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/calendar.jpg delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/cancel.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/cleanCache.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/close.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/config.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/delete.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/disable.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/down.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/down.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/edit.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/enable.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/ent-options.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/entitlement.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/evaluate.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/evaluation-request.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/icon-refresh.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import-policy.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/minus.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/nodata.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/pdp-config.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/pdp-policy.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/plus.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policies.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policy-admin.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policy-pub.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policy-set-pap.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policy-set.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/policy.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/publish-all.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/publish-pdp.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/publish.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/registry.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/save-button.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/save.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/search-attribute.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/search-policy.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/search-top.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/search.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/simple-pap.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/standard-pap.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/sync.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/try-pdp.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/up.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/up.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/user-store.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/view.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/view.png delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/wsdiscovery.gif delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/import-policy-submit-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/import-policy.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/index.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/js/animation-min/animation-min.js delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/js/create-basic-policy.js delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/js/popup.js delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/js/treecontrol.js delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/js/yahoo-dom-event/yahoo-dom-event.js delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/my-pdp.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/pdp-manage.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-editor-config-view.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-editor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-publish.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-search.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-view-pdp.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/policy-view.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/prettyPrinter_ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/publish-finish-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/re-order-policy.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/refresh-finder.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/remove-policy-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/remove-subscriber-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/rollback-policy-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/select-attribute-values.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/select-attribute.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/select-extended-attributes.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/show-policy-status.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/show-policy-version.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/show-subscriber-status.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/simple-policy-editor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/simple-policy-finish-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/start-publish.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-policy-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-policy-order.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-policy-set.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-policy-submit.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-rule.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update-search.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/update_order-ajaxprocessor.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/view-finder.jsp delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementAdminService.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementLRUCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementNotificationExtension.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementPolicyAdminService.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementService.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/EntitlementUtil.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/NotificationConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/PAPStatusDataHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/PDPConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/PolicyOrderComparator.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/PolicyStatusClusterMessage.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/SimplePAPStatusDataHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/StatusHolderComparator.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/ConfigCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/DecisionCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/EntitlementBaseCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/EntitlementEngineCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/IdentityCacheEntry.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/IdentityCacheKey.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PIPAbstractAttributeCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PIPAttributeCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PapPolicyCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PapPolicyListCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PdpPolicyCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PdpPolicyListCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PolicyCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PolicyCacheCreatedListener.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PolicyCacheUpdateListener.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PolicySearchCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/PolicyStatus.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/SimpleDecisionCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/SubscriberCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/cache/SubscriberIdListCache.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/AttributeDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/EntitledAttributesDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/EntitledResultSetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/EntitlementFinderDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/EntitlementTreeNodeDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PDPDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PIPFinderDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PaginatedPolicySetDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PaginatedStatusHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PaginatedStringDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PolicyDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PolicyFinderDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PolicyStoreDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PublisherDataHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/PublisherPropertyDTO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/dto/StatusHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/extension/EvalPermissionTreeFunction.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/internal/EntitlementConfigHolder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/internal/EntitlementExtensionBuilder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/internal/EntitlementServiceComponent.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/internal/SchemaBuilder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/listener/CacheClearingUserOperationListener.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/CarbonEntitlementDataFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/EntitlementAdminEngine.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/EntitlementDataFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/EntitlementDataFinderModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/PAPPolicyReader.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/store/PAPPolicyFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/store/PAPPolicyStoreManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pap/store/PAPPolicyStoreReader.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pdp/EntitlementEngine.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/ConfigPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/HybridConfigPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/HybridPAPStatusDataHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/HybridPolicyPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/HybridSubscriberPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/JDBCConfigPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/JDBCPolicyPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/JDBCSimplePAPStatusDataHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/JDBCSubscriberPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/PersistenceManagerConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/PersistenceManagerFactory.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/PolicyPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/RegistryConfigPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/RegistryPolicyPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/RegistrySubscriberPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/SubscriberPersistenceManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/cache/CacheBackedConfigDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/cache/CacheBackedPolicyDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/cache/CacheBackedSubscriberDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/dao/ConfigDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/dao/PolicyDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/dao/StatusDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/persistence/dao/SubscriberDAO.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/AbstractPIPAttributeFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/AbstractPIPResourceFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/CarbonAttributeFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/CarbonResourceFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/DefaultAttributeFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/DefaultResourceFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/PIPAttributeFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/PIPExtension.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/pip/PIPResourceFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/PolicyAttributeBuilder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/PolicyReader.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/PolicyRequestBuilder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/PolicyTarget.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/collection/DefaultPolicyCollection.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/collection/PolicyCollection.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/collection/SimplePolicyCollection.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/finder/AbstractPolicyFinderModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/finder/CarbonPolicyFinder.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/finder/PolicyFinderModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/finder/registry/RegistryPolicyHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/finder/registry/RegistryPolicyMediaTypeMatcher.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/AbstractPolicyPublisherModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/CarbonBasicPolicyPublisherModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/CarbonPDPPublisher.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/PolicyPublishExecutor.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/PolicyPublisher.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/PolicyPublisherModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/PostPublisherModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/publisher/PublisherVerificationModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/search/PolicySearch.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/search/PolicySearchCacheInvalidationClusteringMessage.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/search/SearchResult.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/store/DefaultPolicyDataStore.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/store/PolicyDataStore.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/store/PolicyStoreManageModule.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/policy/store/PolicyStoreManager.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/thrift/EntitlementException.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/thrift/EntitlementService.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/thrift/ThriftConfigConstants.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/thrift/ThriftEntitlementServiceImpl.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/wsxacml/WSXACMLMessageReceiver.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/wsxacml/X509CredentialImpl.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/wsxacml/XACMLHandler.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/META-INF/component.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/META-INF/services.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/entitlement.thrift delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/pip-config.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/template.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/xacml-request.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/xacml1.xsd delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/xacml2.xsd delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/xacml3.xsd delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/main/resources/xml.xsd delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/ConfigPersistenceManagerFailureTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/ConfigPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/HybridConfigPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/HybridPAPStatusDataHandlerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/HybridPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/HybridSubscriberPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/JDBCConfigPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/JDBCPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/JDBCSimplePAPStatusDataHandlerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/JDBCSubscriberPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/PAPStatusDataHandlerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/PersistenceManagerFactoryTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/PolicyPersistenceManagerFailureTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/PolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/RegistryConfigPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/RegistryPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/RegistrySimplePAPStatusDataHandlerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/RegistrySubscriberPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/SubscriberPersistenceManagerFailureTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/persistence/SubscriberPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/policy/finder/HybridPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/policy/finder/JDBCPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/policy/finder/PolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/policy/finder/RegistryPolicyPersistenceManagerTest.java delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/resources/repository/conf/carbon.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/resources/repository/conf/identity/identity.xml delete mode 100644 components/entitlement/org.wso2.carbon.identity.entitlement/src/test/resources/testng.xml delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/org/wso2/carbon/policyeditor/ui/i18n/JSResources.properties delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/org/wso2/carbon/policyeditor/ui/i18n/Resources.properties delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/css/local-styles.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/index.jsp delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/policy-editor-service-stub.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/policy-editor.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/sax-policy-menu.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/sax-tree.js delete mode 100755 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/xml-for-script/tinyxmlsax.js delete mode 100755 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/xml-for-script/tinyxmlw3cdom.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/README delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/button-core.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/button-skin.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/button.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/menu-button-arrow-disabled.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/menu-button-arrow.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/split-button-arrow-active.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/split-button-arrow-disabled.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/split-button-arrow-focus.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/split-button-arrow-hover.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/assets/skins/sam/split-button-arrow.png delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/button/button-beta-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/README delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/alrt16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/blck16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/close12_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/container-core.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/container.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/hlp16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/info16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/skins/sam/container-skin.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/skins/sam/container.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/tip16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/assets/warn16_1.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/container-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/container/container_core-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/element/element-beta-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/assets/map.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/assets/menu-core.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/assets/menu.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/assets/skins/sam/menu-skin.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/assets/skins/sam/menu.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/menu/menu-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/border_tabs.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/loading.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/skin-sam.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/skins/policyeditor/tabview-skin.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/skins/policyeditor/tabview.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/tabview-core.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/assets/tabview.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/tabview/tabview-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/skins/sam/treeview-loading.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/skins/sam/treeview-skin.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/skins/sam/treeview-sprite.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/skins/sam/treeview.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/sprite-menu.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/sprite-orig.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/treeview-core.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/treeview-loading.gif delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/treeview-menu.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/assets/treeview.css delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/treeview/treeview-min.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/js/yui/yahoo-dom-event/yahoo-dom-event.js delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/prettyPrinter_ajaxprocessor.jsp delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor.ui/src/main/resources/web/policyeditor/xslt/XMLFormatter.xsl delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/java/org/wso2/carbon/policyeditor/PolicyEditorService.java delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/META-INF/services.xml delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/policies.xml delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/ws-policy.xsd delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/ws-securitypolicy.xsd delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/wsrm-policy.xsd delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/wssecurity-secext-1.0.xsd delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/main/resources/org/wso2/carbon/policyeditor/xsd/wssecurity-utility-1.0.xsd delete mode 100644 components/policy-editor/org.wso2.carbon.policyeditor/src/test/resources/testng.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/balana-config.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/entitlement.properties delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/entitlement.properties.j2 delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/org.wso2.carbon.identity.xacml.server.feature.default.json delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/org.wso2.carbon.identity.xacml.server.feature.unit-resolve.json delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/p2.inf delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-app-authz-by-role-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-app-authz-by-userstore-domain-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-kmarket-blue-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-kmarket-gold-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-kmarket-policy-set.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-kmarket-sliver-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-provisioning-policy.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-xpath-policy-1.xml delete mode 100644 features/xacml/org.wso2.carbon.identity.xacml.server.feature/resources/policies/sample-xpath-policy-2.xml delete mode 100644 service-stubs/identity/org.wso2.carbon.identity.entitlement.stub/src/main/resources/EntitlementAdminService.wsdl delete mode 100644 service-stubs/identity/org.wso2.carbon.identity.entitlement.stub/src/main/resources/EntitlementPolicyAdminService.wsdl delete mode 100644 service-stubs/identity/org.wso2.carbon.identity.entitlement.stub/src/main/resources/EntitlementService.wsdl diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/BasicAuthHandler.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/BasicAuthHandler.java deleted file mode 100644 index 512e3b4c7e69..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/BasicAuthHandler.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.auth; - -import org.apache.axiom.om.util.Base64; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; -import org.wso2.carbon.user.api.UserRealm; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.core.service.RealmService; -import org.wso2.carbon.utils.multitenancy.MultitenantUtils; - -import java.util.List; -import java.util.Map; -import javax.ws.rs.container.ContainerRequestContext; - -/** - * This is the default BASIC-Auth authentication handler for Entitlement REST Endpoints. - */ -public class BasicAuthHandler implements EntitlementAuthenticationHandler { - - private static Log log = LogFactory.getLog(BasicAuthHandler.class); - /* constants specific to this authenticator */ - private final String BASIC_AUTH_HEADER = "Basic"; - private final int DEFAULT_PRIORITY = 5; - /* property map */ - private Map properties; - /* properties specific to this authenticator */ - private int priority; - - public void setDefaultPriority() { - priority = DEFAULT_PRIORITY; - } - - /** - * Ideally this should be configurable. For the moment, hard code the priority. - * - * @return - */ - public int getPriority() { - return priority; - } - - public void setPriority(int priority) { - this.priority = priority; - } - - public boolean canHandle(ContainerRequestContext message) { - // check the "Authorization" header and if "Basic" is there, can be handled. - - // get the value for Authorization Header - List authzHeaders = message.getHeaders().get(EntitlementEndpointConstants.AUTHORIZATION_HEADER); - if (authzHeaders != null) { - // get the authorization header value, if provided - String authzHeader = (String) authzHeaders.get(0); - return authzHeader != null && authzHeader.contains(BASIC_AUTH_HEADER); - } - return false; - } - - public boolean isAuthenticated(ContainerRequestContext message) { - // extract authorization header and authenticate. - - // get the value for Authorization Header - List authzHeaders = message.getHeaders().get(EntitlementEndpointConstants.AUTHORIZATION_HEADER); - if (authzHeaders != null) { - // get the authorization header value, if provided - String authzHeader = (String) authzHeaders.get(0); - - // decode it and extract username and password - byte[] decodedAuthHeader = Base64.decode(authzHeader.split(" ")[1]); - String authHeader = new String(decodedAuthHeader); - String userName = authHeader.split(":")[0]; - String password = authHeader.split(":")[1]; - if (userName != null && password != null) { - String tenantDomain = MultitenantUtils.getTenantDomain(userName); - String tenantAwareUsername = MultitenantUtils.getTenantAwareUsername(userName); - - try { - // get super tenant context and get realm service which is an osgi service - RealmService realmService = (RealmService) PrivilegedCarbonContext - .getThreadLocalCarbonContext().getOSGiService(RealmService.class); - if (realmService != null) { - int tenantId = realmService.getTenantManager().getTenantId(tenantDomain); - if (tenantId == -1) { - log.error("Invalid tenant domain " + tenantDomain); - return false; - } - // get tenant's user realm - UserRealm userRealm = realmService.getTenantUserRealm(tenantId); - boolean authenticated = userRealm.getUserStoreManager().authenticate( - tenantAwareUsername, password); - if (authenticated) { - // authentication success. set the username for authorization header and - // proceed the REST call - authzHeaders.set(0, userName); - return true; - } else { - if (log.isDebugEnabled()) { - log.debug("Authentication failed for the user: " + tenantAwareUsername - + "@" + tenantDomain); - } - return false; - } - } else { - log.error("Error in getting Realm Service for user: " + userName); - return false; - } - } catch (UserStoreException e) { - log.error("Internal server error while authenticating the user."); - return false; - } - } else { - log.error("Authentication required for this resource. " + - "Username or password not provided."); - return false; - } - } else { - log.error("Authentication required for this resource. " + - "Authorization header not present in the request."); - return false; - } - - } - - /** - * To set the properties specific to each authenticator - * - * @param authenticatorProperties - */ - public void setProperties(Map authenticatorProperties) { - // set the priority read from config - this.properties = authenticatorProperties; - String priorityString = properties.get(EntitlementEndpointConstants.PROPERTY_NAME_PRIORITY); - if (priorityString != null) { - priority = Integer.parseInt(properties - .get(EntitlementEndpointConstants.PROPERTY_NAME_PRIORITY)); - } else { - priority = DEFAULT_PRIORITY; - } - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthConfigReader.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthConfigReader.java deleted file mode 100644 index 91d1c3589834..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthConfigReader.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.auth; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; - -/** - *

- * Initiating authenticator classes - *

- */ -public class EntitlementAuthConfigReader { - - private static Log logger = LogFactory.getLog(EntitlementAuthConfigReader.class); - - public List buildEntitlementAuthenticators() { - - try { - BasicAuthHandler basicAuth = new BasicAuthHandler(); - HashMap basicAuthProps = new HashMap(); - basicAuthProps.put("Priority", "5"); - basicAuth.setProperties(basicAuthProps); - - List entitlementAuthHandlers = new ArrayList(); - entitlementAuthHandlers.add(basicAuth); - - /** - * TODO : Remove hardcoded Authenticator initializing and read authenticator - * from identity config - */ - - return entitlementAuthHandlers; - } catch (Exception e) { - logger.error("Error in loading the authenticator class...", e); - } - return Collections.emptyList(); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticationHandler.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticationHandler.java deleted file mode 100644 index 618324162c01..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticationHandler.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.auth; - -import java.util.Map; -import javax.ws.rs.container.ContainerRequestContext; - -/** - * Interface to be implemented by any type of authentication handlers that will be registered - * to authenticate Entitlement requests coming to Entitlement REST endpoints. - */ -public interface EntitlementAuthenticationHandler { - - /** - * Returns the priority of the particular authentication handler implementation. - * - * @return - */ - int getPriority(); - - /** - * Sets the priority of the particular authentication handler implementation. - */ - void setPriority(int priority); - - /** - * To check whether the given handler can authenticate the request by looking at the message, - * including headers. - * - * @param message - * @return - */ - boolean canHandle(ContainerRequestContext message); - - /** - * If the authenticator can handle the request, decide whether the request is authenticated. - * - * @param message - * @return - */ - boolean isAuthenticated(ContainerRequestContext message); - - /** - * To set the properties specific to each authenticator - * - * @param authenticatorProperties - */ - void setProperties(Map authenticatorProperties); - -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticatorRegistry.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticatorRegistry.java deleted file mode 100644 index 800b886545cb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/auth/EntitlementAuthenticatorRegistry.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.auth; - -import java.util.Map; -import java.util.TreeMap; -import javax.ws.rs.container.ContainerRequestContext; - -/** - * This stores the authenticators registered for Entitlement REST endpoints and returns the appropriate - * authenticator as requested by authentication filter associated with Entitlement REST endpoints. - */ -public class EntitlementAuthenticatorRegistry { - - private static EntitlementAuthenticatorRegistry EntitlementAuthRegistry; - private static Map EntitlementAuthHandlers = new TreeMap(); - - /** - * Initialize the EntitlementAuthenticatorRegistry Singleton - * - * @return - */ - public static EntitlementAuthenticatorRegistry getInstance() { - if (EntitlementAuthRegistry == null) { - synchronized (EntitlementAuthenticatorRegistry.class) { - if (EntitlementAuthRegistry == null) { - EntitlementAuthRegistry = new EntitlementAuthenticatorRegistry(); - return EntitlementAuthRegistry; - } else { - return EntitlementAuthRegistry; - } - } - } - return EntitlementAuthRegistry; - } - - /** - * Given the RESTful message and other info, returns the authenticator which can handle the request. - * - * @param message - * @return - */ - public EntitlementAuthenticationHandler getAuthenticator(ContainerRequestContext message) { - //since we use a tree map to store authenticators, they are ordered based on the priority. - //therefore, we iterate over the authenticators and check the can handle method - for (EntitlementAuthenticationHandler entitlementAuthenticationHandler : EntitlementAuthHandlers.values()) { - if (entitlementAuthenticationHandler.canHandle(message)) { - return entitlementAuthenticationHandler; - } - } - return null; - } - - public void setAuthenticator(EntitlementAuthenticationHandler EntitlementAuthHandler) { - EntitlementAuthHandlers.put(EntitlementAuthHandler.getPriority(), EntitlementAuthHandler); - } - - public void removeAuthenticator(EntitlementAuthenticationHandler entitlementAuthenticationHandler) { - EntitlementAuthHandlers.remove(entitlementAuthenticationHandler.getPriority()); - } - -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/AbstractEntitlementException.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/AbstractEntitlementException.java deleted file mode 100644 index 499ea1a1dd8c..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/AbstractEntitlementException.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.exception; - -/** - * Abstract class for custom exceptions thrown from Entitlement Endpoint - * Concrete excpetions will be implemented from this class - */ -public abstract class AbstractEntitlementException extends Exception { - //Custom exception detail - protected String description; - //Error code described under the Errors section in User Documentation - protected int code; - - public AbstractEntitlementException() { - this.code = -1; - this.description = null; - } - - public AbstractEntitlementException(int code) { - this.code = code; - this.description = null; - } - - public AbstractEntitlementException(int code, String description) { - super(description); - this.code = code; - this.description = description; - } - - public AbstractEntitlementException(String description) { - super(description); - this.code = -1; - this.description = description; - } - - public AbstractEntitlementException(int code, String description, Exception exception) { - super(description, exception); - this.code = code; - this.description = description; - - } - - public AbstractEntitlementException(String description, Exception exception) { - super(description, exception); - this.code = -1; - this.description = description; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public ExceptionBean getExceptioBean() { - return new ExceptionBean(code, description); - } -} - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ExceptionBean.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ExceptionBean.java deleted file mode 100644 index 29e4740557b2..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ExceptionBean.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.exception; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "code", - "message" -}) -@XmlRootElement(name = "Error") -/** - * Java Bean Class to be used as a response object for the service. - * When an exception occurs, the ExceptionMapper will catch it - * and an ExceptionBean object will be created according to the exception caught. - */ -public class ExceptionBean { - //Corresponds to error code in AbstractException - @XmlElement - private int code; - //Corresponds to error message in AbstractException - @XmlElement - private String message; - - public ExceptionBean() { - //No-arg default constructor needed for JAXB - } - - public ExceptionBean(int code, String message) { - this.code = code; - this.message = message; - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/RequestParseException.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/RequestParseException.java deleted file mode 100644 index d44834ef0ebf..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/RequestParseException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - */ -package org.wso2.carbon.identity.entitlement.endpoint.exception; - -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; - -/** - * Concrete exception class extending AnstractEntitlementExcetion - * Corresponds to an error occurred in processing a request - */ -public class RequestParseException extends AbstractEntitlementException { - public RequestParseException() { - super(EntitlementEndpointConstants.ERROR_REQUEST_PARSE_CODE, - EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE); - } - - public RequestParseException(String description) { - super(EntitlementEndpointConstants.ERROR_REQUEST_PARSE_CODE, description); - } - - public RequestParseException(int code, String description) { - super(code, description); - } - - public RequestParseException(String description, Exception exception) { - super(description, exception); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ResponseWriteException.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ResponseWriteException.java deleted file mode 100644 index 51b231944f44..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/ResponseWriteException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - */ -package org.wso2.carbon.identity.entitlement.endpoint.exception; - -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; - -/** - * Concrete exception class extending AnstractEntitlementExcetion - * Corresponds to an error occurred in processing a response - */ -public class ResponseWriteException extends AbstractEntitlementException { - public ResponseWriteException() { - super(EntitlementEndpointConstants.ERROR_RESPONSE_READ_CODE, - EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE); - } - - public ResponseWriteException(String description) { - super(EntitlementEndpointConstants.ERROR_RESPONSE_READ_CODE, description); - } - - public ResponseWriteException(int code, String description) { - super(code, description); - } - - public ResponseWriteException(String description, Exception exception) { - super(description, exception); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/UnauthorizedException.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/UnauthorizedException.java deleted file mode 100644 index e878ca283863..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/exception/UnauthorizedException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.exception; - -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; - -/** - * Concrete exception class extending AnstractEntitlementExcetion - * Corresponds to an error occrured in Authentication - */ -public class UnauthorizedException extends AbstractEntitlementException { - public UnauthorizedException() { - super(EntitlementEndpointConstants.ERROR_UNAUTHORIZED_CODE); - } - - public UnauthorizedException(String message) { - super(EntitlementEndpointConstants.ERROR_UNAUTHORIZED_CODE, message); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/ApiOriginFilter.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/ApiOriginFilter.java deleted file mode 100644 index d0f875937a6d..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/ApiOriginFilter.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.filter; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -public class ApiOriginFilter implements Filter { - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException, ServletException { - HttpServletResponse res = (HttpServletResponse) response; - res.addHeader("Access-Control-Allow-Origin", "*"); - res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); - res.addHeader("Access-Control-Allow-Headers", "Content-Type"); - chain.doFilter(request, response); - } - - public void destroy() { } - - public void init(FilterConfig filterConfig) throws ServletException { } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/AuthenticationFilter.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/AuthenticationFilter.java deleted file mode 100644 index 7f7b9efec215..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/AuthenticationFilter.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.filter; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.identity.application.common.util.IdentityApplicationManagementUtil; -import org.wso2.carbon.identity.entitlement.endpoint.auth.EntitlementAuthenticationHandler; -import org.wso2.carbon.identity.entitlement.endpoint.auth.EntitlementAuthenticatorRegistry; -import org.wso2.carbon.identity.entitlement.endpoint.exception.UnauthorizedException; -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; - -import java.io.IOException; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.Response; - -public class AuthenticationFilter implements ContainerRequestFilter, ContainerResponseFilter { - - private static Log log = LogFactory.getLog(AuthenticationFilter.class); - - @Override - public void filter(ContainerRequestContext containerRequestContext) throws IOException { - // reset anything set on provisioning thread local. - IdentityApplicationManagementUtil.resetThreadLocalProvisioningServiceProvider(); - - if (log.isDebugEnabled()) { - log.debug("Authenticating Entitlement Endpoint request.."); - } - EntitlementAuthenticatorRegistry entitlementAuthRegistry = EntitlementAuthenticatorRegistry.getInstance(); - - if (entitlementAuthRegistry != null) { - EntitlementAuthenticationHandler entitlementAuthHandler = entitlementAuthRegistry.getAuthenticator( - containerRequestContext); - - boolean isAuthenticated = false; - if (entitlementAuthHandler != null) { - isAuthenticated = entitlementAuthHandler.isAuthenticated(containerRequestContext); - - if (isAuthenticated) { - return; - } - } - } - //if null response is not returned(i.e:message continues its way to the resource), return error & terminate. - UnauthorizedException unauthorizedException = new UnauthorizedException( - EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE); - Response.ResponseBuilder responseBuilder = Response.status(unauthorizedException.getCode()); - responseBuilder.entity(unauthorizedException.getDescription()); - - containerRequestContext.abortWith(responseBuilder.build()); - } - - // To clear the ThreadLocalProvisioningServiceProvider in a non faulty case - @Override - public void filter(ContainerRequestContext containerRequestContext, - ContainerResponseContext containerResponseContext) throws IOException { - IdentityApplicationManagementUtil.resetThreadLocalProvisioningServiceProvider(); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/EntitlementExceptionMapper.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/EntitlementExceptionMapper.java deleted file mode 100644 index bc60a0446a10..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/filter/EntitlementExceptionMapper.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.filter; - -import org.wso2.carbon.identity.entitlement.endpoint.exception.AbstractEntitlementException; -import org.wso2.carbon.identity.entitlement.endpoint.exception.RequestParseException; - -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -/** - * Custom Exception Mapper - * Centralized controlling of exceptions occurred within the service - * Every exception will be thrown from the service methods to be caught - * by this class and an appropriate ExceptionBean will be created and - * be sent as the response - */ -@Provider -@Produces(MediaType.TEXT_PLAIN) -public class EntitlementExceptionMapper implements ExceptionMapper { - - @Override - public Response toResponse(Exception e) { - //If the exception occurred was a known EntitlementEndpoint exception - if (e instanceof AbstractEntitlementException) { - AbstractEntitlementException entitlementException = (AbstractEntitlementException) e; - return Response.status(Response.Status.BAD_REQUEST) - .entity(entitlementException.getExceptioBean()) - .build(); - } - //Any unknown exception occurred, return status 500 - return Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity(new RequestParseException().getExceptioBean()) - .build(); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/impl/ApplicationInitializer.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/impl/ApplicationInitializer.java deleted file mode 100644 index d948a18d99ce..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/impl/ApplicationInitializer.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.identity.entitlement.endpoint.auth.BasicAuthHandler; -import org.wso2.carbon.identity.entitlement.endpoint.auth.EntitlementAuthConfigReader; -import org.wso2.carbon.identity.entitlement.endpoint.auth.EntitlementAuthenticationHandler; -import org.wso2.carbon.identity.entitlement.endpoint.auth.EntitlementAuthenticatorRegistry; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import java.util.List; - - -/** - * This performs one-time initialization tasks at the application startup. - */ -public class ApplicationInitializer implements ServletContextListener { - - private Log logger = LogFactory.getLog(ApplicationInitializer.class); - - @Override - public void contextInitialized(ServletContextEvent servletContextEvent) { - if (logger.isDebugEnabled()) { - logger.debug("Initializing Entitlement Webapp..."); - } - try { - //Initialize Authentication Registry - initEntitlementAuthenticatorRegistry(); - } catch (Exception e) { - logger.error("Error in initializing the Authentocators at the initialization of " + - "Entitlement webapp", e); - } - } - - @Override - public void contextDestroyed(ServletContextEvent servletContextEvent) { - // Do nothing - } - - private void initEntitlementAuthenticatorRegistry() { - EntitlementAuthenticatorRegistry entitlementAuthRegistry = EntitlementAuthenticatorRegistry.getInstance(); - - if (entitlementAuthRegistry != null) { - //set authenticators after building auth config - EntitlementAuthConfigReader configReader = new EntitlementAuthConfigReader(); - List entitlementAuthenticators - = configReader.buildEntitlementAuthenticators(); - - if (entitlementAuthenticators != null && !entitlementAuthenticators.isEmpty()) { - for (EntitlementAuthenticationHandler entitlementAuthenticator : entitlementAuthenticators) { - entitlementAuthRegistry.setAuthenticator(entitlementAuthenticator); - } - } else { - //initialize default basic auth authenticator & OAuth authenticator and set it in the auth registry. - BasicAuthHandler basicAuthHandler = new BasicAuthHandler(); - basicAuthHandler.setDefaultPriority(); - entitlementAuthRegistry.setAuthenticator(basicAuthHandler); - - } - } - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/AbstractResource.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/AbstractResource.java deleted file mode 100644 index f958f44db3b3..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/AbstractResource.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources; - -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; - -/** - * Abstract class for service resource - */ -public class AbstractResource { - public String identifyOutputFormat(String format) { - if (format == null || ("*/*").equals(format) - || format.startsWith(EntitlementEndpointConstants.APPLICATION_JSON)) { - return EntitlementEndpointConstants.APPLICATION_JSON; - } else { - return format; - } - } - - public String identifyInputFormat(String format) { - if (format == null || ("*/*").equals(format) - || format.startsWith(EntitlementEndpointConstants.APPLICATION_JSON)) { - return EntitlementEndpointConstants.APPLICATION_JSON; - } else { - return format; - } - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/DecisionResource.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/DecisionResource.java deleted file mode 100644 index 4fb2f0d45bb0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/DecisionResource.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources; - -import com.google.gson.Gson; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.balana.ctx.ResponseCtx; -import org.wso2.balana.ctx.xacml3.RequestCtx; -import org.wso2.carbon.identity.entitlement.dto.EntitledResultSetDTO; -import org.wso2.carbon.identity.entitlement.endpoint.exception.ExceptionBean; -import org.wso2.carbon.identity.entitlement.endpoint.exception.RequestParseException; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.AllEntitlementsRequestModel; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.AllEntitlementsResponseModel; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.DecisionRequestModel; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.EntitledAttributesRequestModel; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.EntitledAttributesResponseModel; -import org.wso2.carbon.identity.entitlement.endpoint.resources.models.HomeResponseModel; -import org.wso2.carbon.identity.entitlement.endpoint.util.EntitlementEndpointConstants; -import org.wso2.carbon.identity.entitlement.endpoint.util.JSONRequestParser; -import org.wso2.carbon.identity.entitlement.endpoint.util.JSONResponseWriter; -import org.wso2.carbon.identity.entitlement.pdp.EntitlementEngine; -import org.wso2.carbon.identity.entitlement.policy.search.PolicySearch; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -/** - * Entry point class for the REST API end points - */ -@Path("/") -@Api(value = "/", description = "Evaluate XACML 3.0 Policies") -public class DecisionResource extends AbstractResource { - private static Log log = LogFactory.getLog(DecisionResource.class); - private static Gson gson = new Gson(); - - /** - * API endpoint for populating accessible service methods - * Complying to XACML 3.0 REST profile - * - * @return {@link HomeResponseModel} with all necessary resource links - */ - @GET - @Path("home") - @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @ApiOperation(value = "Get API resource list according to XACML 3.0 Specification", - httpMethod = "GET") - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Method call success", response = HomeResponseModel.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class) - }) - public HomeResponseModel getHome(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType) { - return new HomeResponseModel(); - } - - /** - * API endpoint for evaluating XACML XML policies - * - * @return XML Policy result String - */ - @POST - @Path("pdp") - @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @ApiOperation(value = "Get response by evaluating JSON/XML XACML request", response = String.class) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "XACML JSON/XML Response"), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40020, message = EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE, - response = ExceptionBean.class) - }) - public String getDecision(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType, - @ApiParam(value = "XACML JSON/XML Request", required = true) - String xacmlRequest) throws Exception { - - if (log.isDebugEnabled()) { - log.debug("recieved :" + xacmlRequest); - } - EntitlementEngine entitlementEngine = EntitlementEngine.getInstance(); - - if (contentType.equals(EntitlementEndpointConstants.APPLICATION_JSON)) { - RequestCtx requestCtx = JSONRequestParser.parse(xacmlRequest); - ResponseCtx responseCtx = entitlementEngine.evaluate(requestCtx, xacmlRequest); - return gson.toJson(JSONResponseWriter.write(responseCtx)); - } else { - return entitlementEngine.evaluate(xacmlRequest); - } - - } - - /** - * API endpoint for evaluating policy by attributes as queries - * - * @return XML Policy result string - */ - @POST - @Path("by-attrib") - @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @ApiOperation(value = "Get response by evaluating attributes", response = String.class) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "XACML JSON/XML Response"), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40020, message = EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE, - response = ExceptionBean.class) - }) - public String getDecisionByAttributes(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType, - @ApiParam(value = "Decision Request Model", required = true) - DecisionRequestModel request) throws Exception { - - EntitlementEngine entitlementEngine = EntitlementEngine.getInstance(); - - return entitlementEngine.evaluate(request.getSubject(), request.getResource(), - request.getAction(), request.getEnvironment()); - - - } - - /** - * API endpoint evaluating policy by using attributes as queries and return if true or false - * - * @return Boolean - */ - - @POST - @Path("by-attrib-boolean") - @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @ApiOperation(value = "Get boolean response by evaluating attributes", response = Boolean.class) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Boolean response"), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40020, message = EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE, - response = ExceptionBean.class) - }) - public boolean getBooleanDecision(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType, - @ApiParam(value = "Decision Request Model", required = true) - DecisionRequestModel request) throws Exception { - - EntitlementEngine entitlementEngine = EntitlementEngine.getInstance(); - - String response = entitlementEngine.evaluate(request.getSubject(), request.getResource(), - request.getAction(), null); - return response.contains("Permit"); - - } - - /** - * API endpoint for returning entitled attributes for a give set of parameters - * - * @return EntitledAttributesResponse object - */ - @POST - @Path("entitled-attribs") - @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @ApiOperation(value = "Get entitled attributes for a given set of parameters", - response = EntitledAttributesResponseModel.class) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Entitled Attributes response", - response = EntitledAttributesResponseModel.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40020, message = EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE, - response = ExceptionBean.class) - }) - public EntitledAttributesResponseModel getEntitledAttributes(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType, - @ApiParam(value = "Entitled Attributes Model", required = true) - EntitledAttributesRequestModel request) throws Exception { - - if (request.getSubjectName() == null) { - log.error("Invalid input data - either the user name or role name should be non-null"); - throw new RequestParseException(40022, - "Invalid input data - either the user name or role name should be non-null"); - } - - - PolicySearch policySearch = EntitlementEngine.getInstance().getPolicySearch(); - EntitledResultSetDTO resultsSet = policySearch.getEntitledAttributes(request.getSubjectName(), request.getResourceName(), - request.getSubjectId(), request.getAction(), request.isEnableChildSearch()); - EntitledAttributesResponseModel response = new EntitledAttributesResponseModel(); - response.setEntitledResultSetDTO(resultsSet); - return response; - } - - /** - * API endpoint for returning all entitlements for a given set of parameters - * - * @return AllEntitlementResponseModel object - */ - @POST - @Path("entitlements-all") - @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) - @ApiOperation(value = "Get all entitlements for a given set of parameters", - response = AllEntitlementsResponseModel.class) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "All Entitlements response", - response = AllEntitlementsResponseModel.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_UNAUTHORIZED_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40020, message = EntitlementEndpointConstants.ERROR_REQUEST_PARSE_MESSAGE, - response = ExceptionBean.class), - @ApiResponse(code = 40010, message = EntitlementEndpointConstants.ERROR_RESPONSE_READ_MESSAGE, - response = ExceptionBean.class) - }) - public AllEntitlementsResponseModel getAllEntitlements(@ApiParam(value = "Request Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.ACCEPT_HEADER) String format, - @ApiParam(value = "Authentication Type", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHENTICATION_TYPE_HEADER) String authMechanism, - @ApiParam(value = "Add HTTP Basic Authorization", required = true) - @HeaderParam(EntitlementEndpointConstants.AUTHORIZATION_HEADER) String authorization, - @ApiParam(value = "Response Media Type", required = true) - @HeaderParam(EntitlementEndpointConstants.CONTENT_TYPE_HEADER) String contentType, - @ApiParam(value = "All Entitlements Model", required = true) - AllEntitlementsRequestModel request) { - - PolicySearch policySearch = EntitlementEngine.getInstance().getPolicySearch(); - - EntitledResultSetDTO resultSet = policySearch.getEntitledAttributes(request.getIdentifier(), request.getGivenAttributes()); - AllEntitlementsResponseModel response = new AllEntitlementsResponseModel(); - response.setEntitledResultSetDTO(resultSet); - return response; - } - -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsRequestModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsRequestModel.java deleted file mode 100644 index bb8a12ab96a6..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsRequestModel.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import org.wso2.carbon.identity.entitlement.dto.AttributeDTO; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "identifier", - "givenAttributes" -}) -@JsonPropertyOrder({ - "identifier", - "givenAttributes" -}) -@XmlRootElement(name = "AllEntitlementsRequest") -/** - * Model class representing AllEntitlements Request - */ -public class AllEntitlementsRequestModel { - @XmlElement(required = false) - private String identifier; - @XmlElement(required = false) - private AttributeDTO[] givenAttributes; - - public String getIdentifier() { - return identifier; - } - - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public AttributeDTO[] getGivenAttributes() { - return givenAttributes; - } - - public void setGivenAttributes(AttributeDTO[] givenAttributes) { - this.givenAttributes = givenAttributes; - } -} - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsResponseModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsResponseModel.java deleted file mode 100644 index 5ce3d759e24c..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/AllEntitlementsResponseModel.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import org.wso2.carbon.identity.entitlement.dto.EntitledResultSetDTO; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "entitledResultSetDTO" -}) - -@XmlRootElement(name = "AllEntitlementsResponse") -/** - * Model Class representing Entitlements/All response - */ -public class AllEntitlementsResponseModel { - @XmlElement(required = true) - private EntitledResultSetDTO entitledResultSetDTO; - - public EntitledResultSetDTO getEntitledResultSetDTO() { - return entitledResultSetDTO; - } - - public void setEntitledResultSetDTO(EntitledResultSetDTO entitledResultSetDTO) { - this.entitledResultSetDTO = entitledResultSetDTO; - } -} - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/DecisionRequestModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/DecisionRequestModel.java deleted file mode 100644 index 75ed30f257fd..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/DecisionRequestModel.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "subject", - "action", - "resource", - "environment" -}) -@JsonPropertyOrder({ - "subject", - "action", - "resource", - "environment" -}) -@XmlRootElement(name = "DecisionRequest") -/** - * Model class representing Decision/By-attribs request - */ -public class DecisionRequestModel { - @XmlElement(required = false) - private String subject; - @XmlElement(required = false) - private String action; - @XmlElement(required = false) - private String resource; - @XmlElement(required = false) - private String[] environment; - - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getResource() { - return resource; - } - - public void setResource(String resource) { - this.resource = resource; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String[] getEnvironment() { - return environment; - } - - public void setEnvironment(String[] environment) { - this.environment = environment; - } -} - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesRequestModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesRequestModel.java deleted file mode 100644 index bd1712f90d96..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesRequestModel.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "subjectName", - "resourceName", - "subjectId", - "action", - "enableChildSearch" -}) -@JsonPropertyOrder({ - "subjectName", - "resourceName", - "subjectId", - "action", - "enableChildSearch" -}) -@XmlRootElement(name = "EntitledAttributesRequest") -/** - * Modeel class representing Entitled Attributes Request - */ -public class EntitledAttributesRequestModel { - @XmlElement(required = false) - private String subjectName; - @XmlElement(required = false) - private String resourceName; - @XmlElement(required = false) - private String subjectId; - @XmlElement(required = false) - private String action; - @XmlElement(required = false) - private boolean enableChildSearch; - - public String getSubjectName() { - return subjectName; - } - - public void setSubjectName(String subjectName) { - this.subjectName = subjectName; - } - - public String getResourceName() { - return resourceName; - } - - public void setResourceName(String resourceName) { - this.resourceName = resourceName; - } - - public String getSubjectId() { - return subjectId; - } - - public void setSubjectId(String subjectId) { - this.subjectId = subjectId; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public boolean isEnableChildSearch() { - return enableChildSearch; - } - - public void setEnableChildSearch(boolean enableChildSearch) { - this.enableChildSearch = enableChildSearch; - } -} - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesResponseModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesResponseModel.java deleted file mode 100644 index 4578129657ce..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/EntitledAttributesResponseModel.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import com.fasterxml.jackson.annotation.JsonInclude; -import org.wso2.carbon.identity.entitlement.dto.EntitledResultSetDTO; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "entitledResultSetDTO" -}) -/** - * Model class representing the Entitled Attributes Response - */ -@XmlRootElement(name = "EntitledAttributesResponse") -@JsonInclude(JsonInclude.Include.NON_NULL) -public class EntitledAttributesResponseModel { - - @XmlElement(required = true) - private EntitledResultSetDTO entitledResultSetDTO; - - public EntitledResultSetDTO getEntitledResultSetDTO() { - return entitledResultSetDTO; - } - - public void setEntitledResultSetDTO(EntitledResultSetDTO entitledResultSetDTO) { - this.entitledResultSetDTO = entitledResultSetDTO; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/HomeResponseModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/HomeResponseModel.java deleted file mode 100644 index 0a2e87fe24ce..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/HomeResponseModel.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - -}) -/** - * Model Class representing Entitlements/All response - */ -public class HomeResponseModel { - - @XmlAttribute - private String xmlns = "http://ietf.org/ns/home-documents"; - - private List resources = new ArrayList<>(); - - public HomeResponseModel() { - LinkModel linkModel = new LinkModel(); - linkModel.setHref("/pdp"); - - ResourceModel resourceModel = new ResourceModel(); - resourceModel.setLink(linkModel); - resourceModel.setRel("http://docs.oasis-open.org/ns/xacml/relation/pdp"); - resources.add(resourceModel); - } - -} - - - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/LinkModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/LinkModel.java deleted file mode 100644 index 5f0cea2b8e50..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/LinkModel.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "link") -@XmlAccessorType(XmlAccessType.FIELD) -/** - * Model class representing the link of a {@link ResourceModel} - */ -public class LinkModel { - @XmlAttribute - private String href; - - public String getHref() { - return href; - } - - public void setHref(String href) { - this.href = href; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/ResourceModel.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/ResourceModel.java deleted file mode 100644 index c72e290bbcbb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/resources/models/ResourceModel.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.resources.models; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(propOrder = { - "link" -}) -/** - * Model Class representing a Resource accesible by thr service - */ -@XmlRootElement(name = "resource") -public class ResourceModel { - @XmlAttribute - private String rel; - - private LinkModel link; - - public String getRel() { - return rel; - } - - public void setRel(String rel) { - this.rel = rel; - } - - public LinkModel getLink() { - return link; - } - - public void setLink(LinkModel link) { - this.link = link; - } -} - - diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/ClearThreadLocalInterceptor.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/ClearThreadLocalInterceptor.java deleted file mode 100644 index 284edf70e2fa..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/ClearThreadLocalInterceptor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.util; - -import org.apache.cxf.message.Message; -import org.apache.cxf.phase.AbstractPhaseInterceptor; -import org.apache.cxf.phase.Phase; -import org.wso2.carbon.identity.application.common.util.IdentityApplicationManagementUtil; - -/** - * To clear the ThreadLocalProvisioningServiceProvider in a faulty case - */ -public class ClearThreadLocalInterceptor extends AbstractPhaseInterceptor { - - public ClearThreadLocalInterceptor() { - super(Phase.PRE_INVOKE); - } - - public void handleMessage(Message message) { - // nothing to implement - return; - } - - public void handleFault(Message message) { - IdentityApplicationManagementUtil.resetThreadLocalProvisioningServiceProvider(); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/EntitlementEndpointConstants.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/EntitlementEndpointConstants.java deleted file mode 100644 index 5bbb1b85808b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/EntitlementEndpointConstants.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.util; - -public class EntitlementEndpointConstants { - public static final String JSON = "json"; - public static final String XML = "xml"; - public static final String APPLICATION_JSON = "application/json"; - public static final String APPLICATION_XML = "application/xml"; - public static final String dateTimeFormat = "yyyy-MM-dd\'T\'HH:mm:ss"; - public static final String AUTH_TYPE_BASIC = "Basic"; - public static final String AUTH_TYPE_OAUTH = "Bearer"; - public static final String AUTH_PROPERTY_PRIMARY = "primary"; - public static final String AUTH_HEADER_USERNAME = "userName"; - public static final String AUTH_HEADER_PASSWORD = "password"; - public static final String AUTHORIZATION_HEADER = "Authorization"; - public static final String AUTHENTICATION_TYPE_HEADER = "Auth_Type"; - public static final String CONTENT_TYPE_HEADER = "Content-Type"; - public static final String ACCEPT_HEADER = "Accept"; - - - public static final String PROPERTY_NAME_PRIORITY = "Priority"; - public static final String PROPERTY_NAME_AUTH_SERVER = "AuthorizationServer"; - public static final String PROPERTY_NAME_USERNAME = "UserName"; - public static final String PROPERTY_NAME_PASSWORD = "Password"; - - /** - * Defines Constants related to XACML JSON representation - */ - public static final String CATEGORY_DEFAULT = "Category"; - public static final String CATEGORY_RESOURCE = "Resource"; - public static final String CATEGORY_ACTION = "Action"; - public static final String CATEGORY_ENVIRONMENT = "Environment"; - public static final String CATEGORY_ACCESS_SUBJECT = "AccessSubject"; - public static final String CATEGORY_RECIPIENT_SUBJECT = "RecipientSubject"; - public static final String CATEGORY_INTERMEDIARY_SUBJECT = "IntermediarySubject"; - public static final String CATEGORY_CODEBASE = "Codebase"; - public static final String CATEGORY_REQUESTING_MACHINE = "RequestingMachine"; - - public static final String CATEGORY_RESOURCE_URI = "urn:oasis:names:tc:xacml:3.0:attribute-category:resource"; - public static final String CATEGORY_ACTION_URI = "urn:oasis:names:tc:xacml:3.0:attribute-category:action"; - public static final String CATEGORY_ENVIRONMENT_URI = "urn:oasis:names:tc:xacml:3.0:attribute-category:environment"; - public static final String CATEGORY_ACCESS_SUBJECT_URI = - "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"; - public static final String CATEGORY_RECIPIENT_SUBJECT_URI = - "urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"; - public static final String CATEGORY_INTERMEDIARY_SUBJECT_URI = - "urn:oasis:names:tc:xacml:1.0:subject-category:intermediary-subject"; - public static final String CATEGORY_CODEBASE_URI = "urn:oasis:names:tc:xacml:1.0:subject-category:codebase"; - public static final String CATEGORY_REQUESTING_MACHINE_URI = - "urn:oasis:names:tc:xacml:1.0:subject-category:requesting-machine"; - - // Attribute id uri - public static final String ATTRIBUTE_RESOURCE_ID = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - public static final String ATTRIBUTE_ACTION_ID = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - public static final String ATTRIBUTE_ENVIRONMENT_ID = "urn:oasis:names:tc:xacml:1.0:environment:environment-id"; - public static final String ATTRIBUTE_SUBJECT_ID = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - public static final String ATTRIBUTE_RECIPIENT_SUBJECT_ID = - "urn:oasis:names:tc:xacml:1.0:recipient-subject:recipient-subject-id"; - public static final String ATTRIBUTE_INTERMEDIARY_SUBJECT_ID = - "urn:oasis:names:tc:xacml:1.0:intermediary-subject:intermediary-subject-id"; - public static final String ATTRBUTE_REQUESTING_MACHINE_ID = - "urn:oasis:names:tc:xacml:1.0:requesting-machine:requesting-machine-id"; - public static final String ATTRIBUTE_CODEBASE_ID = "urn:oasis:names:tc:xacml:1.0:codebase:codebase-id"; - - // Attribute id simple - public static final String ATTRIBUTE_RESOURCE_ID_SHORTEN = "resource-id"; - public static final String ATTRIBUTE_ACTION_ID__SHORTEN = "action-id"; - public static final String ATTRIBUTE_ENVIRONMENT_ID_SHORTEN = "environment-id"; - public static final String ATTRIBUTE_SUBJECT_ID_SHORTEN = "subject-id"; - public static final String ATTRIBUTE_RECIPIENT_SUBJECT_ID_SHORTEN = "recipient-subject-id"; - public static final String ATTRIBUTE_INTERMEDIARY_SUBJECT_ID_SHORTEN = "intermediary-subject-id"; - public static final String ATTRBUTE_REQUESTING_MACHINE_ID_SHORTEN = "requesting-machine-id"; - public static final String ATTRIBUTE_CODEBASE_ID_SHORTEN = "codebase-id"; - - public static final String CATEGORY_ID = "CategoryId"; - public static final String ID = "Id"; - public static final String CONTENT = "Content"; - - public static final String ATTRIBUTE = "Attribute"; - public static final String ATTRIBUTE_ID = "AttributeId"; - public static final String ATTRIBUTE_VALUE = "Value"; - public static final String ATTRIBUTE_ISSUER = "Issuer"; - public static final String ATTRIBUTE_DATA_TYPE = "DataType"; - public static final String ATTRIBUTE_INCLUDE_IN_RESULT = "IncludeInResult"; - - public static final String ATTRIBUTE_DATA_TYPE_STRING = "http://www.w3.org/2001/XMLSchema#string"; - public static final String ATTRIBUTE_DATA_TYPE_STRING_SHORT = "string"; - - public static final String ATTRIBUTE_DATA_TYPE_BOOLEAN = "http://www.w3.org/2001/XMLSchema#boolean"; - public static final String ATTRIBUTE_DATA_TYPE_BOOLEAN_SHORT = "boolean"; - - public static final String ATTRIBUTE_DATA_TYPE_INTEGER = "http://www.w3.org/2001/XMLSchema#integer"; - public static final String ATTRIBUTE_DATA_TYPE_INTEGER_SHORT = "integer"; - - public static final String ATTRIBUTE_DATA_TYPE_DOUBLE = "http://www.w3.org/2001/XMLSchema#double"; - public static final String ATTRIBUTE_DATA_TYPE_DOUBLE_SHORT = "double"; - - public static final String ATTRIBUTE_DATA_TYPE_TIME = "http://www.w3.org/2001/XMLSchema#time"; - public static final String ATTRIBUTE_DATA_TYPE_TIME_SHORT = "time"; - - public static final String ATTRIBUTE_DATA_TYPE_DATE = "http://www.w3.org/2001/XMLSchema#date"; - public static final String ATTRIBUTE_DATA_TYPE_DATE_SHORT = "date"; - - public static final String ATTRIBUTE_DATA_TYPE_DATE_TIME = "http://www.w3.org/2001/XMLSchema#dateTime"; - public static final String ATTRIBUTE_DATA_TYPE_DATE_TIME_SHORT = "dateTime"; - - public static final String ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION = "http://www.w3.org/2001/XMLSchema#dayTimeDuration"; - public static final String ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION_SHORT = "dayTimeDuration"; - - public static final String ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION = "http://www.w3.org/2001/XMLSchema#yearMonthDuration"; - public static final String ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION_SHORT = "yearMonthDuration"; - - public static final String ATTRIBUTE_DATA_TYPE_ANY_URI = "http://www.w3.org/2001/XMLSchema#anyURI"; - public static final String ATTRIBUTE_DATA_TYPE_ANY_URI_SHORT = "anyURI"; - - public static final String ATTRIBUTE_DATA_TYPE_HEX_BINARY = "http://www.w3.org/2001/XMLSchema#hexBinary"; - public static final String ATTRIBUTE_DATA_TYPE_HEX_BINARY_SHORT = "hexBinary"; - - public static final String ATTRIBUTE_DATA_TYPE_BASE64_BINARY = "http://www.w3.org/2001/XMLSchema#base64Binary"; - public static final String ATTRIBUTE_DATA_TYPE_BASE64_BINARY_SHORT = "base64Binary"; - - public static final String ATTRIBUTE_DATA_TYPE_RFC_822_NAME = "urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"; - public static final String ATTRIBUTE_DATA_TYPE_RFC_822_NAME_SHORT = "rfc822Name"; - - public static final String ATTRIBUTE_DATA_TYPE_X_500_NAME = "urn:oasis:names:tc:xacml:1.0:data-type:x500Name"; - public static final String ATTRIBUTE_DATA_TYPE_X_500_NAME_SHORT = "x500Name"; - - public static final String ATTRIBUTE_DATA_TYPE_IP_ADDRESS = "urn:oasis:names:tc:xacml:2.0:data-type:ipAddress"; - public static final String ATTRIBUTE_DATA_TYPE_IP_ADDRESS_SHORT = "ipAddress"; - - public static final String ATTRIBUTE_DATA_TYPE_DNS_NAME = "urn:oasis:names:tc:xacml:2.0:data-type:dnsName"; - public static final String ATTRIBUTE_DATA_TYPE_DNS_NAME_SHORT = "dnsName"; - - public static final String ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION = - "urn:oasis:names:tc:xacml:3.0:data-type:xpathExpression"; - public static final String ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION_SHORT = "xpathExpression"; - - - public static final String XPATH_VERSION = "XPathVersion"; - public static final String MULTI_REQUESTS = "MultiRequests"; - public static final String REFERENCE_ID = "ReferenceId"; - - - public static final String RESPONSE = "Response"; - - public static final String DECISION = "Decision"; - public static final String STATUS = "Status"; - public static final String OBLIGATIONS = "Obligations"; - public static final String ASSOCIATED_ADVICE = "AssociatedAdvice"; - - public static final String STATUS_MESSAGE = "StatusMessage"; - public static final String STATUS_DETAIL = "StatusDetail"; - public static final String STATUS_CODE = "StatusCode"; - public static final String MISSING_ATTRIBUTE_DETAILS = "MissingAttributeDetail"; - - public static final String STATUS_CODE_VALUE = "Value"; - - public static final String OBLIGATION_OR_ADVICE_ID = "Id"; - public static final String ATTRIBUTE_ASSIGNMENTS = "AttributeAssignments"; - - //Error codes and responses - public static final int ERROR_UNAUTHORIZED_CODE = 40010; - public static final String ERROR_UNAUTHORIZED_MESSAGE = "Authentication failed for this resource."; - - public static final int ERROR_REQUEST_PARSE_CODE = 40020; - public static final String ERROR_REQUEST_PARSE_MESSAGE = "Request Parse Exception."; - - public static final int ERROR_RESPONSE_READ_CODE = 40030; - public static final String ERROR_RESPONSE_READ_MESSAGE = "Error in Response."; - -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParser.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParser.java deleted file mode 100644 index 5c243b60fceb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParser.java +++ /dev/null @@ -1,529 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.util; - -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.wso2.balana.Balana; -import org.wso2.balana.UnknownIdentifierException; -import org.wso2.balana.XACMLConstants; -import org.wso2.balana.attr.AttributeValue; -import org.wso2.balana.ctx.Attribute; -import org.wso2.balana.ctx.xacml3.RequestCtx; -import org.wso2.balana.xacml3.Attributes; -import org.wso2.balana.xacml3.AttributesReference; -import org.wso2.balana.xacml3.MultiRequests; -import org.wso2.balana.xacml3.RequestDefaults; -import org.wso2.balana.xacml3.RequestReference; -import org.wso2.carbon.identity.core.util.IdentityUtil; -import org.wso2.carbon.identity.entitlement.endpoint.exception.RequestParseException; - -import javax.xml.bind.DatatypeConverter; -import javax.xml.parsers.DocumentBuilderFactory; -import java.io.ByteArrayInputStream; -import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * This class will deal with parsing a given JSON String to a - * RequestCtx object, so that it can be evaluated by the engine. - */ -public class JSONRequestParser { - private static Gson gson = new Gson(); - - /** - * Static method that will convert a XACML JSON Request to a {@link RequestCtx} instance - * - * @param jsonRequest String with JSON request - * @return {@link RequestCtx} instance that can be used to evaluate on Balana - * @throws JsonParseException {@link JsonParseException} - * @throws RequestParseException {@link RequestParseException} - * @throws UnknownIdentifierException {@link UnknownIdentifierException} - */ - public static RequestCtx parse(String jsonRequest) throws JsonParseException, RequestParseException, - UnknownIdentifierException { - JsonObject requestObject = null; - Set categories = new HashSet<>(); - boolean returnPolicyIdList = false; - boolean combinedDecision = false; - MultiRequests multiRequests = null; - RequestDefaults requestDefaults = null; - - try { - requestObject = gson.fromJson(jsonRequest, JsonObject.class); - requestObject = requestObject.get("Request").getAsJsonObject(); - } catch (Exception e) { - throw new JsonParseException("Error in JSON Request String"); - } - - Set> jsonAttributes = requestObject.entrySet(); - - for (Map.Entry jsonAttribute : jsonAttributes) { - if (jsonAttribute.getValue().isJsonPrimitive()) { - switch (jsonAttribute.getKey()) { - case XACMLConstants.RETURN_POLICY_LIST: - if (jsonAttribute.getValue().getAsBoolean() == true) { - returnPolicyIdList = true; - } - break; - - case XACMLConstants.COMBINE_DECISION: - if (jsonAttribute.getValue().getAsBoolean() == true) { - combinedDecision = true; - } - break; - - case EntitlementEndpointConstants.XPATH_VERSION: - String xPathVersion = jsonAttribute.getValue().getAsString(); - requestDefaults = new RequestDefaults(xPathVersion); - break; - } - } else if (!jsonAttribute.getValue().isJsonNull()) { - JsonObject jsonCategory = null; - if (jsonAttribute.getValue().isJsonObject()) { - jsonCategory = jsonAttribute.getValue().getAsJsonObject(); - jsonAttributeSeperator(jsonAttribute, jsonCategory, categories); - - } else if (jsonAttribute.getValue().isJsonArray()) { - for (JsonElement jsonElement : jsonAttribute.getValue().getAsJsonArray()) { - jsonCategory = jsonElement.getAsJsonObject(); - jsonAttributeSeperator(jsonAttribute, jsonCategory, categories); - } - } else if (EntitlementEndpointConstants.MULTI_REQUESTS.equals(jsonAttribute.getKey())) { - Set> jsonRequestReferences = jsonCategory.entrySet(); - Set requestReferences = new HashSet<>(); - - if (jsonRequestReferences.isEmpty()) { - throw new RequestParseException("MultiRequest should contain at least one Reference Request"); - } - for (Map.Entry jsonRequstReference : jsonRequestReferences) { - requestReferences.add(jsonObjectToRequestReference(jsonRequstReference.getValue() - .getAsJsonObject())); - } - multiRequests = new MultiRequests(requestReferences); - } - } - - } - - return new RequestCtx(null, - categories, returnPolicyIdList, combinedDecision, multiRequests, requestDefaults); - - } - - /** - * This is to seperate JSON to attributes - * @param jsonAttribute - the map of category string and the JSON Element - * @param jsonCategory - the main object category - * @param categories - the set of categories - * @throws RequestParseException - * @throws UnknownIdentifierException - */ - private static void jsonAttributeSeperator(Map.Entry jsonAttribute, JsonObject jsonCategory, - Set categories) throws - RequestParseException, UnknownIdentifierException { - - Node content = null; - URI category = null; - Set attributes = null; - String id = null; - - if (EntitlementEndpointConstants.CATEGORY_DEFAULT.equals(jsonAttribute.getKey())) { - if (jsonCategory.has(EntitlementEndpointConstants.CATEGORY_ID)) { - category = stringCateogryToURI(jsonCategory - .get(EntitlementEndpointConstants.CATEGORY_ID) - .getAsString()); - } - } else { - if (category == null) { - category = stringCateogryToURI(jsonAttribute.getKey()); - } - if (jsonCategory.has(EntitlementEndpointConstants.ID)) { - id = jsonCategory.get(EntitlementEndpointConstants.ID).getAsString(); - } - if (jsonCategory.has(EntitlementEndpointConstants.CONTENT)) { - DocumentBuilderFactory dbf; - Document doc = null; - - String xmlContent = stringContentToXMLContent(jsonCategory - .get(EntitlementEndpointConstants.CONTENT) - .getAsString()); - dbf = IdentityUtil.getSecuredDocumentBuilderFactory(); - dbf.setNamespaceAware(true); - - try (ByteArrayInputStream inputStream = new ByteArrayInputStream(xmlContent.getBytes())) { - doc = dbf.newDocumentBuilder().parse(inputStream); - } catch (Exception e) { - throw new JsonParseException("DOM of request element can not be created from String.", e); - } - if (doc != null) { - content = doc.getDocumentElement(); - } - } - - // Add all category attributes - if (jsonCategory.has(EntitlementEndpointConstants.ATTRIBUTE)) { - if (jsonCategory.get(EntitlementEndpointConstants.ATTRIBUTE).isJsonArray()) { - attributes = new HashSet<>(); - for (JsonElement jsonElement : jsonCategory.get(EntitlementEndpointConstants.ATTRIBUTE) - .getAsJsonArray()) { - attributes.add(jsonObjectToAttribute(jsonElement.getAsJsonObject())); - } - } - } - - } - //Build the Attributes object using above values - Attributes attributesObj = new Attributes(category, content, attributes, id); - categories.add(attributesObj); - } - - /** - * Private methods used by the parser to convert a given {@link JsonObject} - * to a Balana {@link Attribute} - * - * @param jsonObject {@link JsonObject} representing the Attributes - * @return {@link Attribute} - * @throws RequestParseException - * @throws UnknownIdentifierException - */ - private static Attribute jsonObjectToAttribute(JsonObject jsonObject) throws RequestParseException, - UnknownIdentifierException { - URI id = null; - URI type = stringAttributeToURI(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING); - boolean includeInResult = false; - String issuer = null; - List attributeValues = new ArrayList<>(); - - Set> properties = jsonObject.entrySet(); - for (Map.Entry property : properties) { - if (property.getValue().isJsonPrimitive()) { - switch (property.getKey()) { - case EntitlementEndpointConstants.ATTRIBUTE_ID: - id = stringAttributeToURI(property.getValue().getAsString()); - break; - - case EntitlementEndpointConstants.ATTRIBUTE_ISSUER: - issuer = property.getValue().getAsString(); - break; - - case EntitlementEndpointConstants.ATTRIBUTE_INCLUDE_IN_RESULT: - includeInResult = property.getValue().getAsBoolean(); - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE: - type = stringAttributeToURI(property.getValue().getAsString()); - break; - - case EntitlementEndpointConstants.ATTRIBUTE_VALUE: - URI dataType = stringAttributeToURI( - jsonElementToDataType(property.getValue().getAsJsonPrimitive())); - - //If a recognizable data type is given, it should replace the above - if (type.equals(stringAttributeToURI(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING)) - && dataType != null) { - type = dataType; - } - - attributeValues.add(getAttributeValue(property.getValue().getAsString(), dataType, type)); - } - } else if (property.getValue().isJsonArray()) { - if (property.getKey().equals(EntitlementEndpointConstants.ATTRIBUTE_VALUE)) { - JsonArray valueArray = property.getValue().getAsJsonArray(); - for (JsonElement value : valueArray) { - if (value.isJsonPrimitive()) { - //check if each value's data type can be determined - URI dataType = stringAttributeToURI( - jsonElementToDataType(value.getAsJsonPrimitive())); - attributeValues.add(getAttributeValue(value.getAsString(), dataType, type)); - } - } - } - - /* - Todo: Spec mentions resolve the type by checking all elements at the end - */ - } - } - - if (id == null) { - throw new RequestParseException("Attribute Id should be set"); - } - - if (attributeValues.isEmpty()) { - throw new RequestParseException("Attribute should have at least one value"); - } - - return new Attribute(id, type, issuer, null, attributeValues, includeInResult, - XACMLConstants.XACML_VERSION_3_0); - } - - /** - * Private methods constructing a Balana {@link AttributeValue} from given parameters - * - * @param value String with the actual value of the Attribute - * @param dataType URI of the DataType of the value - * @param parentDataType URI of the DataType of {@link Attribute} this belongs to - * @return {@link AttributeValue} - * @throws UnknownIdentifierException - */ - private static AttributeValue getAttributeValue(String value, URI dataType, URI parentDataType) - throws UnknownIdentifierException { - URI type = dataType; - AttributeValue attributeValue = null; - - //check if dataType attribute is set, if not use the parent data type - if (dataType == null) { - type = parentDataType; - } - - try { - attributeValue = Balana.getInstance().getAttributeFactory().createValue(type, value); - } catch (Exception e) { - throw new UnknownIdentifierException(); - } - return attributeValue; - } - - /** - * Private method to convert a given {@link JsonObject} to a Balana {@link RequestReference} - * - * @param jsonRequestReference {@link JsonObject} - * @return {@link RequestReference} - */ - private static RequestReference jsonObjectToRequestReference(JsonObject jsonRequestReference) { - RequestReference requestReference = new RequestReference(); - Set attributesReferences = new HashSet<>(); - - if (jsonRequestReference.has(EntitlementEndpointConstants.REFERENCE_ID)) { - JsonArray referenceIds = jsonRequestReference.get(EntitlementEndpointConstants.REFERENCE_ID).getAsJsonArray(); - for (JsonElement reference : referenceIds) { - AttributesReference attributesReference = new AttributesReference(); - attributesReference.setId(reference.getAsString()); - attributesReferences.add(attributesReference); - } - requestReference.setReferences(attributesReferences); - } - return requestReference; - } - - /** - * Convert a given String category to it's full name URI - * - * @param category String with shorthand or fullname URI - * @return URI - */ - private static URI stringCateogryToURI(String category) { - URI uri = null; - String uriName = category; - switch (category) { - case EntitlementEndpointConstants.CATEGORY_RESOURCE: - uriName = EntitlementEndpointConstants.CATEGORY_RESOURCE_URI; - break; - case EntitlementEndpointConstants.CATEGORY_ACTION: - uriName = EntitlementEndpointConstants.CATEGORY_ACTION_URI; - break; - case EntitlementEndpointConstants.CATEGORY_ENVIRONMENT: - uriName = EntitlementEndpointConstants.CATEGORY_ENVIRONMENT_URI; - break; - case EntitlementEndpointConstants.CATEGORY_ACCESS_SUBJECT: - uriName = EntitlementEndpointConstants.CATEGORY_ACCESS_SUBJECT_URI; - break; - case EntitlementEndpointConstants.CATEGORY_RECIPIENT_SUBJECT: - uriName = EntitlementEndpointConstants.CATEGORY_RECIPIENT_SUBJECT_URI; - break; - case EntitlementEndpointConstants.CATEGORY_INTERMEDIARY_SUBJECT: - uriName = EntitlementEndpointConstants.CATEGORY_INTERMEDIARY_SUBJECT_URI; - break; - case EntitlementEndpointConstants.CATEGORY_CODEBASE: - uriName = EntitlementEndpointConstants.CATEGORY_CODEBASE_URI; - break; - case EntitlementEndpointConstants.CATEGORY_REQUESTING_MACHINE: - uriName = EntitlementEndpointConstants.CATEGORY_REQUESTING_MACHINE_URI; - break; - } - - uri = URI.create(uriName); - return uri; - } - - /** - * Converts a given {@link JsonElement} to a String DataType - * Predicted based on XACML 3.0 JSON profile - * - * @param element - * @return - */ - private static String jsonElementToDataType(JsonPrimitive element) { - if (element.isString()) { - return EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING; - } else if (element.isBoolean()) { - return EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BOOLEAN; - } else if (element.isNumber()) { - double n1 = element.getAsDouble(); - int n2 = element.getAsInt(); - if (Math.ceil(n1) == n2) { - return EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_INTEGER; - } else { - return EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DOUBLE; - } - } - - return null; - } - - /** - * Converts a given String attribute to the corresponding URI - * - * @param attribute String - * @return URI - */ - private static URI stringAttributeToURI(String attribute) { - String uriName = attribute; - switch (attribute) { - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BOOLEAN_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BOOLEAN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_INTEGER_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_INTEGER; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DOUBLE_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DOUBLE; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_TIME_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_TIME; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_ANY_URI_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_ANY_URI; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_HEX_BINARY_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_HEX_BINARY; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BASE64_BINARY_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BASE64_BINARY; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_RFC_822_NAME_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_RFC_822_NAME; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_X_500_NAME_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_X_500_NAME; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_IP_ADDRESS_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_IP_ADDRESS; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DNS_NAME_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DNS_NAME; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION_SHORT: - uriName = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_RESOURCE_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_RESOURCE_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_ACTION_ID__SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_ACTION_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_ENVIRONMENT_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_ENVIRONMENT_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_SUBJECT_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_SUBJECT_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_RECIPIENT_SUBJECT_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_RECIPIENT_SUBJECT_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_INTERMEDIARY_SUBJECT_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_INTERMEDIARY_SUBJECT_ID; - break; - - case EntitlementEndpointConstants.ATTRBUTE_REQUESTING_MACHINE_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRBUTE_REQUESTING_MACHINE_ID; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_CODEBASE_ID_SHORTEN: - uriName = EntitlementEndpointConstants.ATTRIBUTE_CODEBASE_ID; - break; - } - return URI.create(uriName); - } - - /** - * Converts a given XML / Base64 encoded XML content to String XML content - * - * @param content XML or Base64 encoded XML - * @return String with only XML - * @throws RequestParseException - */ - private static String stringContentToXMLContent(String content) throws RequestParseException { - if (content.startsWith("<")) { - //todo : check if GSON automatically unescape the string - return content; - } else { - //do base64 decoding - return new String(DatatypeConverter.parseBase64Binary(content)); - } - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONResponseWriter.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONResponseWriter.java deleted file mode 100644 index 600fe1e70e1f..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONResponseWriter.java +++ /dev/null @@ -1,462 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.util; - -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import org.wso2.balana.ObligationResult; -import org.wso2.balana.attr.AttributeValue; -import org.wso2.balana.attr.StringAttribute; -import org.wso2.balana.ctx.AbstractResult; -import org.wso2.balana.ctx.Attribute; -import org.wso2.balana.ctx.AttributeAssignment; -import org.wso2.balana.ctx.ResponseCtx; -import org.wso2.balana.ctx.Status; -import org.wso2.balana.ctx.xacml3.Result; -import org.wso2.balana.xacml3.Advice; -import org.wso2.balana.xacml3.Attributes; -import org.wso2.balana.xacml3.Obligation; -import org.wso2.carbon.identity.entitlement.EntitlementUtil; -import org.wso2.carbon.identity.entitlement.PDPConstants; -import org.wso2.carbon.identity.entitlement.endpoint.exception.ResponseWriteException; - -import java.util.Properties; -import java.util.Set; - -/** - * Converts ResponseCtx to JSON object according to the XACML JSON Profile - */ -public class JSONResponseWriter { - - private static Gson gson = new Gson(); - private static boolean xacmlJSONProfileShortFormEnable = false; - - /** - * Returns JsonObject created by parsing the contents of a given - * Balana {@link ResponseCtx} - * - * @param response {@link ResponseCtx} - * @return {@link JsonObject} with parsed properties - * @throws ResponseWriteException {@link ResponseWriteException} - */ - public static JsonObject write(ResponseCtx response) throws ResponseWriteException { - - JsonObject responseWrap = new JsonObject(); - - //JsonObject jsonResponse = new JsonObject(); - JsonArray results = new JsonArray(); - - Properties properties = EntitlementUtil.getPropertiesFromEntitlementConfig(); - if (properties != null) { - if (Boolean.parseBoolean(properties.getProperty(PDPConstants.XACML_JSON_SHORT_FORM_ENABLED))) { - xacmlJSONProfileShortFormEnable = true; - } - } - //Loop all AbstractResult objects in ResponseCtx and add them as - //Requests to JSON Response - //There should be at least 1 request - if (response.getResults().size() < 1) { - throw new ResponseWriteException(40032, "XACML response should contain at least 1 Result"); - } - - for (AbstractResult result : response.getResults()) { - /* AbstractResult type does not contain PolicyIdentifierList, as per XACML 3.0, the PolicyIdentifier is - optional. Hence, Result type is not used. */ - results.add(abstractResultToJSONObject(result)); - } - responseWrap.add(EntitlementEndpointConstants.RESPONSE, results); - - return responseWrap; - } - - /** - * Private method to convert a given Balana {@link AbstractResult} to a {@link JsonObject} - * - * @param result {@link AbstractResult} - * @return {@link JsonObject} - * @throws ResponseWriteException {@link ResponseWriteException} - */ - private static JsonObject abstractResultToJSONObject(AbstractResult result) throws ResponseWriteException { - - JsonObject jsonResult = new JsonObject(); - - //Decision property is mandatory, if not set throw error - if (result.getDecision() == -1) { - throw new ResponseWriteException(40031, "XACML Result should contain the Decision"); - } - jsonResult.addProperty(EntitlementEndpointConstants.DECISION, - AbstractResult.DECISIONS[result.getDecision()]); - - //If Status object is present, convert it - if (result.getStatus() != null) { - jsonResult.add(EntitlementEndpointConstants.STATUS, statusToJSONObject(result.getStatus())); - } - - //If Obligations are present - if (result.getObligations() != null && !result.getObligations().isEmpty()) { - //can only get ObligationResult objects from balana - JsonArray obligations = new JsonArray(); - for (ObligationResult obligation : result.getObligations()) { - if (obligation instanceof Obligation) { - obligations.add(obligationToJsonObject((Obligation) obligation)); - } else { - obligations.add(new JsonPrimitive(obligation.encode())); - } - } - - jsonResult.add(EntitlementEndpointConstants.OBLIGATIONS, obligations); - } - - // Do the same with attributes - if (result.getAdvices() != null && !result.getAdvices().isEmpty()) { - //can only get ObligationResult objects from balana - JsonArray advices = new JsonArray(); - for (Advice advice : result.getAdvices()) { - advices.add(adviceToJsonObject(advice)); - } - - jsonResult.add(EntitlementEndpointConstants.ASSOCIATED_ADVICE, advices); - } - - // If includeInResponse=true, other attributes will be populated from here with the decision. - if (((Result) result).getAttributes() != null && !((Result) result).getAttributes().isEmpty()) { - Set attributes = ((Result) result).getAttributes(); - - for (Attributes attribute : attributes) { - - switch (attribute.getCategory().toString()) { - case EntitlementEndpointConstants.CATEGORY_ACTION_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_ACTION, getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_RESOURCE_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_RESOURCE, getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_ACCESS_SUBJECT_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_ACCESS_SUBJECT, getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_ENVIRONMENT_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_ENVIRONMENT, getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_RECIPIENT_SUBJECT_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_RECIPIENT_SUBJECT, - getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_INTERMEDIARY_SUBJECT_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_INTERMEDIARY_SUBJECT, - getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_CODEBASE_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_CODEBASE, getJsonObject(attribute)); - break; - - case EntitlementEndpointConstants.CATEGORY_REQUESTING_MACHINE_URI: - jsonResult.add(EntitlementEndpointConstants.CATEGORY_REQUESTING_MACHINE, - getJsonObject(attribute)); - break; - - default: - jsonResult.add(attribute.getCategory().toString(), getJsonObject(attribute)); - break; - } - } - } - - return jsonResult; - } - - /** - * Create json object value of an Attribute - * - * @param attributes an element of type Attributes - * @return a JSONObject - */ - private static JsonObject getJsonObject(Attributes attributes) { - - JsonObject jsonObject = new JsonObject(); - JsonArray jsonArray = new JsonArray(); - for (Object att : attributes.getAttributes().toArray()) { - Attribute attrib = (Attribute) att; - if (attrib.isIncludeInResult()) { - JsonObject element = new JsonObject(); - if (attrib.getId() != null) { - if (xacmlJSONProfileShortFormEnable) { - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_ID, uriToShortenForm(attrib - .getId().toString())); - } else { - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_ID, attrib.getId().toString()); - } - } - if (attrib.getValues() != null) { - for (AttributeValue val : attrib.getValues()) { - if (((StringAttribute) val).getValue() != null) { - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_VALUE, - ((StringAttribute) val).getValue()); - } - } - } - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_INCLUDE_IN_RESULT, - String.valueOf(attrib.isIncludeInResult())); - if (attrib.getType() != null) { - if (xacmlJSONProfileShortFormEnable) { - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE, - uriToShortenForm(attrib.getType().toString())); - } else { - element.addProperty(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE, - attrib.getType().toString()); - } - } - jsonArray.add(element); - } - } - jsonObject.add(EntitlementEndpointConstants.ATTRIBUTE, jsonArray); - return jsonObject; - } - - /** - * This converts the XACML xml data type to simple shorten data type format - * - * @param uriName XACML xml data type uri - * @return - */ - private static String uriToShortenForm(String uriName) { - - String shortenString = null; - switch (uriName) { - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_STRING_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BOOLEAN: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BOOLEAN_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_INTEGER: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_INTEGER_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DOUBLE: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DOUBLE_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_TIME: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_TIME_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DATE_TIME_DURATION_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_YEAR_MONTH_DURATION_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_ANY_URI: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_ANY_URI_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_HEX_BINARY: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_HEX_BINARY_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BASE64_BINARY: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_BASE64_BINARY_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_RFC_822_NAME: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_RFC_822_NAME_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_X_500_NAME: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_X_500_NAME_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_IP_ADDRESS: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_IP_ADDRESS_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DNS_NAME: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_DNS_NAME_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE_XPATH_EXPRESSION_SHORT; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_RESOURCE_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_RESOURCE_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_ACTION_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_ACTION_ID__SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_ENVIRONMENT_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_ENVIRONMENT_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_SUBJECT_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_SUBJECT_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_RECIPIENT_SUBJECT_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_RECIPIENT_SUBJECT_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_INTERMEDIARY_SUBJECT_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_INTERMEDIARY_SUBJECT_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRBUTE_REQUESTING_MACHINE_ID: - shortenString = EntitlementEndpointConstants.ATTRBUTE_REQUESTING_MACHINE_ID_SHORTEN; - break; - - case EntitlementEndpointConstants.ATTRIBUTE_CODEBASE_ID: - shortenString = EntitlementEndpointConstants.ATTRIBUTE_CODEBASE_ID_SHORTEN; - break; - - default: - shortenString = uriName; - break; - } - return shortenString; - } - - /** - * Private method to convert Balana {@link Status} to {@link JsonObject} - * - * @param status {@link Status} - * @return {@link JsonObject} - */ - private static JsonObject statusToJSONObject(Status status) { - JsonObject jsonStatus = new JsonObject(); - - jsonStatus.addProperty(EntitlementEndpointConstants.STATUS_MESSAGE, status.getMessage()); - - if (status.getCode().size() > 0) { - JsonObject statusCode = new JsonObject(); - statusCode.addProperty(EntitlementEndpointConstants.STATUS_CODE_VALUE, status.getCode().get(0)); - - jsonStatus.add(EntitlementEndpointConstants.STATUS_CODE, statusCode); - } - if (status.getDetail() != null) { - jsonStatus.addProperty(EntitlementEndpointConstants.STATUS_DETAIL, status.getDetail().getEncoded()); - } - return jsonStatus; - } - - /** - * Private method to convert Balana {@link Obligation} to {@link JsonObject} - * - * @param obligation {@link Obligation} - * @return {@link JsonObject} - */ - private static JsonObject obligationToJsonObject(Obligation obligation) { - JsonObject jsonObligation = new JsonObject(); - - jsonObligation.addProperty(EntitlementEndpointConstants.OBLIGATION_OR_ADVICE_ID, - obligation.getObligationId().toString()); - JsonArray attributeAssignments = new JsonArray(); - for (AttributeAssignment aa : obligation.getAssignments()) { - attributeAssignments.add(attributeAssignmentToJsonObject(aa)); - } - jsonObligation.add(EntitlementEndpointConstants.ATTRIBUTE_ASSIGNMENTS, attributeAssignments); - - return jsonObligation; - } - - /** - * Private method to convert Balana {@link Advice} to {@link JsonObject} - * - * @param advice {@link Advice} - * @return {@link JsonObject} - */ - private static JsonObject adviceToJsonObject(Advice advice) { - JsonObject jsonAdvice = new JsonObject(); - - jsonAdvice.addProperty(EntitlementEndpointConstants.OBLIGATION_OR_ADVICE_ID, advice.getAdviceId().toString()); - JsonArray attributeAssignments = new JsonArray(); - for (AttributeAssignment aa : advice.getAssignments()) { - attributeAssignments.add(attributeAssignmentToJsonObject(aa)); - } - jsonAdvice.add(EntitlementEndpointConstants.ATTRIBUTE_ASSIGNMENTS, attributeAssignments); - - return jsonAdvice; - } - - /** - * Private method to convert a given Balana {@link AttributeAssignment} to {@link JsonObject} - * - * @param attributeAssignment {@link AttributeAssignment} - * @return {@link JsonObject} - */ - private static JsonObject attributeAssignmentToJsonObject(AttributeAssignment attributeAssignment) { - JsonObject jsonObjectAttribute = new JsonObject(); - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.ATTRIBUTE_ID, attributeAssignment.getAttributeId() - .toString()); - /*As per the xacml 3.0 core spec(section 5.41), Category and Issuer are optional categories for - Element */ - if (attributeAssignment.getIssuer() != null) { - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.ATTRIBUTE_ISSUER, attributeAssignment.getIssuer() - .toString()); - } - if (attributeAssignment.getCategory() != null) { - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.CATEGORY_DEFAULT, attributeAssignment.getCategory() - .toString()); - } - - //try to get the attribute value and type by using json - try { - JsonObject attributeValue = gson.fromJson(gson.toJson(attributeAssignment), JsonObject.class); - /*As per the xacml 3.0 core spec(section 7.3.1), data-type is a required attribute and content is optional - for Element */ - if (attributeValue.get("content") != null) { - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.ATTRIBUTE_VALUE, - attributeValue.get("content").getAsString()); - } - if (xacmlJSONProfileShortFormEnable) { - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE, - uriToShortenForm(attributeValue.get("type").getAsString())); - } else { - jsonObjectAttribute.addProperty(EntitlementEndpointConstants.ATTRIBUTE_DATA_TYPE, - attributeValue.get("type").getAsString()); - } - } catch (Exception e) { - return null; - } - - - return jsonObjectAttribute; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/resources/META-INF/spring.schemas b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/resources/META-INF/spring.schemas deleted file mode 100644 index 70300a958189..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/main/resources/META-INF/spring.schemas +++ /dev/null @@ -1,2 +0,0 @@ -http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd -http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org.wso2.carbon.identity.entitlement.endpoint.test/TestService.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org.wso2.carbon.identity.entitlement.endpoint.test/TestService.java deleted file mode 100644 index b4ab74d3784d..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org.wso2.carbon.identity.entitlement.endpoint.test/TestService.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.test; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.cxf.jaxrs.client.WebClient; -import org.testng.Assert; -import org.testng.annotations.Test; - -import javax.ws.rs.core.Response; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Scanner; - -public class TestService extends Assert { - private final static String ENDPOINT_ADDRESS = "https://localhost:9443/api/identity/entitlement/decision"; - private final static String WADL_ADDRESS = ENDPOINT_ADDRESS + "?_wadl"; - private static Log log = LogFactory.getLog(TestService.class); - - private static boolean waitForWADL() { - WebClient client = WebClient.create(WADL_ADDRESS); - // wait for 20 secs or so - for (int i = 0; i < 20; i++) { - try { - Thread.currentThread().sleep(100); - Response response = client.get(); - if (response.getStatus() == 200) { - return true; - } - } catch (Exception e) { - return false; - } - } - // no WADL is available yet - throw an exception or give tests a chance to run anyway - log.error("Service offline"); - - return false; - } - - private String readReource(String path) { - StringBuilder result = new StringBuilder(""); - try { - //Get file from resources folder - ClassLoader classLoader = getClass().getClassLoader(); - URI filepath = new URI(classLoader.getResource(path).toString()); - - File file = new File(filepath); - - Scanner scanner = new Scanner(file); - - while (scanner.hasNextLine()) { - String line = scanner.nextLine(); - result.append(line).append("\n"); - } - - scanner.close(); - - } catch (IOException e) { - log.error("IO Exception in reading test case"); - } catch (URISyntaxException e) { - log.error("IO Exception in reading test case"); - } - - return result.toString().replaceAll("\\n\\r|\\n|\\r|\\t|\\s{2,}", "").replaceAll(": ", ":"); - } - - @Test - public void testHomeXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("home"); - - String response = readReource("xml/response-home.xml"); - - String webRespose = client.get(String.class); - assertEquals(response, webRespose); - } - - @Test - public void testHomeJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/json"); - - client.path("home"); - - String response = readReource("json/response-home.json"); - - String webRespose = client.get(String.class); - assertEquals(response, webRespose); - } - - @Test - public void testPdpXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("pdp"); - - String request = readReource("xml/request-pdp-1.xml"); - String response = readReource("xml/response-pdp-1.xml"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testPdpJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/json"); - - client.path("pdp"); - - String request = readReource("json/request-pdp-1.json"); - String response = readReource("json/response-pdp-1.json"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testGetDecisionByAttributesXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("by-attrib"); - - String request = readReource("xml/request-by-attrib-1.xml"); - String response = readReource("xml/response-by-attrib-1.xml"); - - String webRespose = client.post(request, String.class); - - assertEquals(response, webRespose); - } - - @Test - public void testGetDecisionByAttributesJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/xml"); - - client.path("by-attrib"); - - String request = readReource("json/request-by-attrib-1.json"); - String response = readReource("json/response-by-attrib-1.xml"); - - String webRespose = client.post(request, String.class); - - assertEquals(response, webRespose); - } - - @Test - public void testGetDecisionByAttributesBooleanXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("by-attrib-boolean"); - - String request = readReource("xml/request-by-attrib-bool-1.xml"); - String response = readReource("xml/response-by-attrib-bool-1.xml"); - - String webRespose = client.post(request, String.class); - - assertEquals(response, webRespose); - } - - @Test - public void testGetDecisionByAttributesBooleanJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/json"); - - client.path("by-attrib-boolean"); - - String request = readReource("json/request-by-attrib-bool-1.json"); - String response = readReource("json/response-by-attrib-bool-1.json"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testEntitledAttributesXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("entitled-attribs"); - - String request = readReource("xml/request-entitled-attribs-1.xml"); - String response = readReource("xml/response-entitled-attribs-1.xml"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testEntitledAttributesJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/json"); - - client.path("entitled-attribs"); - - String request = readReource("json/request-entitled-attribs-1.json"); - String response = readReource("json/response-entitled-attribs-1.json"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testAllEntitlementsXML() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/xml"); - client.accept("application/xml"); - - client.path("entitlements-all"); - - String request = readReource("xml/request-all-entitlements-1.xml"); - String response = readReource("xml/response-all-entitlements-1.xml"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - @Test - public void testAllEntitlementsJSON() { - if (!waitForWADL()) { - return; - } - - WebClient client = WebClient.create(ENDPOINT_ADDRESS); - - client.header("Authorization", "Basic YWRtaW46YWRtaW4="); - client.type("application/json"); - client.accept("application/json"); - - client.path("entitlements-all"); - - String request = readReource("json/request-all-entitlements-1.json"); - String response = readReource("json/response-all-entitlements-1.json"); - - String webRespose = client.post(request, String.class); - assertEquals(response, webRespose); - } - - -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParserTest.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParserTest.java deleted file mode 100644 index e79278fa7256..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/JSONRequestParserTest.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2018, 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.identity.entitlement.endpoint.util; - -import com.google.gson.JsonParseException; -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; -import org.wso2.carbon.identity.testutil.IdentityBaseTest; - -public class JSONRequestParserTest extends IdentityBaseTest { - - @DataProvider(name = "BuildRequest") - public Object[][] buildRequest() { - - return new Object[][] { - {"{\n" + - " \"Request\": {\n" + - " \"AccessSubject\": {\n" + - " \"Attribute\": [\n" + - " {\n" + - " \"AttributeId\": \"subject-id\",\n" + - " \"Value\": \"sampleName\",\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " },\n" + - " \n" + - " \"Resource\": {\n" + - " \"Attribute\": [\n" + - " {\n" + - " \"AttributeId\": \"resource-id\",\n" + - " \"Value\": \"index.jsp\",\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " },\n" + - " \"Action\": {\n" + - " \"Attribute\": [{\n" + - " \"AttributeId\": \"action-id\",\n" + - " \"Value\": \"modify-welcome\",\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " }\n" + - " \n" + - " }\n" + - "}"}, - {"{\"Request\":\n" + - "{\n" + - "\"AccessSubject\":{\n" + - " \"Content\": \"PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8Y2F0YWxvZz48Ym9vayBpZD0iYmsxMDEiPjxhdXRob3I+R2FtYmFyZGVsbGEsIE1hdHRoZXc8L2F1dGhvcj48dGl0bGU+WE1MIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT48Z2VucmU+Q29tcHV0ZXI8L2dlbnJlPjxwcmljZT40NC45NTwvcHJpY2U+PHB1Ymxpc2hfZGF0ZT4yMDAwLTEwLTAxPC9wdWJsaXNoX2RhdGU+PGRlc2NyaXB0aW9uPkFuIGluLWRlcHRoIGxvb2sgYXQgY3JlYXRpbmcgYXBwbGljYXRpb25zIHdpdGggWE1MLjwvZGVzY3JpcHRpb24+PC9ib29rPjwvY2F0YWxvZz4=\"\n" + - "}\n" + - "}}"}, - {"{\n" + - " \"Request\": {\n" + - " \"AccessSubject\": {\n" + - " \"Attribute\": [\n" + - " {\n" + - " \"AttributeId\": \"subject-id\",\n" + - " \"Value\": [\"sampleName\"],\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " },\n" + - " \n" + - " \"Resource\": {\n" + - " \"Attribute\": [\n" + - " {\n" + - " \"AttributeId\": \"resource-id\",\n" + - " \"Value\": [\"index.jsp\"],\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " },\n" + - " \"Action\": {\n" + - " \"Attribute\": [{\n" + - " \"AttributeId\": \"action-id\",\n" + - " \"Value\": [\"modify-welcome\",\"view-welcome\"],\n" + - " \"DataType\": \"string\",\n" + - " \"IncludeInResult\": true\n" + - " }\n" + - " ]\n" + - " }\n" + - " \n" + - " }\n" + - "}"} - - }; - } - - @DataProvider(name = "BuildNullRequest") - public Object[][] buildNullRequest() { - - return new Object[][] { - {null}, - {" "} - - }; - } - - @Test(dataProvider = "BuildRequest") - public void testParseNonEmptyRequests(String request) throws Exception { - - Assert.assertNotNull(JSONRequestParser.parse(request), "The request passed context is null." + - " The passed request is :" + request + " . The converted request object is :" - + JSONRequestParser.parse(request).toString()); - } - - @Test(dataProvider = "BuildNullRequest", expectedExceptions = JsonParseException.class) - public void testParseEmptyRequests(String request) throws Exception { - - Assert.assertNull(JSONRequestParser.parse(request), "The request passed context is not null null." + - " The passed request is :" + request ); - } - -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONRequestParser.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONRequestParser.java deleted file mode 100644 index 2688e65b0255..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONRequestParser.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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. - */ - -package org.wso2.carbon.identity.entitlement.endpoint.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.annotations.Test; -import org.wso2.balana.XACMLConstants; -import org.wso2.balana.attr.AttributeValue; -import org.wso2.balana.attr.StringAttribute; -import org.wso2.balana.ctx.Attribute; -import org.wso2.balana.ctx.xacml3.RequestCtx; -import org.wso2.balana.xacml3.Attributes; - -import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Unit test class for JSON parser / writer - */ - - -public class TestJSONRequestParser { - private static Log log = LogFactory.getLog(TestJSONRequestParser.class); - - @Test - public void testParse() { - AttributeValue attributeValue = new StringAttribute("http://127.0.0.1"); - List attributeValues = new ArrayList<>(); - attributeValues.add(attributeValue); - - Attribute attribute = new Attribute(URI.create("urn:oasis:names:tc:xacml:1.0:resource:resource-id"), - null, null, null, attributeValues, false, XACMLConstants.XACML_VERSION_3_0); - Set attributeSet = new HashSet<>(); - attributeSet.add(attribute); - - Attributes category = new Attributes(URI.create(EntitlementEndpointConstants.CATEGORY_RESOURCE_URI), - attributeSet); - Set categories = new HashSet<>(); - categories.add(category); - - RequestCtx requestCtx = new RequestCtx(categories, null); - - - String jsonRequest = "{\n" + - " \"Request\":{\n" + - " \"Action\":{\n" + - " \"Attribute\":[{\n" + - " \"AttributeId\":\"urn:oasis:names:tc:xacml:1.0:action:action-id\",\n" + - " \"Value\":\"read\"\n" + - " }]\n" + - " },\n" + - " \"Resource\":{\n" + - " \"Attribute\":[{\n" + - " \"AttributeId\":\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\",\n" + - " \"Value\":\"http://127.0.0.1/service/very_secure/\"\n" + - " }]\n" + - " }\n" + - " }\n" + - "}"; - - String jsonRequest2 = "{\"Request\":\n" + - "{\n" + - "\"AccessSubject\":{\n" + - " \"Content\": \"PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8Y2F0YWxvZz48Ym9vayBpZD0iYmsxMDEiPjxhdXRob3I+R2FtYmFyZGVsbGEsIE1hdHRoZXc8L2F1dGhvcj48dGl0bGU+WE1MIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT48Z2VucmU+Q29tcHV0ZXI8L2dlbnJlPjxwcmljZT40NC45NTwvcHJpY2U+PHB1Ymxpc2hfZGF0ZT4yMDAwLTEwLTAxPC9wdWJsaXNoX2RhdGU+PGRlc2NyaXB0aW9uPkFuIGluLWRlcHRoIGxvb2sgYXQgY3JlYXRpbmcgYXBwbGljYXRpb25zIHdpdGggWE1MLjwvZGVzY3JpcHRpb24+PC9ib29rPjwvY2F0YWxvZz4=\"\n" + - "}\n" + - "}}"; - - try { - RequestCtx requestCtx1 = JSONRequestParser.parse(jsonRequest); - } catch (Exception e) { - log.error("Exception in JSON Parser Test"); - } - - - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONResponseWriter.java b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONResponseWriter.java deleted file mode 100644 index 8421627a58f0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/java/org/wso2/carbon/identity/entitlement/endpoint/util/TestJSONResponseWriter.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2017, 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.identity.entitlement.endpoint.util; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.Assert; -import org.testng.annotations.Test; -import org.wso2.balana.ObligationResult; -import org.wso2.balana.ctx.AbstractResult; -import org.wso2.balana.ctx.AttributeAssignment; -import org.wso2.balana.ctx.ResponseCtx; -import org.wso2.balana.ctx.Status; -import org.wso2.balana.ctx.xacml3.Result; -import org.wso2.balana.xacml3.Advice; -import org.wso2.balana.xacml3.Obligation; -import org.wso2.carbon.identity.entitlement.endpoint.exception.ResponseWriteException; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Unit test class for JSON response writer - */ -public class TestJSONResponseWriter extends Assert { - private static Log log = LogFactory.getLog(TestJSONResponseWriter.class); - - @Test - public void testWriteWithObligations() throws URISyntaxException { - - List assignments = new ArrayList<>(); - String content = "Error: Channel request is not WEB."; - URI type = new URI("http://www.w3.org/2001/XMLSchema#string"); - URI attributeId = new URI("urn:oasis:names:tc:xacml:3.0:example:attribute:text"); - AttributeAssignment attributeAssignment = new AttributeAssignment(attributeId, type, null, content, null); - assignments.add(attributeAssignment); - - List obligationResults = new ArrayList<>(); - ObligationResult obligationResult = new Obligation(assignments, new URI("channel_ko")); - obligationResults.add(obligationResult); - - List codes = new ArrayList<>(); - codes.add("urn:oasis:names:tc:xacml:1.0:status:ok"); - AbstractResult abstractResult = new Result(1, new Status(codes), obligationResults, null, null); - - ResponseCtx responseCtx = new ResponseCtx(abstractResult); - - JSONResponseWriter jsonResponseWriter = new JSONResponseWriter(); - try { - JsonObject jsonObject = jsonResponseWriter.write(responseCtx); - assertNotNull("Failed to build the XACML json response", jsonObject.toString()); - assertFalse("Failed to build the XACML json response", jsonObject.entrySet().isEmpty()); - for(Map.Entry jsonElementEntry: jsonObject.entrySet()) { - if (jsonElementEntry.getKey().equals("Response")) { - JsonArray jsonArray = (JsonArray) jsonElementEntry.getValue(); - assertEquals("Failed to build the XACML json response with correct evaluation", - jsonArray.get(0).getAsJsonObject().get("Decision").getAsString(), "Deny"); - } - } - } catch (ResponseWriteException e) { - assertNull("Failed to build the XACML response", e); - } - - } - - @Test - public void testWriteWithAdvices() throws URISyntaxException { - - List assignments = new ArrayList<>(); - String content = "Error: Channel request is not WEB."; - URI type = new URI("http://www.w3.org/2001/XMLSchema#string"); - URI attributeId = new URI("urn:oasis:names:tc:xacml:3.0:example:attribute:text"); - AttributeAssignment attributeAssignment = new AttributeAssignment(attributeId, type, null, content, null); - assignments.add(attributeAssignment); - - List adviceResults = new ArrayList<>(); - Advice adviceResult = new Advice(new URI("channel_ko"), assignments); - adviceResults.add(adviceResult); - - List codes = new ArrayList<>(); - codes.add("urn:oasis:names:tc:xacml:1.0:status:ok"); - AbstractResult abstractResult = new Result(1, new Status(codes), null, adviceResults, null); - - ResponseCtx responseCtx = new ResponseCtx(abstractResult); - - JSONResponseWriter jsonResponseWriter = new JSONResponseWriter(); - try { - JsonObject jsonObject = jsonResponseWriter.write(responseCtx); - assertNotNull("Failed to build the XACML json response", jsonObject.toString()); - assertFalse("Failed to build the XACML json response", jsonObject.entrySet().isEmpty()); - for(Map.Entry jsonElementEntry: jsonObject.entrySet()) { - if (jsonElementEntry.getKey().equals("Response")) { - JsonArray jsonArray = (JsonArray) jsonElementEntry.getValue(); - assertEquals("Failed to build the XACML json response with correct evaluation", - jsonArray.get(0).getAsJsonObject().get("Decision").getAsString(), "Deny"); - } - } - } catch (ResponseWriteException e) { - assertNull("Failed to build the XACML json response", e); - } - - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-all-entitlements-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-all-entitlements-1.json deleted file mode 100644 index 5bdf237a82bf..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-all-entitlements-1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "givenAttributes": [ - { - "attributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id", - "attributeDataType": "http://www.w3.org/2001/XMLSchema#string", - "attributeValue": "foo", - "category": "urn:oasis:names:tc:xacml:3.0:attribute-category:resource" - } - ] -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-1.json deleted file mode 100644 index 399b21f84e75..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-1.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "action": "read", - "resource": "http://127.0.0.1/service/very_secure/", - "subject": "admin" -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-bool-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-bool-1.json deleted file mode 100644 index 625a73d323cd..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-by-attrib-bool-1.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "action": "read", - "resource": "foo", - "subject": "admin" -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-entitled-attribs-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-entitled-attribs-1.json deleted file mode 100644 index 4a5d608ae7f4..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-entitled-attribs-1.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "subjectName": "admin", - "enableChildSearch": "false" -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-pdp-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-pdp-1.json deleted file mode 100644 index a609cfef74c2..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/request-pdp-1.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Request": { - "Action": { - "Attribute": [ - { - "AttributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id", - "Value": "read" - } - ] - }, - "Resource": { - "Attribute": [ - { - "AttributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id", - "Value": "http://127.0.0.1/service/very_secure/" - } - ] - } - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-all-entitlements-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-all-entitlements-1.json deleted file mode 100644 index 0f285bfe3336..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-all-entitlements-1.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "entitledResultSetDTO": { - "entitledAttributesDTOs": [ - { - "resourceName": null, - "action": null, - "environment": null, - "allActions": false, - "allResources": false, - "attributeDTOs": [ - { - "attributeValue": "http://127.0.0.1/service/very_secure/", - "attributeDataType": "http://www.w3.org/2001/XMLSchema#string", - "attributeId": "urn:oasis:names:tc:xacml:1.0:resource:resource-id", - "category": "urn:oasis:names:tc:xacml:3.0:attribute-category:resource" - }, - { - "attributeValue": "read", - "attributeDataType": "http://www.w3.org/2001/XMLSchema#string", - "attributeId": "urn:oasis:names:tc:xacml:1.0:action:action-id", - "category": "urn:oasis:names:tc:xacml:3.0:attribute-category:action" - } - ] - } - ], - "advanceResult": true, - "message": null, - "messageType": null - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-1.xml deleted file mode 100644 index 3bab93ac75ed..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Permit - - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-bool-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-bool-1.json deleted file mode 100644 index 02e4a84d62c4..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-by-attrib-bool-1.json +++ /dev/null @@ -1 +0,0 @@ -false \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-entitled-attribs-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-entitled-attribs-1.json deleted file mode 100644 index c3f8b29a69bc..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-entitled-attribs-1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "entitledResultSetDTO": { - "entitledAttributesDTOs": [ - { - "resourceName": "http://127.0.0.1/service/very_secure/", - "action": "read", - "environment": null, - "allActions": false, - "allResources": false, - "attributeDTOs": [] - } - ], - "advanceResult": false, - "message": null, - "messageType": null - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-home.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-home.json deleted file mode 100644 index 18021290235b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-home.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "xmlns": "http://ietf.org/ns/home-documents", - "resources": [ - { - "link": { - "href": "/pdp" - }, - "rel": "http://docs.oasis-open.org/ns/xacml/relation/pdp" - } - ] -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-pdp-1.json b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-pdp-1.json deleted file mode 100644 index 132f4499514c..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/json/response-pdp-1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "Response": [ - { - "Decision": "Permit", - "Status": { - "StatusCode": { - "Value": "urn:oasis:names:tc:xacml:1.0:status:ok" - } - } - } - ] -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-all-entitlements-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-all-entitlements-1.xml deleted file mode 100644 index a38cca2970dc..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-all-entitlements-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - urn:oasis:names:tc:xacml:1.0:resource:resource-id - http://www.w3.org/2001/XMLSchema#string - foo - urn:oasis:names:tc:xacml:3.0:attribute-category:resource - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-1.xml deleted file mode 100644 index 4d1b6f45f917..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-1.xml +++ /dev/null @@ -1,5 +0,0 @@ - - read - - http://127.0.0.1/service/very_secure/ - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-bool-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-bool-1.xml deleted file mode 100644 index 193b66aabb06..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-by-attrib-bool-1.xml +++ /dev/null @@ -1,5 +0,0 @@ - - read - - http://127.0.0.1/secure - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-entitled-attribs-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-entitled-attribs-1.xml deleted file mode 100644 index 6708998786de..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-entitled-attribs-1.xml +++ /dev/null @@ -1,4 +0,0 @@ - - read - admin - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-pdp-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-pdp-1.xml deleted file mode 100644 index deb251ed96ec..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/request-pdp-1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - read - - - - - http://127.0.0.1/service/very_secure/ - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-all-entitlements-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-all-entitlements-1.xml deleted file mode 100644 index 03b47a2bfac7..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-all-entitlements-1.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - true - - false - false - - http://www.w3.org/2001/XMLSchema#string - urn:oasis:names:tc:xacml:1.0:resource:resource-id - http://127.0.0.1/service/very_secure/ - urn:oasis:names:tc:xacml:3.0:attribute-category:resource - - - http://www.w3.org/2001/XMLSchema#string - urn:oasis:names:tc:xacml:1.0:action:action-id - read - urn:oasis:names:tc:xacml:3.0:attribute-category:action - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-1.xml deleted file mode 100644 index 3bab93ac75ed..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Permit - - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-bool-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-bool-1.xml deleted file mode 100644 index 02e4a84d62c4..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-by-attrib-bool-1.xml +++ /dev/null @@ -1 +0,0 @@ -false \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-entitled-attribs-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-entitled-attribs-1.xml deleted file mode 100644 index 8e19eb69d07a..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-entitled-attribs-1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - false - - read - false - false - http://127.0.0.1/service/very_secure/ - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-home.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-home.xml deleted file mode 100644 index 05263263227e..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-home.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-pdp-1.xml b/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-pdp-1.xml deleted file mode 100644 index 3bab93ac75ed..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.api.server.entitlement/src/test/resources/xml/response-pdp-1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Permit - - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/DataPersistenceManager.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/DataPersistenceManager.java deleted file mode 100644 index 437ed721cfac..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/DataPersistenceManager.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder; - -import java.util.Map; - -/** - * - */ -public interface DataPersistenceManager { - - /** - * Build and Load the policy editor data from persistence storage - * - * @return PolicyEditorDataHolder - * @throws PolicyEditorException throws - */ - public Map buildDataHolder() throws PolicyEditorException; - - /** - * Persist policy editor data in to persistence storage - * - * @param policyEditorType policy editor type - * @param xmlConfig String - * @throws PolicyEditorException throws - */ - public void persistConfig(String policyEditorType, String xmlConfig) throws PolicyEditorException; - - /** - * Get policy editor data from persistence storage - * - * @return String - */ - public Map getConfig(); -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementConstants.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementConstants.java deleted file mode 100644 index 39cfa528fa08..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementConstants.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -/** - * - */ -public class EntitlementConstants { - - public static final String ENTITLEMENT_REGISTRY_PATH = "repository/identity/entitlement"; - - public static final String ENTITLEMENT_POLICY_EDITOR_REGISTRY_PATH = - ENTITLEMENT_REGISTRY_PATH + "/policyEditor"; - - public static final String ENTITLEMENT_POLICY_BASIC_EDITOR_CONFIG_FILE_REGISTRY_PATH = - ENTITLEMENT_REGISTRY_PATH + "/policyEditor/config/basic/config.xml"; - public static final String ENTITLEMENT_POLICY_STANDARD_EDITOR_CONFIG_FILE_REGISTRY_PATH = - ENTITLEMENT_REGISTRY_PATH + "/policyEditor/config/standard/config.xml"; - public static final String ENTITLEMENT_POLICY_RBAC_EDITOR_CONFIG_FILE_REGISTRY_PATH = - ENTITLEMENT_REGISTRY_PATH + "/policyEditor/config/rbac/config.xml"; - public static final String ENTITLEMENT_POLICY_SET_EDITOR_CONFIG_FILE_REGISTRY_PATH = - ENTITLEMENT_REGISTRY_PATH + "/policyEditor/config/set/config.xml"; - - public static final String PDP_SUBSCRIBER_ID = "PDP Subscriber"; - - public static final String PROP_USE_LAST_STATUS_ONLY = "EntitlementSettings.XacmlPolicyStatus.UseLastStatusOnly"; - - public static final class PolicyPublish { - - public static final String ACTION_CREATE = "CREATE"; - - public static final String ACTION_UPDATE = "UPDATE"; - - public static final String ACTION_DELETE = "DELETE"; - - public static final String ACTION_ENABLE = "ENABLE"; - - public static final String ACTION_DISABLE = "DISABLE"; - - public static final String ACTION_ORDER = "ORDER"; - } - - public static final class StatusTypes { - - public static final String ADD_POLICY = "ADD_POLICY"; - - public static final String UPDATE_POLICY = "UPDATE_POLICY"; - - public static final String GET_POLICY = "GET_POLICY"; - - public static final String DELETE_POLICY = "DELETE_POLICY"; - - public static final String ENABLE_POLICY = "ENABLE_POLICY"; - - public static final String PUBLISH_POLICY = "PUBLISH_POLICY"; - - public static final String ROLLBACK_POLICY = "ROLLBACK_POLICY"; - - public static final String[] ALL_TYPES = new String[]{ADD_POLICY, UPDATE_POLICY, GET_POLICY, - DELETE_POLICY, ENABLE_POLICY, PUBLISH_POLICY, ROLLBACK_POLICY}; - } - - public static final class Status { - - public static final String ABOUT_POLICY = "POLICY"; - - public static final String ABOUT_SUBSCRIBER = "SUBSCRIBER"; - - } - - public static final class PolicyEditor { - - public static final String BASIC = "BASIC"; - - public static final String STANDARD = "STANDARD"; - - public static final String RBAC = "RBAC"; - - public static final String SET = "SET"; - - public static final String[] EDITOR_TYPES = new String[]{BASIC, STANDARD, RBAC, SET}; - - public static final String BASIC_CATEGORY_SUBJECT = "Subject"; - - public static final String BASIC_CATEGORY_ACTION = "Action"; - - public static final String BASIC_CATEGORY_ENVIRONMENT = "Environment"; - - public static final String BASIC_CATEGORY_RESOURCE = "Resource"; - - public static final String[] BASIC_CATEGORIES = new String[]{BASIC_CATEGORY_SUBJECT, - BASIC_CATEGORY_RESOURCE, BASIC_CATEGORY_ACTION, BASIC_CATEGORY_ENVIRONMENT}; - - } - - public static final class PolicyType { - - public static final String POLICY_ENABLED = "PDP_ENABLED"; - - public static final String POLICY_DISABLED = "PDP_DISABLED"; - - public static final String POLICY_ALL = "ALL"; - - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyBean.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyBean.java deleted file mode 100644 index 7c71f4b23c31..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyBean.java +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.balana.utils.policy.dto.BasicRuleDTO; -import org.wso2.balana.utils.policy.dto.BasicTargetDTO; -import org.wso2.carbon.identity.entitlement.common.dto.ExtendAttributeDTO; -import org.wso2.carbon.identity.entitlement.common.dto.ObligationDTO; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyRefIdDTO; -import org.wso2.carbon.identity.entitlement.common.dto.PolicySetDTO; -import org.wso2.carbon.identity.entitlement.common.dto.RuleDTO; -import org.wso2.carbon.identity.entitlement.common.dto.TargetDTO; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementFinderDataHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementTreeNodeDTO; -import org.wso2.carbon.identity.entitlement.common.dto.SimplePolicyEditorDTO; - - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * This Bean is used to keep the user data temporary while travelling through - * the UI wizard - */ -public class EntitlementPolicyBean { - - public Map functionIdMap = new HashMap(); - public Map functionIdElementValueMap = new HashMap(); - private String policyName; - private String algorithmName; - private String policyDescription; - private String userInputData; - private List subscribersList = new ArrayList(); - private SimplePolicyEditorDTO SimplePolicyEditorDTO; - private Map categoryMap = new HashMap(); - private Map targetFunctionMap = new HashMap(); - private Map attributeIdMap = new HashMap(); - private Map ruleFunctionMap = new HashMap(); - private boolean editPolicy; - private String[] policyCombiningAlgorithms = new String[0]; - private Map entitlementFinders = - new HashMap(); - private Map selectedEntitlementData = new HashMap(); - private Map entitlementLevelData = - new HashMap(); - private BasicTargetDTO basicTargetDTO = null; - private TargetDTO targetDTO = null; - private PolicySetDTO policySetDTO = null; - private List basicRuleDTOs = new ArrayList(); - - private List ruleDTOs = new ArrayList(); - - private List extendAttributeDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - private String ruleElementOrder; - - private String policyReferenceOrder; - - private Set preFunctions = new HashSet(); - - private List policyRefIds = new ArrayList(); - - /** - * This method is temporally used to clear the entitlement bean. Need to - * update with a method proper implementation TODO - */ - public void cleanEntitlementPolicyBean() { - - policyName = null; - - algorithmName = null; - - policyDescription = null; - - userInputData = null; - - editPolicy = false; - - policySetDTO = null; - - functionIdMap.clear(); - - functionIdElementValueMap.clear(); - - basicRuleDTOs.clear(); - - removeBasicTargetElementDTO(); - - targetDTO = null; - - ruleDTOs.clear(); - - extendAttributeDTOs.clear(); - - obligationDTOs.clear(); - - SimplePolicyEditorDTO = null; - - basicTargetDTO = null; - - policyReferenceOrder = null; - - policyRefIds.clear(); - - } - - public String getPolicyName() { - return policyName; - } - - public void setPolicyName(String policyName) { - this.policyName = policyName; - } - - public String getAlgorithmName() { - return algorithmName; - } - - public void setAlgorithmName(String algorithmName) { - this.algorithmName = algorithmName; - } - - public String getPolicyDescription() { - return policyDescription; - } - - public void setPolicyDescription(String policyDescription) { - this.policyDescription = policyDescription; - } - - public String getUserInputData() { - return userInputData; - } - - public void setUserInputData(String userInputData) { - this.userInputData = userInputData; - } - - public List getBasicRuleDTOs() { - return basicRuleDTOs; - } - - public void setBasicRuleDTOs(List basicRuleDTOs) { - this.basicRuleDTOs = basicRuleDTOs; - } - - public void setBasicRuleElementDTOs(BasicRuleDTO basicRuleDTO) { - if (basicRuleDTOs.size() > 0) { - Iterator iterator = basicRuleDTOs.listIterator(); - while (iterator.hasNext()) { - BasicRuleDTO elementDTO = (BasicRuleDTO) iterator - .next(); - if (elementDTO.getRuleId().equals( - basicRuleDTO.getRuleId())) { - if (elementDTO.isCompletedRule()) { - basicRuleDTO.setCompletedRule(true); - } - iterator.remove(); - } - } - } - this.basicRuleDTOs.add(basicRuleDTO); - } - - public BasicRuleDTO getBasicRuleElement(String ruleId) { - if (basicRuleDTOs.size() > 0) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - if (basicRuleDTO.getRuleId().equals(ruleId)) { - return basicRuleDTO; - } - } - } - return null; - } - - public boolean removeBasicRuleElement(String ruleId) { - if (basicRuleDTOs.size() > 0 && ruleId != null) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - if (ruleId.equals(basicRuleDTO.getRuleId())) { - return basicRuleDTOs.remove(basicRuleDTO); - } - } - } - return false; - } - - public void removeBasicRuleElements() { - if (basicRuleDTOs.size() > 0) { - Iterator iterator = basicRuleDTOs.listIterator(); - while (iterator.hasNext()) { - iterator.next(); - iterator.remove(); - } - } - } - - -/////////////////////////////////////// new - - public List getRuleDTOs() { - return ruleDTOs; - } - - public void setRuleDTOs(List ruleDTOs) { - this.ruleDTOs = ruleDTOs; - } - - public void setRuleDTO(RuleDTO ruleDTO) { - if (ruleDTOs.size() > 0) { - Iterator iterator = ruleDTOs.listIterator(); - while (iterator.hasNext()) { - RuleDTO elementDTO = (RuleDTO) iterator.next(); - if (elementDTO.getRuleId().equals( - ruleDTO.getRuleId())) { - if (elementDTO.isCompletedRule()) { - ruleDTO.setCompletedRule(true); - } - iterator.remove(); - } - } - } - this.ruleDTOs.add(ruleDTO); - } - - public RuleDTO getRuleDTO(String ruleId) { - if (ruleDTOs.size() > 0) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleDTO.getRuleId().equals(ruleId)) { - return ruleDTO; - } - } - } - return null; - } - - public boolean removeRuleDTO(String ruleId) { - if (ruleDTOs.size() > 0) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleDTO.getRuleId().equals(ruleId)) { - return ruleDTOs.remove(ruleDTO); - } - } - } - return false; - } - - public void removeRuleDTOs() { - if (ruleDTOs.size() > 0) { - Iterator iterator = ruleDTOs.listIterator(); - while (iterator.hasNext()) { - iterator.next(); - iterator.remove(); - } - } - } - - public List getExtendAttributeDTOs() { - return extendAttributeDTOs; - } - - public void setExtendAttributeDTOs(List extendAttributeDTOs) { - this.extendAttributeDTOs = extendAttributeDTOs; - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } - - public void addExtendAttributeDTO(ExtendAttributeDTO extendAttributeDTO) { - this.extendAttributeDTOs.add(extendAttributeDTO); - } - - /////////////////////////// //////// - public BasicTargetDTO getBasicTargetDTO() { - return basicTargetDTO; - } - - public void setBasicTargetDTO( - BasicTargetDTO basicTargetDTO) { - this.basicTargetDTO = basicTargetDTO; - } - - public void removeBasicTargetElementDTO() { - this.basicTargetDTO = null; - } - - public boolean isEditPolicy() { - return editPolicy; - } - - public void setEditPolicy(boolean editPolicy) { - this.editPolicy = editPolicy; - } - - public String[] getPolicyCombiningAlgorithms() { - return Arrays.copyOf(policyCombiningAlgorithms, policyCombiningAlgorithms.length); - } - - public void setPolicyCombiningAlgorithms(String[] policyCombiningAlgorithms) { - this.policyCombiningAlgorithms = Arrays.copyOf(policyCombiningAlgorithms, policyCombiningAlgorithms.length); - } - - public PolicySetDTO getPolicySetDTO() { - return policySetDTO; - } - - public void setPolicySetDTO(PolicySetDTO policySetDTO) { - this.policySetDTO = policySetDTO; - } - - public String getRuleElementOrder() { - return ruleElementOrder; - } - - public void setRuleElementOrder(String ruleElementOrder) { - this.ruleElementOrder = ruleElementOrder; - } - - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public Map getCategoryMap() { - return categoryMap; - } - - public void setCategoryMap(Map categoryMap) { - this.categoryMap = categoryMap; - } - - public Set getCategorySet() { - return categoryMap.keySet(); - } - - public Map getRuleFunctionMap() { - return ruleFunctionMap; - } - - public void setRuleFunctionMap(Map ruleFunctionMap) { - this.ruleFunctionMap = ruleFunctionMap; - } - - public Map getTargetFunctionMap() { - return targetFunctionMap; - } - - public void setTargetFunctionMap(Map targetFunctionMap) { - this.targetFunctionMap = targetFunctionMap; - } - - public Map getAttributeIdMap() { - return attributeIdMap; - } - - public void setAttributeIdMap(Map attributeIdMap) { - this.attributeIdMap = attributeIdMap; - } - - public Set getPreFunctions() { - return preFunctions; - } - - public void addPreFunction(String preFunction) { - this.preFunctions.add(preFunction); - } - - - public SimplePolicyEditorDTO getSimplePolicyEditorDTO() { - return SimplePolicyEditorDTO; - } - - public void setSimplePolicyEditorDTO(SimplePolicyEditorDTO simplePolicyEditorDTO) { - this.SimplePolicyEditorDTO = simplePolicyEditorDTO; - } - - public Map getEntitlementFinders() { - return entitlementFinders; - } - - public Set getEntitlementFinders(String category) { - Set holders = new HashSet(); - for (Map.Entry entry : entitlementFinders.entrySet()) { - EntitlementFinderDataHolder holder = entry.getValue(); - if (Arrays.asList(holder.getSupportedCategory()).contains(category)) { - holders.add(holder); - } - } - return holders; - } - - public void setEntitlementFinders(String name, EntitlementFinderDataHolder entitlementFinders) { - this.entitlementFinders.put(name, entitlementFinders); - } - - public Map getSelectedEntitlementData() { - return selectedEntitlementData; - } - - public Map getEntitlementLevelData() { - return entitlementLevelData; - } - - public List getPolicyRefIds() { - return policyRefIds; - } - - public void setPolicyRefIds(List policyRefIds) { - this.policyRefIds = policyRefIds; - } - - public void addPolicyRefId(PolicyRefIdDTO policyRefId) { - Iterator iterator = policyRefIds.listIterator(); - while (iterator.hasNext()) { - PolicyRefIdDTO dto = (PolicyRefIdDTO) iterator.next(); - if (policyRefId != null && dto.getId().equalsIgnoreCase(policyRefId.getId())) { - iterator.remove(); - } - } - this.policyRefIds.add(policyRefId); - } - - public void removePolicyRefId(String policyRefId) { - Iterator iterator = policyRefIds.listIterator(); - while (iterator.hasNext()) { - PolicyRefIdDTO dto = (PolicyRefIdDTO) iterator.next(); - if (policyRefId != null && dto.getId().equalsIgnoreCase(policyRefId)) { - iterator.remove(); - } - } - } - - public String getPolicyReferenceOrder() { - return policyReferenceOrder; - } - - public void setPolicyReferenceOrder(String policyReferenceOrder) { - this.policyReferenceOrder = policyReferenceOrder; - } - - public List getSubscribersList() { - return subscribersList; - } - - public void setSubscribersList(String[] subscribersList) { - List list = new ArrayList(Arrays.asList(subscribersList)); - this.subscribersList.addAll(list); - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyConstants.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyConstants.java deleted file mode 100644 index c360ea5c2f72..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyConstants.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -/** - * Constants related with XACML policy such as per-defined Element Names and NameSpaces - */ -public class EntitlementPolicyConstants { - - public static final int DEFAULT_ITEMS_PER_PAGE = 10; - public static final String ENTITLEMENT_ADMIN_CLIENT = "EntitlementAdminClient"; - public static final String ENTITLEMENT_SUBSCRIBER_CLIENT = "EntitlementSubscriberClient"; - - public static final String ENTITLEMENT_CURRENT_VERSION = "currentVersion"; - - public static final String XACML3_POLICY_NAMESPACE = "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"; - - public static final String ATTRIBUTE_NAMESPACE = "urn:oasis:names:tc:xacml:2.0:example:attribute:"; - - public static final String POLICY_ELEMENT = "Policy"; - - public static final String APPLY_ELEMENT = "Apply"; - - public static final String MATCH_ELEMENT = "Match"; - - public static final String SUBJECT_ELEMENT = "Subject"; - - public static final String ACTION_ELEMENT = "Action"; - - public static final String RESOURCE_ELEMENT = "Resource"; - - public static final String ENVIRONMENT_ELEMENT = "Environment"; - - public static final String POLICY_ID = "PolicyId"; - - public static final String RULE_ALGORITHM = "RuleCombiningAlgId"; - - public static final String POLICY_VERSION = "Version"; - - public static final String DESCRIPTION_ELEMENT = "Description"; - - public static final String TARGET_ELEMENT = "Target"; - - public static final String RULE_ELEMENT = "Rule"; - - public static final String CONDITION_ELEMENT = "Condition"; - - public static final String FUNCTION_ELEMENT = "Function"; - - public static final String ATTRIBUTE_SELECTOR = "AttributeSelector"; - - public static final String ATTRIBUTE_VALUE = "AttributeValue"; - - public static final String FUNCTION = "Function"; - - public static final String VARIABLE_REFERENCE = "VariableReference"; - - public static final String ATTRIBUTE_DESIGNATOR = "AttributeDesignator"; - - public static final String ATTRIBUTE_ID = "AttributeId"; - - public static final String CATEGORY = "Category"; - - public static final String ATTRIBUTE = "Attribute"; - - public static final String ATTRIBUTES = "Attributes"; - - public static final String INCLUDE_RESULT = "IncludeInResult"; - - public static final String DATA_TYPE = "DataType"; - - public static final String ISSUER = "Issuer"; - - public static final String MUST_BE_PRESENT = "MustBePresent"; - - public static final String REQUEST_CONTEXT_PATH = "RequestContextPath"; - - public static final String MATCH_ID = "MatchId"; - - public static final String RULE_ID = "RuleId"; - - public static final String RULE_EFFECT = "Effect"; - - public static final String RULE_DESCRIPTION = "Description"; - - public static final String FUNCTION_ID = "FunctionId"; - - public static final String VARIABLE_ID = "VariableId"; - - public static final String OBLIGATION_EXPRESSIONS = "ObligationExpressions"; - - public static final String OBLIGATION_EXPRESSION = "ObligationExpression"; - - public static final String OBLIGATION_ID = "ObligationId"; - - public static final String OBLIGATION_EFFECT = "FulfillOn"; - - public static final String ADVICE_EXPRESSIONS = "AdviceExpressions"; - - public static final String ADVICE_EXPRESSION = "AdviceExpression"; - - public static final String ADVICE_ID = "AdviceId"; - - public static final String ADVICE_EFFECT = "AppliesTo"; - - public static final String ATTRIBUTE_ASSIGNMENT = "AttributeAssignmentExpression"; - - public static final String STRING_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#string"; - - public static final String INT_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#integer"; - - public static final String BOOLEAN_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#boolean"; - - public static final String DATE_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#date"; - - public static final String TIME_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#time"; - - public static final String DATE_TIME_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#dateTime"; - - public static final String FUNCTION_BAG = "urn:oasis:names:tc:xacml:1.0:function:string-bag"; - - public static final String SUBJECT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - - public static final String SUBJECT_ID_ROLE = "http://wso2.org/claims/roles"; - - public static final String RESOURCE_ID = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - - public static final String RESOURCE_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:resource:resource"; - - public static final String RULE_EFFECT_PERMIT = "Permit"; - - public static final String RULE_EFFECT_NOT_APPLICABLE = "Not Applicable"; - - public static final String RULE_EFFECT_DENY = "Deny"; - - public static final String ACTION_ID = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - - public static final String ENVIRONMENT_ID = "urn:oasis:names:tc:xacml:1.0:environment:environment-id"; - - public static final String SUBJECT_TYPE_ROLES = "Roles"; - - public static final String SUBJECT_TYPE_USERS = "Users"; - - public static final String DEFAULT_CARBON_DIALECT = "http://wso2.org/claims"; - - public static final String IMPORT_POLICY_REGISTRY = "Registry"; - - public static final String IMPORT_POLICY_FILE_SYSTEM = "FileSystem"; - - public static final String REQ_RES_CONTEXT_XACML2 = "urn:oasis:names:tc:xacml:2.0:context:schema:os"; - - public static final String REQ_RES_CONTEXT_XACML3 = "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"; - - public static final String REQ_SCHEME = "http://www.w3.org/2001/XMLSchema-instance"; - - public static final String RETURN_POLICY_LIST = "ReturnPolicyIdList"; - - public static final String COMBINED_DECISION = "CombinedDecision"; - - public static final String REQUEST_ELEMENT = "Request"; - - public static final String POLICY_SET_ID = "PolicySetId"; - - public static final String POLICY_ALGORITHM = "PolicyCombiningAlgId"; - - public static final String POLICY_SET_ELEMENT = "PolicySet"; - - public static final String POLICY_REFERENCE = "PolicyIdReference"; - - public static final String POLICY_SET_REFERENCE = "PolicySetIdReference"; - - public static final String ATTRIBUTE_SEPARATOR = ","; - - public static final String COMBO_BOX_DEFAULT_VALUE = "---Select---"; - - public static final String COMBO_BOX_ANY_VALUE = "Any"; - - public static final String SEARCH_ERROR = "Search_Error"; - - public static final String DEFAULT_META_DATA_MODULE_NAME = "Carbon Attribute Finder Module"; - - public static final int BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT = 23; - - public static final int BASIC_POLICY_EDITOR_TARGET_DATA_AMOUNT = 20; - - public static final String ENTITLEMENT_PUBLISHER_PROPERTY = "entitlementPublisherPropertyDTO"; - - public static final String ENTITLEMENT_PUBLISHER_MODULE = "entitlementPublisherModuleHolders"; - -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyCreationException.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyCreationException.java deleted file mode 100644 index fa250cf8797a..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/EntitlementPolicyCreationException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.carbon.identity.base.IdentityException; - -public class EntitlementPolicyCreationException extends IdentityException { - - private static final long serialVersionUID = -574465923080421499L; - - public EntitlementPolicyCreationException(String message) { - super(message); - } - - public EntitlementPolicyCreationException(String message, Throwable e) { - super(message, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/InMemoryPersistenceManager.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/InMemoryPersistenceManager.java deleted file mode 100644 index f3c58a39dc26..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/InMemoryPersistenceManager.java +++ /dev/null @@ -1,1734 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.common; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.wso2.carbon.identity.core.util.IdentityUtil; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * - */ -public class InMemoryPersistenceManager implements DataPersistenceManager { - - private static Log log = LogFactory.getLog(InMemoryPersistenceManager.class); - private Map xmlConfig = new HashMap(); - - @Override - public Map buildDataHolder() throws PolicyEditorException { - xmlConfig = this.getConfig(); - Map holders = new HashMap(); - for (String type : EntitlementConstants.PolicyEditor.EDITOR_TYPES) { - PolicyEditorDataHolder holder = buildDataHolder(type, xmlConfig.get(type)); - if (holder != null) { - holders.put(type, holder); - } - } - return holders; - } - - private PolicyEditorDataHolder buildDataHolder(String type, String xmlConfig) throws PolicyEditorException { - - if (xmlConfig == null) { - return null; - } - - PolicyEditorDataHolder holder = new PolicyEditorDataHolder(); - DocumentBuilder builder; - ByteArrayInputStream inputStream; - Element root = null; - inputStream = new ByteArrayInputStream(xmlConfig.getBytes()); - try { - builder = getSecuredDocumentBuilder(); - Document doc = builder.parse(inputStream); - root = doc.getDocumentElement(); - } catch (Exception e) { - log.error("DOM of request element can not be created from String", e); - } finally { - try { - inputStream.close(); - } catch (IOException e) { - log.error("Error in closing input stream of XACML request"); - } - } - - if (root == null) { - return holder; - } - - NodeList nodeList = root.getChildNodes(); - - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if (node.getNodeName().equals("categories")) { - parseCategories(type, node, holder); - } else if (node.getNodeName().equals("ruleCombiningAlgorithm")) { - parseAlgorithm(node, holder, false); - } else if (node.getNodeName().equals("policyCombiningAlgorithm")) { - parseAlgorithm(node, holder, true); - } else if (node.getNodeName().equals("attributeIds")) { - parseAttributeIds(node, holder); - } else if (node.getNodeName().equals("dataTypes")) { - parseDataTypes(node, holder); - } else if (node.getNodeName().equals("functions")) { - parseFunctions(node, holder); - } else if (node.getNodeName().equals("preFunctions")) { - parsePreFunctions(node, holder); - } else if (node.getNodeName().equals("rule")) { - parseRule(node, holder); - } else if (node.getNodeName().equals("policyDescription")) { - if ("true".equals(node.getTextContent())) { - holder.setShowPolicyDescription(true); - } - } - } - - return holder; - } - - /** - * * This method provides a secured document builder which will secure XXE attacks. - * - * @return DocumentBuilder - * @throws ParserConfigurationException - */ - private DocumentBuilder getSecuredDocumentBuilder() throws ParserConfigurationException { - DocumentBuilderFactory documentBuilderFactory = IdentityUtil.getSecuredDocumentBuilderFactory(); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); - return documentBuilder; - } - - @Override - public void persistConfig(String policyEditorType, String xmlConfig) throws PolicyEditorException { - // to verify - buildDataHolder(policyEditorType, xmlConfig); - this.xmlConfig.put(policyEditorType, xmlConfig); - } - - @Override - public Map getConfig() { - return xmlConfig; - } - - private void parseCategories(String type, Node root, PolicyEditorDataHolder holder) throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("category".equals(node.getNodeName())) { - - String name = null; - String uri = null; - Set attributeIds = null; - Set dataTypes = null; - - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("name".equals(child.getNodeName())) { - name = child.getTextContent(); - if (EntitlementConstants.PolicyEditor.BASIC.equals(type) || - (EntitlementConstants.PolicyEditor.RBAC.equals(type))) { - if (!Utils.isValidCategory(name)) { - throw new PolicyEditorException("Invalid Category : " + name - + " Basic policy editor supports only for Subject, " + - "Resource, Action and Environment category names. " + - "But you can change the URI of them"); - } - } - } else if ("uri".equals(child.getNodeName())) { - uri = child.getTextContent(); - } else if ("supportedAttributeIds".equals(child.getNodeName())) { - attributeIds = new HashSet(); - NodeList list = child.getChildNodes(); - for (int k = 0; k < list.getLength(); k++) { - Node nextChild = list.item(k); - if ("attributeId".equals(nextChild.getNodeName())) { - if (attributeIds.size() == 0) { - holder.getCategoryDefaultAttributeIdMap(). - put(name, nextChild.getTextContent()); - } - attributeIds.add(nextChild.getTextContent()); - } - } - } else if ("supportedDataTypes".equals(child.getNodeName())) { - dataTypes = new HashSet(); - NodeList list = child.getChildNodes(); - for (int k = 0; k < list.getLength(); k++) { - Node nextChild = list.item(k); - if ("dataType".equals(nextChild.getNodeName())) { - dataTypes.add(nextChild.getTextContent()); - } - } - } - } - if (name != null) { - if (uri != null) { - holder.getCategoryMap().put(name, uri); - } - if (attributeIds != null) { - holder.getCategoryAttributeIdMap().put(name, attributeIds); - } - if (dataTypes != null) { - holder.getCategoryDataTypeMap().put(name, dataTypes); - } - } - } - } - } - - private void parseAlgorithm(Node root, PolicyEditorDataHolder holder, boolean isPolicy) - throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("algorithms".equals(node.getNodeName())) { - String name = null; - String uri = null; - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("algorithm".equals(child.getNodeName())) { - NodeList list = child.getChildNodes(); - for (int k = 0; k < list.getLength(); k++) { - Node nextChild = list.item(k); - if ("name".equals(nextChild.getNodeName())) { - name = nextChild.getTextContent(); - } else if ("uri".equals(nextChild.getNodeName())) { - uri = nextChild.getTextContent(); - } - if (name != null && uri != null) { - if (!Utils.isValidRuleAlgorithm(uri, isPolicy)) { - throw new PolicyEditorException("Invalid Algorithm : " + uri); - } - if (isPolicy) { - holder.getPolicyCombiningAlgorithms().put(name, uri); - } else { - holder.getRuleCombiningAlgorithms().put(name, uri); - } - } - } - } - } - } else if ("display".equals(node.getNodeName())) { - if ("true".equals(node.getTextContent())) { - if (isPolicy) { - holder.setShowPolicyAlgorithms(true); - } else { - holder.setShowRuleAlgorithms(true); - } - } - } else if ("defaultAlgorithm".equals(node.getNodeName())) { - if (isPolicy) { - holder.setDefaultPolicyAlgorithm(node.getTextContent()); - } else { - holder.setDefaultRuleAlgorithm(node.getTextContent()); - } - } - } - } - - private void parseAttributeIds(Node root, PolicyEditorDataHolder holder) { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("attributeId".equals(node.getNodeName())) { - - String name = null; - String uri = null; - String dataType = null; - - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("name".equals(child.getNodeName())) { - name = child.getTextContent(); - } else if ("uri".equals(child.getNodeName())) { - uri = child.getTextContent(); - } else if ("dataType".equals(child.getNodeName())) { - dataType = child.getTextContent(); - } - } - if (name != null) { - if (uri != null) { - holder.getAttributeIdMap().put(name, uri); - } - if (dataType != null) { - holder.getAttributeIdDataTypeMap().put(name, dataType); - } - } - } - } - } - - private void parseDataTypes(Node root, PolicyEditorDataHolder holder) throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("dataType".equals(node.getNodeName())) { - - String name = null; - String uri = null; - - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("name".equals(child.getNodeName())) { - name = child.getTextContent(); - } else if ("uri".equals(child.getNodeName())) { - uri = child.getTextContent(); - } - } - if (name != null && uri != null) { - if (!Utils.isValidDataType(uri)) { - throw new PolicyEditorException("Invalid DataType : " + uri); - } - holder.getDataTypeMap().put(name, uri); - } - } - if ("defaultDataTypes".equals(node.getNodeName())) { - holder.setDefaultDataType(node.getTextContent()); - } - } - } - - private void parseFunctions(Node root, PolicyEditorDataHolder holder) throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("function".equals(node.getNodeName())) { - - String name = null; - String uri = null; - boolean targetFunction = false; - - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("name".equals(child.getNodeName())) { - name = child.getTextContent(); - } else if ("uri".equals(child.getNodeName())) { - uri = child.getTextContent(); - } else if ("targetFunction".equals(child.getNodeName())) { - targetFunction = true; - } - } - if (name != null && uri != null) { - if (!Utils.isValidFunction(uri)) { - throw new PolicyEditorException("Invalid Function : " + uri); - } - holder.getFunctionMap().put(name, uri); - holder.getRuleFunctions().add(name); - if (targetFunction) { - holder.getTargetFunctions().add(name); - } - } - } - } - } - - private void parsePreFunctions(Node root, PolicyEditorDataHolder holder) throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("preFunction".equals(node.getNodeName())) { - - String name = null; - String uri = null; - - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("name".equals(child.getNodeName())) { - name = child.getTextContent(); - } else if ("uri".equals(child.getNodeName())) { - uri = child.getTextContent(); - } - } - if (name != null && uri != null) { - if (!Utils.isValidPreFunction(uri)) { - throw new PolicyEditorException("Invalid PreFunction : " + uri); - } - holder.getPreFunctionMap().put(name, uri); - } - } - } - } - - private void parseRule(Node root, PolicyEditorDataHolder holder) throws PolicyEditorException { - - NodeList nodeList = root.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if ("ruleId".equals(node.getNodeName())) { - if ("true".equals(node.getTextContent())) { - holder.setShowRuleId(true); - } - } else if ("ruleEffect".equals(node.getNodeName())) { - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("display".equals(child.getNodeName())) { - if ("true".equals(child.getTextContent())) { - holder.setShowRuleEffect(true); - } - } else if ("defaultEffect".equals(child.getNodeName())) { - if (child.getTextContent() != null) { - String uri = child.getTextContent(); - if (!Utils.isValidEffect(uri)) { - throw new PolicyEditorException("Invalid Rule Effect : " + uri); - } - holder.setDefaultEffect(child.getTextContent()); - } - } else if ("effect".equals(child.getNodeName())) { - NodeList childList1 = child.getChildNodes(); - String name = null; - String uri = null; - for (int k = 0; k < childList1.getLength(); k++) { - Node child1 = childList1.item(k); - if ("name".equals(child1.getNodeName())) { - if (child1.getTextContent() != null) { - name = child1.getTextContent(); - } - } else if ("uri".equals(child1.getNodeName())) { - if (child1.getTextContent() != null) { - uri = child1.getTextContent(); - } - } - } - - if (name != null && uri != null) { - if (!Utils.isValidEffect(uri)) { - throw new PolicyEditorException("Invalid Rule Effect : " + uri); - } - holder.getRuleEffectMap().put(name, uri); - } - - if (child.getTextContent() != null) { - holder.setDefaultEffect(child.getTextContent()); - } - } - } - } else if ("lastRule".equals(node.getNodeName())) { - NodeList childList = node.getChildNodes(); - for (int j = 0; j < childList.getLength(); j++) { - Node child = childList.item(j); - if ("add".equals(child.getNodeName())) { - if ("true".equals(child.getTextContent())) { - holder.setAddLastRule(true); - } - } else if ("effect".equals(child.getNodeName())) { - if (child.getTextContent() != null) { - String uri = child.getTextContent(); - if (!Utils.isValidEffect(uri)) { - throw new PolicyEditorException("Invalid Rule Effect : " + uri); - } - holder.setLastRuleEffect(uri); - } - } - } - } - } - } - - protected String getSimpleConfig() { - return "\n" + - " \n" + - " \n" + - " Subject\n" + - " urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\n" + - " \n" + - " UserName\n" + - " Email\n" + - " Role\n" + - " Age\n" + - " \n" + - " \n" + - " \n" + - " Resource\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:resource\n" + - " \n" + - " resource-id\n" + - " \n" + - " \n" + - " \n" + - " Action\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:action\n" + - " \n" + - " action-id\n" + - " \n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:environment\n" + - " \n" + - " Domain\n" + - "\t\tDate\n" + - "\t\tTime\n" + - "\t\tDateTime\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " resource-id\n" + - " urn:oasis:names:tc:xacml:1.0:resource:resource-id\n" + - " \n" + - " \n" + - " action-id\n" + - " urn:oasis:names:tc:xacml:1.0:action:action-id\n" + - " \n" + - " \n" + - " UserName\n" + - " urn:oasis:names:tc:xacml:1.0:subject:subject-id\n" + - " \n" + - " \n" + - " Role\n" + - " http://wso2.org/claims/roles\n" + - " \n" + - " \n" + - " Email\n" + - " http://wso2.org/claims/emailaddress\n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Domain\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Time\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-time\n" + - " http://www.w3.org/2001/XMLSchema#time\n" + - " \n" + - " \n" + - " Date\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-date\n" + - "\t http://www.w3.org/2001/XMLSchema#date\n" + - " \n" + - " \n" + - " DateTime\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-dateTime\n" + - "\t http://www.w3.org/2001/XMLSchema#dateTime\n" + - " \n" + - " \n" + - " Age\n" + - " http://wso2.org/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#integer\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Deny Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides\n" + - " \n" + - " \n" + - " First Applicable\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Permit Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\n" + - " \n" + - " \n" + - " Deny Unless Permit\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit\n" + - " \n" + - " \n" + - " Permit Unless Deny\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-unless-deny\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "\t\n" + - "\t\tString\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#string\n" + - "\t\n" + - "\t\n" + - "\t\tBoolean\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#boolean\n" + - "\t\n" + - "\t\n" + - "\t\tInteger\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#integer\n" + - "\t\n" + - "\t\n" + - "\t\tDouble\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#double\n" + - "\t\n" + - "\t\n" + - "\t\tTime\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#time\n" + - "\t\n" + - "\t\n" + - "\t\tDate\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#date\n" + - "\t\n" + - "\t\n" + - "\t\tDate Time\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dateTime\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tYear Month Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#yearMonthDuration\n" + - "\t\n" + - "\t\n" + - "\t\tAny URI\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#anyURI\n" + - "\t\n" + - "\t\n" + - "\t\tHex Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#hexBinary\n" + - "\t\n" + - "\t\n" + - "\t\tBase64 Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#base64Binary\n" + - "\t \n" + - "\t\n" + - "\t\tDNS Name\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:dnsName\n" + - "\t \n" + - "\t\n" + - "\t\tIP Address\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:ipAddress\n" + - "\t \n" + - "\t\n" + - "\t\tRFC822 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:rfc822Name\n" + - "\t \n" + - "\t\n" + - "\t\tXPath\n" + - "\t\turn:oasis:names:tc:xacml:3.0:data-type:xpathExpression\n" + - "\t \n" + - "\t\n" + - "\t\tX500 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:x500Name\n" + - "\t \n" + - " \n" + - ""; - } - - protected String getDefaultBasicConfig() { - - return "\n" + - " \n" + - " \n" + - " Subject\n" + - " urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\n" + - " \n" + - " UserName\n" + - " Email\n" + - " Role\n" + - " Age\n" + - " \n" + - " \n" + - " \n" + - " Resource\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:resource\n" + - " \n" + - " resource-id\n" + - " \n" + - " \n" + - " \n" + - " Action\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:action\n" + - " \n" + - " action-id\n" + - " \n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:environment\n" + - " \n" + - " Domain\n" + - "\t\tDate\n" + - "\t\tTime\n" + - "\t\tDateTime\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " resource-id\n" + - " urn:oasis:names:tc:xacml:1.0:resource:resource-id\n" + - " \n" + - " \n" + - " action-id\n" + - " urn:oasis:names:tc:xacml:1.0:action:action-id\n" + - " \n" + - " \n" + - " UserName\n" + - " urn:oasis:names:tc:xacml:1.0:subject:subject-id\n" + - " \n" + - " \n" + - " Role\n" + - " http://wso2.org/claims/roles\n" + - " \n" + - " \n" + - " Email\n" + - " http://wso2.org/claims/emailaddress\n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Domain\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Time\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-time\n" + - " http://www.w3.org/2001/XMLSchema#time\n" + - " \n" + - " \n" + - " Date\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-date\n" + - "\t http://www.w3.org/2001/XMLSchema#date\n" + - " \n" + - " \n" + - " DateTime\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-dateTime\n" + - "\t http://www.w3.org/2001/XMLSchema#dateTime\n" + - " \n" + - " \n" + - " Age\n" + - " http://wso2.org/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#integer\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Deny Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides\n" + - " \n" + - " \n" + - " First Applicable\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Permit Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\n" + - " \n" + - " \n" + - " Deny Unless Permit\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit\n" + - " \n" + - " \n" + - " Permit Unless Deny\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-unless-deny\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "\t\n" + - "\t\tString\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#string\n" + - "\t\n" + - "\t\n" + - "\t\tBoolean\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#boolean\n" + - "\t\n" + - "\t\n" + - "\t\tInteger\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#integer\n" + - "\t\n" + - "\t\n" + - "\t\tDouble\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#double\n" + - "\t\n" + - "\t\n" + - "\t\tTime\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#time\n" + - "\t\n" + - "\t\n" + - "\t\tDate\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#date\n" + - "\t\n" + - "\t\n" + - "\t\tDate Time\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dateTime\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tYear Month Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#yearMonthDuration\n" + - "\t\n" + - "\t\n" + - "\t\tAny URI\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#anyURI\n" + - "\t\n" + - "\t\n" + - "\t\tHex Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#hexBinary\n" + - "\t\n" + - "\t\n" + - "\t\tBase64 Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#base64Binary\n" + - "\t \n" + - "\t\n" + - "\t\tDNS Name\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:dnsName\n" + - "\t \n" + - "\t\n" + - "\t\tIP Address\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:ipAddress\n" + - "\t \n" + - "\t\n" + - "\t\tRFC822 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:rfc822Name\n" + - "\t \n" + - "\t\n" + - "\t\tXPath\n" + - "\t\turn:oasis:names:tc:xacml:3.0:data-type:xpathExpression\n" + - "\t \n" + - "\t\n" + - "\t\tX500 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:x500Name\n" + - "\t \n" + - " \n" + - " \n" + - " \n" + - " equal\n" + - " equal\n" + - " true\n" + - " \n" + - " \n" + - " equals-with-regexp-match\n" + - " regexp-match\n" + - "\t true\n" + - " \n" + - " \n" + - " at-least-one-member-of\n" + - " at-least-one-member-of\n" + - " \n" + - " \n" + - " is-in\n" + - " is-in\n" + - " \n" + - " \n" + - " set-equals\n" + - " set-equals\n" + - " \n" + - " \n" + - " greater-than\n" + - " greater-than\n" + - " \n" + - " \n" + - " less-than\n" + - " less-than\n" + - " \n" + - " \n" + - " greater-than-and-less-than\n" + - " greater-than-and-less-than\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " is/are\n" + - " is\n" + - " \n" + - " \n" + - " is not/are not\n" + - " not\n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " \n" + - " \n" + - " true\n" + - " \n" + - " true\n" + - " Permit\n" + - "\t \t\n" + - " \t\tPermit\n" + - " \t\tPermit\n" + - "\t\t\n" + - "\t \t\n" + - " \t\tDeny\n" + - " \t\tDeny\n" + - "\t\t\t\n" + - " \n" + - " \n" + - " false\n" + - " Deny\n" + - " \n" + - " \n" + - "\n"; - } - - protected String getDefaultConfig() { - - return "\n" + - " \n" + - " \n" + - " Subject\n" + - " urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\n" + - " \n" + - " UserName\n" + - " Email\n" + - " Role\n" + - " Age\n" + - " \n" + - " \n" + - " \n" + - " Resource\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:resource\n" + - " \n" + - " resource-id\n" + - " \n" + - " \n" + - " \n" + - " Action\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:action\n" + - " \n" + - " action-id\n" + - " \n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:environment\n" + - " \n" + - " Domain\n" + - "\t\tDate\n" + - "\t\tTime\n" + - "\t\tDateTime\n" + - " \n" + - " \n" + - " \n" + - " AuthnContext\n" + - " http://wso2.org/identity/auth\n" + - " \n" + - " auth-ctx-id\n" + - " inbound-auth-protocol\n" + - " client-ip\n" + - " \n" + - " \n" + - " \n" + - " ServiceProvider\n" + - " http://wso2.org/identity/sp\n" + - " \n" + - " sp-name\n" + - " sp-tenant-domain\n" + - " \n" + - " \n" + - " \n" + - " IdentityUser\n" + - " http://wso2.org/identity/user\n" + - " \n" + - " username\n" + - " user-store-domain\n" + - " user-tenant-domain\n" + - " emailaddress\n" + - " age\n" + - " lastname\n" + - " givenname\n" + - " organization\n" + - " telephone\n" + - " IM\n" + - " country\n" + - " mobile\n" + - "\n" + - " \n" + - " \n" + - " IdentityProvider\n" + - " http://wso2.org/identity/idp\n" + - " \n" + - " idp-name\n" + - " connector-type\n" + - " \n" + - " \n" + - " \n" + - " IdentityAction\n" + - " http://wso2.org/identity/identity-action\n" + - " \n" + - " action-name\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " resource-id\n" + - " urn:oasis:names:tc:xacml:1.0:resource:resource-id\n" + - " \n" + - " \n" + - " action-id\n" + - " urn:oasis:names:tc:xacml:1.0:action:action-id\n" + - " \n" + - " \n" + - " UserName\n" + - " urn:oasis:names:tc:xacml:1.0:subject:subject-id\n" + - " \n" + - " \n" + - " Role\n" + - " http://wso2.org/claims/roles\n" + - " \n" + - " \n" + - " Email\n" + - " http://wso2.org/claims/emailaddress\n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Domain\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Time\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-time\n" + - " http://www.w3.org/2001/XMLSchema#time\n" + - " \n" + - " \n" + - " Date\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-date\n" + - "\t http://www.w3.org/2001/XMLSchema#date\n" + - " \n" + - " \n" + - " DateTime\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-dateTime\n" + - "\t http://www.w3.org/2001/XMLSchema#dateTime\n" + - " \n" + - " \n" + - " Age\n" + - " http://wso2.org/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#integer\n" + - " \n" + - " \n" + - " auth-ctx-id\n" + - " http://wso2.org/identity/auth/auth-ctx-id\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " inbound-auth-protocol\n" + - " http://wso2.org/identity/auth/inbound-auth-protocol\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " client-ip\n" + - " http://wso2.org/identity/auth/client-ip\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " sp-name\n" + - " http://wso2.org/identity/sp/sp-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " sp-tenant-domain\n" + - " http://wso2.org/identity/auth/sp-tenant-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " username\n" + - " http://wso2.org/identity/user/username\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " user-store-domain\n" + - " http://wso2.org/identity/user/user-store-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " user-tenant-domain\n" + - " http://wso2.org/identity/user/user-tenant-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " age\n" + - " http://wso2.org/identity/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " lastname\n" + - " http://wso2.org/identity/claims/lastname\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " givenname\n" + - " http://wso2.org/identity/claims/givenname\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " organization\n" + - " http://wso2.org/identity/claims/organization\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " telephone\n" + - " http://wso2.org/identity/claims/telephone\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " IM\n" + - " http://wso2.org/identity/claims/im\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " country\n" + - " http://wso2.org/identity/claims/country\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " mobile\n" + - " http://wso2.org/identity/claims/mobile\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " emailaddress\n" + - " http://wso2.org/identity/claims/emailaddress\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " idp-name\n" + - " http://wso2.org/identity/idp/idp-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " connector-type\n" + - " http://wso2.org/identity/idp/connector-type\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " action-name\n" + - " http://wso2.org/identity/identity-action/action-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Deny Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-overrides\n" + - " \n" + - " \n" + - " First Applicable\n" + - " urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Permit Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\n" + - " \n" + - " \n" + - " Deny Unless Permit\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit\n" + - " \n" + - " \n" + - " Permit Unless Deny\n" + - " urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-unless-deny\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "\t\n" + - "\t\tString\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#string\n" + - "\t\n" + - "\t\n" + - "\t\tBoolean\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#boolean\n" + - "\t\n" + - "\t\n" + - "\t\tInteger\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#integer\n" + - "\t\n" + - "\t\n" + - "\t\tDouble\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#double\n" + - "\t\n" + - "\t\n" + - "\t\tTime\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#time\n" + - "\t\n" + - "\t\n" + - "\t\tDate\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#date\n" + - "\t\n" + - "\t\n" + - "\t\tDate Time\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dateTime\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tYear Month Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#yearMonthDuration\n" + - "\t\n" + - "\t\n" + - "\t\tAny URI\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#anyURI\n" + - "\t\n" + - "\t\n" + - "\t\tHex Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#hexBinary\n" + - "\t\n" + - "\t\n" + - "\t\tBase64 Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#base64Binary\n" + - "\t \n" + - "\t\n" + - "\t\tDNS Name\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:dnsName\n" + - "\t \n" + - "\t\n" + - "\t\tIP Address\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:ipAddress\n" + - "\t \n" + - "\t\n" + - "\t\tRFC822 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:rfc822Name\n" + - "\t \n" + - "\t\n" + - "\t\tXPath\n" + - "\t\turn:oasis:names:tc:xacml:3.0:data-type:xpathExpression\n" + - "\t \n" + - "\t\n" + - "\t\tX500 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:x500Name\n" + - "\t \n" + - " \n" + - " \n" + - " \n" + - " equal\n" + - " equal\n" + - " true\n" + - " \n" + - " \n" + - " equals-with-regexp-match\n" + - " regexp-match\n" + - "\t true\n" + - " \n" + - " \n" + - " at-least-one-member-of\n" + - " at-least-one-member-of\n" + - " \n" + - " \n" + - " is-in\n" + - " is-in\n" + - " \n" + - " \n" + - " set-equals\n" + - " set-equals\n" + - " \n" + - " \n" + - " greater-than\n" + - " greater-than\n" + - " \n" + - " \n" + - " less-than\n" + - " less-than\n" + - " \n" + - " \n" + - " greater-than-and-less-than\n" + - " greater-than-and-less-than\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " is/are\n" + - " is\n" + - " \n" + - " \n" + - " is not/are not\n" + - " not\n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " \n" + - " \n" + - " true\n" + - " \n" + - " true\n" + - " Permit\n" + - "\t \t\n" + - " \t\tPermit\n" + - " \t\tPermit\n" + - "\t\t\n" + - "\t \t\n" + - " \t\tDeny\n" + - " \t\tDeny\n" + - "\t\t\t\n" + - " \n" + - " \n" + - " false\n" + - " Deny\n" + - " \n" + - " \n" + - "\n"; - } - - - protected String getDefaultSetConfig() { - - return "\n" + - " \n" + - " \n" + - " Subject\n" + - " urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\n" + - " \n" + - " UserName\n" + - " Email\n" + - " Role\n" + - " Age\n" + - " \n" + - " \n" + - " \n" + - " Resource\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:resource\n" + - " \n" + - " resource-id\n" + - " \n" + - " \n" + - " \n" + - " Action\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:action\n" + - " \n" + - " action-id\n" + - " \n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:3.0:attribute-category:environment\n" + - " \n" + - " Domain\n" + - "\t\tDate\n" + - "\t\tTime\n" + - "\t\tDateTime\n" + - " \n" + - " \n" + - " \n" + - " AuthnContext\n" + - " http://wso2.org/identity/auth\n" + - " \n" + - " auth-ctx-id\n" + - " inbound-auth-protocol\n" + - " client-ip\n" + - " \n" + - " \n" + - " \n" + - " ServiceProvider\n" + - " http://wso2.org/identity/sp\n" + - " \n" + - " sp-name\n" + - " sp-tenant-domain\n" + - " \n" + - " \n" + - " \n" + - " IdentityUser\n" + - " http://wso2.org/identity/user\n" + - " \n" + - " username\n" + - " user-store-domain\n" + - " user-tenant-domain\n" + - " emailaddress\n" + - " age\n" + - " lastname\n" + - " givenname\n" + - " organization\n" + - " telephone\n" + - " IM\n" + - " country\n" + - " mobile\n" + - " \n" + - " \n" + - " \n" + - " IdentityProvider\n" + - " http://wso2.org/identity/idp\n" + - " \n" + - " idp-name\n" + - " connector-type\n" + - " \n" + - " \n" + - " \n" + - " IdentityAction\n" + - " http://wso2.org/identity/identity-action\n" + - " \n" + - " action-name\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " resource-id\n" + - " urn:oasis:names:tc:xacml:1.0:resource:resource-id\n" + - " \n" + - " \n" + - " action-id\n" + - " urn:oasis:names:tc:xacml:1.0:action:action-id\n" + - " \n" + - " \n" + - " UserName\n" + - " urn:oasis:names:tc:xacml:1.0:subject:subject-id\n" + - " \n" + - " \n" + - " Role\n" + - " http://wso2.org/claims/roles\n" + - " \n" + - " \n" + - " Email\n" + - " http://wso2.org/claims/emailaddress\n" + - " \n" + - " \n" + - " Environment\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Domain\n" + - " urn:oasis:names:tc:xacml:1.0:environment:environment-id\n" + - " \n" + - " \n" + - " Time\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-time\n" + - " http://www.w3.org/2001/XMLSchema#time\n" + - " \n" + - " \n" + - " Date\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-date\n" + - "\t http://www.w3.org/2001/XMLSchema#date\n" + - " \n" + - " \n" + - " DateTime\n" + - " urn:oasis:names:tc:xacml:1.0:environment:current-dateTime\n" + - "\t http://www.w3.org/2001/XMLSchema#dateTime\n" + - " \n" + - " \n" + - " Age\n" + - " http://wso2.org/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#integer\n" + - " \n" + - " \n" + - " auth-ctx-id\n" + - " http://wso2.org/identity/auth/auth-ctx-id\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " inbound-auth-protocol\n" + - " http://wso2.org/identity/auth/inbound-auth-protocol\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " client-ip\n" + - " http://wso2.org/identity/auth/client-ip\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " sp-name\n" + - " http://wso2.org/identity/sp/sp-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " sp-tenant-domain\n" + - " http://wso2.org/identity/auth/sp-tenant-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " username\n" + - " http://wso2.org/identity/user/username\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " user-store-domain\n" + - " http://wso2.org/identity/user/user-store-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " user-tenant-domain\n" + - " http://wso2.org/identity/user/user-tenant-domain\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " age\n" + - " http://wso2.org/identity/claims/age\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " lastname\n" + - " http://wso2.org/identity/claims/lastname\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " givenname\n" + - " http://wso2.org/identity/claims/givenname\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " organization\n" + - " http://wso2.org/identity/claims/organization\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " telephone\n" + - " http://wso2.org/identity/claims/telephone\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " IM\n" + - " http://wso2.org/identity/claims/im\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " country\n" + - " http://wso2.org/identity/claims/country\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " mobile\n" + - " http://wso2.org/identity/claims/mobile\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " emailaddress\n" + - " http://wso2.org/identity/claims/emailaddress\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " idp-name\n" + - " http://wso2.org/identity/idp/idp-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " connector-type\n" + - " http://wso2.org/identity/idp/connector-type\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " action-name\n" + - " http://wso2.org/identity/identity-action/action-name\n" + - " http://www.w3.org/2001/XMLSchema#string\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides\n" + - " \n" + - " \n" + - " Deny Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides\n" + - " \n" + - " \n" + - " First Applicable\n" + - " urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:first-applicable\n" + - " \n" + - " \n" + - " Permit Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-overrides\n" + - " \n" + - " \n" + - " Deny Unless Permit\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-unless-permit\n" + - " \n" + - " \n" + - " Permit Unless Deny\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-unless-deny\n" + - " \n" + - " \n" + - " Only One Applicable\n" + - " urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:only-one-applicable\n" + - " \n" + - " \n" + - " Ordered Permit Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-permit-overrides\n" + - " \n" + - " \n" + - " Ordered Deny Overrides\n" + - " urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:ordered-deny-overrides\n" + - " \n" + - " \n" + - " \n" + - " \n" + - "\t\n" + - "\t\tString\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#string\n" + - "\t\n" + - "\t\n" + - "\t\tBoolean\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#boolean\n" + - "\t\n" + - "\t\n" + - "\t\tInteger\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#integer\n" + - "\t\n" + - "\t\n" + - "\t\tDouble\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#double\n" + - "\t\n" + - "\t\n" + - "\t\tTime\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#time\n" + - "\t\n" + - "\t\n" + - "\t\tDate\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#date\n" + - "\t\n" + - "\t\n" + - "\t\tDate Time\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dateTime\n" + - "\t\n" + - "\t\n" + - "\t\tDay Time Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#dayTimeDuration\n" + - "\t\n" + - "\t\n" + - "\t\tYear Month Duration\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#yearMonthDuration\n" + - "\t\n" + - "\t\n" + - "\t\tAny URI\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#anyURI\n" + - "\t\n" + - "\t\n" + - "\t\tHex Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#hexBinary\n" + - "\t\n" + - "\t\n" + - "\t\tBase64 Binary\n" + - "\t\thttp://www.w3.org/2001/XMLSchema#base64Binary\n" + - "\t \n" + - "\t\n" + - "\t\tDNS Name\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:dnsName\n" + - "\t \n" + - "\t\n" + - "\t\tIP Address\n" + - "\t\turn:oasis:names:tc:xacml:2.0:data-type:ipAddress\n" + - "\t \n" + - "\t\n" + - "\t\tRFC822 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:rfc822Name\n" + - "\t \n" + - "\t\n" + - "\t\tXPath\n" + - "\t\turn:oasis:names:tc:xacml:3.0:data-type:xpathExpression\n" + - "\t \n" + - "\t\n" + - "\t\tX500 Name\n" + - "\t\turn:oasis:names:tc:xacml:1.0:data-type:x500Name\n" + - "\t \n" + - " \n" + - " \n" + - " \n" + - " equal\n" + - " equal\n" + - " true\n" + - " \n" + - " \n" + - " equals-with-regexp-match\n" + - " regexp-match\n" + - "\t true\n" + - " \n" + - " \n" + - " at-least-one-member-of\n" + - " at-least-one-member-of\n" + - " \n" + - " \n" + - " set-equals\n" + - " set-equals\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " is/are\n" + - " is\n" + - " \n" + - " \n" + - " is not/are not\n" + - " not\n" + - " \n" + - " \n" + - " \n" + - " true\n" + - " \n" + - "\n"; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorConstants.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorConstants.java deleted file mode 100644 index ba8613d001e1..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorConstants.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -/** - * Policy editor related constants - */ -public class PolicyEditorConstants { - - - public static final String ATTRIBUTE_SEPARATOR = ","; - - public static final String TARGET_ELEMENT = "Target"; - - public static final String ANY_OF_ELEMENT = "AnyOf"; - - public static final String ALL_OF_ELEMENT = "AllOf"; - - public static final String COMBINE_FUNCTION_AND = "AND"; - - public static final String COMBINE_FUNCTION_OR = "OR"; - - public static final String COMBINE_FUNCTION_END = "END"; - - public static final String MATCH_ELEMENT = "Match"; - - public static final String MATCH_ID = "MatchId"; - - public static final String ATTRIBUTE_ID = "AttributeId"; - - public static final String CATEGORY = "Category"; - - public static final String DATA_TYPE = "DataType"; - - public static final String ISSUER = "Issuer"; - - public static final String SOA_CATEGORY_USER = "Subject"; - - public static final String SOA_CATEGORY_SUBJECT = "Subject"; - - public static final String SOA_CATEGORY_RESOURCE = "Resource"; - - public static final String SOA_CATEGORY_ACTION = "Action"; - - public static final String SOA_CATEGORY_ENVIRONMENT = "Environment"; - - public static final String MUST_BE_PRESENT = "MustBePresent"; - - public static final String ATTRIBUTE_DESIGNATOR = "AttributeDesignator"; - public static final String RULE_EFFECT_PERMIT = "Permit"; - public static final String RULE_EFFECT_DENY = "Deny"; - public static final String RULE_ALGORITHM_IDENTIFIER_1 = "urn:oasis:names:tc:xacml:1.0:" + - "rule-combining-algorithm:"; - public static final String RULE_ALGORITHM_IDENTIFIER_3 = "urn:oasis:names:tc:xacml:3.0:" + - "rule-combining-algorithm:"; - public static final String POLICY_ALGORITHM_IDENTIFIER_1 = "urn:oasis:names:tc:xacml:1.0:" + - "policy-combining-algorithm:"; - public static final String POLICY_ALGORITHM_IDENTIFIER_3 = "urn:oasis:names:tc:xacml:3.0:" + - "policy-combining-algorithm:"; - public static final String POLICY_EDITOR_SEPARATOR = "|"; - public static final int POLICY_EDITOR_ROW_DATA = 7; - public static final String DYNAMIC_SELECTOR_CATEGORY = "Category"; - public static final String DYNAMIC_SELECTOR_FUNCTION = "Function"; - public static final String SUBJECT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - public static final String SUBJECT_ID_ROLE = "http://wso2.org/claims/roles"; - public static final String RESOURCE_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - public static final String ACTION_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - public static final String ENVIRONMENT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:environment:environment-id"; - public static final String RESOURCE_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:resource"; - public static final String SUBJECT_CATEGORY_URI = "urn:oasis:names:tc:xacml:1.0:" + - "subject-category:access-subject"; - public static final String ACTION_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:action"; - public static final String ENVIRONMENT_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:environment"; - public static final String ENVIRONMENT_CURRENT_DATE = "urn:oasis:names:tc:xacml:1.0:environment:current-date"; - public static final String ENVIRONMENT_CURRENT_TIME = "urn:oasis:names:tc:xacml:1.0:environment:current-time"; - public static final String ENVIRONMENT_CURRENT_DATETIME = "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime"; - public static final String SOA_POLICY_EDITOR = "SOA"; - - public static final class PreFunctions { - - public static final String PRE_FUNCTION_IS = "is"; - - public static final String PRE_FUNCTION_IS_NOT = "is-not"; - - public static final String PRE_FUNCTION_ARE = "are"; - - public static final String PRE_FUNCTION_ARE_NOT = "are-not"; - - public static final String CAN_DO = "can"; - - public static final String CAN_NOT_DO = "can not"; - } - - public static final class TargetPreFunctions { - - public static final String PRE_FUNCTION_IS = "is"; - - } - - public static final class TargetFunctions { - - public static final String FUNCTION_EQUAL = "equal"; - - } - - public static final class DataType { - - public static final String DAY_TIME_DURATION = "http://www.w3.org/2001/XMLSchema#dayTimeDuration"; - - public static final String YEAR_MONTH_DURATION = "http://www.w3.org/2001/XMLSchema#yearMonthDuration"; - - public static final String STRING = "http://www.w3.org/2001/XMLSchema#string"; - - public static final String TIME = "http://www.w3.org/2001/XMLSchema#time"; - - public static final String IP_ADDRESS = "urn:oasis:names:tc:xacml:2.0:data-type:ipAddress"; - - public static final String DATE_TIME = "http://www.w3.org/2001/XMLSchema#dateTime"; - - public static final String DATE = "http://www.w3.org/2001/XMLSchema#date"; - - public static final String DOUBLE = "http://www.w3.org/2001/XMLSchema#double"; - - public static final String INT = "http://www.w3.org/2001/XMLSchema#integer"; - - } - - public static final class CombiningAlog { - - public static final String DENY_OVERRIDE_ID = "deny-overrides"; - - public static final String PERMIT_OVERRIDE_ID = "permit-overrides"; - - public static final String FIRST_APPLICABLE_ID = "first-applicable"; - - public static final String ORDER_PERMIT_OVERRIDE_ID = "ordered-permit-overrides"; - - public static final String ORDER_DENY_OVERRIDE_ID = "ordered-deny-overrides"; - - public static final String DENY_UNLESS_PERMIT_ID = "deny-unless-permit"; - - public static final String PERMIT_UNLESS_DENY_ID = "permit-unless-deny"; - - public static final String ONLY_ONE_APPLICABLE_ID = "only-one-applicable"; - - } - - public static class FunctionIdentifier { - - public static final String ANY = "*"; - - public static final String EQUAL_RANGE = "["; - - public static final String EQUAL_RANGE_CLOSE = "]"; - - public static final String RANGE = "("; - - public static final String RANGE_CLOSE = ")"; - - public static final String GREATER = ">"; - - public static final String GREATER_EQUAL = ">="; - - public static final String LESS = "<"; - - public static final String LESS_EQUAL = "<="; - - public static final String REGEX = "{"; - - public static final String AND = "&"; - - public static final String OR = "|"; - - } - - public static final class AttributeId { - - public static final String ENV_DOMAIN = "Domain"; - - public static final String ENV_DATE = "Date"; - - public static final String ENV_DATE_TIME = "DateTime"; - - public static final String ENV_IP = "IP"; - - public static final String ENV_TIME = "Time"; - - public static final String USER_AGE = "Age"; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorEngine.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorEngine.java deleted file mode 100644 index ab786747fd3d..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorEngine.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * - */ -public class PolicyEditorEngine { - - private static final Object lock = new Object(); - private static ConcurrentHashMap policyEditorEngine = - new ConcurrentHashMap(); - private static Log log = LogFactory.getLog(PolicyEditorEngine.class); - private int tenantId; - private Map dataHolder = new HashMap(); - private DataPersistenceManager manager; - - public PolicyEditorEngine(int tenantId) { - this.tenantId = tenantId; - this.manager = new RegistryPersistenceManager(); - try { - this.dataHolder = this.manager.buildDataHolder(); - } catch (PolicyEditorException e) { - log.error("Error while building policy editor config", e); - } - } - - /** - * Get a PolicyEditorEngine instance for that tenant. This method will return an - * PolicyEditorEngine instance if exists, or creates a new one - * - * @return EntitlementEngine instance for that tenant - */ - public static PolicyEditorEngine getInstance() { - - int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); - if (!policyEditorEngine.containsKey(Integer.toString(tenantId))) { - synchronized (lock) { - if (!policyEditorEngine.containsKey(Integer.toString(tenantId))) { - policyEditorEngine.put(Integer.toString(tenantId), new PolicyEditorEngine(tenantId)); - } - } - } - return policyEditorEngine.get(Integer.toString(tenantId)); - } - - public PolicyEditorDataHolder getPolicyEditorData(String policyEditorType) { - - if (dataHolder != null) { - return dataHolder.get(policyEditorType); - } - return null; - } - - public void persistConfig(String policyEditorType, String xmlConfig) throws PolicyEditorException { - - manager.persistConfig(policyEditorType, xmlConfig); - dataHolder = manager.buildDataHolder(); - } - - public String getConfig(String policyEditorType) { - - Map configs = manager.getConfig(); - if (configs != null) { - return configs.get(policyEditorType); - } - return null; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorException.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorException.java deleted file mode 100644 index a68161ee5ae0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/PolicyEditorException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.carbon.identity.base.IdentityException; - -/** - * - */ -public class PolicyEditorException extends IdentityException { - - private static final long serialVersionUID = -4965068674464842386L; - - public PolicyEditorException(String message) { - super(message); - } - - public PolicyEditorException(String message, Throwable e) { - super(message, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/RegistryPersistenceManager.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/RegistryPersistenceManager.java deleted file mode 100644 index e334ac1219ec..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/RegistryPersistenceManager.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.context.RegistryType; -import org.wso2.carbon.registry.api.Registry; -import org.wso2.carbon.registry.api.RegistryException; -import org.wso2.carbon.registry.api.Resource; - -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Map; - -/** - * - */ -public class RegistryPersistenceManager extends InMemoryPersistenceManager { - - @Override - public void persistConfig(String policyEditorType, String xmlConfig) throws PolicyEditorException { - - super.persistConfig(policyEditorType, xmlConfig); - - Registry registry = CarbonContext.getThreadLocalCarbonContext().getRegistry(RegistryType.SYSTEM_GOVERNANCE); - try { - Resource resource = registry.newResource(); - resource.setContent(xmlConfig); - String path = null; - if (EntitlementConstants.PolicyEditor.BASIC.equals(policyEditorType)) { - path = EntitlementConstants.ENTITLEMENT_POLICY_BASIC_EDITOR_CONFIG_FILE_REGISTRY_PATH; - } else if (EntitlementConstants.PolicyEditor.STANDARD.equals(policyEditorType)) { - path = EntitlementConstants.ENTITLEMENT_POLICY_STANDARD_EDITOR_CONFIG_FILE_REGISTRY_PATH; - } else if (EntitlementConstants.PolicyEditor.RBAC.equals(policyEditorType)) { - path = EntitlementConstants.ENTITLEMENT_POLICY_RBAC_EDITOR_CONFIG_FILE_REGISTRY_PATH; - } else if (EntitlementConstants.PolicyEditor.SET.equals(policyEditorType)) { - path = EntitlementConstants.ENTITLEMENT_POLICY_SET_EDITOR_CONFIG_FILE_REGISTRY_PATH; - } else { - //default - path = EntitlementConstants.ENTITLEMENT_POLICY_BASIC_EDITOR_CONFIG_FILE_REGISTRY_PATH; - } - registry.put(path, resource); - } catch (RegistryException e) { - throw new PolicyEditorException("Error while persisting policy editor config"); - } - } - - @Override - public Map getConfig() { - Map config = super.getConfig(); - if (config == null || config.size() == 0) { - config = new HashMap(); - Registry registry = CarbonContext.getThreadLocalCarbonContext().getRegistry(RegistryType.SYSTEM_GOVERNANCE); - String configString = null; - try { - Resource resource = registry. - get(EntitlementConstants.ENTITLEMENT_POLICY_BASIC_EDITOR_CONFIG_FILE_REGISTRY_PATH); - if (resource != null && resource.getContent() != null) { - configString = new String((byte[]) resource.getContent(), Charset.forName("UTF-8")); - - } - } catch (Exception e) { - //ignore - } - - if (configString == null) { - configString = getDefaultBasicConfig(); - } - config.put(EntitlementConstants.PolicyEditor.BASIC, configString); - - configString = null; - try { - Resource resource = registry. - get(EntitlementConstants.ENTITLEMENT_POLICY_STANDARD_EDITOR_CONFIG_FILE_REGISTRY_PATH); - if (resource != null && resource.getContent() != null) { - configString = new String((byte[]) resource.getContent(), Charset.forName("UTF-8")); - config.put(EntitlementConstants.PolicyEditor.STANDARD, configString); - } - } catch (Exception e) { - //ignore - } - if (configString == null) { - configString = getDefaultConfig(); - } - config.put(EntitlementConstants.PolicyEditor.STANDARD, configString); - - configString = null; - try { - Resource resource = registry. - get(EntitlementConstants.ENTITLEMENT_POLICY_RBAC_EDITOR_CONFIG_FILE_REGISTRY_PATH); - if (resource != null && resource.getContent() != null) { - configString = new String((byte[]) resource.getContent(), Charset.forName("UTF-8")); - config.put(EntitlementConstants.PolicyEditor.RBAC, configString); - } - } catch (Exception e) { - //ignore - } - if (configString == null) { - configString = getSimpleConfig(); - } - config.put(EntitlementConstants.PolicyEditor.RBAC, configString); - - configString = null; - try { - Resource resource = registry. - get(EntitlementConstants.ENTITLEMENT_POLICY_SET_EDITOR_CONFIG_FILE_REGISTRY_PATH); - if (resource != null && resource.getContent() != null) { - configString = new String((byte[]) resource.getContent(), Charset.forName("UTF-8")); - config.put(EntitlementConstants.PolicyEditor.SET, configString); - } - } catch (Exception e) { - //ignore - } - if (configString == null) { - configString = getDefaultSetConfig(); - } - config.put(EntitlementConstants.PolicyEditor.SET, configString); - } - return config; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/Utils.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/Utils.java deleted file mode 100644 index 3b58246715ca..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/Utils.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common; - -import org.wso2.balana.utils.Constants.PolicyConstants; - -import java.util.Arrays; - -/** - * - */ -public class Utils { - - public static boolean isValidRuleAlgorithm(String algorithmUri, boolean isPolicy) { - - if (isPolicy) { - return algorithmUri != null && - Arrays.asList(PolicyConstants.PolicyCombiningAlog.algorithms).contains(algorithmUri); - } else { - return algorithmUri != null && - Arrays.asList(PolicyConstants.RuleCombiningAlog.algorithms).contains(algorithmUri); - } - } - - public static boolean isValidCategory(String category) { - - return category != null && - Arrays.asList(EntitlementConstants.PolicyEditor.BASIC_CATEGORIES).contains(category); - } - - public static boolean isValidFunction(String functionUri) { - - return functionUri != null && - Arrays.asList(PolicyConstants.Functions.functions).contains(functionUri); - } - - public static boolean isValidDataType(String dataTypeUri) { - - return dataTypeUri != null && - Arrays.asList(PolicyConstants.DataType.dataTypes).contains(dataTypeUri); - } - - public static boolean isValidEffect(String effectUri) { - - return effectUri != null && - Arrays.asList(PolicyConstants.RuleEffect.effect).contains(effectUri); - } - - - public static boolean isValidPreFunction(String preFunctionUri) { - - return preFunctionUri != null && - Arrays.asList(PolicyConstants.PreFunctions.preFunctions).contains(preFunctionUri); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/BasicRequestDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/BasicRequestDTO.java deleted file mode 100644 index e1317ccba306..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/BasicRequestDTO.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.List; - -/** - * - */ -public class BasicRequestDTO { - - - private List rowDTOs; - - private String resources; - - private String subjects; - - private String actions; - - private String enviornement; - - private String userAttributeValue; - - private String userAttributeId; - - public String getResources() { - return resources; - } - - public void setResources(String resources) { - this.resources = resources; - } - - public String getSubjects() { - return subjects; - } - - public void setSubjects(String subjects) { - this.subjects = subjects; - } - - public String getActions() { - return actions; - } - - public void setActions(String actions) { - this.actions = actions; - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getEnviornement() { - return enviornement; - } - - public void setEnviornement(String enviornement) { - this.enviornement = enviornement; - } - - public List getRowDTOs() { - return rowDTOs; - } - - public void setRowDTOs(List rowDTOs) { - this.rowDTOs = rowDTOs; - } - - public void addRowDTOs(RowDTO rowDTO) { - this.rowDTOs.add(rowDTO); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ElementCountDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ElementCountDTO.java deleted file mode 100644 index d7e8a77f9a4a..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ElementCountDTO.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.wso2.carbon.identity.entitlement.common.dto; - - -public class ElementCountDTO { - - private int subElementCount; - - private int attributeDesignatorsElementCount; - - private int attributeValueElementCount; - - private int attributeSelectorElementCount; - - public int getSubElementCount() { - return subElementCount; - } - - public void setSubElementCount(int subElementCount) { - this.subElementCount = subElementCount; - } - - public int getAttributeSelectorElementCount() { - return attributeSelectorElementCount; - } - - public void setAttributeSelectorElementCount(int attributeSelectorElementCount) { - this.attributeSelectorElementCount = attributeSelectorElementCount; - } - - public int getAttributeValueElementCount() { - return attributeValueElementCount; - } - - public void setAttributeValueElementCount(int attributeValueElementCount) { - this.attributeValueElementCount = attributeValueElementCount; - } - - public int getAttributeDesignatorsElementCount() { - return attributeDesignatorsElementCount; - } - - public void setAttributeDesignatorsElementCount(int attributeDesignatorsElementCount) { - this.attributeDesignatorsElementCount = attributeDesignatorsElementCount; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ExtendAttributeDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ExtendAttributeDTO.java deleted file mode 100644 index 3a3ba5893236..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ExtendAttributeDTO.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.wso2.carbon.identity.entitlement.common.dto; - -/** - * extended attribute value element - */ -public class ExtendAttributeDTO { - - private String id; - - private String selector; - - private String function; - - private String category; - - private String attributeValue; - - private String attributeId; - - private String dataType; - - private String issuer; - - private boolean notCompleted; - - public ExtendAttributeDTO() { - } - - public ExtendAttributeDTO(ExtendAttributeDTO dto) { - this.id = dto.getId(); - this.selector = dto.getSelector(); - this.function = dto.getFunction(); - this.category = dto.getCategory(); - this.attributeValue = dto.getAttributeValue(); - this.attributeId = dto.getAttributeId(); - this.dataType = dto.getDataType(); - this.issuer = dto.getIssuer(); - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getSelector() { - return selector; - } - - public void setSelector(String selector) { - this.selector = selector; - } - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getAttributeId() { - return attributeId; - } - - public void setAttributeId(String attributeId) { - this.attributeId = attributeId; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getIssuer() { - return issuer; - } - - public void setIssuer(String issuer) { - this.issuer = issuer; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ObligationDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ObligationDTO.java deleted file mode 100644 index 340c48827d6e..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/ObligationDTO.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.wso2.carbon.identity.entitlement.common.dto; - -/** - * encapsulates obligation and advice expression data that requires for policy editor - */ -public class ObligationDTO { - - private String type; - - private String obligationId; - - private String effect; - - private String attributeValue; - - private String attributeValueDataType; - - private String resultAttributeId; - - private boolean notCompleted; - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getResultAttributeId() { - return resultAttributeId; - } - - public void setResultAttributeId(String resultAttributeId) { - this.resultAttributeId = resultAttributeId; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getAttributeValueDataType() { - return attributeValueDataType; - } - - public void setAttributeValueDataType(String attributeValueDataType) { - this.attributeValueDataType = attributeValueDataType; - } - - public String getEffect() { - return effect; - } - - public void setEffect(String effect) { - this.effect = effect; - } - - public String getObligationId() { - return obligationId; - } - - public void setObligationId(String obligationId) { - this.obligationId = obligationId; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyDTO.java deleted file mode 100644 index 9ffd212b4fb3..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyDTO.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * - */ -public class PolicyDTO { - - private String policyId; - - private String ruleAlgorithm; - - private String description; - - private String ruleOrder; - - private String version; - - private TargetDTO targetDTO; - - private List ruleDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - public String getRuleAlgorithm() { - return ruleAlgorithm; - } - - public void setRuleAlgorithm(String ruleAlgorithm) { - this.ruleAlgorithm = ruleAlgorithm; - } - - public String getPolicyId() { - return policyId; - } - - public void setPolicyId(String policyId) { - this.policyId = policyId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getRuleOrder() { - return ruleOrder; - } - - public void setRuleOrder(String ruleOrder) { - this.ruleOrder = ruleOrder; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public List getRuleDTOs() { - return ruleDTOs; - } - - public void setRuleDTOs(List ruleDTOs) { - this.ruleDTOs = ruleDTOs; - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyEditorDataHolder.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyEditorDataHolder.java deleted file mode 100644 index a2b429ed0235..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyEditorDataHolder.java +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * - */ -public class PolicyEditorDataHolder { - - private Map categoryMap = new HashMap(); - - private Map attributeIdMap = new HashMap(); - - private Map dataTypeMap = new HashMap(); - - private Map functionMap = new HashMap(); - - private Map preFunctionMap = new HashMap(); - - private Map ruleEffectMap = new HashMap(); - - private Map> categoryAttributeIdMap = new HashMap>(); - - private Map categoryDefaultAttributeIdMap = new HashMap(); - - private Map> categoryDataTypeMap = new HashMap>(); - - private Map> categoryFunctionMap = new HashMap>(); - - private Map attributeIdDataTypeMap = new HashMap(); - - private Set ruleFunctions = new HashSet(); - - private Set targetFunctions = new HashSet(); - - private Set preFunctions = new HashSet(); - - private Map ruleCombiningAlgorithms = new HashMap(); - - private Map policyCombiningAlgorithms = new HashMap(); - - private String defaultDataType; - - private boolean showRuleAlgorithms; - - private boolean showPolicyAlgorithms; - - private boolean showPreFunctions; - - private boolean showPolicyDescription; - - private boolean showRuleId; - - private boolean showRuleDescription; - - private boolean showRuleEffect; - - private boolean addLastRule; - - private String lastRuleEffect; - - private String defaultEffect; - - private String defaultRuleAlgorithm; - - private String defaultPolicyAlgorithm; - - public String getCategoryUri(String categoryName) { - if (categoryName == null) { - return null; - } - return categoryMap.get(categoryName); - } - - public String getAttributeIdUri(String attributeId) { - if (attributeId == null) { - return null; - } - return attributeIdMap.get(attributeId); - } - - public String getDataTypeUri(String dataType) { - if (dataType == null) { - return null; - } - return dataTypeMap.get(dataType); - } - - public String getFunctionUri(String function) { - if (function == null) { - return null; - } - return functionMap.get(function); - } - - public String getPreFunctionUri(String function) { - if (function == null) { - return null; - } - return preFunctionMap.get(function); - } - - public String getRuleAlgorithmUri(String algorithm) { - if (algorithm == null) { - return null; - } - return ruleCombiningAlgorithms.get(algorithm); - } - - public String getPolicyAlgorithmUri(String algorithm) { - if (algorithm == null) { - return null; - } - return policyCombiningAlgorithms.get(algorithm); - } - - public String getDataTypeUriForAttribute(String attributeId) { - if (attributeId == null) { - return null; - } - return attributeIdDataTypeMap.get(attributeId); - } - - public String getRuleEffectUri(String effect) { - if (effect == null) { - return null; - } - return ruleEffectMap.get(effect); - } - - public String getCategoryDefaultAttributeId(String category) { - if (category == null) { - return null; - } - return categoryDefaultAttributeIdMap.get(category); - } - - public Map getCategoryMap() { - return categoryMap; - } - - public void setCategoryMap(Map categoryMap) { - this.categoryMap = categoryMap; - } - - public Map getAttributeIdMap() { - return attributeIdMap; - } - - public void setAttributeIdMap(Map attributeIdMap) { - this.attributeIdMap = attributeIdMap; - } - - public Map getDataTypeMap() { - return dataTypeMap; - } - - public void setDataTypeMap(Map dataTypeMap) { - this.dataTypeMap = dataTypeMap; - } - - public Map getFunctionMap() { - return functionMap; - } - - public void setFunctionMap(Map functionMap) { - this.functionMap = functionMap; - } - - public Map> getCategoryAttributeIdMap() { - return categoryAttributeIdMap; - } - - public void setCategoryAttributeIdMap(Map> categoryAttributeIdMap) { - this.categoryAttributeIdMap = categoryAttributeIdMap; - } - - public Map> getCategoryDataTypeMap() { - return categoryDataTypeMap; - } - - public void setCategoryDataTypeMap(Map> categoryDataTypeMap) { - this.categoryDataTypeMap = categoryDataTypeMap; - } - - public Map getAttributeIdDataTypeMap() { - return attributeIdDataTypeMap; - } - - public void setAttributeIdDataTypeMap(Map attributeIdDataTypeMap) { - this.attributeIdDataTypeMap = attributeIdDataTypeMap; - } - - public Set getRuleFunctions() { - return ruleFunctions; - } - - public void setRuleFunctions(Set ruleFunctions) { - this.ruleFunctions = ruleFunctions; - } - - public Set getTargetFunctions() { - return targetFunctions; - } - - public void setTargetFunctions(Set targetFunctions) { - this.targetFunctions = targetFunctions; - } - - public String getDefaultDataType() { - return defaultDataType; - } - - public void setDefaultDataType(String defaultDataType) { - this.defaultDataType = defaultDataType; - } - - public Map getRuleCombiningAlgorithms() { - return ruleCombiningAlgorithms; - } - - public void setRuleCombiningAlgorithms(Map ruleCombiningAlgorithms) { - this.ruleCombiningAlgorithms = ruleCombiningAlgorithms; - } - - public boolean isShowRuleAlgorithms() { - return showRuleAlgorithms; - } - - public void setShowRuleAlgorithms(boolean showRuleAlgorithms) { - this.showRuleAlgorithms = showRuleAlgorithms; - } - - public String getDefaultRuleAlgorithm() { - return defaultRuleAlgorithm; - } - - public void setDefaultRuleAlgorithm(String defaultRuleAlgorithm) { - this.defaultRuleAlgorithm = defaultRuleAlgorithm; - } - - public Map> getCategoryFunctionMap() { - return categoryFunctionMap; - } - - public void setCategoryFunctionMap(Map> categoryFunctionMap) { - this.categoryFunctionMap = categoryFunctionMap; - } - - public Set getPreFunctions() { - return preFunctions; - } - - public void setPreFunctions(Set preFunctions) { - this.preFunctions = preFunctions; - } - - public boolean isShowPreFunctions() { - return showPreFunctions; - } - - public void setShowPreFunctions(boolean showPreFunctions) { - this.showPreFunctions = showPreFunctions; - } - - public boolean isShowPolicyDescription() { - return showPolicyDescription; - } - - public void setShowPolicyDescription(boolean showPolicyDescription) { - this.showPolicyDescription = showPolicyDescription; - } - - public boolean isShowRuleId() { - return showRuleId; - } - - public void setShowRuleId(boolean showRuleId) { - this.showRuleId = showRuleId; - } - - public boolean isShowRuleDescription() { - return showRuleDescription; - } - - public void setShowRuleDescription(boolean showRuleDescription) { - this.showRuleDescription = showRuleDescription; - } - - public boolean isShowRuleEffect() { - return showRuleEffect; - } - - public void setShowRuleEffect(boolean showRuleEffect) { - this.showRuleEffect = showRuleEffect; - } - - public boolean isAddLastRule() { - return addLastRule; - } - - public void setAddLastRule(boolean addLastRule) { - this.addLastRule = addLastRule; - } - - public String getLastRuleEffect() { - return lastRuleEffect; - } - - public void setLastRuleEffect(String lastRuleEffect) { - this.lastRuleEffect = lastRuleEffect; - } - - public String getDefaultEffect() { - return defaultEffect; - } - - public void setDefaultEffect(String defaultEffect) { - this.defaultEffect = defaultEffect; - } - - public Map getPreFunctionMap() { - return preFunctionMap; - } - - public void setPreFunctionMap(Map preFunctionMap) { - this.preFunctionMap = preFunctionMap; - } - - public Map getRuleEffectMap() { - return ruleEffectMap; - } - - public void setRuleEffectMap(Map ruleEffectMap) { - this.ruleEffectMap = ruleEffectMap; - } - - public Map getCategoryDefaultAttributeIdMap() { - return categoryDefaultAttributeIdMap; - } - - public Map getPolicyCombiningAlgorithms() { - return policyCombiningAlgorithms; - } - - public void setPolicyCombiningAlgorithms(Map policyCombiningAlgorithms) { - this.policyCombiningAlgorithms = policyCombiningAlgorithms; - } - - public String getDefaultPolicyAlgorithm() { - return defaultPolicyAlgorithm; - } - - public void setDefaultPolicyAlgorithm(String defaultPolicyAlgorithm) { - this.defaultPolicyAlgorithm = defaultPolicyAlgorithm; - } - - public boolean isShowPolicyAlgorithms() { - return showPolicyAlgorithms; - } - - public void setShowPolicyAlgorithms(boolean showPolicyAlgorithms) { - this.showPolicyAlgorithms = showPolicyAlgorithms; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyRefIdDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyRefIdDTO.java deleted file mode 100644 index 151ad7721afd..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicyRefIdDTO.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -/** - * - */ -public class PolicyRefIdDTO { - - private String id; - - private boolean referenceOnly; - - private boolean policySet; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isPolicySet() { - return policySet; - } - - public void setPolicySet(boolean policySet) { - this.policySet = policySet; - } - - public boolean isReferenceOnly() { - return referenceOnly; - } - - public void setReferenceOnly(boolean referenceOnly) { - this.referenceOnly = referenceOnly; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicySetDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicySetDTO.java deleted file mode 100644 index a9a01c714599..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/PolicySetDTO.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * Encapsulate the policy set attribute - */ -public class PolicySetDTO { - - private String policySetId; - - private String policyCombiningAlgId; - - private String version; - - private TargetDTO targetDTO; - - private String description; - - private List policySets = new ArrayList(); - - private List policies = new ArrayList(); - - private List policySetIdReferences = new ArrayList(); - - private List PolicyIdReferences = new ArrayList(); - - private List obligations = new ArrayList(); - - private List policyRefIdDTOs = new ArrayList(); - - private String policyOrder; - - public String getPolicySetId() { - return policySetId; - } - - public void setPolicySetId(String policySetId) { - this.policySetId = policySetId; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getPolicyCombiningAlgId() { - return policyCombiningAlgId; - } - - public void setPolicyCombiningAlgId(String policyCombiningAlgId) { - this.policyCombiningAlgId = policyCombiningAlgId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getPolicySets() { - return policySets; - } - - public void setPolicySets(List policySets) { - this.policySets = policySets; - } - - public List getPolicies() { - return policies; - } - - public void setPolicy(String policy) { - this.policies.add(policy); - } - - public List getPolicySetIdReferences() { - return policySetIdReferences; - } - - public void setPolicySetIdReferences(List policySetIdReferences) { - this.policySetIdReferences = policySetIdReferences; - } - - public List getPolicyIdReferences() { - return PolicyIdReferences; - } - - public void setPolicyIdReferences(List policyIdReferences) { - PolicyIdReferences = policyIdReferences; - } - - public List getObligations() { - return obligations; - } - - public void setObligations(List obligations) { - this.obligations = obligations; - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public String getPolicyOrder() { - return policyOrder; - } - - public void setPolicyOrder(String policyOrder) { - this.policyOrder = policyOrder; - } - - public List getPolicyRefIdDTOs() { - return policyRefIdDTOs; - } - - public void setPolicyRefIdDTOs(List policyRefIdDTOs) { - this.policyRefIdDTOs = policyRefIdDTOs; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RequestDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RequestDTO.java deleted file mode 100644 index e986136064e0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RequestDTO.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.List; - -/** - * - */ -public class RequestDTO { - - private boolean multipleRequest; - - private boolean returnPolicyIdList; - - private boolean combinedDecision; - - private List rowDTOs; - - public boolean isCombinedDecision() { - return combinedDecision; - } - - public void setCombinedDecision(boolean combinedDecision) { - this.combinedDecision = combinedDecision; - } - - public List getRowDTOs() { - return rowDTOs; - } - - public void setRowDTOs(List rowDTOs) { - this.rowDTOs = rowDTOs; - } - - public boolean isReturnPolicyIdList() { - return returnPolicyIdList; - } - - public void setReturnPolicyIdList(boolean returnPolicyIdList) { - this.returnPolicyIdList = returnPolicyIdList; - } - - public boolean isMultipleRequest() { - return multipleRequest; - } - - public void setMultipleRequest(boolean multipleRequest) { - this.multipleRequest = multipleRequest; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RowDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RowDTO.java deleted file mode 100644 index d967a12e6a00..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RowDTO.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -/** - * - */ -public class RowDTO { - - private String category; - - private String preFunction; - - private String function; - - private String attributeValue; - - private String attributeId; - - private String attributeDataType; - - private String combineFunction; - - private boolean notCompleted; - - public RowDTO() { - } - - public RowDTO(RowDTO rowDTO) { - this.category = rowDTO.getCategory(); - this.preFunction = rowDTO.getPreFunction(); - this.function = rowDTO.getFunction(); - this.attributeValue = rowDTO.getAttributeValue(); - this.attributeId = rowDTO.getAttributeId(); - this.combineFunction = rowDTO.getCombineFunction(); - this.attributeDataType = rowDTO.getAttributeDataType(); - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getCombineFunction() { - return combineFunction; - } - - public void setCombineFunction(String combineFunction) { - this.combineFunction = combineFunction; - } - - public String getAttributeDataType() { - return attributeDataType; - } - - public void setAttributeDataType(String attributeDataType) { - this.attributeDataType = attributeDataType; - } - - public String getAttributeId() { - return attributeId; - } - - public void setAttributeId(String attributeId) { - this.attributeId = attributeId; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getPreFunction() { - return preFunction; - } - - public void setPreFunction(String preFunction) { - this.preFunction = preFunction; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RuleDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RuleDTO.java deleted file mode 100644 index ca142b7ff4ed..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/RuleDTO.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * - */ -public class RuleDTO { - - private String ruleId; - - private String ruleEffect; - - private String ruleDescription; - - private TargetDTO targetDTO = new TargetDTO(); - - private List rowDTOList = new ArrayList(); - - private List attributeDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - private boolean completedRule; - - public String getRuleId() { - return ruleId; - } - - public void setRuleId(String ruleId) { - this.ruleId = ruleId; - } - - public String getRuleEffect() { - return ruleEffect; - } - - public void setRuleEffect(String ruleEffect) { - this.ruleEffect = ruleEffect; - } - - public String getRuleDescription() { - return ruleDescription; - } - - public void setRuleDescription(String ruleDescription) { - this.ruleDescription = ruleDescription; - } - - public List getRowDTOList() { - return rowDTOList; - } - - public void setRowDTOList(List rowDTOList) { - this.rowDTOList = rowDTOList; - } - - public void addRowDTO(RowDTO rowDTO) { - this.rowDTOList.add(rowDTO); - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public boolean isCompletedRule() { - return completedRule; - } - - public void setCompletedRule(boolean completedRule) { - this.completedRule = completedRule; - } - - public List getAttributeDTOs() { - return attributeDTOs; - } - - public void setAttributeDTOs(List attributeDTOs) { - this.attributeDTOs = attributeDTOs; - } - - public void addAttributeDTO(ExtendAttributeDTO attributeDTO) { - this.attributeDTOs.add(attributeDTO); - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } - - public void addObligationDTO(ObligationDTO obligationDTO) { - this.obligationDTOs.add(obligationDTO); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorDTO.java deleted file mode 100644 index fe107d528b87..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorDTO.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * - */ -public class SimplePolicyEditorDTO { - - private String policyId; - - private String appliedCategory; - - private String description; - - private String userAttributeValue; - - private String userAttributeId; - - private String resourceValue; - - private String actionValue; - - private String environmentValue; - - private String function; - - private String environmentId; - - private List SimplePolicyEditorElementDTOs = - new ArrayList(); - - public String getPolicyId() { - return policyId; - } - - public void setPolicyId(String policyId) { - this.policyId = policyId; - } - - public String getAppliedCategory() { - return appliedCategory; - } - - public void setAppliedCategory(String appliedCategory) { - this.appliedCategory = appliedCategory; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getSimplePolicyEditorElementDTOs() { - return SimplePolicyEditorElementDTOs; - } - - public void setSimplePolicyEditorElementDTOs(List - simplePolicyEditorElementDTOs) { - this.SimplePolicyEditorElementDTOs = simplePolicyEditorElementDTOs; - } - - public void setBasicPolicyEditorElementDTO(SimplePolicyEditorElementDTO - SimplePolicyEditorElementDTO) { - this.SimplePolicyEditorElementDTOs.add(SimplePolicyEditorElementDTO); - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getEnvironmentValue() { - return environmentValue; - } - - public void setEnvironmentValue(String environmentValue) { - this.environmentValue = environmentValue; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getActionValue() { - return actionValue; - } - - public void setActionValue(String actionValue) { - this.actionValue = actionValue; - } - - public String getResourceValue() { - return resourceValue; - } - - public void setResourceValue(String resourceValue) { - this.resourceValue = resourceValue; - } - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getEnvironmentId() { - return environmentId; - } - - public void setEnvironmentId(String environmentId) { - this.environmentId = environmentId; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorElementDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorElementDTO.java deleted file mode 100644 index cafc3ed6b9ca..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/SimplePolicyEditorElementDTO.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -/** - * - */ -public class SimplePolicyEditorElementDTO { - - private String userAttributeId; - - private String userAttributeValue; - - private String actionValue; - - private String resourceValue; - - private String environmentId; - - private String environmentValue; - - private String operationType; - - private String functionOnResources; - - private String functionOnActions; - - private String functionOnUsers; - - private String functionOnEnvironments; - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getOperationType() { - return operationType; - } - - public void setOperationType(String operationType) { - this.operationType = operationType; - } - - public String getEnvironmentValue() { - return environmentValue; - } - - public void setEnvironmentValue(String environmentValue) { - this.environmentValue = environmentValue; - } - - public String getEnvironmentId() { - return environmentId; - } - - public void setEnvironmentId(String environmentId) { - this.environmentId = environmentId; - } - - public String getResourceValue() { - return resourceValue; - } - - public void setResourceValue(String resourceValue) { - this.resourceValue = resourceValue; - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getActionValue() { - return actionValue; - } - - public void setActionValue(String actionValue) { - this.actionValue = actionValue; - } - - public String getFunctionOnUsers() { - return functionOnUsers; - } - - public void setFunctionOnUsers(String functionOnUsers) { - this.functionOnUsers = functionOnUsers; - } - - public String getFunctionOnActions() { - return functionOnActions; - } - - public void setFunctionOnActions(String functionOnActions) { - this.functionOnActions = functionOnActions; - } - - public String getFunctionOnResources() { - return functionOnResources; - } - - public void setFunctionOnResources(String functionOnResources) { - this.functionOnResources = functionOnResources; - } - - public String getFunctionOnEnvironments() { - return functionOnEnvironments; - } - - public void setFunctionOnEnvironments(String functionOnEnvironments) { - this.functionOnEnvironments = functionOnEnvironments; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/TargetDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/TargetDTO.java deleted file mode 100644 index 25613a4191c6..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/dto/TargetDTO.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * - */ -public class TargetDTO { - - private List rowDTOList = new ArrayList(); - - public List getRowDTOList() { - return rowDTOList; - } - - public void setRowDTOList(List rowDTOList) { - this.rowDTOList = rowDTOList; - } - - public void addRowDTO(RowDTO rowDTO) { - this.rowDTOList.add(rowDTO); - } - - -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyCreatorUtil.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyCreatorUtil.java deleted file mode 100644 index 6deff73de302..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyCreatorUtil.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.util; - - -import org.wso2.balana.utils.policy.dto.AttributeElementDTO; -import org.wso2.balana.utils.policy.dto.AttributesElementDTO; -import org.wso2.balana.utils.policy.dto.RequestElementDTO; -import org.wso2.carbon.identity.entitlement.common.EntitlementPolicyConstants; -import org.wso2.carbon.identity.entitlement.common.dto.RequestDTO; -import org.wso2.carbon.identity.entitlement.common.dto.RowDTO; - - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * This is Util class which help to create a XACML policy - */ -public class PolicyCreatorUtil { - /** - * Creates XML request from RequestDTO object - * - * @param requestDTO - * @return - */ - public static RequestElementDTO createRequestElementDTO(RequestDTO requestDTO) { - - RequestElementDTO requestElement = new RequestElementDTO(); - - List rowDTOs = requestDTO.getRowDTOs(); - if (rowDTOs == null || rowDTOs.size() < 1) { - return requestElement; - } - - Map dtoMap = new HashMap(); - List dtoList = new ArrayList(); - - for (RowDTO rowDTO : rowDTOs) { - String category = rowDTO.getCategory(); - String value = rowDTO.getAttributeValue(); - String attributeId = rowDTO.getAttributeId(); - if (category != null && category.trim().length() > 0 && value != null && - value.trim().length() > 0 && attributeId != null && attributeId.trim().length() > 0) { - - if (requestDTO.isMultipleRequest()) { - String[] values = value.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String attributeValue : values) { - AttributesElementDTO attributesElementDTO = new AttributesElementDTO(); - attributesElementDTO.setCategory(category); - - AttributeElementDTO attributeElementDTO = new AttributeElementDTO(); - attributeElementDTO.addAttributeValue(attributeValue); - attributeElementDTO.setAttributeId(attributeId); - attributeElementDTO.setIncludeInResult(rowDTO.isNotCompleted()); - attributesElementDTO.addAttributeElementDTO(attributeElementDTO); - if (rowDTO.getAttributeDataType() != null && rowDTO. - getAttributeDataType().trim().length() > 0) { - attributeElementDTO.setDataType(rowDTO.getAttributeDataType()); - } else { - attributeElementDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - } - dtoList.add(attributesElementDTO); - } - - } else { - AttributesElementDTO attributesElementDTO = dtoMap.get(category); - if (attributesElementDTO == null) { - attributesElementDTO = new AttributesElementDTO(); - attributesElementDTO.setCategory(category); - } - - String[] values = value.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - AttributeElementDTO attributeElementDTO = new AttributeElementDTO(); - attributeElementDTO.setAttributeValues(Arrays.asList(values)); - attributeElementDTO.setAttributeId(attributeId); - attributeElementDTO.setIncludeInResult(rowDTO.isNotCompleted()); - attributesElementDTO.addAttributeElementDTO(attributeElementDTO); - if (rowDTO.getAttributeDataType() != null && rowDTO. - getAttributeDataType().trim().length() > 0) { - attributeElementDTO.setDataType(rowDTO.getAttributeDataType()); - } else { - attributeElementDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - } - dtoMap.put(category, attributesElementDTO); - } - } - } - - requestElement.setMultipleRequest(requestDTO.isMultipleRequest()); - requestElement.setCombinedDecision(requestDTO.isCombinedDecision()); - requestElement.setReturnPolicyIdList(requestDTO.isReturnPolicyIdList()); - if (!requestDTO.isMultipleRequest()) { - dtoList = new ArrayList(); - for (Map.Entry entry : dtoMap.entrySet()) { - dtoList.add(entry.getValue()); - } - } - requestElement.setAttributesElementDTOs(dtoList); - return requestElement; - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyEditorUtil.java b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyEditorUtil.java deleted file mode 100644 index db22a1fc96b1..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/main/java/org/wso2/carbon/identity/entitlement/common/util/PolicyEditorUtil.java +++ /dev/null @@ -1,3019 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.identity.entitlement.common.util; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.util.AXIOMUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.balana.utils.Constants.PolicyConstants; -import org.wso2.balana.utils.exception.PolicyBuilderException; -import org.wso2.balana.utils.policy.PolicyBuilder; -import org.wso2.balana.utils.policy.dto.AllOfElementDTO; -import org.wso2.balana.utils.policy.dto.AnyOfElementDTO; -import org.wso2.balana.utils.policy.dto.ApplyElementDTO; -import org.wso2.balana.utils.policy.dto.AttributeAssignmentElementDTO; -import org.wso2.balana.utils.policy.dto.AttributeDesignatorDTO; -import org.wso2.balana.utils.policy.dto.AttributeSelectorDTO; -import org.wso2.balana.utils.policy.dto.AttributeValueElementDTO; -import org.wso2.balana.utils.policy.dto.BasicPolicyDTO; -import org.wso2.balana.utils.policy.dto.BasicRuleDTO; -import org.wso2.balana.utils.policy.dto.BasicTargetDTO; -import org.wso2.balana.utils.policy.dto.ConditionElementDT0; -import org.wso2.balana.utils.policy.dto.MatchElementDTO; -import org.wso2.balana.utils.policy.dto.ObligationElementDTO; -import org.wso2.balana.utils.policy.dto.PolicyElementDTO; -import org.wso2.balana.utils.policy.dto.RuleElementDTO; -import org.wso2.balana.utils.policy.dto.TargetElementDTO; -import org.wso2.carbon.identity.entitlement.common.EntitlementConstants; -import org.wso2.carbon.identity.entitlement.common.EntitlementPolicyConstants; -import org.wso2.carbon.identity.entitlement.common.EntitlementPolicyCreationException; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorConstants; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorEngine; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorException; -import org.wso2.carbon.identity.entitlement.common.dto.ExtendAttributeDTO; -import org.wso2.carbon.identity.entitlement.common.dto.ObligationDTO; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyDTO; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyRefIdDTO; -import org.wso2.carbon.identity.entitlement.common.dto.PolicySetDTO; -import org.wso2.carbon.identity.entitlement.common.dto.RowDTO; -import org.wso2.carbon.identity.entitlement.common.dto.RuleDTO; -import org.wso2.carbon.identity.entitlement.common.dto.SimplePolicyEditorDTO; -import org.wso2.carbon.identity.entitlement.common.dto.SimplePolicyEditorElementDTO; -import org.wso2.carbon.identity.entitlement.common.dto.TargetDTO; - -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -/** - * Util class that helps to create the XACML policy which is defined by the XACML basic policy editor - */ -public class PolicyEditorUtil { - - private static Log log = LogFactory.getLog(PolicyEditorUtil.class); - - /** - * map of apply element w.r.t identifier - */ - private static Map applyElementMap = new HashMap(); - - /** - * Create XACML policy with the simplest input attributes - * - * @param policyEditorDTO - * @return - * @throws PolicyEditorException - */ - public static String createSOAPolicy(SimplePolicyEditorDTO policyEditorDTO) throws PolicyEditorException { - - BasicPolicyDTO basicPolicyDTO = new BasicPolicyDTO(); - BasicTargetDTO basicTargetDTO = null; - List ruleElementDTOs = new ArrayList(); - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - - //create policy element - basicPolicyDTO.setPolicyId(policyEditorDTO.getPolicyId()); - // setting rule combining algorithm - basicPolicyDTO.setRuleAlgorithm(PolicyConstants.RuleCombiningAlog.FIRST_APPLICABLE_ID); - basicPolicyDTO.setDescription(policyEditorDTO.getDescription()); - - if (PolicyEditorConstants.SOA_CATEGORY_USER.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getUserAttributeValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY. - equals(policyEditorDTO.getUserAttributeValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - String selectedDataType = null; - - if (policyEditorDTO.getUserAttributeId() == null) { - basicTargetDTO.setSubjectId(PolicyEditorConstants.SUBJECT_ID_DEFAULT); - } else { - basicTargetDTO.setSubjectId(holder.getAttributeIdUri(policyEditorDTO.getUserAttributeId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(policyEditorDTO.getUserAttributeId())) != null) { - basicTargetDTO.setSubjectDataType(selectedDataType); - } - } - - if (basicTargetDTO.getSubjectDataType() == null) { - basicTargetDTO.setSubjectDataType(PolicyConstants.DataType.STRING); - } - - String function = findFunction(policyEditorDTO.getUserAttributeValue(), - basicTargetDTO.getSubjectDataType()); - String value = findAttributeValue(policyEditorDTO.getUserAttributeValue()); - basicTargetDTO.setSubjectList(value); - basicTargetDTO.setFunctionOnSubjects(function); - } - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - addActionElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_RESOURCE.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getResourceValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getResourceValue().trim())) { - basicTargetDTO = new BasicTargetDTO(); - - basicTargetDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); - basicTargetDTO.setResourceDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(policyEditorDTO.getResourceValue(), - basicTargetDTO.getResourceDataType()); - String value = findAttributeValue(policyEditorDTO.getResourceValue()); - basicTargetDTO.setResourceList(value); - basicTargetDTO.setFunctionOnResources(function); - } - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - - addActionElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_ACTION.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getActionValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getActionValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - - basicTargetDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); - basicTargetDTO.setActionDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(policyEditorDTO.getActionValue(), - basicTargetDTO.getActionDataType()); - String value = findAttributeValue(policyEditorDTO.getActionValue()); - basicTargetDTO.setActionList(value); - basicTargetDTO.setFunctionOnActions(function); - - } - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_ENVIRONMENT.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getEnvironmentValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getEnvironmentValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - - String selectedDataType = null; - - if (policyEditorDTO.getEnvironmentId() == null) { - basicTargetDTO.setEnvironmentId(PolicyEditorConstants.ENVIRONMENT_ID_DEFAULT); - } else { - basicTargetDTO.setEnvironmentId(holder.getAttributeIdUri(policyEditorDTO.getEnvironmentId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(policyEditorDTO.getEnvironmentId())) != null) { - basicTargetDTO.setEnvironmentDataType(selectedDataType); - } - } - - if (basicTargetDTO.getEnvironmentDataType() == null) { - basicTargetDTO.setEnvironmentDataType(PolicyConstants.DataType.STRING); - } - - - String function = findFunction(policyEditorDTO.getEnvironmentValue(), - basicTargetDTO.getEnvironmentDataType()); - String value = findAttributeValue(policyEditorDTO.getEnvironmentValue()); - basicTargetDTO.setEnvironmentList(value); - basicTargetDTO.setFunctionOnEnvironment(function); - - } - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - addActionElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } - - if (basicTargetDTO != null) { - basicPolicyDTO.setTargetDTO(basicTargetDTO); - } - - if (ruleElementDTOs.size() > 0) { - basicPolicyDTO.setBasicRuleDTOs(ruleElementDTOs); - } - - try { - return PolicyBuilder.getInstance().build(basicPolicyDTO); - } catch (PolicyBuilderException e) { - log.error(e); - throw new PolicyEditorException("Error while building policy"); - } - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addResourceElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - - ruleElementDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); - ruleElementDTO.setResourceDataType(PolicyConstants.DataType.STRING); - String function = findFunction(editorElementDTO.getResourceValue(), - ruleElementDTO.getResourceDataType()); - String value = findAttributeValue(editorElementDTO.getResourceValue()); - ruleElementDTO.setResourceList(value); - ruleElementDTO.setFunctionOnResources(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addSubjectElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - String selectedDataType = null; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - - if (editorElementDTO.getUserAttributeId() == null) { - ruleElementDTO.setSubjectId(PolicyEditorConstants.SUBJECT_ID_DEFAULT); - } else { - ruleElementDTO.setSubjectId(holder.getAttributeIdUri(editorElementDTO.getUserAttributeId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(editorElementDTO.getUserAttributeId())) != null) { - ruleElementDTO.setSubjectDataType(selectedDataType); - } - } - - if (ruleElementDTO.getSubjectDataType() == null) { - ruleElementDTO.setSubjectDataType(PolicyConstants.DataType.STRING); - } - String function = findFunction(editorElementDTO.getUserAttributeValue(), - ruleElementDTO.getSubjectDataType()); - String value = findAttributeValue(editorElementDTO.getUserAttributeValue()); - ruleElementDTO.setSubjectList(value); - ruleElementDTO.setFunctionOnSubjects(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addActionElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - ruleElementDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); - ruleElementDTO.setActionDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(editorElementDTO.getActionValue(), - ruleElementDTO.getActionDataType()); - String value = findAttributeValue(editorElementDTO.getActionValue()); - ruleElementDTO.setActionList(value); - ruleElementDTO.setFunctionOnActions(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addEnvironmentElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - String selectedDataType = null; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - if (editorElementDTO.getEnvironmentId() == null) { - ruleElementDTO.setEnvironmentId(PolicyEditorConstants.ENVIRONMENT_ID_DEFAULT); - } else { - ruleElementDTO.setEnvironmentId(holder.getAttributeIdUri(editorElementDTO.getEnvironmentId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(editorElementDTO.getEnvironmentId())) != null) { - ruleElementDTO.setEnvironmentDataType(selectedDataType); - } - } - - if (ruleElementDTO.getEnvironmentDataType() == null) { - ruleElementDTO.setEnvironmentDataType(PolicyConstants.DataType.STRING); - } - - String function = findFunction(editorElementDTO.getEnvironmentValue(), - ruleElementDTO.getEnvironmentDataType()); - String value = findAttributeValue(editorElementDTO.getEnvironmentValue()); - ruleElementDTO.setEnvironmentDataType(ruleElementDTO.getEnvironmentDataType()); - ruleElementDTO.setEnvironmentList(value); - ruleElementDTO.setFunctionOnEnvironment(function); - - } - - /** - * Helper method to create SOA policy - * - * @param value - * @param dataType - * @return - */ - private static String findFunction(String value, String dataType) { - - if (value == null) { - return PolicyConstants.Functions.FUNCTION_EQUAL; - } - - value = value.replace(">", ">"); - value = value.replace("<", "<"); - - // only time range finction are valid for following data types - if (PolicyConstants.DataType.DATE.equals(dataType) || - PolicyConstants.DataType.INT.equals(dataType) || - PolicyConstants.DataType.TIME.equals(dataType) || - PolicyConstants.DataType.DATE_TIME.equals(dataType) || - PolicyConstants.DataType.DOUBLE.equals(dataType) || - PolicyConstants.DataType.STRING.equals(dataType)) { - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE)) { - if (value.contains(PolicyEditorConstants.FunctionIdentifier.RANGE_CLOSE)) { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS; - } else { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS_EQUAL; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.RANGE)) { - if (value.contains(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE_CLOSE)) { - return PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL; - } else { - return PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER)) { - return PolicyConstants.Functions.FUNCTION_GREATER; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER_EQUAL)) { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS)) { - return PolicyConstants.Functions.FUNCTION_LESS; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS_EQUAL)) { - return PolicyConstants.Functions.FUNCTION_LESS_EQUAL; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.REGEX)) { - return PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP; - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.OR)) { - return PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE; - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.AND)) { - return PolicyConstants.Functions.FUNCTION_SET_EQUALS; - } - - return PolicyConstants.Functions.FUNCTION_EQUAL; - } - - /** - * Helper method to create SOA policy - * - * @param value - * @return - */ - private static String findAttributeValue(String value) { - - if (value == null) { - return null; - } - - value = value.replace(">", ">"); - value = value.replace("<", "<"); - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.RANGE) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.REGEX)) { - - return value.substring(1, value.length() - 1).trim(); - - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS)) { - return value.substring(1).trim(); - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER_EQUAL) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS_EQUAL)) { - return value.substring(2).trim(); - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.AND)) { - value = value.replace(PolicyEditorConstants.FunctionIdentifier.AND, - PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.OR)) { - value = value.replace(PolicyEditorConstants.FunctionIdentifier.OR, - PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - } - - return value.trim(); - } - - -// TODO for what? -// public static String createRules(List elementDTOs, Document doc) -// throws PolicyEditorException { -// -// List ruleElementDTOs = new ArrayList(); -// if(elementDTOs != null){ -// int ruleNo = 1; -// for(SimplePolicyEditorElementDTO dto : elementDTOs){ -// BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); -// -// if(dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())){ -// ruleElementDTO.setResourceDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); -// ruleElementDTO.setResourceList(dto.getResourceValue()); -// ruleElementDTO.setFunctionOnResources(getBasicPolicyEditorFunction(dto. -// getFunctionOnResources())); -// } -// -// if(dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())){ -// ruleElementDTO.setSubjectDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setSubjectId(dto.getUserAttributeId()); -// ruleElementDTO.setSubjectList(dto.getUserAttributeValue()); -// ruleElementDTO.setFunctionOnSubjects(getBasicPolicyEditorFunction(dto. -// getFunctionOnUsers())); -// } -// -// if(dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())){ -// ruleElementDTO.setActionDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setActionList(dto.getActionValue()); -// ruleElementDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); -// ruleElementDTO.setFunctionOnActions(getBasicPolicyEditorFunction(dto. -// getFunctionOnActions())); -// } -// -// if(dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())){ -// ruleElementDTO.setEnvironmentId(dto.getEnvironmentId()); -// ruleElementDTO.setEnvironmentList(dto.getEnvironmentValue()); -// ruleElementDTO.setEnvironmentDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setFunctionOnEnvironment(getBasicPolicyEditorFunction(dto. -// getFunctionOnEnvironments())); -// } -// -// if(dto.getOperationType() != null && PolicyEditorConstants.PreFunctions.CAN_DO. -// equals(dto.getOperationType().trim())){ -// ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); -// } else { -// ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); -// } -// ruleElementDTO.setRuleId("Rule-" + System.currentTimeMillis() + "-" + ruleNo); -// ruleElementDTOs.add(ruleElementDTO); -// ruleNo ++; -// } -// } -// -// if(ruleElementDTOs.size() > 0){ -// for(BasicRuleDTO dto : ruleElementDTOs){ -// Element rule = null; -// try { -// rule = BasicPolicyHelper.createRuleElement(dto, doc); -// } catch (PolicyBuilderException e) { -// throw new PolicyEditorException("Error while creating rule element"); -// } -// doc.appendChild(rule); -// } -// } -// -// return PolicyCreatorUtil.getStringFromDocument(doc); -// } - - - /** - * Creates DOM representation of the XACML rule element. - * - * @param ruleDTO RuleDTO - * @return - * @throws PolicyEditorException throws - */ - public static RuleElementDTO createRuleElementDTO(RuleDTO ruleDTO) throws PolicyEditorException { - - RuleElementDTO ruleElementDTO = new RuleElementDTO(); - - ruleElementDTO.setRuleId(ruleDTO.getRuleId()); - ruleElementDTO.setRuleEffect(ruleDTO.getRuleEffect()); - TargetDTO targetDTO = ruleDTO.getTargetDTO(); - List dynamicAttributeDTOs = ruleDTO.getAttributeDTOs(); - List obligationDTOs = ruleDTO.getObligationDTOs(); - - if (dynamicAttributeDTOs != null && dynamicAttributeDTOs.size() > 0) { - Map dtoMap = new HashMap(); - //1st creating map of dynamic attribute elements - for (ExtendAttributeDTO dto : dynamicAttributeDTOs) { - dtoMap.put("${" + dto.getId().trim() + "}", dto); - } - //creating map of apply element with identifier - for (ExtendAttributeDTO dto : dynamicAttributeDTOs) { - ApplyElementDTO applyElementDTO = createApplyElement(dto, dtoMap); - if (applyElementDTO == null) { - continue; - } - applyElementMap.put("${" + dto.getId().trim() + "}", applyElementDTO); - } - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null && targetDTO.getRowDTOList().size() > 0) { - TargetElementDTO targetElementDTO = createTargetElementDTO(ruleDTO.getTargetDTO()); - if (targetElementDTO != null) { - ruleElementDTO.setTargetElementDTO(targetElementDTO); - } - } - - if (ruleDTO.getRowDTOList() != null && ruleDTO.getRowDTOList().size() > 0) { - ConditionElementDT0 conditionElementDT0 = createConditionDTO(ruleDTO.getRowDTOList()); - if (conditionElementDT0 != null) { - ruleElementDTO.setConditionElementDT0(conditionElementDT0); - } - } - - if (obligationDTOs != null && obligationDTOs.size() > 0) { - for (ObligationDTO obligationDTO : obligationDTOs) { - ObligationElementDTO elementDTO = createObligationElement(obligationDTO); - if (elementDTO != null) { - ruleElementDTO.addObligationElementDTO(elementDTO); - } - } - } - - return ruleElementDTO; - } - - /** - * creates DOM representation of the XACML obligation/advice element. - * - * @param obligationDTOs List of ObligationDTO - * @return - * @throws PolicyEditorException throws - */ - public static List createObligation(List obligationDTOs) - throws PolicyEditorException { - - List obligationElementDTOs = new ArrayList(); - - if (obligationDTOs != null) { - for (ObligationDTO obligationDTO : obligationDTOs) { - ObligationElementDTO elementDTO = createObligationElement(obligationDTO); - if (elementDTO != null) { - obligationElementDTOs.add(elementDTO); - } - } - } - - return obligationElementDTOs; - } - - - /** - * @param dynamicAttributeDTO - * @param map - * @return - */ - private static ApplyElementDTO createApplyElement(ExtendAttributeDTO dynamicAttributeDTO, - Map map) { - - if (PolicyEditorConstants.DYNAMIC_SELECTOR_CATEGORY.equals(dynamicAttributeDTO.getSelector())) { - - String category = dynamicAttributeDTO.getCategory(); - String attributeId = dynamicAttributeDTO.getAttributeId(); - String attributeDataType = dynamicAttributeDTO.getDataType(); - - if (category != null && category.trim().length() > 0 && attributeDataType != null && - attributeDataType.trim().length() > 0) { - AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); - designatorDTO.setCategory(category); - designatorDTO.setAttributeId(attributeId); - designatorDTO.setDataType(attributeDataType); - designatorDTO.setMustBePresent("true"); - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setAttributeDesignators(designatorDTO); - applyElementDTO.setFunctionId(processFunction("bag", attributeDataType)); - return applyElementDTO; - } - - } else { - - String function = dynamicAttributeDTO.getFunction(); - String attributeValue = dynamicAttributeDTO.getAttributeValue(); - String attributeDataType = dynamicAttributeDTO.getDataType(); - - if (attributeValue != null && function != null) { - String[] values = attributeValue.split(","); - - if (values != null && values.length > 0) { - - if (function.contains("concatenate")) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction(function, attributeDataType, "2.0")); - // there can be any number of inputs - for (String value : values) { - if (map.containsKey(value)) { - applyElementDTO.setApplyElement(createApplyElement(map.get(value), map)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(value); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - - return applyElementDTO; - } - } - } - } - - return null; - } - - - private static ObligationElementDTO createObligationElement(ObligationDTO obligationDTO) { - - String id = obligationDTO.getObligationId(); - String effect = obligationDTO.getEffect(); - String type = obligationDTO.getType(); - - if (id != null && id.trim().length() > 0 && effect != null) { - - ObligationElementDTO elementDTO = new ObligationElementDTO(); - elementDTO.setId(id); - elementDTO.setEffect(effect); - if ("Advice".equals(type)) { - elementDTO.setType(ObligationElementDTO.ADVICE); - } else { - elementDTO.setType(ObligationElementDTO.OBLIGATION); - } - - String attributeValue = obligationDTO.getAttributeValue(); - String attributeDataType = obligationDTO.getAttributeValueDataType(); - String resultingAttributeId = obligationDTO.getResultAttributeId(); - - if (attributeValue != null && attributeValue.trim().length() > 0 && - resultingAttributeId != null && resultingAttributeId.trim().length() > 0) { - - AttributeAssignmentElementDTO assignmentElementDTO = new - AttributeAssignmentElementDTO(); - assignmentElementDTO.setAttributeId(resultingAttributeId); - if (attributeValue.contains(",")) { - String[] values = attributeValue.split(","); - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction("bag", attributeDataType)); - for (String value : values) { - if (applyElementMap.containsKey(value)) { - applyElementDTO.setApplyElement(applyElementMap.get(value)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(value); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - assignmentElementDTO.setApplyElementDTO(applyElementDTO); - } else { - if (applyElementMap.containsKey(attributeValue)) { - assignmentElementDTO.setApplyElementDTO(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(attributeValue); - assignmentElementDTO.setValueElementDTO(valueElementDTO); - } - } - - elementDTO.addAssignmentElementDTO(assignmentElementDTO); - } - - return elementDTO; - } - - return null; - } - - /** - * Creates ConditionElementDT0 Object that represents the XACML Condition element - * - * @param rowDTOs - * @return - * @throws PolicyEditorException - */ - public static ConditionElementDT0 createConditionDTO(List rowDTOs) throws PolicyEditorException { - - ConditionElementDT0 rootApplyDTO = new ConditionElementDT0(); - - ArrayList temp = new ArrayList(); - Set> listSet = new HashSet>(); - - for (int i = 0; i < rowDTOs.size(); i++) { - - if (i == 0) { - temp.add(rowDTOs.get(0)); - continue; - } - - String combineFunction = rowDTOs.get(i - 1).getCombineFunction(); - - if (PolicyEditorConstants.COMBINE_FUNCTION_AND.equals(combineFunction)) { - temp.add(rowDTOs.get(i)); - } - - if (PolicyEditorConstants.COMBINE_FUNCTION_OR.equals(combineFunction)) { - listSet.add(temp); - temp = new ArrayList(); - temp.add(rowDTOs.get(i)); - } - } - - listSet.add(temp); - - if (listSet.size() > 1) { - ApplyElementDTO orApplyDTO = new ApplyElementDTO(); - orApplyDTO.setFunctionId(processFunction("or")); - for (ArrayList rowDTOArrayList : listSet) { - if (rowDTOArrayList.size() > 1) { - ApplyElementDTO andApplyDTO = new ApplyElementDTO(); - andApplyDTO.setFunctionId(processFunction("and")); - for (RowDTO rowDTO : rowDTOArrayList) { - ApplyElementDTO applyElementDTO = createApplyElement(rowDTO); - andApplyDTO.setApplyElement(applyElementDTO); - } - orApplyDTO.setApplyElement(andApplyDTO); - - } else if (rowDTOArrayList.size() == 1) { - RowDTO rowDTO = rowDTOArrayList.get(0); - ApplyElementDTO andApplyDTO = createApplyElement(rowDTO); - orApplyDTO.setApplyElement(andApplyDTO); - } - } - rootApplyDTO.setApplyElement(orApplyDTO); - } else if (listSet.size() == 1) { - ArrayList rowDTOArrayList = listSet.iterator().next(); - if (rowDTOArrayList.size() > 1) { - ApplyElementDTO andApplyDTO = new ApplyElementDTO(); - andApplyDTO.setFunctionId(processFunction("and")); - for (RowDTO rowDTO : rowDTOArrayList) { - ApplyElementDTO applyElementDTO = createApplyElement(rowDTO); - andApplyDTO.setApplyElement(applyElementDTO); - } - rootApplyDTO.setApplyElement(andApplyDTO); - } else if (rowDTOArrayList.size() == 1) { - RowDTO rowDTO = rowDTOArrayList.get(0); - ApplyElementDTO andApplyDTO = createApplyElement(rowDTO); - rootApplyDTO.setApplyElement(andApplyDTO); - } - } - - return rootApplyDTO; - } - - /** - * Creates ApplyElementDTO Object that represents the XACML Apply element - * - * @param rowDTO - * @return - * @throws PolicyEditorException - */ - public static ApplyElementDTO createApplyElement(RowDTO rowDTO) throws PolicyEditorException { - - String preFunction = rowDTO.getPreFunction(); - String function = rowDTO.getFunction(); - String dataType = rowDTO.getAttributeDataType(); - String attributeValue = rowDTO.getAttributeValue(); - - if (function == null || function.trim().length() < 1) { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required function Id"); - } - - if (attributeValue == null || attributeValue.trim().length() < 1) { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required attribute value"); - } - - ApplyElementDTO applyElementDTO = null; - - AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); - designatorDTO.setCategory(rowDTO.getCategory()); - designatorDTO.setAttributeId(rowDTO.getAttributeId()); - designatorDTO.setDataType(dataType); - designatorDTO.setMustBePresent("true"); - - - if (rowDTO.getFunction().contains("less") || rowDTO.getFunction().contains("greater")) { - applyElementDTO = processGreaterLessThanFunctions(function, dataType, attributeValue, - designatorDTO); - } else if (PolicyConstants.Functions.FUNCTION_EQUAL.equals(rowDTO.getFunction())) { - applyElementDTO = processEqualFunctions(function, dataType, attributeValue, designatorDTO); - } else if (PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP.equals(rowDTO.getFunction())) { - applyElementDTO = processRegexpFunctions(function, dataType, attributeValue, designatorDTO); - } else { - applyElementDTO = processBagFunction(function, dataType, attributeValue, designatorDTO); - } - - - if (PolicyConstants.PreFunctions.PRE_FUNCTION_NOT.equals(preFunction)) { - ApplyElementDTO notApplyElementDTO = new ApplyElementDTO(); - notApplyElementDTO.setFunctionId(processFunction("not")); - notApplyElementDTO.setApplyElement(applyElementDTO); - applyElementDTO = notApplyElementDTO; - } - - return applyElementDTO; - } - - /** - * Creates TargetElementDTO Object that represents the XACML Target element - * - * @param targetDTO - * @return - */ - public static TargetElementDTO createTargetElementDTO(TargetDTO targetDTO) { - - AllOfElementDTO allOfElementDTO = new AllOfElementDTO(); - AnyOfElementDTO anyOfElementDTO = new AnyOfElementDTO(); - TargetElementDTO targetElementDTO = new TargetElementDTO(); - - List rowDTOs = targetDTO.getRowDTOList(); - ArrayList tempRowDTOs = new ArrayList(); - - // pre function processing - for (RowDTO rowDTO : rowDTOs) { - if (PolicyEditorConstants.PreFunctions.PRE_FUNCTION_ARE.equals(rowDTO.getPreFunction())) { - String[] attributeValues = rowDTO.getAttributeValue().split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - allOfElementDTO = new AllOfElementDTO(); - for (int j = 0; j < attributeValues.length; j++) { - RowDTO newDto = new RowDTO(rowDTO); - newDto.setAttributeValue(attributeValues[j]); - if (j != attributeValues.length - 1) { - newDto.setCombineFunction(PolicyEditorConstants.COMBINE_FUNCTION_AND); - } - tempRowDTOs.add(newDto); - } - } else { - tempRowDTOs.add(rowDTO); - } - } - - if (tempRowDTOs.size() > 0) { - for (int i = 0; i < tempRowDTOs.size(); i++) { - if (i == 0) { - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(0)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - continue; - } - - String combineFunction = tempRowDTOs.get(i - 1).getCombineFunction(); - - if (PolicyEditorConstants.COMBINE_FUNCTION_AND.equals(combineFunction)) { - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(i)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - - } - - if (PolicyEditorConstants.COMBINE_FUNCTION_OR.equals(combineFunction)) { - anyOfElementDTO.addAllOfElementDTO(allOfElementDTO); - allOfElementDTO = new AllOfElementDTO(); - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(i)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - } - } - anyOfElementDTO.addAllOfElementDTO(allOfElementDTO); - targetElementDTO.addAnyOfElementDTO(anyOfElementDTO); - } - return targetElementDTO; - } - - - /** - * process Bag functions - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - */ - public static ApplyElementDTO processBagFunction(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_IS_IN.equals(function)) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction("is-in", dataType)); - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - - applyElementDTO.setAttributeDesignators(designatorDTO); - return applyElementDTO; - - } else if (PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE.equals(function) || - PolicyConstants.Functions.FUNCTION_SET_EQUALS.equals(function)) { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE.equals(function)) { - applyElementDTO.setFunctionId(processFunction("at-least-one-member-of", dataType)); - } else { - applyElementDTO.setFunctionId(processFunction("set-equals", dataType)); - } - - String[] values = attributeValue.split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - - ApplyElementDTO applyBagElementDTO = new ApplyElementDTO(); - applyBagElementDTO.setFunctionId(processFunction("bag", dataType)); - for (String value : values) { - if (applyElementMap.containsKey(value)) { - applyBagElementDTO.setApplyElement(applyElementMap.get(value)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(value); - applyBagElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - - applyElementDTO.setAttributeDesignators(designatorDTO); - applyElementDTO.setApplyElement(applyBagElementDTO); - - return applyElementDTO; - } - - return null; - } - - /** - * Process equal function - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - */ - public static ApplyElementDTO processEqualFunctions(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_EQUAL.equals(function)) { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - if (PolicyEditorConstants.DataType.DAY_TIME_DURATION.equals(dataType) || - PolicyEditorConstants.DataType.YEAR_MONTH_DURATION.equals(dataType)) { - applyElementDTO.setFunctionId(processFunction("equal", dataType, "3.0")); - } else { - applyElementDTO.setFunctionId(processFunction("equal", dataType)); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - - applyElementDTO.setApplyElement(oneAndOnlyApplyElement); - - return applyElementDTO; - } - - return null; - } - - /** - * Process less than and greater than functions - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - * @throws PolicyEditorException - */ - public static ApplyElementDTO processGreaterLessThanFunctions(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) - throws PolicyEditorException { - - String[] values = attributeValue.split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - - - if (PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS_EQUAL.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function)) { - - String leftValue; - String rightValue; - - if (values.length == 2) { - leftValue = values[0].trim(); - rightValue = values[1].trim(); - } else { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required attribute values for function : " + function); - } - - ApplyElementDTO andApplyElement = new ApplyElementDTO(); - - andApplyElement.setFunctionId(processFunction("and")); - - ApplyElementDTO greaterThanApplyElement = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL.equals(function)) { - greaterThanApplyElement.setFunctionId(processFunction("greater-than", dataType)); - } else { - greaterThanApplyElement.setFunctionId(processFunction("greater-than-or-equal", dataType)); - } - - - ApplyElementDTO lessThanApplyElement = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS.equals(function)) { - lessThanApplyElement.setFunctionId(processFunction("less-than", dataType)); - } else { - lessThanApplyElement.setFunctionId(processFunction("less-than-or-equal", dataType)); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - AttributeValueElementDTO leftValueElementDTO = new AttributeValueElementDTO(); - leftValueElementDTO.setAttributeDataType(dataType); - leftValueElementDTO.setAttributeValue(leftValue); - - AttributeValueElementDTO rightValueElementDTO = new AttributeValueElementDTO(); - rightValueElementDTO.setAttributeDataType(dataType); - rightValueElementDTO.setAttributeValue(rightValue); - - greaterThanApplyElement.setApplyElement(oneAndOnlyApplyElement); - greaterThanApplyElement.setAttributeValueElementDTO(leftValueElementDTO); - - lessThanApplyElement.setApplyElement(oneAndOnlyApplyElement); - lessThanApplyElement.setAttributeValueElementDTO(rightValueElementDTO); - - andApplyElement.setApplyElement(greaterThanApplyElement); - andApplyElement.setApplyElement(lessThanApplyElement); - - return andApplyElement; - - } else { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - - if (PolicyConstants.Functions.FUNCTION_GREATER.equals(function)) { - applyElementDTO.setFunctionId(processFunction("greater-than", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_GREATER_EQUAL.equals(function)) { - applyElementDTO.setFunctionId(processFunction("greater-than-or-equal", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_LESS.equals(function)) { - applyElementDTO.setFunctionId(processFunction("less-than", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_LESS_EQUAL.equals(function)) { - applyElementDTO.setFunctionId(processFunction("less-than-or-equal", dataType)); - } else { - throw new PolicyEditorException("Can not create Apply element:" + - "Invalid function : " + function); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(values[0]); - - applyElementDTO.setApplyElement(oneAndOnlyApplyElement); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - - return applyElementDTO; - - } - } - - /** - * Process regexp-match functions. - * - * @param function Function name. - * @param dataType Data type. - * @param attributeValue Attribute Value. - * @param designatorDTO AttributeDesignator information. - * @return ApplyElementDTO. - */ - public static ApplyElementDTO processRegexpFunctions(String function, String dataType, String attributeValue, - AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP.equals(function)) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(PolicyConstants.XACMLData.FUNCTION_ANY_OF); - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - applyElementDTO.setFunctionFunctionId( - processFunction(PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP, dataType)); - applyElementDTO.setAttributeDesignators(designatorDTO); - return applyElementDTO; - } - return null; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @param type - * @param version - * @return - */ - private static String processFunction(String function, String type, String version) { - return "urn:oasis:names:tc:xacml:" + version + ":function:" + getDataTypePrefix(type) + - "-" + function; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @return - */ - private static String processFunction(String function) { - return "urn:oasis:names:tc:xacml:1.0:function:" + function; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @param type - * @return - */ - private static String processFunction(String function, String type) { - return "urn:oasis:names:tc:xacml:1.0:function:" + getDataTypePrefix(type) + "-" + function; - } -// -// /** -// * Helper method to check whether attribute value is pre-defined one -// * -// * @param value -// * @return -// */ -// private static boolean isPreDefinedValue(String value){ -// -// if(value != null && applyElementMap != null && applyElementMap.size() > 0){ -// value = value.trim(); -// if(value.startsWith("${") && value.endsWith("}")){ -// value = value.substring(value.indexOf("{") + 1, value.indexOf("}")); -// return applyElementMap.containsKey(value); -// } -// } -// -// return false; -// } -// -// /** -// * Helper method to check whether attribute value is pre-defined one -// * -// * @param value -// * @param map -// * @return -// */ -// private static boolean isPreDefinedValue(String value, Map map){ -// -// if(value != null && map != null && map.size() > 0){ -// value = value.trim(); -// if(value.startsWith("${") && value.endsWith("}")){ -// value = value.substring(value.indexOf("{") + 1, value.indexOf("}")); -// return map.containsKey(value); -// } -// } -// -// return false; -// } - - /** - * Helper method to create full XACML function URI - * - * @param dataTypeUri - * @return - */ - private static String getDataTypePrefix(String dataTypeUri) { - - if (dataTypeUri != null) { - if (dataTypeUri.contains("#")) { - return dataTypeUri.substring(dataTypeUri.indexOf("#") + 1); - } else if (dataTypeUri.contains(":")) { - String[] stringArray = dataTypeUri.split(":"); - if (stringArray != null && stringArray.length > 0) { - return stringArray[stringArray.length - 1]; - } - } - } - return dataTypeUri; - } - - /** - * Creates match element - * - * @param rowDTO - * @return - */ - public static MatchElementDTO createTargetMatch(RowDTO rowDTO) { - - - String category = rowDTO.getCategory(); - String functionId = rowDTO.getFunction(); - String attributeValue = rowDTO.getAttributeValue(); - String attributeId = rowDTO.getAttributeId(); - String dataType = rowDTO.getAttributeDataType(); - MatchElementDTO matchElementDTO; - - if (functionId != null && functionId.trim().length() > 0 && attributeValue != null && - attributeValue.trim().length() > 0 && category != null && - category.trim().length() > 0 && attributeId != null && - attributeId.trim().length() > 0 && dataType != null && - dataType.trim().length() > 0) { - - functionId = processFunction(functionId, dataType); - - matchElementDTO = new MatchElementDTO(); - - AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); - attributeValueElementDTO.setAttributeDataType(dataType); - attributeValueElementDTO.setAttributeValue(attributeValue.trim()); - - AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); - attributeDesignatorDTO.setDataType(dataType); - attributeDesignatorDTO.setAttributeId(attributeId); - attributeDesignatorDTO.setCategory(category); - - matchElementDTO.setMatchId(functionId); - matchElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); - matchElementDTO.setAttributeDesignatorDTO(attributeDesignatorDTO); - } else { - return null; // TODO - } - - return matchElementDTO; - } - - - /** - * This method creates a match element (such as subject,action,resource or environment) of the XACML policy - * - * @param matchElementDTO match element data object - * @param doc XML document - * @return match Element - * @throws PolicyEditorException if any error occurs - */ - public static Element createMatchElement(MatchElementDTO matchElementDTO, Document doc) - throws PolicyEditorException { - - Element matchElement; - - if (matchElementDTO.getMatchId() != null && matchElementDTO.getMatchId().trim().length() > 0) { - - matchElement = doc.createElement(PolicyEditorConstants.MATCH_ELEMENT); - - matchElement.setAttribute(PolicyEditorConstants.MATCH_ID, - matchElementDTO.getMatchId()); - - if (matchElementDTO.getAttributeValueElementDTO() != null) { - Element attributeValueElement = createAttributeValueElement(matchElementDTO. - getAttributeValueElementDTO(), doc); - matchElement.appendChild(attributeValueElement); - } - - if (matchElementDTO.getAttributeDesignatorDTO() != null) { - Element attributeDesignatorElement = createAttributeDesignatorElement(matchElementDTO. - getAttributeDesignatorDTO(), doc); - matchElement.appendChild(attributeDesignatorElement); - } else if (matchElementDTO.getAttributeSelectorDTO() != null) { - Element attributeSelectorElement = createAttributeSelectorElement(matchElementDTO. - getAttributeSelectorDTO(), doc); - matchElement.appendChild(attributeSelectorElement); - } - } else { - throw new PolicyEditorException("Can not create Match element:" + - " Required Attributes are missing"); - } - return matchElement; - } - - /** - * This method creates attribute value DOM element - * - * @param attributeValueElementDTO attribute value element data object - * @param doc XML document - * @return attribute value element as DOM - */ - public static Element createAttributeValueElement(AttributeValueElementDTO - attributeValueElementDTO, Document doc) { - - Element attributeValueElement = doc.createElement(EntitlementPolicyConstants.ATTRIBUTE_VALUE); - - if (attributeValueElementDTO.getAttributeValue() != null && attributeValueElementDTO. - getAttributeValue().trim().length() > 0) { - - attributeValueElement.setTextContent(attributeValueElementDTO.getAttributeValue().trim()); - - if (attributeValueElementDTO.getAttributeDataType() != null && attributeValueElementDTO. - getAttributeDataType().trim().length() > 0) { - attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - attributeValueElementDTO.getAttributeDataType()); - } else { - attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - EntitlementPolicyConstants.STRING_DATA_TYPE); - } - - } - - return attributeValueElement; - } - - /** - * This method creates attribute designator DOM element - * - * @param attributeDesignatorDTO attribute designator data object - * @param doc XML document - * @return attribute designator element as DOM - * @throws PolicyEditorException throws if missing required data - */ - public static Element createAttributeDesignatorElement(AttributeDesignatorDTO - attributeDesignatorDTO, Document doc) throws PolicyEditorException { - - Element attributeDesignatorElement; - - if (attributeDesignatorDTO != null && doc != null) { - - String category = attributeDesignatorDTO.getCategory(); - String attributeId = attributeDesignatorDTO.getAttributeId(); - String dataType = attributeDesignatorDTO.getDataType(); - String mustBe = attributeDesignatorDTO.getMustBePresent(); - - if (category != null && category.trim().length() > 0 && attributeId != null && - attributeId.trim().length() > 0 && dataType != null && dataType.trim().length() > 0 && - mustBe != null && mustBe.trim().length() > 0) { - - attributeDesignatorElement = doc. - createElement(PolicyEditorConstants.ATTRIBUTE_DESIGNATOR); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.ATTRIBUTE_ID, - attributeId); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.CATEGORY, category); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.DATA_TYPE, dataType); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.MUST_BE_PRESENT, mustBe); - - if (attributeDesignatorDTO.getIssuer() != null && attributeDesignatorDTO.getIssuer(). - trim().length() > 0) { - attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ISSUER, - attributeDesignatorDTO.getIssuer()); - } - } else { - throw new PolicyEditorException("Can not create AttributeDesignator element:" + - " Required Attributes are missing"); - } - } else { - throw new PolicyEditorException("Can not create AttributeDesignator element:" + - " A Null object is received"); - } - return attributeDesignatorElement; - } - - /** - * This method creates attribute selector DOM element - * - * @param attributeSelectorDTO attribute selector data object - * @param doc xML document - * @return attribute selector element as DOM - */ - public static Element createAttributeSelectorElement(AttributeSelectorDTO attributeSelectorDTO, - Document doc) { - - Element attributeSelectorElement = doc.createElement(EntitlementPolicyConstants. - ATTRIBUTE_SELECTOR); - - if (attributeSelectorDTO.getAttributeSelectorRequestContextPath() != null && - attributeSelectorDTO.getAttributeSelectorRequestContextPath().trim().length() > 0) { - - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.REQUEST_CONTEXT_PATH, - EntitlementPolicyConstants.ATTRIBUTE_NAMESPACE + attributeSelectorDTO. - getAttributeSelectorRequestContextPath()); - - if (attributeSelectorDTO.getAttributeSelectorDataType() != null && - attributeSelectorDTO.getAttributeSelectorDataType().trim().length() > 0) { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - attributeSelectorDTO.getAttributeSelectorDataType()); - } else { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - EntitlementPolicyConstants.STRING_DATA_TYPE); - } - - if (attributeSelectorDTO.getAttributeSelectorMustBePresent() != null && - attributeSelectorDTO.getAttributeSelectorMustBePresent().trim().length() > 0) { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, - attributeSelectorDTO.getAttributeSelectorMustBePresent()); - } - - } - - return attributeSelectorElement; - } - - /** - * Modifies the user data that are got from policy editor. If there are null values for required - * things, replace them with default values - */ - public static String[] processPolicySetData(PolicySetDTO policyDTO) { - - TargetDTO targetDTO = policyDTO.getTargetDTO(); - List obligationDTOs = policyDTO.getObligations(); - List policyRefIdDTOs = policyDTO.getPolicyRefIdDTOs(); - String policyOrder = policyDTO.getPolicyOrder(); - - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.SET); - - List policyMetaDataList = new ArrayList(); - - List arrangedRefIdDTOs = new ArrayList(); - - if (policyOrder != null && policyOrder.trim().length() > 0) { - String[] ruleIds = policyOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (PolicyRefIdDTO dto : policyRefIdDTOs) { - if (ruleId.equals(dto.getId())) { - arrangedRefIdDTOs.add(dto); - } - } - } - policyRefIdDTOs = arrangedRefIdDTOs; - } - createMetaDataFromPolicySet("policy", policyDTO, policyMetaDataList); - String algorithm = policyDTO.getPolicyCombiningAlgId(); - if (algorithm != null && algorithm.trim().length() > 0) { - policyDTO.setPolicyCombiningAlgId(holder.getPolicyAlgorithmUri(algorithm)); - } else { - policyDTO.setPolicyCombiningAlgId(holder.getDefaultPolicyAlgorithm()); - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null) { - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : targetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("target", rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - targetDTO.setRowDTOList(newRowDTOs); - policyDTO.setTargetDTO(targetDTO); - } - - if (policyRefIdDTOs != null) { - policyDTO.setPolicyRefIdDTOs(policyRefIdDTOs); - for (PolicyRefIdDTO dto : policyRefIdDTOs) { - createMetaDataFromReference("reference", dto, policyMetaDataList); - } - } - - if (obligationDTOs != null) { - for (ObligationDTO dto : obligationDTOs) { - createMetaDataFromObligation("obligation", dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() == 0 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - policyDTO.setObligations(obligationDTOs); - } - - return policyMetaDataList.toArray(new String[policyMetaDataList.size()]); - } - - - /** - * Modifies the user data that are got from policy editor. If there are null values for required - * things, replace them with default values - */ - public static String[] processPolicyData(PolicyDTO policyDTO) { - - TargetDTO targetDTO = policyDTO.getTargetDTO(); - List ruleDTOs = policyDTO.getRuleDTOs(); - List obligationDTOs = policyDTO.getObligationDTOs(); - String ruleElementOrder = policyDTO.getRuleOrder(); - - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.STANDARD); - - List policyMetaDataList = new ArrayList(); - - List arrangedRules = new ArrayList(); - - if (ruleElementOrder != null && ruleElementOrder.trim().length() > 0) { - String[] ruleIds = ruleElementOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleId.equals(ruleDTO.getRuleId())) { - arrangedRules.add(ruleDTO); - } - } - } - ruleDTOs = arrangedRules; - } - createMetaDataFromPolicy("policy", policyDTO, policyMetaDataList); - String algorithm = policyDTO.getRuleAlgorithm(); - if (algorithm != null && algorithm.trim().length() > 0) { - policyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(algorithm)); - } else { - policyDTO.setRuleAlgorithm(holder.getDefaultRuleAlgorithm()); - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null) { - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : targetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("target", rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - targetDTO.setRowDTOList(newRowDTOs); - policyDTO.setTargetDTO(targetDTO); - } - - if (ruleDTOs != null) { - for (RuleDTO ruleDTO : ruleDTOs) { - createMetaDataFromRule("rule", ruleDTO, policyMetaDataList); - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : ruleDTO.getRowDTOList()) { - createMetaDataFromRowDTO("ruleRow" + ruleDTO.getRuleId(), rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - - ruleDTO.setRowDTOList(newRowDTOs); - - TargetDTO ruleTargetDTO = ruleDTO.getTargetDTO(); - - if (ruleTargetDTO == null) { - continue; - } - - List newTargetRowDTOs = new ArrayList(); - - for (RowDTO rowDTO : ruleTargetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("ruleTarget" + ruleDTO.getRuleId(), rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newTargetRowDTOs.add(rowDTO); - } - - ruleTargetDTO.setRowDTOList(newTargetRowDTOs); - - List ruleObligationDTOs = ruleDTO.getObligationDTOs(); - - if (ruleObligationDTOs != null) { - for (ObligationDTO dto : ruleObligationDTOs) { - createMetaDataFromObligation("ruleObligation" + ruleDTO.getRuleId(), - dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() < 1 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - ruleDTO.setObligationDTOs(ruleObligationDTOs); - } - - ruleDTO.setTargetDTO(ruleTargetDTO); - } - - policyDTO.setRuleDTOs(ruleDTOs); - } - - if (obligationDTOs != null) { - for (ObligationDTO dto : obligationDTOs) { - createMetaDataFromObligation("obligation", dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() == 0 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - policyDTO.setObligationDTOs(obligationDTOs); - } - -// for(ExtendAttributeDTO attributeDTO : ruleDTO.getAttributeDTOs()){ -// -// String id = attributeDTO.getId(); -// String selector = attributeDTO.getSelector(); -// String category = null; -// String function = null; -// -// if(id == null){ -// continue; -// } -// -// if(PolicyEditorConstants.DYNAMIC_SELECTOR_FUNCTION.equals(selector)){ -// -// String attributeValue = attributeDTO.getAttributeValue(); -// if(attributeValue == null || attributeValue.trim().length() < 1){ -// continue; -// } -// function = attributeDTO.getFunction(); -// if(function != null){ -// function = function.replace(">", ">"); -// function = function.replace("<", "<"); -// -// if(ruleFunctionMap.get(function) != null){// TODO -// attributeDTO.setFunction(ruleFunctionMap.get(function)); -// } -// } -// -// if(attributeDTO.getDataType() == null || -// attributeDTO.getDataType().trim().length() < 1 || -// attributeDTO.getDataType().trim().equals("null")) { -// -// if(category != null && defaultDataTypeMap.get(category) != null){ -// attributeDTO.setDataType((defaultDataTypeMap. -// get(category).iterator().next())); -// } else { -// attributeDTO.setDataType(PolicyEditorConstants.DataType.STRING); -// } -// } -// -// } else { -// -// category = attributeDTO.getCategory(); -// -// if(category == null || category.trim().length() < 1){ -// continue; -// } -// -// if(categoryMap.get(category) != null){ -// attributeDTO.setCategory(categoryMap.get(category)); -// } -// -// if(attributeDTO.getDataType() == null || -// attributeDTO.getDataType().trim().length() < 1 || -// attributeDTO.getDataType().trim().equals("null")) { -// -// if(defaultDataTypeMap.get(category) != null){ -// attributeDTO.setDataType((defaultDataTypeMap. -// get(category).iterator().next())); -// } else { -// attributeDTO.setDataType(PolicyEditorConstants.DataType.STRING); -// } -// } -// -// if(attributeDTO.getAttributeId() == null || -// attributeDTO.getAttributeId().trim().length() < 1 || -// attributeDTO.getAttributeId().trim().equals("null")) { -// if(defaultAttributeIdMap.get(category) != null){ -// attributeDTO.setAttributeId((defaultAttributeIdMap. -// get(category).iterator().next())); -// } -// } -// } -// -// -// ExtendAttributeDTO odlRowDTO = new ExtendAttributeDTO(attributeDTO); -// odlRowDTO.setCategory(category); -// odlRowDTO.setFunction(function); -// createMetaDataFromDynamicAttribute("targetRule" + odlRowDTO.getId(), odlRowDTO, -// policyMetaDataList); -// //newDynamicAttributeDTOs.add(attributeDTO); -// } - - return policyMetaDataList.toArray(new String[policyMetaDataList.size()]); - } - - private static void createMetaDataFromPolicy(String prefix, PolicyDTO policyDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + policyDTO.getPolicyId()); - metaDataList.add(prefix + "|" + policyDTO.getRuleAlgorithm()); - if (policyDTO.getDescription() == null) { - policyDTO.setDescription(""); - } - metaDataList.add(prefix + "|" + policyDTO.getDescription()); - metaDataList.add(prefix + "|" + policyDTO.getVersion()); - } - } - - private static void createMetaDataFromPolicySet(String prefix, PolicySetDTO policyDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + policyDTO.getPolicySetId()); - metaDataList.add(prefix + "|" + policyDTO.getPolicyCombiningAlgId()); - if (policyDTO.getDescription() == null) { - policyDTO.setDescription(""); - } - metaDataList.add(prefix + "|" + policyDTO.getDescription()); - metaDataList.add(prefix + "|" + policyDTO.getVersion()); - } - } - - private static void createMetaDataFromRule(String prefix, RuleDTO ruleDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + ruleDTO.getRuleId()); - metaDataList.add(prefix + "|" + ruleDTO.getRuleEffect()); - metaDataList.add(prefix + "|" + ruleDTO.getRuleDescription()); - } - } - - private static void createMetaDataFromRowDTO(String prefix, RowDTO rowDTO, List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + rowDTO.getCategory()); - metaDataList.add(prefix + "|" + rowDTO.getPreFunction()); - metaDataList.add(prefix + "|" + rowDTO.getFunction()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeValue()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeId()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeDataType()); - metaDataList.add(prefix + "|" + rowDTO.getCombineFunction()); - } - } - - private static void createMetaDataFromDynamicAttribute(String prefix, ExtendAttributeDTO dto, - List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getCategory()); - metaDataList.add(prefix + "|" + dto.getSelector()); - metaDataList.add(prefix + "|" + dto.getFunction()); - metaDataList.add(prefix + "|" + dto.getAttributeValue()); - metaDataList.add(prefix + "|" + dto.getAttributeId()); - metaDataList.add(prefix + "|" + dto.getDataType()); - metaDataList.add(prefix + "|" + dto.getId()); - } - } - - private static void createMetaDataFromObligation(String prefix, ObligationDTO dto, - List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getType()); - metaDataList.add(prefix + "|" + dto.getObligationId()); - metaDataList.add(prefix + "|" + dto.getEffect()); - metaDataList.add(prefix + "|" + dto.getAttributeValue()); - metaDataList.add(prefix + "|" + dto.getResultAttributeId()); - metaDataList.add(prefix + "|" + dto.getAttributeValueDataType()); - } - } - - private static void createMetaDataFromReference(String prefix, PolicyRefIdDTO dto, - List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getId()); - metaDataList.add(prefix + "|" + dto.isPolicySet()); - metaDataList.add(prefix + "|" + dto.isReferenceOnly()); - } - } - - public static String[] createBasicPolicyData(SimplePolicyEditorDTO policyEditorDTO) { - - List metaDataList = new ArrayList(); - - metaDataList.add("policyId|" + policyEditorDTO.getPolicyId()); - metaDataList.add("category|" + policyEditorDTO.getAppliedCategory()); - metaDataList.add("policyDescription|" + policyEditorDTO.getDescription()); - metaDataList.add("userAttributeId|" + policyEditorDTO.getUserAttributeId()); - metaDataList.add("userAttributeValue|" + policyEditorDTO.getUserAttributeValue()); - metaDataList.add("function|" + policyEditorDTO.getFunction()); - metaDataList.add("actionValue|" + policyEditorDTO.getActionValue()); - metaDataList.add("resourceValue|" + policyEditorDTO.getResourceValue()); - metaDataList.add("category|" + policyEditorDTO.getAppliedCategory()); - metaDataList.add("environmentValue|" + policyEditorDTO.getEnvironmentValue()); - metaDataList.add("environmentId|" + policyEditorDTO.getEnvironmentId()); - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null && elementDTOs.size() > 0) { - for (int i = 0; i < elementDTOs.size(); i++) { - SimplePolicyEditorElementDTO dto = elementDTOs.get(i); - if (dto.getResourceValue() != null) { - metaDataList.add("resourceValue" + i + "|" + dto.getResourceValue()); - } else { - metaDataList.add("resourceValue" + i); - } - if (dto.getEnvironmentValue() != null) { - metaDataList.add("environmentValue" + i + "|" + dto.getEnvironmentValue()); - } else { - metaDataList.add("environmentValue" + i); - } - if (dto.getActionValue() != null) { - metaDataList.add("actionValue" + i + "|" + dto.getActionValue()); - } else { - metaDataList.add("actionValue" + i); - } - if (dto.getOperationType() != null) { - metaDataList.add("operationValue" + i + "|" + dto.getOperationType()); - } else { - metaDataList.add("operationValue" + i); - } - if (dto.getUserAttributeId() != null) { - metaDataList.add("userAttributeId" + i + "|" + dto.getUserAttributeId()); - } else { - metaDataList.add("userAttributeId" + i); - } - if (dto.getUserAttributeValue() != null) { - metaDataList.add("userAttributeValue" + i + "|" + dto.getUserAttributeValue()); - } else { - metaDataList.add("userAttributeValue" + i); - } - if (dto.getEnvironmentId() != null) { - metaDataList.add("environmentId" + i + "|" + dto.getEnvironmentId()); - } else { - metaDataList.add("environmentId" + i); - } - if (dto.getFunctionOnResources() != null) { - metaDataList.add("functionOnResources" + i + "|" + dto.getFunctionOnResources()); - } else { - metaDataList.add("functionOnResources" + i); - } - if (dto.getFunctionOnActions() != null) { - metaDataList.add("functionOnActions" + i + "|" + dto.getFunctionOnActions()); - } else { - metaDataList.add("functionOnActions" + i); - } - if (dto.getFunctionOnUsers() != null) { - metaDataList.add("functionOnUsers" + i + "|" + dto.getFunctionOnUsers()); - } else { - metaDataList.add("functionOnUsers" + i); - } - if (dto.getFunctionOnEnvironments() != null) { - metaDataList.add("functionOnEnvironments" + i + "|" + dto.getFunctionOnEnvironments()); - } else { - metaDataList.add("functionOnEnvironments" + i); - } - - } - } - return metaDataList.toArray(new String[metaDataList.size()]); - } - -////////////////////////////////////// Simple Policy Editor data //////////////////////////////////// - - - public static SimplePolicyEditorDTO createSimplePolicyEditorDTO(String[] policyEditorData) { - - Map metaDataMap = new HashMap(); - List SimplePolicyEditorElementDTOs = new ArrayList(); - - int i = 0; - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - String value = data.substring(data.indexOf("|") + 1); - metaDataMap.put(identifier, value); - } - i++; - } - } - - SimplePolicyEditorDTO policyEditorDTO = new SimplePolicyEditorDTO(); - policyEditorDTO.setPolicyId(metaDataMap.get("policyId")); - policyEditorDTO.setAppliedCategory(metaDataMap.get("policyId")); - policyEditorDTO.setFunction(metaDataMap.get("function")); - policyEditorDTO.setActionValue(metaDataMap.get("actionValue")); - policyEditorDTO.setDescription(metaDataMap.get("policyDescription")); - policyEditorDTO.setUserAttributeId(metaDataMap.get("userAttributeId")); - policyEditorDTO.setUserAttributeValue(metaDataMap.get("userAttributeValue")); - policyEditorDTO.setResourceValue(metaDataMap.get("resourceValue")); - policyEditorDTO.setEnvironmentValue(metaDataMap.get("environmentValue")); - policyEditorDTO.setEnvironmentId(metaDataMap.get("environmentId")); - policyEditorDTO.setAppliedCategory(metaDataMap.get("category")); - - i = (i - 11) / 11; - - for (int j = 0; j < i; j++) { - - SimplePolicyEditorElementDTO elementDTO = new SimplePolicyEditorElementDTO(); - - elementDTO.setResourceValue(metaDataMap.get("resourceValue" + j)); - elementDTO.setEnvironmentValue(metaDataMap.get("environmentValue" + j)); - if (metaDataMap.get("actionValue" + j) != null) { - elementDTO.setActionValue(metaDataMap.get("actionValue" + j)); - } - elementDTO.setOperationType(metaDataMap.get("operationValue" + j)); - elementDTO.setUserAttributeId(metaDataMap.get("userAttributeId" + j)); - elementDTO.setUserAttributeValue(metaDataMap.get("userAttributeValue" + j)); - elementDTO.setEnvironmentId(metaDataMap.get("environmentId" + j)); - elementDTO.setFunctionOnResources(metaDataMap.get("functionOnResources" + j)); - elementDTO.setFunctionOnActions(metaDataMap.get("functionOnActions" + j)); - elementDTO.setFunctionOnUsers(metaDataMap.get("functionOnUsers" + j)); - elementDTO.setFunctionOnEnvironments(metaDataMap.get("functionOnEnvironments" + j)); - - SimplePolicyEditorElementDTOs.add(elementDTO); - } - - if (SimplePolicyEditorElementDTOs.size() > 0) { - policyEditorDTO.setSimplePolicyEditorElementDTOs(SimplePolicyEditorElementDTOs); - } - - return policyEditorDTO; - } - - -///////////////////////////////// policy Set /////////////////////////////////////////////////////// - -// public static PolicyElementDTO createPolicySetElementDTO(String policy) -// throws EntitlementPolicyCreationException { -// -// PolicySetDTO policyElementDTO = new PolicySetDTO(); -// OMElement omElement; -// try { -// omElement = AXIOMUtil.stringToOM(policy); -// } catch (XMLStreamException e) { -// throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); -// } -// -// if (omElement != null) { -// -// policyElementDTO.setPolicySetId(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_SET_ID))); -// -// String ruleCombiningAlgorithm = omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ALGORITHM)); -// -// try{ -// policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. -// split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_3)[1]); -// } catch (Exception ignore){ -// policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. -// split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_1)[1]); -// // if this is also fails, can not edit the policy -// } -// -// Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// -// if(iterator.hasNext()){ -// OMElement descriptionElement = (OMElement) iterator.next(); -// if(descriptionElement != null && descriptionElement.getText() != null){ -// policyElementDTO.setPolicyDescription(descriptionElement.getText().trim()); -// } -// } -// -// } -// return policyElementDTO; -// } - -//////////////////////////////// Standard policy editor///////////////////////////////////////////////////// - - public static PolicyElementDTO createPolicyElementDTO(String policy) - throws EntitlementPolicyCreationException { - - PolicyElementDTO policyElementDTO = new PolicyElementDTO(); - OMElement omElement; - try { - omElement = AXIOMUtil.stringToOM(policy); - } catch (XMLStreamException e) { - throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); - } - - if (omElement != null) { - - policyElementDTO.setPolicyName(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ID))); - - String ruleCombiningAlgorithm = omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_ALGORITHM)); - - try { - policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. - split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_3)[1]); - } catch (Exception ignore) { - policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. - split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_1)[1]); - // if this is also fails, can not edit the policy - } - - Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. - DESCRIPTION_ELEMENT); - - if (iterator.hasNext()) { - OMElement descriptionElement = (OMElement) iterator.next(); - if (descriptionElement != null && descriptionElement.getText() != null) { - policyElementDTO.setPolicyDescription(descriptionElement.getText().trim()); - } - } - - } - return policyElementDTO; - } - - public static List createRuleElementDTOs(String policy) - throws EntitlementPolicyCreationException { - - List ruleElementDTOs = new ArrayList(); - OMElement omElement; - try { - omElement = AXIOMUtil.stringToOM(policy); - } catch (XMLStreamException e) { - throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); - } - - if (omElement != null) { - Iterator iterator2 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. - RULE_ELEMENT); - while (iterator2.hasNext()) { - OMElement ruleElement = (OMElement) iterator2.next(); - ruleElementDTOs.add(createRuleDTO(ruleElement)); - } - } - return ruleElementDTOs; - } - - - public static RuleElementDTO createRuleDTO(OMElement omElement) { - RuleElementDTO ruleElementDTO = new RuleElementDTO(); - - if (omElement != null) { - ruleElementDTO.setRuleId(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_ID)).trim()); - ruleElementDTO.setRuleEffect(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_EFFECT)).trim()); - - Iterator iterator1 = omElement. - getChildrenWithLocalName(EntitlementPolicyConstants.DESCRIPTION_ELEMENT); - - while (iterator1.hasNext()) { - OMElement descriptionElement = (OMElement) iterator1.next(); - if (descriptionElement != null && descriptionElement.getText() != null) { - ruleElementDTO.setRuleDescription(descriptionElement.getText().trim()); - } - } - } - - return ruleElementDTO; - } - - - public static void processRuleRowPolicyEditorData(List rules, String[] policyEditorData) { - - for (RuleDTO ruleDTO : rules) { - List ruleList = new ArrayList(); - List ruleTargetList = new ArrayList(); - List obligationList = new ArrayList(); - - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (identifier.startsWith("ruleTarget")) { - String ruleId = identifier.substring(10); - if (ruleId != null && ruleId.contains(ruleDTO.getRuleId())) { - ruleTargetList.add(data.substring(data.indexOf("|") + 1)); - } - } else if (identifier.startsWith("ruleObligation")) { - String ruleId = identifier.substring(14); - if (ruleId != null && ruleId.equals(ruleDTO.getRuleId())) { - obligationList.add(data.substring(data.indexOf("|") + 1)); - } - } else if (identifier.startsWith("ruleRow")) { - String ruleId = identifier.substring(7); - if (ruleId != null && ruleId.equals(ruleDTO.getRuleId())) { - ruleList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - } - - ruleDTO.setRowDTOList(createRowDTO(ruleList)); - ruleDTO.getTargetDTO().setRowDTOList(createRowDTO(ruleTargetList)); - ruleDTO.setObligationDTOs(createObligationDTO(obligationList)); - ruleDTO.setCompletedRule(true); - } - } - - public static void processTargetPolicyEditorData(TargetDTO targetDTO, String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("target").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - targetDTO.setRowDTOList(createRowDTO(targetList)); - } - } - - public static void processPolicyEditorData(PolicyElementDTO policyElementDTO, String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("policy").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - policyElementDTO.setPolicyName(targetList.get(0)); - policyElementDTO.setRuleCombiningAlgorithms(targetList.get(1)); - if (targetList.get(2) != null) { - policyElementDTO.setPolicyDescription(targetList.get(2)); - } - policyElementDTO.setVersion(targetList.get(3)); - } - } - - public static void processObligationPolicyEditorData(List obligationDTOs, - String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("obligation").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - obligationDTOs.addAll(createObligationDTO(targetList)); - } - } - - public static void processRulePolicyEditorData(List ruleDTOs, - String[] policyEditorData) { - List targetList = new ArrayList(); - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("rule").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - ruleDTOs.addAll(createRuleDTO(targetList)); - if (ruleDTOs.size() > 0) { - processRuleRowPolicyEditorData(ruleDTOs, policyEditorData); - } - } - } - - public static void processReferencePolicyEditorData(List policyRefIdDTOs, - String[] policyEditorData) { - - List targetList = new ArrayList(); - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("reference").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - policyRefIdDTOs.addAll(createReferenceDTO(targetList)); - } - } - - private static List createRowDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 7) { - List newList = list.subList(i, i + 7); - if (newList != null) { - RowDTO rowDTO = new RowDTO(); - rowDTO.setCategory(newList.get(0)); - rowDTO.setPreFunction(newList.get(1)); - rowDTO.setFunction(newList.get(2)); - rowDTO.setAttributeValue(newList.get(3)); - rowDTO.setAttributeId(newList.get(4)); - rowDTO.setAttributeDataType(newList.get(5)); - rowDTO.setCombineFunction(newList.get(6)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createObligationDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 6) { - List newList = list.subList(i, i + 6); - if (newList != null) { - ObligationDTO rowDTO = new ObligationDTO(); - rowDTO.setType(newList.get(0)); - rowDTO.setObligationId(newList.get(1)); - rowDTO.setEffect(newList.get(2)); - rowDTO.setAttributeValue(newList.get(3)); - rowDTO.setResultAttributeId(newList.get(4)); - rowDTO.setAttributeValueDataType(newList.get(5)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createRuleDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 3) { - List newList = list.subList(i, i + 3); - if (newList != null) { - RuleDTO rowDTO = new RuleDTO(); - rowDTO.setRuleId(newList.get(0)); - rowDTO.setRuleEffect(newList.get(1)); - rowDTO.setRuleDescription(newList.get(2)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createReferenceDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 3) { - List newList = list.subList(i, i + 3); - if (newList != null) { - PolicyRefIdDTO rowDTO = new PolicyRefIdDTO(); - rowDTO.setId(newList.get(0)); - rowDTO.setPolicySet(Boolean.parseBoolean(newList.get(1))); - rowDTO.setReferenceOnly(Boolean.parseBoolean(newList.get(2))); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - -///////////////////////////////////////// Basic Policy Editor /////////////////////////////////////// - - /** - * create policy meta data that helps to edit the policy using basic editor - * - * @param basicPolicyDTO BasicPolicyDTO - * @param ruleElementOrder String - * @return String Array to dent to back end - */ - public static String[] generateBasicPolicyEditorData(BasicPolicyDTO basicPolicyDTO, - String ruleElementOrder) { - - List basicRuleDTOs = basicPolicyDTO.getBasicRuleDTOs(); - BasicTargetDTO basicTargetDTO = basicPolicyDTO.getTargetDTO(); - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.BASIC); - List arrangedRules = new ArrayList(); - - if (ruleElementOrder != null && ruleElementOrder.trim().length() > 0) { - String[] ruleIds = ruleElementOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (BasicRuleDTO ruleDTO : basicRuleDTOs) { - if (ruleId.equals(ruleDTO.getRuleId())) { - arrangedRules.add(ruleDTO); - } - } - } - basicRuleDTOs = arrangedRules; - } - - int ruleEditorDataConstant = EntitlementPolicyConstants.BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT; - int targetEditorDataConstant = EntitlementPolicyConstants.BASIC_POLICY_EDITOR_TARGET_DATA_AMOUNT; - - int i = 0; - String selectedDataType; - String[] policyEditorData; - if (basicRuleDTOs != null) { - policyEditorData = new String[targetEditorDataConstant + - (basicRuleDTOs.size() * ruleEditorDataConstant)]; - } else { - policyEditorData = new String[targetEditorDataConstant]; - } - - policyEditorData[i++] = basicPolicyDTO.getPolicyId(); - policyEditorData[i++] = basicPolicyDTO.getRuleAlgorithm(); - String algorithm = basicPolicyDTO.getRuleAlgorithm(); - if (algorithm != null && algorithm.trim().length() > 0) { - basicPolicyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(algorithm)); - } else { - basicPolicyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(holder.getDefaultRuleAlgorithm())); - } - policyEditorData[i++] = basicPolicyDTO.getVersion(); - policyEditorData[i++] = basicPolicyDTO.getDescription(); - - policyEditorData[i++] = basicTargetDTO.getFunctionOnResources(); - policyEditorData[i++] = basicTargetDTO.getResourceList(); - policyEditorData[i++] = basicTargetDTO.getResourceId(); - String resourceId = basicTargetDTO.getResourceId(); - policyEditorData[i++] = basicTargetDTO.getResourceDataType(); - basicTargetDTO.setFunctionOnResources(holder.getFunctionUri(basicTargetDTO.getFunctionOnResources())); - basicTargetDTO.setResourceId(holder.getAttributeIdUri(resourceId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(resourceId)) != null) { - basicTargetDTO.setResourceDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnSubjects(); - policyEditorData[i++] = basicTargetDTO.getSubjectList(); - policyEditorData[i++] = basicTargetDTO.getSubjectId(); - policyEditorData[i++] = basicTargetDTO.getSubjectDataType(); - String subjectId = basicTargetDTO.getSubjectId(); - basicTargetDTO.setFunctionOnSubjects(holder.getFunctionUri(basicTargetDTO.getFunctionOnSubjects())); - basicTargetDTO.setSubjectId(holder.getAttributeIdUri(subjectId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(subjectId)) != null) { - basicTargetDTO.setSubjectDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnActions(); - policyEditorData[i++] = basicTargetDTO.getActionList(); - policyEditorData[i++] = basicTargetDTO.getActionId(); - String actionId = basicTargetDTO.getActionId(); - policyEditorData[i++] = basicTargetDTO.getActionDataType(); - basicTargetDTO.setFunctionOnActions(holder.getFunctionUri(basicTargetDTO.getFunctionOnActions())); - basicTargetDTO.setActionId(holder.getAttributeIdUri(actionId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(actionId)) != null) { - basicTargetDTO.setActionDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnEnvironment(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentList(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentId(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentDataType(); - String environmentId = basicTargetDTO.getEnvironmentId(); - basicTargetDTO.setFunctionOnEnvironment(holder.getFunctionUri(basicTargetDTO.getFunctionOnEnvironment())); - basicTargetDTO.setEnvironmentId(holder.getAttributeIdUri(environmentId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(environmentId)) != null) { - basicTargetDTO.setEnvironmentDataType(selectedDataType); - } - - - if (basicRuleDTOs != null && basicRuleDTOs.size() > 0) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - generateBasicPolicyEditorDataForRule(basicRuleDTO, policyEditorData, i); - i = i + ruleEditorDataConstant; - - if (basicRuleDTO.getRuleId() == null || basicRuleDTO.getRuleId().trim().length() == 0) { - basicRuleDTO.setRuleId(UUID.randomUUID().toString()); - } - - if (basicRuleDTO.getRuleEffect() == null || basicRuleDTO.getRuleEffect().trim().length() == 0) { - basicRuleDTO.setRuleEffect(holder.getDefaultEffect()); - } - } - } - - if (holder.isAddLastRule()) { - - if (basicRuleDTOs == null) { - basicRuleDTOs = new ArrayList(); - } - - BasicRuleDTO basicRuleDTO = new BasicRuleDTO(); - basicRuleDTO.setRuleId(UUID.randomUUID().toString()); - if (holder.getLastRuleEffect() != null) { - basicRuleDTO.setRuleEffect(holder.getLastRuleEffect()); - } else { - basicRuleDTO.setRuleEffect(holder.getDefaultEffect()); - } - basicRuleDTOs.add(basicRuleDTO); - } - - //as we have rearrage the rules - basicPolicyDTO.setBasicRuleDTOs(basicRuleDTOs); - - return policyEditorData; - } - - public static String[] generateBasicPolicyEditorDataForRule(BasicRuleDTO basicRuleDTO, - String[] policyEditorData, int currentArrayIndex) { - int i = currentArrayIndex; - String selectedDataType; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.BASIC); - - policyEditorData[i++] = basicRuleDTO.getRuleId(); - policyEditorData[i++] = basicRuleDTO.getRuleEffect(); - policyEditorData[i++] = basicRuleDTO.getRuleDescription(); - basicRuleDTO.setRuleEffect(holder.getRuleEffectUri(basicRuleDTO.getRuleEffect())); - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnResources(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnResources(); - policyEditorData[i++] = basicRuleDTO.getResourceList(); - policyEditorData[i++] = basicRuleDTO.getResourceId(); - String resourceId = basicRuleDTO.getResourceId(); - policyEditorData[i++] = basicRuleDTO.getResourceDataType(); - basicRuleDTO.setPreFunctionOnResources(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnResources())); - basicRuleDTO.setFunctionOnResources(holder.getFunctionUri(basicRuleDTO.getFunctionOnResources())); - basicRuleDTO.setResourceId(holder.getAttributeIdUri(resourceId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(resourceId)) != null) { - basicRuleDTO.setResourceDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnSubjects(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnSubjects(); - policyEditorData[i++] = basicRuleDTO.getSubjectList(); - policyEditorData[i++] = basicRuleDTO.getSubjectId(); - policyEditorData[i++] = basicRuleDTO.getSubjectDataType(); - String subjectId = basicRuleDTO.getSubjectId(); - basicRuleDTO.setPreFunctionOnSubjects(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnSubjects())); - basicRuleDTO.setFunctionOnSubjects(holder.getFunctionUri(basicRuleDTO.getFunctionOnSubjects())); - basicRuleDTO.setSubjectId(holder.getAttributeIdUri(subjectId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(subjectId)) != null) { - basicRuleDTO.setSubjectDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnActions(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnActions(); - policyEditorData[i++] = basicRuleDTO.getActionList(); - policyEditorData[i++] = basicRuleDTO.getActionId(); - String actionId = basicRuleDTO.getActionId(); - policyEditorData[i++] = basicRuleDTO.getActionDataType(); - basicRuleDTO.setPreFunctionOnActions(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnActions())); - basicRuleDTO.setFunctionOnActions(holder.getFunctionUri(basicRuleDTO.getFunctionOnActions())); - basicRuleDTO.setActionId(holder.getAttributeIdUri(actionId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(actionId)) != null) { - basicRuleDTO.setActionDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnEnvironment(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnEnvironment(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentList(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentId(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentDataType(); - String environmentId = basicRuleDTO.getSubjectId(); - basicRuleDTO.setPreFunctionOnEnvironment(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnEnvironment())); - basicRuleDTO.setFunctionOnEnvironment(holder.getFunctionUri(basicRuleDTO.getFunctionOnEnvironment())); - basicRuleDTO.setEnvironmentId(holder.getAttributeIdUri(environmentId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(environmentId)) != null) { - basicRuleDTO.setEnvironmentDataType(selectedDataType); - } - - return policyEditorData; - } - - - public static BasicPolicyDTO createBasicPolicyDTO(String[] policyEditorData) { - - BasicPolicyDTO basicPolicyDTO = new BasicPolicyDTO(); - int i = 0; - - if (policyEditorData[i] != null) { - basicPolicyDTO.setPolicyId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setRuleAlgorithm(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setVersion(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setDescription(policyEditorData[i]); - } - i++; - - BasicTargetDTO basicTargetDTO = new BasicTargetDTO(); - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnResources(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnSubjects(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnActions(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnEnvironment(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentDataType(policyEditorData[i]); - } - i++; - - basicPolicyDTO.setTargetDTO(basicTargetDTO); - List basicRuleDTOs = createBasicRuleDTOs(policyEditorData, i); - if (basicRuleDTOs != null && basicRuleDTOs.size() > 0) { - basicPolicyDTO.setBasicRuleDTOs(basicRuleDTOs); - } - - return basicPolicyDTO; - } - - public static List createBasicRuleDTOs(String[] policyEditorData, int nextIndex) { - - List basicRuleDTOs = new ArrayList(); - if (policyEditorData != null) { - while (true) { - if (policyEditorData.length == nextIndex) { - break; - } - BasicRuleDTO basicRuleDTO = createBasicRuleDTO(policyEditorData, nextIndex); - nextIndex = nextIndex + EntitlementPolicyConstants.BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT; - basicRuleDTO.setCompletedRule(true); - basicRuleDTOs.add(basicRuleDTO); - } - } - return basicRuleDTOs; - } - - public static BasicRuleDTO createBasicRuleDTO(String[] policyEditorDataForRule, int nextIndex) { - - BasicRuleDTO basicRuleDTO = new BasicRuleDTO(); - int i = nextIndex; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleEffect(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleDescription(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnResources(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnResources(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceDataType(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnSubjects(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnSubjects(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectDataType(policyEditorDataForRule[i]); - } - i++; - - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnActions(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnActions(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionDataType(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnEnvironment(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnEnvironment(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentDataType(policyEditorDataForRule[i]); - } - - return basicRuleDTO; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/test/resources/testng.xml b/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/test/resources/testng.xml deleted file mode 100644 index 65977e15934b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.common/src/test/resources/testng.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/README.md b/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/README.md deleted file mode 100644 index f3ec4a2ff85b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/README.md +++ /dev/null @@ -1,24 +0,0 @@ -REST API implementation for WSO2 IS -=================================== - -This is a REST implementation of the WSO2 IS Entitlement Service, done as a part of GSoC 2016 - -The code is still in early stages, and I would highly appreciate if you could carry out tests and provide feedback / issues / comments on it. - -Design and implementation -------------------------- - -Design and implementation details of the endpoint is available at [http://manzzup.blogspot.com/2016/08/gsoc-2016-rest-implementation-for-wso2.html](http://manzzup.blogspot.com/2016/08/gsoc-2016-rest-implementation-for-wso2.html) - - -Procedure --------- - -1. Download the target/entitlement.war file -2. Place it in your **{IS ROOT}/repository/deployement/server/webapps** (Tested for IS 5.2.0) -3. You can hot deploy the war file as well -4. Once deployed the WADL definitions for the service can be seen at, **https://localhost:9443/entitlement/entitlement/Decision?_wadl** -5. The service curently support both JSON and XML -6. TO test various service methods, use the curl requests and json/xml request definitions available under resources/curlTests - -Thank you!! diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/REQUIRED_CHANGES.md b/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/REQUIRED_CHANGES.md deleted file mode 100644 index 81640581ce27..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/REQUIRED_CHANGES.md +++ /dev/null @@ -1,26 +0,0 @@ -Changes need to be done for different wso2 components for completion of the endpoint -==================================================================================== - -Balana ------- - -1) Public constructor for [MultiRequests](https://github.com/wso2/balana/blob/master/modules/balana-core/src/main/java/org/wso2/balana/xacml3/MultiRequests.java) - -Needs the public constructor for manual creation of `RequestCtx` object in JSONParser - -2) Public getter for obligationId in [Obligation](https://github.com/wso2/balana/blob/master/modules/balana-core/src/main/java/org/wso2/balana/xacml3/Obligation.java) - -Refer the following [PR](https://github.com/wso2/balana/pull/41) - -3) Public method in [PDP](https://github.com/wso2/balana/blob/master/modules/balana-core/src/main/java/org/wso2/balana/PDP.java) that -can convert a given XACML String to `ResponseCtx` object. - -This process only done internally in `evaluate` method bodies. But in the REST endpoint, someone can send the request in XACML -but needs the response in JSON, for which the `evaluate` method should either return a ResponseCtx object or a JSON String. Since -JSON is not already supported in Balana, if there's a converter method to produce `RequestCtx` from XACML String, the exsting -evaluate method can be used. - -4) Integrating the JSON support - -JSON support is give using 2 supporter classes in the REST source code. But since the functionality of the code is better related -to balana, it's better to implement them inside Balana. diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/META-INF/webapp-classloading.xml b/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/META-INF/webapp-classloading.xml deleted file mode 100644 index aa3a4c279762..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/META-INF/webapp-classloading.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - false - - - CXF3,Carbon - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/cxf-servlet.xml deleted file mode 100644 index a9cac8d44233..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/cxf-servlet.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/web.xml b/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 7b1c2f3bbd89..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.endpoint/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - Entitlement-Service-Provider - - - HttpHeaderSecurityFilter - org.apache.catalina.filters.HttpHeaderSecurityFilter - - hstsEnabled - false - - - - - HttpHeaderSecurityFilter - * - - - - ContentTypeBasedCachePreventionFilter - - org.wso2.carbon.ui.filters.cache.ContentTypeBasedCachePreventionFilter - - - patterns - "text/html" ,"application/json" ,"plain/text" - - - filterAction - enforce - - - httpHeaders - - Cache-Control: no-store, no-cache, must-revalidate, private - - - - - - ContentTypeBasedCachePreventionFilter - * - - - - - ApiOriginFilter - org.wso2.carbon.identity.entitlement.endpoint.filter.ApiOriginFilter - - - ApiOriginFilter - /* - - - - EntitlementServlet - EntitlementServlet - Entitlement Endpoints - org.apache.cxf.transport.servlet.CXFServlet - 1 - - - - swagger.api.basepath - https://localhost:9443/entitlement - - - - - EntitlementServlet - /* - - - - 60 - - true - - - - - - secured services - /decision/* - - - - - - CONFIDENTIAL - - - - - org.wso2.carbon.identity.entitlement.endpoint.impl.ApplicationInitializer - - - - - - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyBean.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyBean.java deleted file mode 100644 index b6e97e01b7f8..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyBean.java +++ /dev/null @@ -1,485 +0,0 @@ -/* - * Copyright (c) 2005-2010, 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.identity.entitlement.ui; - -import org.wso2.balana.utils.policy.dto.BasicRuleDTO; -import org.wso2.balana.utils.policy.dto.BasicTargetDTO; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementFinderDataHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementTreeNodeDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.ExtendAttributeDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicySetDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RuleDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * This Bean is used to keep the user data temporary while travelling through - * the UI wizard - */ - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class EntitlementPolicyBean { - - public Map functionIdMap = new HashMap(); - public Map functionIdElementValueMap = new HashMap(); - private String policyName; - private String algorithmName; - private String policyDescription; - private String userInputData; - private List subscribersList = new ArrayList(); - private SimplePolicyEditorDTO SimplePolicyEditorDTO; - private Map categoryMap = new HashMap(); - private Map targetFunctionMap = new HashMap(); - private Map attributeIdMap = new HashMap(); - private Map ruleFunctionMap = new HashMap(); - private boolean editPolicy; - private String[] policyCombiningAlgorithms = new String[0]; - private Map entitlementFinders = - new HashMap(); - private Map selectedEntitlementData = new HashMap(); - private Map entitlementLevelData = - new HashMap(); - private BasicTargetDTO basicTargetDTO = null; - private TargetDTO targetDTO = null; - private PolicySetDTO policySetDTO = null; - private List basicRuleDTOs = new ArrayList(); - - private List ruleDTOs = new ArrayList(); - - private List extendAttributeDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - private String ruleElementOrder; - - private String policyReferenceOrder; - - private Set preFunctions = new HashSet(); - - private List policyRefIds = new ArrayList(); - - /** - * This method is temporally used to clear the entitlement bean. Need to - * update with a method proper implementation TODO - */ - public void cleanEntitlementPolicyBean() { - - policyName = null; - - algorithmName = null; - - policyDescription = null; - - userInputData = null; - - editPolicy = false; - - policySetDTO = null; - - functionIdMap.clear(); - - functionIdElementValueMap.clear(); - - basicRuleDTOs.clear(); - - removeBasicTargetElementDTO(); - - targetDTO = null; - - ruleDTOs.clear(); - - extendAttributeDTOs.clear(); - - obligationDTOs.clear(); - - SimplePolicyEditorDTO = null; - - basicTargetDTO = null; - - policyReferenceOrder = null; - - policyRefIds.clear(); - - } - - public String getPolicyName() { - return policyName; - } - - public void setPolicyName(String policyName) { - this.policyName = policyName; - } - - public String getAlgorithmName() { - return algorithmName; - } - - public void setAlgorithmName(String algorithmName) { - this.algorithmName = algorithmName; - } - - public String getPolicyDescription() { - return policyDescription; - } - - public void setPolicyDescription(String policyDescription) { - this.policyDescription = policyDescription; - } - - public String getUserInputData() { - return userInputData; - } - - public void setUserInputData(String userInputData) { - this.userInputData = userInputData; - } - - public List getBasicRuleDTOs() { - return basicRuleDTOs; - } - - public void setBasicRuleDTOs(List basicRuleDTOs) { - this.basicRuleDTOs = basicRuleDTOs; - } - - public void setBasicRuleElementDTOs(BasicRuleDTO basicRuleDTO) { - if (basicRuleDTOs.size() > 0) { - Iterator iterator = basicRuleDTOs.listIterator(); - while (iterator.hasNext()) { - BasicRuleDTO elementDTO = (BasicRuleDTO) iterator - .next(); - if (elementDTO.getRuleId().equals( - basicRuleDTO.getRuleId())) { - if (elementDTO.isCompletedRule()) { - basicRuleDTO.setCompletedRule(true); - } - iterator.remove(); - } - } - } - this.basicRuleDTOs.add(basicRuleDTO); - } - - public BasicRuleDTO getBasicRuleElement(String ruleId) { - if (basicRuleDTOs.size() > 0) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - if (basicRuleDTO.getRuleId().equals(ruleId)) { - return basicRuleDTO; - } - } - } - return null; - } - - public boolean removeBasicRuleElement(String ruleId) { - if (basicRuleDTOs.size() > 0 && ruleId != null) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - if (ruleId.equals(basicRuleDTO.getRuleId())) { - return basicRuleDTOs.remove(basicRuleDTO); - } - } - } - return false; - } - - public void removeBasicRuleElements() { - if (basicRuleDTOs.size() > 0) { - Iterator iterator = basicRuleDTOs.listIterator(); - while (iterator.hasNext()) { - iterator.next(); - iterator.remove(); - } - } - } - - -/////////////////////////////////////// new - - public List getRuleDTOs() { - return ruleDTOs; - } - - public void setRuleDTOs(List ruleDTOs) { - this.ruleDTOs = ruleDTOs; - } - - public void setRuleDTO(RuleDTO ruleDTO) { - if (ruleDTOs.size() > 0) { - Iterator iterator = ruleDTOs.listIterator(); - while (iterator.hasNext()) { - RuleDTO elementDTO = (RuleDTO) iterator.next(); - if (elementDTO.getRuleId().equals( - ruleDTO.getRuleId())) { - if (elementDTO.isCompletedRule()) { - ruleDTO.setCompletedRule(true); - } - iterator.remove(); - } - } - } - this.ruleDTOs.add(ruleDTO); - } - - public RuleDTO getRuleDTO(String ruleId) { - if (ruleDTOs.size() > 0) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleDTO.getRuleId().equals(ruleId)) { - return ruleDTO; - } - } - } - return null; - } - - public boolean removeRuleDTO(String ruleId) { - if (ruleDTOs.size() > 0) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleDTO.getRuleId().equals(ruleId)) { - return ruleDTOs.remove(ruleDTO); - } - } - } - return false; - } - - public void removeRuleDTOs() { - if (ruleDTOs.size() > 0) { - Iterator iterator = ruleDTOs.listIterator(); - while (iterator.hasNext()) { - iterator.next(); - iterator.remove(); - } - } - } - - public List getExtendAttributeDTOs() { - return extendAttributeDTOs; - } - - public void setExtendAttributeDTOs(List extendAttributeDTOs) { - this.extendAttributeDTOs = extendAttributeDTOs; - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } - - public void addExtendAttributeDTO(ExtendAttributeDTO extendAttributeDTO) { - this.extendAttributeDTOs.add(extendAttributeDTO); - } - - /////////////////////////// //////// - public BasicTargetDTO getBasicTargetDTO() { - return basicTargetDTO; - } - - public void setBasicTargetDTO( - BasicTargetDTO basicTargetDTO) { - this.basicTargetDTO = basicTargetDTO; - } - - public void removeBasicTargetElementDTO() { - this.basicTargetDTO = null; - } - - public boolean isEditPolicy() { - return editPolicy; - } - - public void setEditPolicy(boolean editPolicy) { - this.editPolicy = editPolicy; - } - - public String[] getPolicyCombiningAlgorithms() { - return Arrays.copyOf(policyCombiningAlgorithms, policyCombiningAlgorithms.length); - } - - public void setPolicyCombiningAlgorithms(String[] policyCombiningAlgorithms) { - this.policyCombiningAlgorithms = Arrays.copyOf(policyCombiningAlgorithms, policyCombiningAlgorithms.length); - } - - public PolicySetDTO getPolicySetDTO() { - return policySetDTO; - } - - public void setPolicySetDTO(PolicySetDTO policySetDTO) { - this.policySetDTO = policySetDTO; - } - - public String getRuleElementOrder() { - return ruleElementOrder; - } - - public void setRuleElementOrder(String ruleElementOrder) { - this.ruleElementOrder = ruleElementOrder; - } - - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public Map getCategoryMap() { - return categoryMap; - } - - public void setCategoryMap(Map categoryMap) { - this.categoryMap = categoryMap; - } - - public Set getCategorySet() { - return categoryMap.keySet(); - } - - public Map getRuleFunctionMap() { - return ruleFunctionMap; - } - - public void setRuleFunctionMap(Map ruleFunctionMap) { - this.ruleFunctionMap = ruleFunctionMap; - } - - public Map getTargetFunctionMap() { - return targetFunctionMap; - } - - public void setTargetFunctionMap(Map targetFunctionMap) { - this.targetFunctionMap = targetFunctionMap; - } - - public Map getAttributeIdMap() { - return attributeIdMap; - } - - public void setAttributeIdMap(Map attributeIdMap) { - this.attributeIdMap = attributeIdMap; - } - - public Set getPreFunctions() { - return preFunctions; - } - - public void addPreFunction(String preFunction) { - this.preFunctions.add(preFunction); - } - - - public SimplePolicyEditorDTO getSimplePolicyEditorDTO() { - return SimplePolicyEditorDTO; - } - - public void setSimplePolicyEditorDTO(SimplePolicyEditorDTO simplePolicyEditorDTO) { - this.SimplePolicyEditorDTO = simplePolicyEditorDTO; - } - - public Map getEntitlementFinders() { - return entitlementFinders; - } - - public Set getEntitlementFinders(String category) { - Set holders = new HashSet(); - for (Map.Entry entry : entitlementFinders.entrySet()) { - EntitlementFinderDataHolder holder = entry.getValue(); - if (Arrays.asList(holder.getSupportedCategory()).contains(category)) { - holders.add(holder); - } - } - return holders; - } - - public void setEntitlementFinders(String name, EntitlementFinderDataHolder entitlementFinders) { - this.entitlementFinders.put(name, entitlementFinders); - } - - public Map getSelectedEntitlementData() { - return selectedEntitlementData; - } - - public Map getEntitlementLevelData() { - return entitlementLevelData; - } - - public List getPolicyRefIds() { - return policyRefIds; - } - - public void setPolicyRefIds(List policyRefIds) { - this.policyRefIds = policyRefIds; - } - - public void addPolicyRefId(PolicyRefIdDTO policyRefId) { - Iterator iterator = policyRefIds.listIterator(); - while (iterator.hasNext()) { - PolicyRefIdDTO dto = (PolicyRefIdDTO) iterator.next(); - if (policyRefId != null && dto.getId().equalsIgnoreCase(policyRefId.getId())) { - iterator.remove(); - } - } - this.policyRefIds.add(policyRefId); - } - - public void removePolicyRefId(String policyRefId) { - Iterator iterator = policyRefIds.listIterator(); - while (iterator.hasNext()) { - PolicyRefIdDTO dto = (PolicyRefIdDTO) iterator.next(); - if (policyRefId != null && dto.getId().equalsIgnoreCase(policyRefId)) { - iterator.remove(); - } - } - } - - public String getPolicyReferenceOrder() { - return policyReferenceOrder; - } - - public void setPolicyReferenceOrder(String policyReferenceOrder) { - this.policyReferenceOrder = policyReferenceOrder; - } - - public List getSubscribersList() { - return subscribersList; - } - - public void setSubscribersList(String[] subscribersList) { - List list = new ArrayList(Arrays.asList(subscribersList)); - this.subscribersList.addAll(list); - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyConstants.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyConstants.java deleted file mode 100644 index 78a48fb4f0db..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyConstants.java +++ /dev/null @@ -1,251 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui; - -/** - * Constants related with XACML policy such as per-defined Element Names and NameSpaces - */ - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class EntitlementPolicyConstants { - - public static final int DEFAULT_ITEMS_PER_PAGE = 10; - public static final String ENTITLEMENT_ADMIN_CLIENT = "EntitlementAdminClient"; - public static final String ENTITLEMENT_SUBSCRIBER_CLIENT = "EntitlementSubscriberClient"; - - public static final String ENTITLEMENT_CURRENT_VERSION = "currentVersion"; - - public static final String XACML3_POLICY_NAMESPACE = "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"; - - public static final String ATTRIBUTE_NAMESPACE = "urn:oasis:names:tc:xacml:2.0:example:attribute:"; - - public static final String POLICY_ELEMENT = "Policy"; - - public static final String APPLY_ELEMENT = "Apply"; - - public static final String MATCH_ELEMENT = "Match"; - - public static final String SUBJECT_ELEMENT = "Subject"; - - public static final String ACTION_ELEMENT = "Action"; - - public static final String RESOURCE_ELEMENT = "Resource"; - - public static final String ENVIRONMENT_ELEMENT = "Environment"; - - public static final String POLICY_ID = "PolicyId"; - - public static final String RULE_ALGORITHM = "RuleCombiningAlgId"; - - public static final String POLICY_VERSION = "Version"; - - public static final String DESCRIPTION_ELEMENT = "Description"; - - public static final String TARGET_ELEMENT = "Target"; - - public static final String RULE_ELEMENT = "Rule"; - - public static final String CONDITION_ELEMENT = "Condition"; - - public static final String FUNCTION_ELEMENT = "Function"; - - public static final String ATTRIBUTE_SELECTOR = "AttributeSelector"; - - public static final String ATTRIBUTE_VALUE = "AttributeValue"; - - public static final String FUNCTION = "Function"; - - public static final String VARIABLE_REFERENCE = "VariableReference"; - - public static final String ATTRIBUTE_DESIGNATOR = "AttributeDesignator"; - - public static final String ATTRIBUTE_ID = "AttributeId"; - - public static final String CATEGORY = "Category"; - - public static final String ATTRIBUTE = "Attribute"; - - public static final String ATTRIBUTES = "Attributes"; - - public static final String INCLUDE_RESULT = "IncludeInResult"; - - public static final String DATA_TYPE = "DataType"; - - public static final String ISSUER = "Issuer"; - - public static final String MUST_BE_PRESENT = "MustBePresent"; - - public static final String REQUEST_CONTEXT_PATH = "RequestContextPath"; - - public static final String MATCH_ID = "MatchId"; - - public static final String RULE_ID = "RuleId"; - - public static final String RULE_EFFECT = "Effect"; - - public static final String RULE_DESCRIPTION = "Description"; - - public static final String FUNCTION_ID = "FunctionId"; - - public static final String VARIABLE_ID = "VariableId"; - - public static final String OBLIGATION_EXPRESSIONS = "ObligationExpressions"; - - public static final String OBLIGATION_EXPRESSION = "ObligationExpression"; - - public static final String OBLIGATION_ID = "ObligationId"; - - public static final String OBLIGATION_EFFECT = "FulfillOn"; - - public static final String ADVICE_EXPRESSIONS = "AdviceExpressions"; - - public static final String ADVICE_EXPRESSION = "AdviceExpression"; - - public static final String ADVICE_ID = "AdviceId"; - - public static final String ADVICE_EFFECT = "AppliesTo"; - - public static final String ATTRIBUTE_ASSIGNMENT = "AttributeAssignmentExpression"; - - public static final String STRING_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#string"; - - public static final String INT_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#integer"; - - public static final String BOOLEAN_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#boolean"; - - public static final String DATE_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#date"; - - public static final String TIME_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#time"; - - public static final String DATE_TIME_DATA_TYPE = "http://www.w3.org/2001/XMLSchema#dateTime"; - - public static final String FUNCTION_BAG = "urn:oasis:names:tc:xacml:1.0:function:string-bag"; - - public static final String SUBJECT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - - public static final String SUBJECT_ID_ROLE = "http://wso2.org/claims/roles"; - - public static final String RESOURCE_ID = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - - public static final String RESOURCE_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:resource:resource"; - -// public static final String FUNCTION_EQUAL = "urn:oasis:names:tc:xacml:1.0:function:string-equal"; -// -// public static final String FUNCTION_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"; -// -// public static final String FUNCTION_IS_IN = "urn:oasis:names:tc:xacml:1.0:function:string-is-in"; -// -// public static final String FUNCTION_REGEXP = "urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"; -// -// public static final String FUNCTION_AT_LEAST = "urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"; -// -// public static final String FUNCTION_UNION = "urn:oasis:names:tc:xacml:1.0:function:string-union"; -// -// public static final String FUNCTION_SUBSET = "urn:oasis:names:tc:xacml:1.0:function:string-subset"; -// -// public static final String FUNCTION_SET_EQUAL = "urn:oasis:names:tc:xacml:1.0:function:string-set-equals"; -// -// public static final String FUNCTION_ANY_OF = "urn:oasis:names:tc:xacml:1.0:function:any-of"; -// -// public static final String FUNCTION_AND = "urn:oasis:names:tc:xacml:1.0:function:and"; -// -// public static final String EQUAL_TO = "equals to"; -// -// public static final String MATCH_TO = "matching-with"; -// -// public static final String IS_IN = "in"; -// -// public static final String REGEXP_MATCH = "matching reg-ex to"; -// -// public static final String AT_LEAST = "at-least-one-member-of"; -// -// public static final String AT_LEAST_ONE_MATCH = "at-least-one-matching-member-of"; -// -// public static final String AT_LEAST_ONE_MATCH_REGEXP = "at-least-one-matching-reg-ex-member-of"; -// -// public static final String SUBSET_OF = "a-sub-set-of"; -// -// public static final String SET_OF = "a-matching-set-of"; -// -// public static final String MATCH_REGEXP_SET_OF = "a matching reg-ex set of"; - - public static final String RULE_EFFECT_PERMIT = "Permit"; - - public static final String RULE_EFFECT_NOT_APPLICABLE = "Not Applicable"; - - public static final String RULE_EFFECT_DENY = "Deny"; - - public static final String ACTION_ID = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - - public static final String ENVIRONMENT_ID = "urn:oasis:names:tc:xacml:1.0:environment:environment-id"; - - public static final String SUBJECT_TYPE_ROLES = "Roles"; - - public static final String SUBJECT_TYPE_USERS = "Users"; - - public static final String DEFAULT_CARBON_DIALECT = "http://wso2.org/claims"; - - public static final String IMPORT_POLICY_REGISTRY = "Registry"; - - public static final String IMPORT_POLICY_FILE_SYSTEM = "FileSystem"; - - public static final String REQ_RES_CONTEXT_XACML2 = "urn:oasis:names:tc:xacml:2.0:context:schema:os"; - - public static final String REQ_RES_CONTEXT_XACML3 = "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"; - - public static final String REQ_SCHEME = "http://www.w3.org/2001/XMLSchema-instance"; - - public static final String RETURN_POLICY_LIST = "ReturnPolicyIdList"; - - public static final String COMBINED_DECISION = "CombinedDecision"; - - public static final String REQUEST_ELEMENT = "Request"; - - public static final String POLICY_SET_ID = "PolicySetId"; - - public static final String POLICY_ALGORITHM = "PolicyCombiningAlgId"; - - public static final String POLICY_SET_ELEMENT = "PolicySet"; - - public static final String POLICY_REFERENCE = "PolicyIdReference"; - - public static final String POLICY_SET_REFERENCE = "PolicySetIdReference"; - - public static final String ATTRIBUTE_SEPARATOR = ","; - - public static final String COMBO_BOX_DEFAULT_VALUE = "---Select---"; - - public static final String COMBO_BOX_ANY_VALUE = "Any"; - - public static final String SEARCH_ERROR = "Search_Error"; - - public static final String DEFAULT_META_DATA_MODULE_NAME = "Carbon Attribute Finder Module"; - - public static final int BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT = 23; - - public static final int BASIC_POLICY_EDITOR_TARGET_DATA_AMOUNT = 20; - - public static final String ENTITLEMENT_PUBLISHER_PROPERTY = "entitlementPublisherPropertyDTO"; - - public static final String ENTITLEMENT_PUBLISHER_MODULE = "entitlementPublisherModuleHolders"; - -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreationException.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreationException.java deleted file mode 100644 index a37955b9bda6..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreationException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2010, 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.identity.entitlement.ui; - -import org.wso2.carbon.identity.base.IdentityException; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class EntitlementPolicyCreationException extends IdentityException { - - private static final long serialVersionUID = -574465923080421499L; - - public EntitlementPolicyCreationException(String message) { - super(message); - } - - public EntitlementPolicyCreationException(String message, Throwable e) { - super(message, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreator.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreator.java deleted file mode 100644 index d1b3a5723b2b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/EntitlementPolicyCreator.java +++ /dev/null @@ -1,219 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.balana.utils.exception.PolicyBuilderException; -import org.wso2.balana.utils.policy.PolicyBuilder; -import org.wso2.balana.utils.policy.dto.BasicPolicyDTO; -import org.wso2.balana.utils.policy.dto.ObligationElementDTO; -import org.wso2.balana.utils.policy.dto.PolicyElementDTO; -import org.wso2.balana.utils.policy.dto.PolicySetElementDTO; -import org.wso2.balana.utils.policy.dto.RequestElementDTO; -import org.wso2.balana.utils.policy.dto.RuleElementDTO; -import org.wso2.balana.utils.policy.dto.TargetElementDTO; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorException; -import org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicyDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicySetDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RequestDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RuleDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorDTO; -import org.wso2.carbon.identity.entitlement.ui.util.PolicyCreatorUtil; -import org.wso2.carbon.identity.entitlement.ui.util.PolicyEditorUtil; - -import java.util.List; - -/** - * create XACML policy and convert it to a String Object - */ -public class EntitlementPolicyCreator { - - private static Log log = LogFactory.getLog(EntitlementPolicyCreator.class); - - /** - * Create XACML policy using the data received from basic policy wizard - * - * @param basicPolicyDTO BasicPolicyDTO - * @return String object of the XACML policy - * @throws PolicyEditorException throws - */ - public String createBasicPolicy(BasicPolicyDTO basicPolicyDTO) throws PolicyEditorException { - - if (basicPolicyDTO == null) { - throw new PolicyEditorException("Policy object can not be null"); - } - - try { - return PolicyBuilder.getInstance().build(basicPolicyDTO); - } catch (PolicyBuilderException e) { - log.error(e); - throw new PolicyEditorException("Error while building policy"); - } - } - - - /** - * Create XACML policy using the data received from basic policy wizard - * - * @param policyDTO PolicyDTO - * @return String object of the XACML policy - * @throws PolicyEditorException throws - */ - public String createPolicy(PolicyDTO policyDTO) throws PolicyEditorException { - - if (policyDTO == null) { - throw new PolicyEditorException("Policy object can not be null"); - } - - PolicyElementDTO policyElementDTO = new PolicyElementDTO(); - policyElementDTO.setPolicyName(policyDTO.getPolicyId()); - policyElementDTO.setRuleCombiningAlgorithms(policyDTO.getRuleAlgorithm()); - policyElementDTO.setPolicyDescription(policyDTO.getDescription()); - policyElementDTO.setVersion(policyDTO.getVersion()); - - if (policyDTO.getTargetDTO() != null) { - TargetElementDTO targetElementDTO = PolicyEditorUtil. - createTargetElementDTO(policyDTO.getTargetDTO()); - policyElementDTO.setTargetElementDTO(targetElementDTO); - } - - if (policyDTO.getRuleDTOs() != null) { - for (RuleDTO ruleDTO : policyDTO.getRuleDTOs()) { - RuleElementDTO ruleElementDTO = PolicyEditorUtil.createRuleElementDTO(ruleDTO); - policyElementDTO.addRuleElementDTO(ruleElementDTO); - } - } - - if (policyDTO.getObligationDTOs() != null) { - List obligationElementDTOs = PolicyEditorUtil. - createObligation(policyDTO.getObligationDTOs()); - policyElementDTO.setObligationElementDTOs(obligationElementDTOs); - } - - try { - return PolicyBuilder.getInstance().build(policyElementDTO); - } catch (PolicyBuilderException e) { - throw new PolicyEditorException("Error while building XACML Policy"); - } - } - - - /** - * Create XACML policy using the data received from basic policy wizard - * - * @param policyEditorDTO complete policy editor object - * @return String object of the XACML policy - * @throws PolicyEditorException throws - */ - public String createSOAPolicy(SimplePolicyEditorDTO policyEditorDTO) throws PolicyEditorException { - - return PolicyEditorUtil.createSOAPolicy(policyEditorDTO); - } - - - /** - * Create policy set using the added policy ot policy sets - * - * @param policySetDTO policy set element - * @param client - * @return String object of the XACML policy Set - * @throws PolicyEditorException throws - */ - public String createPolicySet(PolicySetDTO policySetDTO, - EntitlementPolicyAdminServiceClient client) throws PolicyEditorException { - - if (policySetDTO == null) { - throw new PolicyEditorException("Policy Set object can not be null"); - } - - PolicySetElementDTO policyElementDTO = new PolicySetElementDTO(); - policyElementDTO.setPolicySetId(policySetDTO.getPolicySetId()); - policyElementDTO.setPolicyCombiningAlgId(policySetDTO.getPolicyCombiningAlgId()); - policyElementDTO.setDescription(policySetDTO.getDescription()); - policyElementDTO.setVersion(policySetDTO.getVersion()); - - if (policySetDTO.getTargetDTO() != null) { - TargetElementDTO targetElementDTO = PolicyEditorUtil. - createTargetElementDTO(policySetDTO.getTargetDTO()); - policyElementDTO.setTargetElementDTO(targetElementDTO); - } - - if (policySetDTO.getPolicyIdReferences() != null) { - - for (PolicyRefIdDTO dto : policySetDTO.getPolicyRefIdDTOs()) { - if (dto.isReferenceOnly()) { - if (dto.isPolicySet()) { - policyElementDTO.getPolicySetIdReferences().add(dto.getId()); - } else { - policyElementDTO.getPolicyIdReferences().add(dto.getId()); - } - } else { - org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO policyDTO = null; - try { - policyDTO = client.getPolicy(dto.getId(), false); - } catch (Exception e) { - //ignore - } - if (policyDTO != null && policyDTO.getPolicy() != null) { - if (dto.isPolicySet()) { - policyElementDTO.getPolicySets().add(policyDTO.getPolicy()); - } else { - policyElementDTO.getPolicies().add(policyDTO.getPolicy()); - } - } - } - } - } - - if (policySetDTO.getObligations() != null) { - List obligationElementDTOs = PolicyEditorUtil. - createObligation(policySetDTO.getObligations()); - policyElementDTO.setObligationElementDTOs(obligationElementDTOs); - } - - try { - return PolicyBuilder.getInstance().build(policyElementDTO); - } catch (PolicyBuilderException e) { - throw new PolicyEditorException("Error while building XACML Policy"); - } - } - - - /** - * Create basic XACML request - * - * @param requestDTO request element - * @return String object of the XACML request - * @throws EntitlementPolicyCreationException throws - */ - public String createBasicRequest(RequestDTO requestDTO) - throws EntitlementPolicyCreationException, PolicyEditorException { - try { - - RequestElementDTO requestElementDTO = PolicyCreatorUtil.createRequestElementDTO(requestDTO); - return PolicyBuilder.getInstance().buildRequest(requestElementDTO); - } catch (PolicyBuilderException e) { - throw new PolicyEditorException("Error while building XACML Request"); - } - - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PolicyEditorConstants.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PolicyEditorConstants.java deleted file mode 100644 index c3426693ee35..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PolicyEditorConstants.java +++ /dev/null @@ -1,213 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui; - -/** - * Policy editor related constants - */ - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicyEditorConstants { - - - public static final String ATTRIBUTE_SEPARATOR = ","; - - public static final String TARGET_ELEMENT = "Target"; - - public static final String ANY_OF_ELEMENT = "AnyOf"; - - public static final String ALL_OF_ELEMENT = "AllOf"; - - public static final String COMBINE_FUNCTION_AND = "AND"; - - public static final String COMBINE_FUNCTION_OR = "OR"; - - public static final String COMBINE_FUNCTION_END = "END"; - - public static final String MATCH_ELEMENT = "Match"; - - public static final String MATCH_ID = "MatchId"; - - public static final String ATTRIBUTE_ID = "AttributeId"; - - public static final String CATEGORY = "Category"; - - public static final String DATA_TYPE = "DataType"; - - public static final String ISSUER = "Issuer"; - - public static final String SOA_CATEGORY_USER = "Subject"; - - public static final String SOA_CATEGORY_SUBJECT = "Subject"; - - public static final String SOA_CATEGORY_RESOURCE = "Resource"; - - public static final String SOA_CATEGORY_ACTION = "Action"; - - public static final String SOA_CATEGORY_ENVIRONMENT = "Environment"; - - public static final String MUST_BE_PRESENT = "MustBePresent"; - - public static final String ATTRIBUTE_DESIGNATOR = "AttributeDesignator"; - public static final String RULE_EFFECT_PERMIT = "Permit"; - public static final String RULE_EFFECT_DENY = "Deny"; - public static final String RULE_ALGORITHM_IDENTIFIER_1 = "urn:oasis:names:tc:xacml:1.0:" + - "rule-combining-algorithm:"; - public static final String RULE_ALGORITHM_IDENTIFIER_3 = "urn:oasis:names:tc:xacml:3.0:" + - "rule-combining-algorithm:"; - public static final String POLICY_ALGORITHM_IDENTIFIER_1 = "urn:oasis:names:tc:xacml:1.0:" + - "policy-combining-algorithm:"; - public static final String POLICY_ALGORITHM_IDENTIFIER_3 = "urn:oasis:names:tc:xacml:3.0:" + - "policy-combining-algorithm:"; - public static final String POLICY_EDITOR_SEPARATOR = "|"; - public static final int POLICY_EDITOR_ROW_DATA = 7; - public static final String DYNAMIC_SELECTOR_CATEGORY = "Category"; - public static final String DYNAMIC_SELECTOR_FUNCTION = "Function"; - public static final String SUBJECT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - public static final String SUBJECT_ID_ROLE = "http://wso2.org/claims/roles"; - public static final String RESOURCE_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - public static final String ACTION_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - public static final String ENVIRONMENT_ID_DEFAULT = "urn:oasis:names:tc:xacml:1.0:environment:environment-id"; - public static final String RESOURCE_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:resource"; - public static final String SUBJECT_CATEGORY_URI = "urn:oasis:names:tc:xacml:1.0:" + - "subject-category:access-subject"; - public static final String ACTION_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:action"; - public static final String ENVIRONMENT_CATEGORY_URI = "urn:oasis:names:tc:xacml:3.0:" + - "attribute-category:environment"; - public static final String ENVIRONMENT_CURRENT_DATE = "urn:oasis:names:tc:xacml:1.0:environment:current-date"; - public static final String ENVIRONMENT_CURRENT_TIME = "urn:oasis:names:tc:xacml:1.0:environment:current-time"; - public static final String ENVIRONMENT_CURRENT_DATETIME = "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime"; - public static final String SOA_POLICY_EDITOR = "SOA"; - - public static final class PreFunctions { - - public static final String PRE_FUNCTION_IS = "is"; - - public static final String PRE_FUNCTION_IS_NOT = "is-not"; - - public static final String PRE_FUNCTION_ARE = "are"; - - public static final String PRE_FUNCTION_ARE_NOT = "are-not"; - - public static final String CAN_DO = "can"; - - public static final String CAN_NOT_DO = "can not"; - } - - public static final class TargetPreFunctions { - - public static final String PRE_FUNCTION_IS = "is"; - - } - - public static final class TargetFunctions { - - public static final String FUNCTION_EQUAL = "equal"; - - } - - public static final class DataType { - - public static final String DAY_TIME_DURATION = "http://www.w3.org/2001/XMLSchema#dayTimeDuration"; - - public static final String YEAR_MONTH_DURATION = "http://www.w3.org/2001/XMLSchema#yearMonthDuration"; - - public static final String STRING = "http://www.w3.org/2001/XMLSchema#string"; - - public static final String TIME = "http://www.w3.org/2001/XMLSchema#time"; - - public static final String IP_ADDRESS = "urn:oasis:names:tc:xacml:2.0:data-type:ipAddress"; - - public static final String DATE_TIME = "http://www.w3.org/2001/XMLSchema#dateTime"; - - public static final String DATE = "http://www.w3.org/2001/XMLSchema#date"; - - public static final String DOUBLE = "http://www.w3.org/2001/XMLSchema#double"; - - public static final String INT = "http://www.w3.org/2001/XMLSchema#integer"; - - } - - public static final class CombiningAlog { - - public static final String DENY_OVERRIDE_ID = "deny-overrides"; - - public static final String PERMIT_OVERRIDE_ID = "permit-overrides"; - - public static final String FIRST_APPLICABLE_ID = "first-applicable"; - - public static final String ORDER_PERMIT_OVERRIDE_ID = "ordered-permit-overrides"; - - public static final String ORDER_DENY_OVERRIDE_ID = "ordered-deny-overrides"; - - public static final String DENY_UNLESS_PERMIT_ID = "deny-unless-permit"; - - public static final String PERMIT_UNLESS_DENY_ID = "permit-unless-deny"; - - public static final String ONLY_ONE_APPLICABLE_ID = "only-one-applicable"; - - } - - public static class FunctionIdentifier { - - public static final String ANY = "*"; - - public static final String EQUAL_RANGE = "["; - - public static final String EQUAL_RANGE_CLOSE = "]"; - - public static final String RANGE = "("; - - public static final String RANGE_CLOSE = ")"; - - public static final String GREATER = ">"; - - public static final String GREATER_EQUAL = ">="; - - public static final String LESS = "<"; - - public static final String LESS_EQUAL = "<="; - - public static final String REGEX = "{"; - - public static final String AND = "&"; - - public static final String OR = "|"; - - } - - public static final class AttributeId { - - public static final String ENV_DOMAIN = "Domain"; - - public static final String ENV_DATE = "Date"; - - public static final String ENV_DATE_TIME = "DateTime"; - - public static final String ENV_IP = "IP"; - - public static final String ENV_TIME = "Time"; - - public static final String USER_AGE = "Age"; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PropertyDTOComparator.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PropertyDTOComparator.java deleted file mode 100644 index 943654eecde7..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/PropertyDTOComparator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui; - -import org.wso2.carbon.identity.entitlement.stub.dto.PublisherPropertyDTO; - -import java.util.Comparator; - -/** - * Comparator implementation to sort the ModulePropertyDTO object array - */ - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PropertyDTOComparator implements Comparator { - - @Override - public int compare(Object o1, Object o2) { - - PublisherPropertyDTO dto1 = (PublisherPropertyDTO) o1; - PublisherPropertyDTO dto2 = (PublisherPropertyDTO) o2; - if (dto1.getDisplayOrder() < dto2.getDisplayOrder()) { - return -1; - } else if (dto1.getDisplayOrder() == dto2.getDisplayOrder()) { - return 0; - } else { - return 1; - } - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementAdminServiceClient.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementAdminServiceClient.java deleted file mode 100644 index ebc9ea6a5830..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementAdminServiceClient.java +++ /dev/null @@ -1,236 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.client; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.identity.entitlement.stub.EntitlementAdminServiceStub; -import org.wso2.carbon.identity.entitlement.stub.dto.PDPDataHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.PIPFinderDataHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.PolicyFinderDataHolder; - -/** - * - */ -public class EntitlementAdminServiceClient { - - private static final Log log = LogFactory.getLog(EntitlementAdminServiceClient.class); - private EntitlementAdminServiceStub stub; - - /** - * Instantiates EntitlementServiceClient - * - * @param cookie For session management - * @param backendServerURL URL of the back end server where EntitlementPolicyAdminService is - * running. - * @param configCtx ConfigurationContext - * @throws org.apache.axis2.AxisFault - */ - public EntitlementAdminServiceClient(String cookie, String backendServerURL, - ConfigurationContext configCtx) throws AxisFault { - String serviceURL = backendServerURL + "EntitlementAdminService"; - stub = new EntitlementAdminServiceStub(configCtx, serviceURL); - ServiceClient client = stub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); - } - - /** - * Clears the decision cache maintained by the PDP. - * - * @throws AxisFault - */ - public void clearDecisionCache() throws AxisFault { - - try { - stub.clearDecisionCache(); - } catch (Exception e) { - String message = e.getMessage(); - handleException(message, e); - } - } - - /** - * Clears the attribute cache maintained by the PDP. - * - * @throws AxisFault - */ - public void clearAttributeCache() throws AxisFault { - - try { - stub.clearAllAttributeCaches(); - } catch (Exception e) { - String message = e.getMessage(); - handleException(message, e); - } - } - - - /** - * Evaluate XACML request with PDP - * - * @param request XACML request as String - * @return XACML response as String - * @throws AxisFault if fails - */ - public String getDecision(String request) throws AxisFault { - try { - return stub.doTestRequest(request); - } catch (Exception e) { - handleException("Error occurred while test policy evaluation", e); - } - return null; - } - - /** - * Evaluate XACML request with PDP - * - * @param policies - * @param request XACML request as String - * @return XACML response as String - * @throws AxisFault if fails - */ - public String getDecision(String request, String[] policies) throws AxisFault { - try { - return stub.doTestRequestForGivenPolicies(request, policies); - } catch (Exception e) { - handleException("Error occurred while test policy evaluation", e); - } - return null; - } - - public PDPDataHolder getPDPData() throws AxisFault { - - try { - return stub.getPDPData(); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - - public PolicyFinderDataHolder getPolicyFinderData(String finderName) throws AxisFault { - - try { - return stub.getPolicyFinderData(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - public PIPFinderDataHolder getPIPAttributeFinderData(String finderName) throws AxisFault { - - try { - return stub.getPIPAttributeFinderData(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - public PIPFinderDataHolder getPIPResourceFinderData(String finderName) throws AxisFault { - - try { - return stub.getPIPResourceFinderData(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - public void refreshAttributeFinder(String finderName) throws AxisFault { - - try { - stub.refreshAttributeFinder(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - } - - public void refreshResourceFinder(String finderName) throws AxisFault { - - try { - stub.refreshResourceFinder(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - } - - public void refreshPolicyFinder(String finderName) throws AxisFault { - - try { - stub.refreshPolicyFinders(finderName); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - } - - /** - * Get globally defined policy combining algorithm - * - * @return policy combining algorithm as a String - * @throws AxisFault - */ - public String getGlobalPolicyAlgorithm() throws AxisFault { - try { - return stub.getGlobalPolicyAlgorithm(); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - /** - * Set policy combining algorithm globally - * - * @param policyAlgorithm policy combining algorithm as a String - * @throws AxisFault - */ - public void setGlobalPolicyAlgorithm(String policyAlgorithm) throws AxisFault { - try { - stub.setGlobalPolicyAlgorithm(policyAlgorithm); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - } - - /** - * Logs and wraps the given exception. - * - * @param msg Error message - * @param e Exception - * @throws AxisFault - */ - private void handleException(String msg, Exception e) throws AxisFault { - log.error(msg, e); - throw new AxisFault(msg, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyAdminServiceClient.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyAdminServiceClient.java deleted file mode 100644 index 6d18ce3c2dcf..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyAdminServiceClient.java +++ /dev/null @@ -1,480 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.client; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.fileupload.servlet.ServletRequestContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceEntitlementException; -import org.wso2.carbon.identity.entitlement.stub.EntitlementPolicyAdminServiceStub; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementFinderDataHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitlementTreeNodeDTO; -import org.wso2.carbon.identity.entitlement.stub.dto.PaginatedPolicySetDTO; -import org.wso2.carbon.identity.entitlement.stub.dto.PaginatedStatusHolder; -import org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO; -import org.wso2.carbon.identity.entitlement.stub.dto.PublisherDataHolder; - -import java.util.List; - - -public class EntitlementPolicyAdminServiceClient { - - private static final Log log = LogFactory.getLog(EntitlementPolicyAdminServiceClient.class); - private EntitlementPolicyAdminServiceStub stub; - - /** - * Instantiates EntitlementServiceClient - * - * @param cookie For session management - * @param backendServerURL URL of the back end server where EntitlementPolicyAdminService is - * running. - * @param configCtx ConfigurationContext - * @throws org.apache.axis2.AxisFault - */ - public EntitlementPolicyAdminServiceClient(String cookie, String backendServerURL, - ConfigurationContext configCtx) throws AxisFault { - String serviceURL = backendServerURL + "EntitlementPolicyAdminService"; - stub = new EntitlementPolicyAdminServiceStub(configCtx, serviceURL); - ServiceClient client = stub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); - } - - /** - * @param policyTypeFilter - * @param policySearchString - * @param pageNumber - * @param isPDPPolicy - * @return PaginatedPolicySetDTO object containing the number of pages and the set of policies that reside in the - * given page. - * @throws AxisFault - */ - public PaginatedPolicySetDTO getAllPolicies(String policyTypeFilter, String policySearchString, - int pageNumber, boolean isPDPPolicy) throws AxisFault { - try { - return stub.getAllPolicies(policyTypeFilter, policySearchString, pageNumber, isPDPPolicy); - } catch (Exception e) { - String message = "Error while loading all policies from backend service"; - handleException(e); - } - PaginatedPolicySetDTO paginatedPolicySetDTO = new PaginatedPolicySetDTO(); - paginatedPolicySetDTO.setPolicySet(new PolicyDTO[0]); - return paginatedPolicySetDTO; - } - - /** - * Gets policy DTO for given policy id - * - * @param policyId policy id - * @param isPDPPolicy - * @return returns policy DTO - * @throws AxisFault throws - */ - public PolicyDTO getPolicy(String policyId, boolean isPDPPolicy) throws AxisFault { - PolicyDTO dto = null; - try { - dto = stub.getPolicy(policyId, isPDPPolicy); - if (dto != null && dto.getPolicy() != null) { - dto.setPolicy(dto.getPolicy().trim().replaceAll("><", ">\n<")); - } - } catch (Exception e) { - handleException(e); - } - return dto; - } - - /** - * Gets policy DTO for given policy id with given version - * - * @param policyId policy id - * @param version - * @return returns policy DTO - * @throws AxisFault throws - */ - public PolicyDTO getPolicyByVersion(String policyId, String version) throws AxisFault { - PolicyDTO dto = null; - try { - dto = stub.getPolicyByVersion(policyId, version); - if (dto != null && dto.getPolicy() != null) { - dto.setPolicy(dto.getPolicy().trim().replaceAll("><", ">\n<")); - } - } catch (Exception e) { - handleException(e); - } - return dto; - } - - /** - * Gets light weight policy DTO for given policy id - * - * @param policyId policy id - * @return returns policy DTO - * @throws AxisFault throws - */ - public PolicyDTO getLightPolicy(String policyId) throws AxisFault { - PolicyDTO dto = null; - try { - dto = stub.getLightPolicy(policyId); - } catch (Exception e) { - handleException(e); - } - return dto; - } - - /** - * Rollbacks policy DTO for given policy version - * - * @param policyId policy id - * @param version policy version - * @throws AxisFault throws - */ - public void rollBackPolicy(String policyId, String version) throws AxisFault { - - try { - stub.rollBackPolicy(policyId, version); - } catch (Exception e) { - handleException(e); - } - } - - - /** - * @param policyIds - * @throws AxisFault - */ - public void removePolicies(String[] policyIds, boolean dePromote) throws AxisFault { - try { - stub.removePolicies(policyIds, dePromote); - } catch (Exception e) { - handleException(e); - } - } - - public void dePromotePolicy(String policyId) throws AxisFault { - try { - stub.dePromotePolicy(policyId); - } catch (Exception e) { - handleException(e); - } - } - - public void enableDisablePolicy(String policyId, boolean enable) throws AxisFault { - try { - stub.enableDisablePolicy(policyId, enable); - } catch (Exception e) { - handleException(e); - } - } - - public void orderPolicy(String policyId, int order) throws AxisFault { - try { - stub.orderPolicy(policyId, order); - } catch (Exception e) { - handleException(e); - } - } - - /** - * @param policy - * @throws AxisFault - */ - public void updatePolicy(PolicyDTO policy) throws AxisFault { - try { - if (policy.getPolicy() != null && policy.getPolicy().trim().length() > 0) { - policy.setPolicy(policy.getPolicy().trim().replaceAll(">\\s+<", "><")); - } - stub.updatePolicy(policy); - } catch (Exception e) { - handleException(e); - } - } - - /** - * @param policy - * @throws AxisFault - */ - public void addPolicy(PolicyDTO policy) throws AxisFault { - try { - policy.setPolicy(policy.getPolicy().trim().replaceAll(">\\s+<", "><")); - stub.addPolicy(policy); - } catch (Exception e) { - handleException(e); - } - } - - /** - * adding an entitlement policy which is extracted using file upload executor - * - * @param content content of the policy as a String Object - * @throws AxisFault, throws if fails - */ - public void uploadPolicy(String content) throws AxisFault { - - PolicyDTO dto = new PolicyDTO(); - dto.setPolicy(content); - dto.setPolicy(dto.getPolicy().trim().replaceAll(">\\s+<", "><")); - try { - stub.addPolicy(dto); - } catch (Exception e) { - handleException(e); - } - } - - /** - * Import XACML policy from registry - * - * @deprecated since the functionality cannot be support by the rdbms based implementation - * @param policyRegistryPath registry path - * @throws AxisFault - */ - @Deprecated - public void importPolicyFromRegistry(String policyRegistryPath) throws AxisFault { - - try { - stub.importPolicyFromRegistry(policyRegistryPath); - } catch (Exception e) { - handleException(e); - } - } - - /** - * Returns the list of policy set ids available in PDP - * - * @return list of policy set ids - * @throws AxisFault - */ - public String[] getAllPolicyIds() throws AxisFault { - - try { - return stub.getAllPolicyIds("*"); - } catch (Exception e) { - handleException(e); - } - return null; - } - - - /** - * @param requestContext - * @return - * @throws FileUploadException - */ - private List parseRequest(ServletRequestContext requestContext) throws FileUploadException { - FileItemFactory factory = new DiskFileItemFactory(); - ServletFileUpload upload = new ServletFileUpload(factory); - return upload.parseRequest(requestContext); - } - - /** - * Gets attribute value tree for given attribute type - * - * @param dataModule - * @param category - * @param regexp - * @param dataLevel - * @param limit - * @return attribute value tree - * @throws AxisFault throws - */ - public EntitlementTreeNodeDTO getEntitlementData(String dataModule, String category, - String regexp, int dataLevel, int limit) throws AxisFault { - try { - return stub.getEntitlementData(dataModule, category, regexp, dataLevel, limit); - } catch (Exception e) { - handleException(e); - } - - return null; - } - - /** - * @return - * @throws AxisFault - */ - public EntitlementFinderDataHolder[] getEntitlementDataModules() throws AxisFault { - - try { - return stub.getEntitlementDataModules(); - } catch (Exception e) { - handleException(e); - } - - return null; - } - - /** - * Gets all subscriber ids - * - * @param subscriberSearchString subscriberSearchString - * @return subscriber ids as String array - * @throws AxisFault throws - */ - public String[] getSubscriberIds(String subscriberSearchString) throws AxisFault { - - try { - return stub.getSubscriberIds(subscriberSearchString); - } catch (Exception e) { - handleException(e); - } - - return null; - } - - /** - * Gets subscriber data - * - * @param id subscriber id - * @return subscriber data as SubscriberDTO object - * @throws AxisFault throws - */ - public PublisherDataHolder getSubscriber(String id) throws AxisFault { - - try { - return stub.getSubscriber(id); - } catch (Exception e) { - handleException(e); - } - - return null; - } - - /** - * Updates or creates subscriber data - * - * @param holder subscriber data as ModuleDataHolder object - * @param update - * @throws AxisFault throws - */ - public void updateSubscriber(PublisherDataHolder holder, boolean update) throws AxisFault { - - try { - if (update) { - stub.updateSubscriber(holder); - } else { - stub.addSubscriber(holder); - } - } catch (Exception e) { - handleException(e); - } - } - - /** - * Removes publisher data - * - * @param id subscriber id - * @throws AxisFault throws - */ - public void deleteSubscriber(String id) throws AxisFault { - - try { - stub.deleteSubscriber(id); - } catch (Exception e) { - handleException(e); - } - } - - /** - * Publishes given set of policies to given set of subscribers - * - * @param policies policy ids as String array, if null or empty, all policies are published - * @param subscriberId subscriber ids as String array, if null or empty, publish to all subscribers - * @param version - * @param action - * @param enabled - * @param order - * @throws AxisFault throws - */ - public void publish(String[] policies, String[] subscriberId, String action, String version, - boolean enabled, int order) throws AxisFault { - try { - stub.publishPolicies(policies, subscriberId, action, version, enabled, order); - } catch (Exception e) { - handleException(e); - } - } - - - /** - * Get all publisher modules properties that is needed to configure - * - * @return publisher modules properties as ModuleDataHolder - * @throws AxisFault throws - */ - public PublisherDataHolder[] getPublisherModuleData() throws AxisFault { - - try { - return stub.getPublisherModuleData(); - } catch (Exception e) { - handleException(e); - } - - return new PublisherDataHolder[0]; - } - - public String[] getPolicyVersions(String policyId) throws AxisFault { - try { - return stub.getPolicyVersions(policyId); - } catch (Exception e) { - handleException(e); - } - - return new String[0]; - } - - public PaginatedStatusHolder getStatusData(String about, String key, String type, - String searchString, int pageNumber) throws AxisFault { - try { - return stub.getStatusData(about, key, type, searchString, pageNumber); - } catch (Exception e) { - handleException(e); - } - return null; - } - - /** - * Logs and wraps the given exception. - * - * @param e Exception - * @throws AxisFault - */ - private void handleException(Exception e) throws AxisFault { - - String errorMessage = "Unknown"; - - if (e instanceof EntitlementPolicyAdminServiceEntitlementException) { - EntitlementPolicyAdminServiceEntitlementException entitlementException = - (EntitlementPolicyAdminServiceEntitlementException) e; - if (entitlementException.getFaultMessage().getEntitlementException() != null) { - errorMessage = entitlementException.getFaultMessage().getEntitlementException().getMessage(); - } - } else { - errorMessage = e.getMessage(); - } - - throw new AxisFault(errorMessage, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyUploadExecutor.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyUploadExecutor.java deleted file mode 100644 index 3885571a45eb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementPolicyUploadExecutor.java +++ /dev/null @@ -1,115 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.client; - -import org.apache.commons.lang.StringUtils; -import org.wso2.carbon.CarbonConstants; -import org.wso2.carbon.CarbonException; -import org.wso2.carbon.ui.CarbonUIMessage; -import org.wso2.carbon.ui.transports.fileupload.AbstractFileUploadExecutor; -import org.wso2.carbon.utils.FileItemData; -import org.wso2.carbon.utils.ServerConstants; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * This class is responsible for uploading entitlement policy files. - * And this uses the AbstractFileUploadExecutor - * which has written to handle the carbon specific file uploading - */ -public class EntitlementPolicyUploadExecutor extends AbstractFileUploadExecutor { - - private static final String[] ALLOWED_FILE_EXTENSIONS = new String[]{".xml"}; - - private String errorRedirectionPage; - - @Override - public boolean execute(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) - throws CarbonException, IOException { - - String webContext = (String) httpServletRequest.getAttribute(CarbonConstants.WEB_CONTEXT); - String serverURL = (String) httpServletRequest.getAttribute(CarbonConstants.SERVER_URL); - String cookie = (String) httpServletRequest.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - errorRedirectionPage = getContextRoot(httpServletRequest) + "/" + webContext - + "/entitlement/index.jsp"; - - Map> fileItemsMap = getFileItemsMap(); - if (fileItemsMap == null || fileItemsMap.isEmpty()) { - String msg = "File uploading failed. No files are specified"; - log.error(msg); - CarbonUIMessage.sendCarbonUIMessage(msg, CarbonUIMessage.ERROR, httpServletRequest, - httpServletResponse, errorRedirectionPage); - return false; - } - - EntitlementPolicyAdminServiceClient client = - new EntitlementPolicyAdminServiceClient(cookie, serverURL, configurationContext); - List fileItems = fileItemsMap.get("policyFromFileSystem"); - String msg; - try { - for (FileItemData fileItem : fileItems) { - String filename = getFileName(fileItem.getFileItem().getName()); - checkServiceFileExtensionValidity(filename, ALLOWED_FILE_EXTENSIONS); - - if (!filename.endsWith(".xml")) { - throw new CarbonException("File with extension " + - getFileName(fileItem.getFileItem().getName()) + " is not supported!"); - } else { - try (BufferedReader br = new BufferedReader(new InputStreamReader( - fileItem.getDataHandler().getInputStream()))) { - - String temp; - String policyContent = ""; - while ((temp = br.readLine()) != null) { - policyContent += temp; - } - if (StringUtils.isNotEmpty(policyContent)) { - client.uploadPolicy(policyContent); - } - } catch (IOException ex) { - throw new CarbonException("Policy file " + filename + "cannot be read"); - } - } - } - httpServletResponse.setContentType("text/html; charset=utf-8"); - msg = "Policy have been uploaded successfully."; - CarbonUIMessage.sendCarbonUIMessage(msg, CarbonUIMessage.INFO, httpServletRequest, - httpServletResponse, getContextRoot(httpServletRequest) - + "/" + webContext + "/entitlement/index.jsp"); - return true; - } catch (Exception e) { - msg = "Policy uploading failed. " + e.getMessage(); - log.error(msg); - CarbonUIMessage.sendCarbonUIMessage(msg, CarbonUIMessage.ERROR, httpServletRequest, - httpServletResponse, errorRedirectionPage); - } - return false; - } - - @Override - protected String getErrorRedirectionPage() { - return errorRedirectionPage; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementServiceClient.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementServiceClient.java deleted file mode 100644 index d3569795a632..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/client/EntitlementServiceClient.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.client; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.identity.entitlement.stub.EntitlementServiceStub; -import org.wso2.carbon.identity.entitlement.stub.dto.EntitledResultSetDTO; - -public class EntitlementServiceClient { - - private static final Log log = LogFactory.getLog(EntitlementServiceClient.class); - private EntitlementServiceStub stub; - - /** - * Instantiates EntitlementServiceClient - * - * @param cookie For session management - * @param backendServerURL URL of the back end server where EntitlementService is running. - * @param configCtx ConfigurationContext - * @throws org.apache.axis2.AxisFault - */ - public EntitlementServiceClient(String cookie, String backendServerURL, - ConfigurationContext configCtx) throws AxisFault { - String serviceURL = backendServerURL + "EntitlementService"; - stub = new EntitlementServiceStub(configCtx, serviceURL); - ServiceClient client = stub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, cookie); - } - - /** - * Evaluate XACML request with PDP - * - * @param request XACML request as String - * @return XACML response as String - * @throws AxisFault if fails - */ - public String getDecision(String request) throws AxisFault { - try { - return stub.getDecision(request); - } catch (Exception e) { - handleException("Error occurred while policy evaluation", e); - } - return null; - } - - /** - * Gets user or role entitled resources - * - * @param subjectName user or role name - * @param resourceName resource name - * @param subjectId attribute id of the subject, user or role - * @param action action name - * @param enableChildSearch whether search is done for the child resources under the given resource name - * @return entitled resources as String array - * @throws org.apache.axis2.AxisFault throws - */ - public EntitledResultSetDTO getEntitledAttributes(String subjectName, String resourceName, - String subjectId, String action, boolean enableChildSearch) - throws AxisFault { - try { - return stub.getEntitledAttributes(subjectName, resourceName, subjectId, action, - enableChildSearch); - } catch (Exception e) { - handleException(e.getMessage(), e); - } - - return null; - } - - /** - * Logs and wraps the given exception. - * - * @param msg Error message - * @param e Exception - * @throws AxisFault - */ - private void handleException(String msg, Exception e) throws AxisFault { - log.error(msg, e); - throw new AxisFault(msg, e); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/BasicRequestDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/BasicRequestDTO.java deleted file mode 100644 index dd5e585e3ab0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/BasicRequestDTO.java +++ /dev/null @@ -1,102 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class BasicRequestDTO { - - - private List rowDTOs; - - private String resources; - - private String subjects; - - private String actions; - - private String enviornement; - - private String userAttributeValue; - - private String userAttributeId; - - public String getResources() { - return resources; - } - - public void setResources(String resources) { - this.resources = resources; - } - - public String getSubjects() { - return subjects; - } - - public void setSubjects(String subjects) { - this.subjects = subjects; - } - - public String getActions() { - return actions; - } - - public void setActions(String actions) { - this.actions = actions; - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getEnviornement() { - return enviornement; - } - - public void setEnviornement(String enviornement) { - this.enviornement = enviornement; - } - - public List getRowDTOs() { - return rowDTOs; - } - - public void setRowDTOs(List rowDTOs) { - this.rowDTOs = rowDTOs; - } - - public void addRowDTOs(RowDTO rowDTO) { - this.rowDTOs.add(rowDTO); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ElementCountDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ElementCountDTO.java deleted file mode 100644 index 6de1eea4cb84..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ElementCountDTO.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.dto; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class ElementCountDTO { - - private int subElementCount; - - private int attributeDesignatorsElementCount; - - private int attributeValueElementCount; - - private int attributeSelectorElementCount; - - public int getSubElementCount() { - return subElementCount; - } - - public void setSubElementCount(int subElementCount) { - this.subElementCount = subElementCount; - } - - public int getAttributeSelectorElementCount() { - return attributeSelectorElementCount; - } - - public void setAttributeSelectorElementCount(int attributeSelectorElementCount) { - this.attributeSelectorElementCount = attributeSelectorElementCount; - } - - public int getAttributeValueElementCount() { - return attributeValueElementCount; - } - - public void setAttributeValueElementCount(int attributeValueElementCount) { - this.attributeValueElementCount = attributeValueElementCount; - } - - public int getAttributeDesignatorsElementCount() { - return attributeDesignatorsElementCount; - } - - public void setAttributeDesignatorsElementCount(int attributeDesignatorsElementCount) { - this.attributeDesignatorsElementCount = attributeDesignatorsElementCount; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ExtendAttributeDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ExtendAttributeDTO.java deleted file mode 100644 index a584f39e9944..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ExtendAttributeDTO.java +++ /dev/null @@ -1,133 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -/** - * extended attribute value element - */ -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class ExtendAttributeDTO { - - private String id; - - private String selector; - - private String function; - - private String category; - - private String attributeValue; - - private String attributeId; - - private String dataType; - - private String issuer; - - private boolean notCompleted; - - public ExtendAttributeDTO() { - } - - public ExtendAttributeDTO(ExtendAttributeDTO dto) { - this.id = dto.getId(); - this.selector = dto.getSelector(); - this.function = dto.getFunction(); - this.category = dto.getCategory(); - this.attributeValue = dto.getAttributeValue(); - this.attributeId = dto.getAttributeId(); - this.dataType = dto.getDataType(); - this.issuer = dto.getIssuer(); - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getSelector() { - return selector; - } - - public void setSelector(String selector) { - this.selector = selector; - } - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getAttributeId() { - return attributeId; - } - - public void setAttributeId(String attributeId) { - this.attributeId = attributeId; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getIssuer() { - return issuer; - } - - public void setIssuer(String issuer) { - this.issuer = issuer; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ObligationDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ObligationDTO.java deleted file mode 100644 index fe7eabbf251b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/ObligationDTO.java +++ /dev/null @@ -1,99 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -/** - * encapsulates obligation and advice expression data that requires for policy editor - */ -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class ObligationDTO { - - private String type; - - private String obligationId; - - private String effect; - - private String attributeValue; - - private String attributeValueDataType; - - private String resultAttributeId; - - private boolean notCompleted; - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getResultAttributeId() { - return resultAttributeId; - } - - public void setResultAttributeId(String resultAttributeId) { - this.resultAttributeId = resultAttributeId; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getAttributeValueDataType() { - return attributeValueDataType; - } - - public void setAttributeValueDataType(String attributeValueDataType) { - this.attributeValueDataType = attributeValueDataType; - } - - public String getEffect() { - return effect; - } - - public void setEffect(String effect) { - this.effect = effect; - } - - public String getObligationId() { - return obligationId; - } - - public void setObligationId(String obligationId) { - this.obligationId = obligationId; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyDTO.java deleted file mode 100644 index 7ab54877cd74..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyDTO.java +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicyDTO { - - private String policyId; - - private String ruleAlgorithm; - - private String description; - - private String ruleOrder; - - private String version; - - private TargetDTO targetDTO; - - private List ruleDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - public String getRuleAlgorithm() { - return ruleAlgorithm; - } - - public void setRuleAlgorithm(String ruleAlgorithm) { - this.ruleAlgorithm = ruleAlgorithm; - } - - public String getPolicyId() { - return policyId; - } - - public void setPolicyId(String policyId) { - this.policyId = policyId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getRuleOrder() { - return ruleOrder; - } - - public void setRuleOrder(String ruleOrder) { - this.ruleOrder = ruleOrder; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public List getRuleDTOs() { - return ruleDTOs; - } - - public void setRuleDTOs(List ruleDTOs) { - this.ruleDTOs = ruleDTOs; - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyRefIdDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyRefIdDTO.java deleted file mode 100644 index 4b835399e18a..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicyRefIdDTO.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicyRefIdDTO { - - private String id; - - private boolean referenceOnly; - - private boolean policySet; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public boolean isPolicySet() { - return policySet; - } - - public void setPolicySet(boolean policySet) { - this.policySet = policySet; - } - - public boolean isReferenceOnly() { - return referenceOnly; - } - - public void setReferenceOnly(boolean referenceOnly) { - this.referenceOnly = referenceOnly; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicySetDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicySetDTO.java deleted file mode 100644 index cfa9cdb11957..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/PolicySetDTO.java +++ /dev/null @@ -1,149 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicySetDTO { - - private String policySetId; - - private String policyCombiningAlgId; - - private String version; - - private TargetDTO targetDTO; - - private String description; - - private List policySets = new ArrayList(); - - private List policies = new ArrayList(); - - private List policySetIdReferences = new ArrayList(); - - private List PolicyIdReferences = new ArrayList(); - - private List obligations = new ArrayList(); - - private List policyRefIdDTOs = new ArrayList(); - - private String policyOrder; - - public String getPolicySetId() { - return policySetId; - } - - public void setPolicySetId(String policySetId) { - this.policySetId = policySetId; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getPolicyCombiningAlgId() { - return policyCombiningAlgId; - } - - public void setPolicyCombiningAlgId(String policyCombiningAlgId) { - this.policyCombiningAlgId = policyCombiningAlgId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getPolicySets() { - return policySets; - } - - public void setPolicySets(List policySets) { - this.policySets = policySets; - } - - public List getPolicies() { - return policies; - } - - public void setPolicy(String policy) { - this.policies.add(policy); - } - - public List getPolicySetIdReferences() { - return policySetIdReferences; - } - - public void setPolicySetIdReferences(List policySetIdReferences) { - this.policySetIdReferences = policySetIdReferences; - } - - public List getPolicyIdReferences() { - return PolicyIdReferences; - } - - public void setPolicyIdReferences(List policyIdReferences) { - PolicyIdReferences = policyIdReferences; - } - - public List getObligations() { - return obligations; - } - - public void setObligations(List obligations) { - this.obligations = obligations; - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public String getPolicyOrder() { - return policyOrder; - } - - public void setPolicyOrder(String policyOrder) { - this.policyOrder = policyOrder; - } - - public List getPolicyRefIdDTOs() { - return policyRefIdDTOs; - } - - public void setPolicyRefIdDTOs(List policyRefIdDTOs) { - this.policyRefIdDTOs = policyRefIdDTOs; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RequestDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RequestDTO.java deleted file mode 100644 index dc6753f1b4dc..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RequestDTO.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class RequestDTO { - - private boolean multipleRequest; - - private boolean returnPolicyIdList; - - private boolean combinedDecision; - - private List rowDTOs; - - public boolean isCombinedDecision() { - return combinedDecision; - } - - public void setCombinedDecision(boolean combinedDecision) { - this.combinedDecision = combinedDecision; - } - - public List getRowDTOs() { - return rowDTOs; - } - - public void setRowDTOs(List rowDTOs) { - this.rowDTOs = rowDTOs; - } - - public boolean isReturnPolicyIdList() { - return returnPolicyIdList; - } - - public void setReturnPolicyIdList(boolean returnPolicyIdList) { - this.returnPolicyIdList = returnPolicyIdList; - } - - public boolean isMultipleRequest() { - return multipleRequest; - } - - public void setMultipleRequest(boolean multipleRequest) { - this.multipleRequest = multipleRequest; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RowDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RowDTO.java deleted file mode 100644 index ccf5bb3770b9..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RowDTO.java +++ /dev/null @@ -1,119 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class RowDTO { - - private String category; - - private String preFunction; - - private String function; - - private String attributeValue; - - private String attributeId; - - private String attributeDataType; - - private String combineFunction; - - private boolean notCompleted; - - public RowDTO() { - } - - public RowDTO(RowDTO rowDTO) { - this.category = rowDTO.getCategory(); - this.preFunction = rowDTO.getPreFunction(); - this.function = rowDTO.getFunction(); - this.attributeValue = rowDTO.getAttributeValue(); - this.attributeId = rowDTO.getAttributeId(); - this.combineFunction = rowDTO.getCombineFunction(); - this.attributeDataType = rowDTO.getAttributeDataType(); - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getCombineFunction() { - return combineFunction; - } - - public void setCombineFunction(String combineFunction) { - this.combineFunction = combineFunction; - } - - public String getAttributeDataType() { - return attributeDataType; - } - - public void setAttributeDataType(String attributeDataType) { - this.attributeDataType = attributeDataType; - } - - public String getAttributeId() { - return attributeId; - } - - public void setAttributeId(String attributeId) { - this.attributeId = attributeId; - } - - public String getAttributeValue() { - return attributeValue; - } - - public void setAttributeValue(String attributeValue) { - this.attributeValue = attributeValue; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getPreFunction() { - return preFunction; - } - - public void setPreFunction(String preFunction) { - this.preFunction = preFunction; - } - - public boolean isNotCompleted() { - return notCompleted; - } - - public void setNotCompleted(boolean notCompleted) { - this.notCompleted = notCompleted; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RuleDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RuleDTO.java deleted file mode 100644 index ad6e15f3d379..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/RuleDTO.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class RuleDTO { - - private String ruleId; - - private String ruleEffect; - - private String ruleDescription; - - private TargetDTO targetDTO = new TargetDTO(); - - private List rowDTOList = new ArrayList(); - - private List attributeDTOs = new ArrayList(); - - private List obligationDTOs = new ArrayList(); - - private boolean completedRule; - - public String getRuleId() { - return ruleId; - } - - public void setRuleId(String ruleId) { - this.ruleId = ruleId; - } - - public String getRuleEffect() { - return ruleEffect; - } - - public void setRuleEffect(String ruleEffect) { - this.ruleEffect = ruleEffect; - } - - public String getRuleDescription() { - return ruleDescription; - } - - public void setRuleDescription(String ruleDescription) { - this.ruleDescription = ruleDescription; - } - - public List getRowDTOList() { - return rowDTOList; - } - - public void setRowDTOList(List rowDTOList) { - this.rowDTOList = rowDTOList; - } - - public void addRowDTO(RowDTO rowDTO) { - this.rowDTOList.add(rowDTO); - } - - public TargetDTO getTargetDTO() { - return targetDTO; - } - - public void setTargetDTO(TargetDTO targetDTO) { - this.targetDTO = targetDTO; - } - - public boolean isCompletedRule() { - return completedRule; - } - - public void setCompletedRule(boolean completedRule) { - this.completedRule = completedRule; - } - - public List getAttributeDTOs() { - return attributeDTOs; - } - - public void setAttributeDTOs(List attributeDTOs) { - this.attributeDTOs = attributeDTOs; - } - - public void addAttributeDTO(ExtendAttributeDTO attributeDTO) { - this.attributeDTOs.add(attributeDTO); - } - - public List getObligationDTOs() { - return obligationDTOs; - } - - public void setObligationDTOs(List obligationDTOs) { - this.obligationDTOs = obligationDTOs; - } - - public void addObligationDTO(ObligationDTO obligationDTO) { - this.obligationDTOs.add(obligationDTO); - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorDTO.java deleted file mode 100644 index 9cb122bdf501..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorDTO.java +++ /dev/null @@ -1,146 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class SimplePolicyEditorDTO { - - private String policyId; - - private String appliedCategory; - - private String description; - - private String userAttributeValue; - - private String userAttributeId; - - private String resourceValue; - - private String actionValue; - - private String environmentValue; - - private String function; - - private String environmentId; - - private List SimplePolicyEditorElementDTOs = - new ArrayList(); - - public String getPolicyId() { - return policyId; - } - - public void setPolicyId(String policyId) { - this.policyId = policyId; - } - - public String getAppliedCategory() { - return appliedCategory; - } - - public void setAppliedCategory(String appliedCategory) { - this.appliedCategory = appliedCategory; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getSimplePolicyEditorElementDTOs() { - return SimplePolicyEditorElementDTOs; - } - - public void setSimplePolicyEditorElementDTOs(List - simplePolicyEditorElementDTOs) { - this.SimplePolicyEditorElementDTOs = simplePolicyEditorElementDTOs; - } - - public void setBasicPolicyEditorElementDTO(SimplePolicyEditorElementDTO - SimplePolicyEditorElementDTO) { - this.SimplePolicyEditorElementDTOs.add(SimplePolicyEditorElementDTO); - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getEnvironmentValue() { - return environmentValue; - } - - public void setEnvironmentValue(String environmentValue) { - this.environmentValue = environmentValue; - } - - public String getFunction() { - return function; - } - - public void setFunction(String function) { - this.function = function; - } - - public String getActionValue() { - return actionValue; - } - - public void setActionValue(String actionValue) { - this.actionValue = actionValue; - } - - public String getResourceValue() { - return resourceValue; - } - - public void setResourceValue(String resourceValue) { - this.resourceValue = resourceValue; - } - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getEnvironmentId() { - return environmentId; - } - - public void setEnvironmentId(String environmentId) { - this.environmentId = environmentId; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorElementDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorElementDTO.java deleted file mode 100644 index 43d8d6ad4c49..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/SimplePolicyEditorElementDTO.java +++ /dev/null @@ -1,136 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class SimplePolicyEditorElementDTO { - - private String userAttributeId; - - private String userAttributeValue; - - private String actionValue; - - private String resourceValue; - - private String environmentId; - - private String environmentValue; - - private String operationType; - - private String functionOnResources; - - private String functionOnActions; - - private String functionOnUsers; - - private String functionOnEnvironments; - - public String getUserAttributeId() { - return userAttributeId; - } - - public void setUserAttributeId(String userAttributeId) { - this.userAttributeId = userAttributeId; - } - - public String getOperationType() { - return operationType; - } - - public void setOperationType(String operationType) { - this.operationType = operationType; - } - - public String getEnvironmentValue() { - return environmentValue; - } - - public void setEnvironmentValue(String environmentValue) { - this.environmentValue = environmentValue; - } - - public String getEnvironmentId() { - return environmentId; - } - - public void setEnvironmentId(String environmentId) { - this.environmentId = environmentId; - } - - public String getResourceValue() { - return resourceValue; - } - - public void setResourceValue(String resourceValue) { - this.resourceValue = resourceValue; - } - - public String getUserAttributeValue() { - return userAttributeValue; - } - - public void setUserAttributeValue(String userAttributeValue) { - this.userAttributeValue = userAttributeValue; - } - - public String getActionValue() { - return actionValue; - } - - public void setActionValue(String actionValue) { - this.actionValue = actionValue; - } - - public String getFunctionOnUsers() { - return functionOnUsers; - } - - public void setFunctionOnUsers(String functionOnUsers) { - this.functionOnUsers = functionOnUsers; - } - - public String getFunctionOnActions() { - return functionOnActions; - } - - public void setFunctionOnActions(String functionOnActions) { - this.functionOnActions = functionOnActions; - } - - public String getFunctionOnResources() { - return functionOnResources; - } - - public void setFunctionOnResources(String functionOnResources) { - this.functionOnResources = functionOnResources; - } - - public String getFunctionOnEnvironments() { - return functionOnEnvironments; - } - - public void setFunctionOnEnvironments(String functionOnEnvironments) { - this.functionOnEnvironments = functionOnEnvironments; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/TargetDTO.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/TargetDTO.java deleted file mode 100644 index 5b073fa9c6ef..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/dto/TargetDTO.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.dto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class TargetDTO { - - private List rowDTOList = new ArrayList(); - - public List getRowDTOList() { - return rowDTOList; - } - - public void setRowDTOList(List rowDTOList) { - this.rowDTOList = rowDTOList; - } - - public void addRowDTO(RowDTO rowDTO) { - this.rowDTOList.add(rowDTO); - } - - -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/ClientUtil.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/ClientUtil.java deleted file mode 100644 index d8eef8a6830f..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/ClientUtil.java +++ /dev/null @@ -1,108 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.util; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMNamespace; -import org.apache.axiom.om.impl.llom.util.AXIOMUtil; -import org.wso2.carbon.identity.entitlement.stub.dto.StatusHolder; -import org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants; - -import javax.xml.namespace.QName; - - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class ClientUtil { - - /** - * Helper method to extract the boolean response - * - * @param xmlstring XACML resource as String - * @return Decision - * @throws Exception if fails - */ - public static String getStatus(String xmlstring) throws Exception { - - OMElement response = null; - OMElement result = null; - OMElement decision = null; - response = AXIOMUtil.stringToOM(xmlstring); - - OMNamespace nameSpace = response.getNamespace(); - - if (nameSpace != null) { - result = response.getFirstChildWithName(new QName(nameSpace.getNamespaceURI(), "Result")); - } else { - result = response.getFirstElement(); - } - if (result != null) { - if (nameSpace != null) { - decision = result.getFirstChildWithName(new QName(nameSpace.getNamespaceURI(), "Decision")); - } else { - decision = result.getFirstChildWithName(new QName("Decision")); - } - if (decision != null) { - return decision.getText(); - } - } - - return "Invalid Status"; - } - - public static String[] doPagingForStrings(int pageNumber, int itemsPerPageInt, String[] names) { - - String[] returnedSubscriberNameSet; - - int startIndex = pageNumber * itemsPerPageInt; - int endIndex = (pageNumber + 1) * itemsPerPageInt; - if (itemsPerPageInt < names.length) { - returnedSubscriberNameSet = new String[itemsPerPageInt]; - } else { - returnedSubscriberNameSet = new String[names.length]; - } - for (int i = startIndex, j = 0; i < endIndex && i < names.length; i++, j++) { - returnedSubscriberNameSet[j] = names[i]; - } - - return returnedSubscriberNameSet; - } - - public static StatusHolder[] doModuleStatusHoldersPaging(int pageNumber, - StatusHolder[] moduleStatusHolderSet) { - - int itemsPerPageInt = EntitlementPolicyConstants.DEFAULT_ITEMS_PER_PAGE; - StatusHolder[] returnedModuleStatusHolderSet; - - int startIndex = pageNumber * itemsPerPageInt; - int endIndex = (pageNumber + 1) * itemsPerPageInt; - if (itemsPerPageInt < moduleStatusHolderSet.length) { - returnedModuleStatusHolderSet = new StatusHolder[itemsPerPageInt]; - } else { - returnedModuleStatusHolderSet = new StatusHolder[moduleStatusHolderSet.length]; - } - for (int i = startIndex, j = 0; i < endIndex && i < moduleStatusHolderSet.length; i++, j++) { - returnedModuleStatusHolderSet[j] = moduleStatusHolderSet[i]; - } - - return returnedModuleStatusHolderSet; - } - -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyCreatorUtil.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyCreatorUtil.java deleted file mode 100644 index 95801574cacd..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyCreatorUtil.java +++ /dev/null @@ -1,2199 +0,0 @@ -/* -* Copyright (c) 2005-2010, 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.identity.entitlement.ui.util; - -import org.wso2.balana.utils.policy.dto.AttributeElementDTO; -import org.wso2.balana.utils.policy.dto.AttributesElementDTO; -import org.wso2.balana.utils.policy.dto.RequestElementDTO; -import org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants; -import org.wso2.carbon.identity.entitlement.ui.dto.RequestDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RowDTO; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicyCreatorUtil { -// -// /** -// * This method creates a policy element of the XACML policy -// * @param policyElementDTO policy element data object -// * @param doc XML document -// * @return policyElement -// */ -// -// public static Element createPolicyElement(PolicyElementDTO policyElementDTO, Document doc) { -// -// Element policyElement = doc.createElement(EntitlementPolicyConstants.POLICY_ELEMENT); -// -// policyElement.setAttribute("xmlns", EntitlementPolicyConstants.XACML3_POLICY_NAMESPACE); -// -// if(policyElementDTO.getPolicyName() != null && policyElementDTO.getPolicyName().trim().length() > 0) { -// policyElement.setAttribute(EntitlementPolicyConstants.POLICY_ID, policyElementDTO. -// getPolicyName()); -// } else { -// return null; -// } -// -// if(policyElementDTO.getRuleCombiningAlgorithms() != null && policyElementDTO. -// getRuleCombiningAlgorithms().trim().length() > 0) { -// if(PolicyEditorConstants.CombiningAlog.FIRST_APPLICABLE_ID.equals(policyElementDTO. -// getRuleCombiningAlgorithms().trim())){ -// policyElement.setAttribute(EntitlementPolicyConstants.RULE_ALGORITHM, -// PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_1 + policyElementDTO. -// getRuleCombiningAlgorithms()); -// } else { -// policyElement.setAttribute(EntitlementPolicyConstants.RULE_ALGORITHM, -// PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_3 + policyElementDTO. -// getRuleCombiningAlgorithms()); -// } -// } else { -// return null; -// } -// -// if(policyElementDTO.getVersion() != null && policyElementDTO.getVersion().trim().length() > 0){ -// policyElement.setAttribute(EntitlementPolicyConstants.POLICY_VERSION, -// policyElementDTO.getVersion()); -// } else { -// // policy version is handled by wso2 registry. therefore we can ignore it, although it -// // is a required attribute -// policyElement.setAttribute(EntitlementPolicyConstants.POLICY_VERSION, "1.0"); -// } -// -// if(policyElementDTO.getPolicyDescription() != null && policyElementDTO. -// getPolicyDescription().trim().length() > 0) { -// -// Element descriptionElement = doc.createElement(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// descriptionElement.setTextContent(policyElementDTO.getPolicyDescription()); -// policyElement.appendChild(descriptionElement); -// } -// -// return policyElement; -// } -// -// ////XACML3 -// -// /** -// * This method creates a match element (subject,action,resource or environment) of the XACML policy -// * @param matchElementDTO match element data object -// * @param doc XML document -// * @return match Element -// */ -// public static Element createMatchElement(MatchElementDTO matchElementDTO, Document doc) { -// -// Element matchElement = null; -// if(matchElementDTO.getMatchId() != null && matchElementDTO.getMatchId().trim().length() > 0) { -// -// matchElement = doc.createElement(EntitlementPolicyConstants.MATCH_ELEMENT); -// -// matchElement.setAttribute(EntitlementPolicyConstants.MATCH_ID, -// matchElementDTO.getMatchId()); -// -// if(matchElementDTO.getAttributeValueElementDTO() != null) { -// Element attributeValueElement = createAttributeValueElement(matchElementDTO. -// getAttributeValueElementDTO(), doc); -// matchElement.appendChild(attributeValueElement); -// } -// -// if(matchElementDTO.getAttributeDesignatorDTO() != null ) { -// Element attributeDesignatorElement = createAttributeDesignatorElement(matchElementDTO. -// getAttributeDesignatorDTO(), doc); -// matchElement.appendChild(attributeDesignatorElement); -// } -// -// if(matchElementDTO.getAttributeSelectorDTO() != null ) { -// Element attributeSelectorElement = createAttributeSelectorElement(matchElementDTO. -// getAttributeSelectorDTO(), doc); -// matchElement.appendChild(attributeSelectorElement); -// } -// } -// return matchElement; -// } -// -// /** -// * This method creates the attribute value element -// * @param attributeValueElementDTO attribute value element data object -// * @param doc XML document -// * @return attribute value element -// */ -// public static Element createAttributeValueElement(AttributeValueElementDTO -// attributeValueElementDTO, Document doc) { -// -// Element attributeValueElement = doc.createElement(EntitlementPolicyConstants.ATTRIBUTE_VALUE); -// -// if(attributeValueElementDTO.getAttributeValue() != null && attributeValueElementDTO. -// getAttributeValue().trim().length() > 0) { -// -// attributeValueElement.setTextContent(attributeValueElementDTO.getAttributeValue().trim()); -// -// if(attributeValueElementDTO.getAttributeDataType()!= null && attributeValueElementDTO. -// getAttributeDataType().trim().length() > 0){ -// attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// attributeValueElementDTO.getAttributeDataType()); -// } else { -// attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// -// } -// -// return attributeValueElement; -// -// } -// -// /** -// * This creates XML representation of Attributes Element using AttributesElementDTO object -// * -// * @param elementDTO AttributesElementDTO -// * @param doc Document -// * @return DOM element -// */ -// public static Element createAttributesElement(AttributesElementDTO elementDTO, Document doc){ -// -// Element attributesElement = doc.createElement(EntitlementPolicyConstants.ATTRIBUTES); -// -// attributesElement.setAttribute(EntitlementPolicyConstants.CATEGORY, elementDTO.getCategory()); -// -// List attributeElementDTOs = elementDTO.getAttributeElementDTOs(); -// if(attributeElementDTOs != null && attributeElementDTOs.size() > 0){ -// for(AttributeElementDTO attributeElementDTO : attributeElementDTOs){ -// Element attributeElement = doc.createElement(EntitlementPolicyConstants.ATTRIBUTE); -// attributeElement.setAttribute(EntitlementPolicyConstants.ATTRIBUTE_ID, -// attributeElementDTO.getAttributeId()); -// attributeElement.setAttribute(EntitlementPolicyConstants.INCLUDE_RESULT, -// Boolean.toString(attributeElementDTO.isIncludeInResult())); -// -// if(attributeElementDTO.getIssuer() != null && -// attributeElementDTO.getIssuer().trim().length() > 0){ -// attributeElement.setAttribute(EntitlementPolicyConstants.ISSUER, -// attributeElementDTO.getIssuer()); -// } -// -// List values = attributeElementDTO.getAttributeValues(); -// for(String value : values){ -// Element attributeValueElement = doc.createElement(EntitlementPolicyConstants. -// ATTRIBUTE_VALUE); -// attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// attributeElementDTO.getDataType()); -// attributeValueElement.setTextContent(value.trim()); -// attributeElement.appendChild(attributeValueElement); -// } -// attributesElement.appendChild(attributeElement); -// } -// } -// return attributesElement; -// } -// -// -// public static Element createFunctionElement(FunctionDTO functionDTO, Document doc) { -// -// Element functionElement = doc.createElement(EntitlementPolicyConstants.FUNCTION); -// -// if(functionDTO.getFunctionId() != null && functionDTO.getFunctionId().trim().length() > 0) { -// functionElement.setAttribute(EntitlementPolicyConstants.FUNCTION_ID, -// functionDTO.getFunctionId()); -// } -// -// return functionElement; -// } -// -//// public static Element createAttributeDesignatorElement(AttributeDesignatorDTO -//// attributeDesignatorDTO, Document doc) { -//// -//// String attributeDesignatorElementName = attributeDesignatorDTO.getElementName() + -//// EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR; -//// -//// Element attributeDesignatorElement = doc.createElement(attributeDesignatorElementName); -//// -//// if(attributeDesignatorDTO.getAttributeId() != null && attributeDesignatorDTO. -//// getAttributeId().trim().length() > 0 ){ -//// -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ATTRIBUTE_ID, -//// attributeDesignatorDTO.getAttributeId()); -//// -//// if(attributeDesignatorDTO.getDataType() != null && attributeDesignatorDTO. -//// getDataType().trim().length() > 0) { -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -//// attributeDesignatorDTO.getDataType()); -//// } else { -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -//// EntitlementPolicyConstants.STRING_DATA_TYPE); -//// } -//// -//// if(attributeDesignatorDTO.getIssuer() != null && attributeDesignatorDTO.getIssuer(). -//// trim().length() > 0) { -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ISSUER, -//// attributeDesignatorDTO.getIssuer()); -//// } -//// -//// if(attributeDesignatorDTO.getMustBePresent() != null && attributeDesignatorDTO. -//// getMustBePresent().trim().length() > 0){ -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, -//// attributeDesignatorDTO.getMustBePresent()); -//// } -//// -//// if(attributeDesignatorDTO.getSubjectCategory() != null){ -//// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, -//// attributeDesignatorDTO.getSubjectCategory()); -//// } -//// -//// } -//// -//// return attributeDesignatorElement; -//// } -// -// -// public static Element createAttributeDesignatorElement(AttributeDesignatorDTO -// attributeDesignatorDTO, Document doc) { -// -// String attributeDesignatorElementName = -// EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR; -// -// Element attributeDesignatorElement = doc.createElement(attributeDesignatorElementName); -// -// String attributeId = attributeDesignatorDTO.getAttributeId(); -// String category = attributeDesignatorDTO.getCategory(); -// -// if(attributeId != null && attributeId.trim().length() > 0 && category != null && -// category.trim().length() > 0){ -// -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ATTRIBUTE_ID, -// attributeDesignatorDTO.getAttributeId()); -// -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.CATEGORY, -// attributeDesignatorDTO.getCategory()); -// -// if(attributeDesignatorDTO.getDataType() != null && attributeDesignatorDTO. -// getDataType().trim().length() > 0) { -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// attributeDesignatorDTO.getDataType()); -// } else { -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// -// if(attributeDesignatorDTO.getIssuer() != null && attributeDesignatorDTO.getIssuer(). -// trim().length() > 0) { -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ISSUER, -// attributeDesignatorDTO.getIssuer()); -// } -// -// if(attributeDesignatorDTO.getMustBePresent() != null && attributeDesignatorDTO. -// getMustBePresent().trim().length() > 0){ -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, -// attributeDesignatorDTO.getMustBePresent()); -// } else { -// attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, -// "true"); -// } -// -// } -// -// return attributeDesignatorElement; -// } -// -// -// public static Element createAttributeSelectorElement(AttributeSelectorDTO attributeSelectorDTO, -// Document doc) { -// -// Element attributeSelectorElement = doc.createElement(EntitlementPolicyConstants. -// ATTRIBUTE_SELECTOR); -// -// if(attributeSelectorDTO.getAttributeSelectorRequestContextPath() != null && -// attributeSelectorDTO.getAttributeSelectorRequestContextPath().trim().length() > 0) { -// -// attributeSelectorElement.setAttribute(EntitlementPolicyConstants.REQUEST_CONTEXT_PATH, -// EntitlementPolicyConstants.ATTRIBUTE_NAMESPACE + attributeSelectorDTO. -// getAttributeSelectorRequestContextPath()); -// -// if(attributeSelectorDTO.getAttributeSelectorDataType() != null && -// attributeSelectorDTO.getAttributeSelectorDataType().trim().length() > 0) { -// attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// attributeSelectorDTO.getAttributeSelectorDataType()); -// } else { -// attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, -// EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// -// if(attributeSelectorDTO.getAttributeSelectorMustBePresent() != null && -// attributeSelectorDTO.getAttributeSelectorMustBePresent().trim().length() > 0) { -// attributeSelectorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, -// attributeSelectorDTO.getAttributeSelectorMustBePresent()); -// } -// -// } -// -// return attributeSelectorElement; -// } -// -// public static Element createObligationsElement(List obligationElementDTOs, -// Document doc){ -// -// -// Element obligationExpressions = null; -// Element adviceExpressions = null; -// -// if(obligationElementDTOs != null && obligationElementDTOs.size() > 0){ -// -// for(ObligationElementDTO dto : obligationElementDTOs){ -// String id = dto.getId(); -// String effect = dto.getEffect(); -// -// if(id != null && id.trim().length() > 0 && effect != null){ -// if(dto.getType() == ObligationElementDTO.ADVICE){ -// if(adviceExpressions == null){ -// adviceExpressions = doc. -// createElement(EntitlementPolicyConstants.ADVICE_EXPRESSIONS); -// } -// -// Element adviceExpression = doc. -// createElement(EntitlementPolicyConstants.ADVICE_EXPRESSION); -// adviceExpression.setAttribute(EntitlementPolicyConstants.ADVICE_ID, id); -// adviceExpression.setAttribute(EntitlementPolicyConstants.ADVICE_EFFECT, effect); -// List elementDTOs = dto.getAssignmentElementDTOs(); -// if(elementDTOs != null){ -// for(AttributeAssignmentElementDTO elementDTO : elementDTOs){ -// Element element = createAttributeAssignmentElement(elementDTO, doc); -// if(element != null){ -// adviceExpression.appendChild(element); -// } -// } -// } -// adviceExpressions.appendChild(adviceExpression); -// } else { -// -// if(obligationExpressions == null){ -// obligationExpressions = doc. -// createElement(EntitlementPolicyConstants.OBLIGATION_EXPRESSIONS); -// } -// -// Element obligationExpression = doc. -// createElement(EntitlementPolicyConstants.OBLIGATION_EXPRESSION); -// obligationExpression.setAttribute(EntitlementPolicyConstants.OBLIGATION_ID, id); -// obligationExpression.setAttribute(EntitlementPolicyConstants.OBLIGATION_EFFECT, -// effect); -// List elementDTOs = dto.getAssignmentElementDTOs(); -// if(elementDTOs != null){ -// for(AttributeAssignmentElementDTO elementDTO : elementDTOs){ -// Element element = createAttributeAssignmentElement(elementDTO, doc); -// if(element != null){ -// obligationExpression.appendChild(element); -// } -// } -// } -// obligationExpressions.appendChild(obligationExpression); -// } -// } -// } -// } -// -// if(adviceExpressions != null){ -// return adviceExpressions; -// } -// -// return obligationExpressions; -// } -// -// public static Element createAttributeAssignmentElement(AttributeAssignmentElementDTO assignmentElementDTO, -// Document doc){ -// -// String attributeId = assignmentElementDTO.getAttributeId(); -// -// if(attributeId != null && attributeId.trim().length() > 0){ -// -// String category = assignmentElementDTO.getCategory(); -// String issuer = assignmentElementDTO.getIssuer(); -// ApplyElementDTO applyElementDTO = assignmentElementDTO.getApplyElementDTO(); -// AttributeDesignatorDTO designatorDTO = assignmentElementDTO.getDesignatorDTO(); -// AttributeValueElementDTO valueElementDTO = assignmentElementDTO.getValueElementDTO(); -// -// Element attributeAssignment = doc. -// createElement(EntitlementPolicyConstants.ATTRIBUTE_ASSIGNMENT); -// attributeAssignment.setAttribute(EntitlementPolicyConstants.ATTRIBUTE_ID, -// attributeId); -// if(category != null && category.trim().length() > 0){ -// attributeAssignment.setAttribute(EntitlementPolicyConstants.CATEGORY, category); -// } -// -// if(issuer != null && issuer.trim().length() > 0){ -// attributeAssignment.setAttribute(EntitlementPolicyConstants.ISSUER, issuer); -// } -// -// if(applyElementDTO != null){ -// attributeAssignment.appendChild(createApplyElement(applyElementDTO, doc)); -// } -// -// if(designatorDTO != null){ -// attributeAssignment.appendChild(createAttributeDesignatorElement(designatorDTO, doc)); -// } -// -// if(valueElementDTO != null){ -// attributeAssignment.appendChild(createAttributeValueElement(valueElementDTO, doc)); -// } -// -// return attributeAssignment; -// } -// -// return null; -// } -// -// public static Element createSubElement(SubElementDTO subElementDTO, Document doc) { -// -// String subElementName = subElementDTO.getElementName(); -// -// Element subElement = doc.createElement(subElementName); -// -// for( MatchElementDTO matchElementDTO : subElementDTO.getMatchElementDTOs()) { -// Element matchElement = createMatchElement(matchElementDTO, doc); -// if(matchElement != null) { -// subElement.appendChild(matchElement); -// } -// } -// -// return subElement; -// } -// -// public static Element createTargetElement(List subElementDTOs, Document doc) { -// -// Element targetElement = doc.createElement(EntitlementPolicyConstants.TARGET_ELEMENT); -// String subjectElementName = EntitlementPolicyConstants.SUBJECT_ELEMENT + "s"; -// String actionElementName = EntitlementPolicyConstants.ACTION_ELEMENT + "s"; -// String resourceElementName = EntitlementPolicyConstants.RESOURCE_ELEMENT + "s"; -// String enviornementElementName = EntitlementPolicyConstants.ENVIRONMENT_ELEMENT + "s"; -// -// Element subjectElement = doc.createElement(subjectElementName); -// Element actionElement = doc.createElement(actionElementName); -// Element resourceElement = doc.createElement(resourceElementName); -// Element enviornementElement = doc.createElement(enviornementElementName); -// -// -// for(SubElementDTO subElementDTO : subElementDTOs) { -// -// if(subElementDTO.getElementName().equals(EntitlementPolicyConstants.SUBJECT_ELEMENT)) { -// Element subParentElement = createSubElement(subElementDTO, doc); -// subjectElement.appendChild(subParentElement); -// } -// -// if(subElementDTO.getElementName().equals(EntitlementPolicyConstants.ACTION_ELEMENT)) { -// Element subParentElement = createSubElement(subElementDTO, doc); -// actionElement.appendChild(subParentElement); -// } -// -// if(subElementDTO.getElementName().equals(EntitlementPolicyConstants.RESOURCE_ELEMENT)) { -// Element subParentElement = createSubElement(subElementDTO, doc); -// resourceElement.appendChild(subParentElement); -// } -// -// if(subElementDTO.getElementName().equals(EntitlementPolicyConstants.ENVIRONMENT_ELEMENT)) { -// Element subParentElement = createSubElement(subElementDTO, doc); -// enviornementElement.appendChild(subParentElement); -// } -// } -// -// targetElement.appendChild(subjectElement); -// targetElement.appendChild(actionElement); -// targetElement.appendChild(resourceElement); -// targetElement.appendChild(enviornementElement); -// -// return targetElement; -// } -// -// -// public static Element createRuleElement(RuleElementDTO ruleElementDTO, Document doc) { -// -// TargetElementDTO targetElementDTO = ruleElementDTO.getTargetElementDTO(); -// ConditionElementDT0 conditionElementDT0 = ruleElementDTO.getConditionElementDT0(); -// List obligationElementDTOs = ruleElementDTO.getObligationElementDTOs(); -// -// Element ruleElement = doc.createElement(EntitlementPolicyConstants.RULE_ELEMENT); -// -// if(ruleElementDTO.getRuleId() != null && ruleElementDTO.getRuleId().trim().length() > 0){ -// ruleElement.setAttribute(EntitlementPolicyConstants.RULE_ID, ruleElementDTO.getRuleId()); -// } -// -// if(ruleElementDTO.getRuleEffect() != null && ruleElementDTO.getRuleEffect().trim().length() > 0){ -// ruleElement.setAttribute(EntitlementPolicyConstants.RULE_EFFECT, -// ruleElementDTO.getRuleEffect()); -// } -// -// if(ruleElementDTO.getRuleDescription() != null && ruleElementDTO.getRuleDescription(). -// trim().length() > 0){ -// Element descriptionElement = doc.createElement(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// descriptionElement.setTextContent(ruleElementDTO.getRuleDescription()); -// ruleElement.appendChild(descriptionElement); -// } -// -// if(targetElementDTO != null ){ -// Element targetElement = PolicyEditorUtil.createTargetElement(targetElementDTO, doc); -// ruleElement.appendChild(targetElement); -// } -// -// if(conditionElementDT0 != null){ -// ruleElement.appendChild(createConditionElement(conditionElementDT0, doc)); -// } -// -// -// if(obligationElementDTOs != null && obligationElementDTOs.size() > 0){ -// List obligations = new ArrayList(); -// List advices = new ArrayList(); -// for(ObligationElementDTO obligationElementDTO : obligationElementDTOs){ -// if(obligationElementDTO.getType() == ObligationElementDTO.ADVICE){ -// advices.add(obligationElementDTO); -// } else { -// obligations.add(obligationElementDTO); -// } -// } -// Element obligation = createObligationsElement(obligations, doc); -// Element advice = createObligationsElement(advices, doc); -// if(obligation != null){ -// ruleElement.appendChild(obligation); -// } -// if(advice != null){ -// ruleElement.appendChild(advice); -// } -// } -// -// return ruleElement; -// } -// -// -// public static Element createConditionElement(ConditionElementDT0 conditionElementDT0, Document doc) { -// -// Element conditionElement = doc.createElement(EntitlementPolicyConstants.CONDITION_ELEMENT); -// -// if(conditionElementDT0.getApplyElement() != null){ -// conditionElement.appendChild(createApplyElement(conditionElementDT0.getApplyElement(), doc)); -// -// } else if(conditionElementDT0.getAttributeValueElementDTO() != null) { -// Element attributeValueElement = createAttributeValueElement(conditionElementDT0. -// getAttributeValueElementDTO(), doc); -// conditionElement.appendChild(attributeValueElement); -// -// } else if(conditionElementDT0.getAttributeDesignator() != null) { -// AttributeDesignatorDTO attributeDesignatorDTO = conditionElementDT0.getAttributeDesignator(); -// conditionElement.appendChild(createAttributeDesignatorElement(attributeDesignatorDTO, doc)); -// -// } else if(conditionElementDT0.getFunctionFunctionId() != null) { -// Element functionElement = doc.createElement(EntitlementPolicyConstants.FUNCTION_ELEMENT); -// functionElement.setAttribute(EntitlementPolicyConstants.FUNCTION_ID, -// conditionElementDT0.getFunctionFunctionId()); -// conditionElement.appendChild(functionElement); -// } else if(conditionElementDT0.getVariableId() != null){ -// Element variableReferenceElement = doc.createElement(EntitlementPolicyConstants. -// VARIABLE_REFERENCE); -// variableReferenceElement.setAttribute(EntitlementPolicyConstants.VARIABLE_ID, -// conditionElementDT0.getVariableId()); -// conditionElement.appendChild(variableReferenceElement); -// } -// -// return conditionElement; -// -// } -// -// public static Element createApplyElement(ApplyElementDTO applyElementDTO, Document doc) { -// -// Element applyElement = doc.createElement(EntitlementPolicyConstants.APPLY_ELEMENT); -// -// if(applyElementDTO.getFunctionId() != null && applyElementDTO.getFunctionId().trim().length() > 0){ -// applyElement.setAttribute(EntitlementPolicyConstants.FUNCTION_ID, -// applyElementDTO.getFunctionId()); -// } -// -// if(applyElementDTO.getFunctionFunctionId() != null && applyElementDTO. -// getFunctionFunctionId().trim().length() > 0){ -// FunctionDTO functionDTO = new FunctionDTO(); -// functionDTO.setFunctionId(applyElementDTO.getFunctionFunctionId()); -// Element functionElement = createFunctionElement(functionDTO, doc); -// applyElement.appendChild(functionElement); -// } -// -// List applyElementDTOs = applyElementDTO.getApplyElements(); -// -// if(applyElementDTOs != null && applyElementDTOs.size() > 0) { -// -// for(ApplyElementDTO elementDTO : applyElementDTOs) { -// Element subApplyElement = createApplyElement(elementDTO, doc); -// applyElement.appendChild(subApplyElement); -// } -// } -// -// List attributeValueElementDTOs = applyElementDTO. -// getAttributeValueElementDTOs(); -// if(attributeValueElementDTOs != null && attributeValueElementDTOs.size() > 0) { -// -// for(AttributeValueElementDTO attributeValueElementDTO : attributeValueElementDTOs) { -// Element attributeValueElement = createAttributeValueElement(attributeValueElementDTO, -// doc); -// -// applyElement.appendChild(attributeValueElement); -// } -// } -// -// List attributeDesignatorDTOs = applyElementDTO.getAttributeDesignators(); -// if(attributeDesignatorDTOs != null && attributeDesignatorDTOs.size() > 0) { -// -// for(AttributeDesignatorDTO attributeDesignatorDTO : attributeDesignatorDTOs) { -// Element attributeDesignatorElement = -// createAttributeDesignatorElement(attributeDesignatorDTO, doc); -// applyElement.appendChild(attributeDesignatorElement); -// } -// } -// -// List attributeSelectorDTOs = applyElementDTO.getAttributeSelectors(); -// if(attributeSelectorDTOs != null && attributeSelectorDTOs.size() > 0) { -// -// for(AttributeSelectorDTO attributeSelectorDTO : attributeSelectorDTOs) { -// Element attributeSelectorElement = createAttributeSelectorElement(attributeSelectorDTO, -// doc); -// applyElement.appendChild(attributeSelectorElement); -// } -// } -// return applyElement; -// } -// -// /////// -// public static ApplyElementDTO createApplyElementForBagFunctions(String functionId, -// String category, -// String attributeId, -// String[] attributeValues, -// String dataType){ -// -// ApplyElementDTO applyElementDTO = new ApplyElementDTO(); -// -// if(attributeValues != null && functionId != null && functionId.trim().length() > 0 && -// category != null && category.trim().length() > 0 && -// attributeId != null && attributeId.trim().length() > 0){ -// -// ApplyElementDTO applyElementDTOBag = new ApplyElementDTO(); -// for(String attributeValue :attributeValues){ -// attributeValue = attributeValue.trim(); -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeValueElementDTO.setAttributeDataType(dataType); -// } else { -// attributeValueElementDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeValueElementDTO.setAttributeValue(attributeValue.trim()); -// applyElementDTOBag.setAttributeValueElementDTO(attributeValueElementDTO); -// } -// -// applyElementDTOBag.setFunctionId(EntitlementPolicyConstants.FUNCTION_BAG); -// -// AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeDesignatorDTO.setDataType(dataType); -// } else { -// attributeDesignatorDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeDesignatorDTO.setAttributeId(attributeId); -// attributeDesignatorDTO.setCategory(category); -// -// applyElementDTO.setApplyElement(applyElementDTOBag); -// applyElementDTO.setAttributeDesignators(attributeDesignatorDTO); -// applyElementDTO.setFunctionId(functionId); -// -// } -// -// return applyElementDTO; -// } -// -// public static ApplyElementDTO createApplyElementForNonBagFunctions(String functionId, -// String category, -// String attributeId, -// String attributeValue, -// String dataType){ -// -// ApplyElementDTO applyElementDTO = new ApplyElementDTO(); -// -// if(attributeValue != null && attributeValue.trim().length() > 0 && functionId != null && -// functionId.trim().length() > 0 && category != null && -// category.trim().length() > 0 && attributeId != null && -// attributeId.trim().length() > 0) { -// -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeValueElementDTO.setAttributeDataType(dataType); -// } else { -// attributeValueElementDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeValueElementDTO.setAttributeValue(attributeValue.trim()); -// -// AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeDesignatorDTO.setDataType(dataType); -// } else { -// attributeDesignatorDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeDesignatorDTO.setAttributeId(attributeId); -// attributeDesignatorDTO.setCategory(category); -// -// applyElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); -// applyElementDTO.setAttributeDesignators(attributeDesignatorDTO); -// applyElementDTO.setFunctionId(functionId); -// -// } -// -// return applyElementDTO; -// } -// -// public static ApplyElementDTO createApplyElementForNonBagFunctionsWithAnyOf(String functionId, -// String attributeDesignatorType, -// String attributeDesignatorId, -// String attributeValue){ -// -// ApplyElementDTO applyElementDTO = new ApplyElementDTO(); -// -// if(attributeValue != null && attributeValue.trim().length() > 0 && functionId != null && -// functionId.trim().length() > 0 && attributeDesignatorType != null && -// attributeDesignatorType.trim().length() > 0 && attributeDesignatorId != null && -// attributeDesignatorId.trim().length() > 0) { -// -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// attributeValueElementDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// attributeValueElementDTO.setAttributeValue(attributeValue.trim()); -// -// AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); -// attributeDesignatorDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// attributeDesignatorDTO.setAttributeId(attributeDesignatorId); -// attributeDesignatorDTO.setCategory(attributeDesignatorType); -// -// applyElementDTO.setFunctionFunctionId(functionId); -// applyElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); -// applyElementDTO.setAttributeDesignators(attributeDesignatorDTO); -// applyElementDTO.setFunctionId(EntitlementPolicyConstants.FUNCTION_ANY_OF); -// -// } -// -// return applyElementDTO; -// } -// -// -// public static MatchElementDTO createMatchElementForNonBagFunctions(String functionId, -// String attributeValue, -// String category, -// String attributeId, -// String dataType) { -// MatchElementDTO matchElementDTO = new MatchElementDTO(); -// -// if(functionId != null && functionId.trim().length() > 0 && attributeValue != null && -// attributeValue.trim().length() > 0&& category != null && -// category.trim().length() > 0 && attributeId != null && -// attributeId.trim().length() > 0) { -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeValueElementDTO.setAttributeDataType(dataType); -// } else { -// attributeValueElementDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeValueElementDTO.setAttributeValue(attributeValue.trim()); -// -// AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); -// if(dataType != null && dataType.trim().length() > 0){ -// attributeValueElementDTO.setAttributeDataType(dataType); -// } else { -// attributeValueElementDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); -// } -// attributeDesignatorDTO.setAttributeId(attributeId); -// attributeDesignatorDTO.setCategory(category); -// -// matchElementDTO.setMatchId(functionId); -// matchElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); -// matchElementDTO.setAttributeDesignatorDTO(attributeDesignatorDTO); -// } -// -// return matchElementDTO; -// } -// -// public static Element createBasicRuleElementDTO(BasicRuleDTO basicRuleDTO, -// Document doc) { -// -// String functionOnResources = basicRuleDTO.getFunctionOnResources(); -// String functionOnSubjects = basicRuleDTO.getFunctionOnSubjects(); -// String functionOnActions = basicRuleDTO.getFunctionOnActions(); -// String functionOnEnvironment = basicRuleDTO.getFunctionOnEnvironment(); -// String resourceNames = basicRuleDTO.getResourceList(); -// String actionNames = basicRuleDTO.getActionList(); -// String subjectNames = basicRuleDTO.getSubjectList(); -// String environmentNames = basicRuleDTO.getEnvironmentList(); -// String resourceId = basicRuleDTO.getResourceId(); -// String subjectId = basicRuleDTO.getSubjectId(); -// String actionId = basicRuleDTO.getActionId(); -// String environmentId = basicRuleDTO.getEnvironmentId(); -// String resourceDataType = basicRuleDTO.getResourceDataType(); -// String subjectDataType = basicRuleDTO.getSubjectDataType(); -// String actionDataType = basicRuleDTO.getActionDataType(); -// String environmentDataType = basicRuleDTO.getEnvironmentDataType(); -// -// -// Element resourcesElement = null; -// Element actionsElement = null; -// Element subjectsElement = null; -// Element environmentsElement = null; -// Element targetElement = null; -// Element applyElement = null; -// Element conditionElement = null; -// Element ruleElement = null ; -// -// ApplyElementDTO applyElementDTO = new ApplyElementDTO(); -// -// if(resourceNames != null && resourceNames.trim().length() > 0) { -// String[] resources = resourceNames.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -// if(resourceId == null || resourceId.trim().length() < 1){ -// resourceId = EntitlementPolicyConstants.RESOURCE_ID; -// } -// if(functionOnResources.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnResources.equals(EntitlementPolicyConstants.REGEXP_MATCH) ) { -// resourcesElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element resourceElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnResources), -// resources[0].trim(), PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceElement.appendChild(matchElement); -// } -// resourcesElement.appendChild(resourceElement); -// -// } else if(functionOnResources.contains("less") || functionOnResources.contains("greater")){ -// -// AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); -// designatorDTO.setCategory(PolicyEditorConstants.RESOURCE_CATEGORY_URI); -// designatorDTO.setAttributeId(resourceId); -// designatorDTO.setDataType(resourceDataType); -// designatorDTO.setMustBePresent("true"); -// try { -// ApplyElementDTO elementDTO = PolicyEditorUtil. -// processGreaterLessThanFunctions(functionOnResources, resourceDataType, -// resourceNames, designatorDTO); -// applyElementDTO.setApplyElement(elementDTO); -// } catch (PolicyEditorException e) { -// //ignore TODO -// } -// } else if(functionOnResources.equals(EntitlementPolicyConstants.IS_IN)) { -// ApplyElementDTO elementDTO = createApplyElementForNonBagFunctions( -// getFunctionId(functionOnResources), -// PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resources[0].trim(), resourceDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } else { -// ApplyElementDTO elementDTO = createApplyElementForBagFunctions( -// getFunctionId(functionOnResources), -// PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resources, resourceDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } -// } -// -// if(actionNames != null && actionNames.trim().length() > 0) { -// String[] actions = actionNames.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -// if(actionId == null || actionId.trim().length() < 1){ -// actionId = EntitlementPolicyConstants.ACTION_ID; -// } -// if(functionOnActions.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnActions.equals(EntitlementPolicyConstants.REGEXP_MATCH)) { -// actionsElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element actionElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnActions), -// actions[0].trim(), PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionElement.appendChild(matchElement); -// } -// actionsElement.appendChild(actionElement); -// } else if(functionOnActions.contains("less") || functionOnActions.contains("greater")){ -// -// AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); -// designatorDTO.setCategory(PolicyEditorConstants.ACTION_CATEGORY_URI); -// designatorDTO.setAttributeId(actionId); -// designatorDTO.setDataType(actionDataType); -// designatorDTO.setMustBePresent("true"); -// try { -// ApplyElementDTO elementDTO = PolicyEditorUtil. -// processGreaterLessThanFunctions(functionOnActions, actionDataType, -// actionNames, designatorDTO); -// applyElementDTO.setApplyElement(elementDTO); -// } catch (PolicyEditorException e) { -// //ignore TODO -// } -// } else if(functionOnActions.equals(EntitlementPolicyConstants.IS_IN)) { -// ApplyElementDTO elementDTO = createApplyElementForNonBagFunctions( -// getFunctionId(functionOnActions), -// PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actions[0].trim(), actionDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } else { -// ApplyElementDTO elementDTO = createApplyElementForBagFunctions( -// getFunctionId(functionOnActions), -// EntitlementPolicyConstants.ACTION_ELEMENT, actionId, actions, actionDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } -// } -// -// if(environmentNames != null && environmentNames.trim().length() > 0) { -// String[] environments = environmentNames.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -// if(environmentId == null || environmentId.trim().length() < 1){ -// environmentId = EntitlementPolicyConstants.ENVIRONMENT_ID; -// } -// if(functionOnEnvironment.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnEnvironment.equals(EntitlementPolicyConstants.REGEXP_MATCH)) { -// environmentsElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element environmentElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnEnvironment), -// environments[0].trim(), PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentElement.appendChild(matchElement); -// } -// environmentsElement.appendChild(environmentElement); -// } else if(functionOnEnvironment.contains("less") || functionOnEnvironment.contains("greater")){ -// -// AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); -// designatorDTO.setCategory(PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI); -// designatorDTO.setAttributeId(environmentId); -// designatorDTO.setDataType(environmentDataType); -// designatorDTO.setMustBePresent("true"); -// try { -// ApplyElementDTO elementDTO = PolicyEditorUtil. -// processGreaterLessThanFunctions(functionOnEnvironment, environmentDataType, -// environmentNames, designatorDTO); -// applyElementDTO.setApplyElement(elementDTO); -// } catch (PolicyEditorException e) { -// //ignore TODO -// } -// } else if(functionOnEnvironment.equals(EntitlementPolicyConstants.IS_IN)) { -// ApplyElementDTO elementDTO = createApplyElementForNonBagFunctions( -// getFunctionId(functionOnEnvironment), -// PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environments[0].trim(), environmentDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } else { -// ApplyElementDTO elementDTO = createApplyElementForBagFunctions( -// getFunctionId(functionOnEnvironment), -// PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environments, environmentDataType); -// applyElementDTO.setApplyElement(elementDTO); -// } -// } -// -// if(subjectNames != null && subjectNames.trim().length() > 0) { -// String[] subjects = subjectNames.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -// if(subjectId == null || subjectId.trim().length() < 1){ -// subjectId = EntitlementPolicyConstants.SUBJECT_ID_DEFAULT; -// } -// -// ApplyElementDTO elementDTO = null; -// if(functionOnSubjects.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnSubjects.equals(EntitlementPolicyConstants.REGEXP_MATCH)) { -// elementDTO = createApplyElementForNonBagFunctionsWithAnyOf( -// getFunctionId(functionOnSubjects), -// PolicyEditorConstants.SUBJECT_CATEGORY_URI,subjectId, subjects[0].trim()); -// -// } else if(functionOnSubjects.contains("less") || functionOnSubjects.contains("greater")){ -// -// AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); -// designatorDTO.setCategory(PolicyEditorConstants.ACTION_CATEGORY_URI); -// designatorDTO.setAttributeId(subjectId); -// designatorDTO.setDataType(subjectDataType); -// designatorDTO.setMustBePresent("true"); -// try { -// elementDTO = PolicyEditorUtil. -// processGreaterLessThanFunctions(functionOnSubjects, subjectDataType, -// subjectNames, designatorDTO); -// applyElementDTO.setApplyElement(elementDTO); -// } catch (PolicyEditorException e) { -// //ignore TODO -// } -// } else if(functionOnSubjects.equals(EntitlementPolicyConstants.IS_IN)) { -// elementDTO = createApplyElementForNonBagFunctions( -// getFunctionId(functionOnSubjects), -// PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjects[0].trim(), subjectDataType); -// } else { -// elementDTO = createApplyElementForBagFunctions( -// getFunctionId(functionOnSubjects), -// PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjects, subjectDataType); -// } -// -// if(elementDTO != null){ -// applyElementDTO.setApplyElement(elementDTO); -// } -// } -// -// List applyElementDTOs = applyElementDTO.getApplyElements(); -// -// if(applyElementDTOs.size() > 1) { -// applyElementDTO.setFunctionId(EntitlementPolicyConstants.FUNCTION_AND); -// applyElement = createApplyElement(applyElementDTO, doc); -// } else if(applyElementDTOs.size() == 1){ -// applyElement = createApplyElement(applyElementDTOs.get(0), doc); -// } -// -// if(resourcesElement != null || actionsElement != null || subjectsElement != null || -// environmentsElement != null) { -// targetElement = doc.createElement(EntitlementPolicyConstants.TARGET_ELEMENT); -// if(resourcesElement != null) { -// targetElement.appendChild(resourcesElement); -// } -// if(actionsElement != null) { -// targetElement.appendChild(actionsElement); -// } -// if(subjectsElement != null) { -// targetElement.appendChild(subjectsElement); -// } -// -// if(environmentsElement != null){ -// targetElement.appendChild(environmentsElement); -// } -// } -// -// if(applyElement != null) { -// conditionElement = doc.createElement(EntitlementPolicyConstants.CONDITION_ELEMENT); -// conditionElement.appendChild(applyElement); -// } -// -// if(basicRuleDTO.getRuleId() != null && basicRuleDTO.getRuleId().trim().length() > 0 && -// basicRuleDTO.getRuleEffect() != null && basicRuleDTO.getRuleEffect(). -// trim().length() > 0){ -// -// ruleElement = doc.createElement(EntitlementPolicyConstants.RULE_ELEMENT); -// ruleElement.setAttribute(EntitlementPolicyConstants.RULE_ID, basicRuleDTO. -// getRuleId()); -// ruleElement.setAttribute(EntitlementPolicyConstants.RULE_EFFECT, -// basicRuleDTO.getRuleEffect()); -// -// if(basicRuleDTO.getRuleDescription() != null && basicRuleDTO. -// getRuleDescription().trim().length() > 0){ -// ruleElement.setAttribute(EntitlementPolicyConstants.RULE_DESCRIPTION, -// basicRuleDTO.getRuleDescription()); -// } -// -// if(targetElement != null) { -// ruleElement.appendChild(targetElement); -// } -// if(conditionElement != null) { -// ruleElement.appendChild(conditionElement); -// } -// } -// -// return ruleElement; -// -// } -// -// -// -// public static Element createBasicTargetElementDTO(BasicTargetDTO basicTargetDTO, -// Document doc) { -// -// //TODO -// String functionOnResources = basicTargetDTO.getFunctionOnResources(); -// String functionOnSubjects = basicTargetDTO.getFunctionOnSubjects(); -// String functionOnActions = basicTargetDTO.getFunctionOnActions(); -// String functionOnEnvironment = basicTargetDTO.getFunctionOnEnvironment(); -// String resourceNames = basicTargetDTO.getResourceList(); -// String actionNames = basicTargetDTO.getActionList(); -// String subjectNames = basicTargetDTO.getSubjectList(); -// String environmentNames = basicTargetDTO.getEnvironmentList(); -// String resourceId = basicTargetDTO.getResourceId(); -// String subjectId = basicTargetDTO.getSubjectId(); -// String actionId = basicTargetDTO.getActionId(); -// String environmentId = basicTargetDTO.getEnvironmentId(); -// String resourceDataType = basicTargetDTO.getResourceDataType(); -// String subjectDataType = basicTargetDTO.getSubjectDataType(); -// String actionDataType = basicTargetDTO.getActionDataType(); -// String environmentDataType = basicTargetDTO.getResourceDataType(); -// -// Element resourcesElement = null; -// Element actionsElement = null; -// Element subjectsElement = null; -// Element environmentsElement = null; -// Element targetElement = doc.createElement(EntitlementPolicyConstants.TARGET_ELEMENT); -// -// if(resourceNames != null && resourceNames.trim().length() > 0) { -// resourcesElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element resourceElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// String[] resources = resourceNames.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -// if(resourceId == null || resourceId.trim().length() < 1) { -// resourceId = EntitlementPolicyConstants.RESOURCE_ID; -// } -// if(functionOnResources.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnResources.equals(EntitlementPolicyConstants.REGEXP_MATCH) ) { -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnResources), -// resources[0].trim(), PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceElement.appendChild(matchElement); -// } -// resourcesElement.appendChild(resourceElement); -// } else if(functionOnResources.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH)) { -// for(String resource : resources){ -// resource = resource.trim(); -// Element resourceEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// resource, PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceEle.appendChild(matchElement); -// } -// resourcesElement.appendChild(resourceEle); -// } -// } else if(functionOnResources.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH_REGEXP)) { -// for(String resource : resources){ -// resource = resource.trim(); -// Element resourceEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// resource, PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceEle.appendChild(matchElement); -// } -// resourcesElement.appendChild(resourceEle); -// } -// } else if(functionOnResources.equals(EntitlementPolicyConstants.MATCH_REGEXP_SET_OF)) { -// for(String resource : resources){ -// resource = resource.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// resource, PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceElement.appendChild(matchElement); -// } -// } -// resourcesElement.appendChild(resourceElement); -// }else if(functionOnResources.equals(EntitlementPolicyConstants.SET_OF)) { -// for(String resource : resources){ -// resource = resource.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// resource, PolicyEditorConstants.RESOURCE_CATEGORY_URI, resourceId, resourceDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// resourceElement.appendChild(matchElement); -// } -// } -// resourcesElement.appendChild(resourceElement); -// } -// } -// -// if(actionNames != null && actionNames.trim().length() > 0) { -// actionsElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element actionElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// String[] actions = actionNames.split(","); -// if(actionId == null || actionId.trim().length() < 1) { -// actionId = EntitlementPolicyConstants.ACTION_ID; -// } -// if(functionOnActions.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnActions.equals(EntitlementPolicyConstants. REGEXP_MATCH)) { -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnActions), -// actions[0].trim(), PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionElement.appendChild(matchElement); -// } -// actionsElement.appendChild(actionElement); -// } else if(functionOnActions.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH)) { -// for(String action : actions){ -// action = action.trim(); -// Element actionEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// action, PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionEle.appendChild(matchElement); -// } -// actionsElement.appendChild(actionEle); -// } -// } else if(functionOnActions.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH_REGEXP)) { -// for(String action : actions){ -// action = action.trim(); -// Element actionEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// action, PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionEle.appendChild(matchElement); -// } -// actionsElement.appendChild(actionEle); -// } -// } else if(functionOnActions.equals(EntitlementPolicyConstants.MATCH_REGEXP_SET_OF)) { -// for(String action : actions){ -// action = action.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// action, PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionElement.appendChild(matchElement); -// } -// } -// actionsElement.appendChild(actionElement); -// } else if(functionOnActions.equals(EntitlementPolicyConstants.SET_OF)) { -// for(String action : actions){ -// action = action.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// action, PolicyEditorConstants.ACTION_CATEGORY_URI, actionId, actionDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// actionElement.appendChild(matchElement); -// } -// } -// actionsElement.appendChild(actionElement); -// } -// -// } -// -// if(environmentNames != null && environmentNames.trim().length() > 0) { -// environmentsElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element environmentElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// String[] environments = environmentNames.split(","); -// if(environmentId == null || environmentId.trim().length() < 1) { -// environmentId = EntitlementPolicyConstants.ENVIRONMENT_ID; -// } -// if(functionOnEnvironment.equals(EntitlementPolicyConstants.EQUAL_TO) || -// functionOnEnvironment.equals(EntitlementPolicyConstants.REGEXP_MATCH)) { -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnEnvironment), -// environments[0].trim(), PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentElement.appendChild(matchElement); -// } -// environmentsElement.appendChild(environmentElement); -// } else if(functionOnEnvironment.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH)) { -// for(String environment : environments){ -// environment = environment.trim(); -// Element environmentEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// environment, PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentEle.appendChild(matchElement); -// } -// environmentsElement.appendChild(environmentEle); -// } -// } else if(functionOnEnvironment.equals(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH_REGEXP)) { -// for(String environment : environments){ -// environment = environment.trim(); -// Element environmentEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// environment, PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentEle.appendChild(matchElement); -// } -// environmentsElement.appendChild(environmentEle); -// } -// }else if(functionOnEnvironment.equals(EntitlementPolicyConstants.MATCH_REGEXP_SET_OF)) { -// for(String environment : environments){ -// environment = environment.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// environment, PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentElement.appendChild(matchElement); -// } -// } -// environmentsElement.appendChild(environmentElement); -// }else if(functionOnEnvironment.equals(EntitlementPolicyConstants.SET_OF)) { -// for(String environment : environments){ -// environment = environment.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// environment, PolicyEditorConstants.ENVIRONMENT_CATEGORY_URI, environmentId, environmentDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// environmentElement.appendChild(matchElement); -// } -// } -// environmentsElement.appendChild(environmentElement); -// } -// } -// -// if(subjectNames != null && subjectNames.trim().length() > 0) { -// subjectsElement = doc.createElement(PolicyEditorConstants.ANY_OF_ELEMENT); -// Element subjectElement = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// String[] subjects = subjectNames.split(","); -// if(subjectId == null || subjectId.trim().length() < 1){ -// subjectId = EntitlementPolicyConstants.SUBJECT_ID_DEFAULT; -// } -// -// if(EntitlementPolicyConstants.EQUAL_TO.equals(functionOnSubjects) || -// EntitlementPolicyConstants.REGEXP_MATCH.equals(functionOnSubjects)) { -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(functionOnSubjects), -// subjects[0].trim(), PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjectDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// subjectElement.appendChild(matchElement); -// } -// subjectsElement.appendChild(subjectElement); -// } else if(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH.equals(functionOnSubjects)){ -// for(String subject : subjects){ -// subject = subject.trim(); -// Element subjectEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// subject, PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjectDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// subjectEle.appendChild(matchElement); -// } -// subjectsElement.appendChild(subjectEle); -// } -// } else if(EntitlementPolicyConstants.AT_LEAST_ONE_MATCH_REGEXP.equals(functionOnSubjects)){ -// for(String subject : subjects){ -// subject = subject.trim(); -// Element subjectEle = doc.createElement(PolicyEditorConstants.ALL_OF_ELEMENT); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// subject, PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjectDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// subjectEle.appendChild(matchElement); -// } -// subjectsElement.appendChild(subjectEle); -// } -// } else if(EntitlementPolicyConstants.SET_OF.equals(functionOnSubjects)){ -// for(String subject : subjects){ -// subject = subject.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.EQUAL_TO), -// subject, PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjectDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// subjectElement.appendChild(matchElement); -// } -// } -// subjectsElement.appendChild(subjectElement); -// } else if(EntitlementPolicyConstants.MATCH_REGEXP_SET_OF.equals(functionOnSubjects)){ -// for(String subject : subjects){ -// subject = subject.trim(); -// MatchElementDTO matchElementDTO = createMatchElementForNonBagFunctions( -// getFunctionId(EntitlementPolicyConstants.REGEXP_MATCH), -// subject, PolicyEditorConstants.SUBJECT_CATEGORY_URI, subjectId, subjectDataType); -// Element matchElement= createMatchElement(matchElementDTO, doc); -// if(matchElement != null){ -// subjectElement.appendChild(matchElement); -// } -// } -// subjectsElement.appendChild(subjectElement); -// } -// } -// -// if(resourcesElement != null) { -// targetElement.appendChild(resourcesElement); -// } -// if(actionsElement != null) { -// targetElement.appendChild(actionsElement); -// } -// if(subjectsElement != null) { -// targetElement.appendChild(subjectsElement); -// } -// -// if(environmentsElement != null){ -// targetElement.appendChild(environmentsElement); -// } -// -// return targetElement; -// } -// - - /** - * Creates XML request from RequestDTO object - * - * @param requestDTO - * @return - */ - public static RequestElementDTO createRequestElementDTO(RequestDTO requestDTO) { - - RequestElementDTO requestElement = new RequestElementDTO(); - - List rowDTOs = requestDTO.getRowDTOs(); - if (rowDTOs == null || rowDTOs.size() < 1) { - return requestElement; - } - - Map dtoMap = new HashMap(); - List dtoList = new ArrayList(); - - for (RowDTO rowDTO : rowDTOs) { - String category = rowDTO.getCategory(); - String value = rowDTO.getAttributeValue(); - String attributeId = rowDTO.getAttributeId(); - if (category != null && category.trim().length() > 0 && value != null && - value.trim().length() > 0 && attributeId != null && attributeId.trim().length() > 0) { - - if (requestDTO.isMultipleRequest()) { - String[] values = value.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String attributeValue : values) { - AttributesElementDTO attributesElementDTO = new AttributesElementDTO(); - attributesElementDTO.setCategory(category); - - AttributeElementDTO attributeElementDTO = new AttributeElementDTO(); - attributeElementDTO.addAttributeValue(attributeValue); - attributeElementDTO.setAttributeId(attributeId); - attributeElementDTO.setIncludeInResult(rowDTO.isNotCompleted()); - attributesElementDTO.addAttributeElementDTO(attributeElementDTO); - if (rowDTO.getAttributeDataType() != null && rowDTO. - getAttributeDataType().trim().length() > 0) { - attributeElementDTO.setDataType(rowDTO.getAttributeDataType()); - } else { - attributeElementDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - } - dtoList.add(attributesElementDTO); - } - - } else { - AttributesElementDTO attributesElementDTO = dtoMap.get(category); - if (attributesElementDTO == null) { - attributesElementDTO = new AttributesElementDTO(); - attributesElementDTO.setCategory(category); - } - - String[] values = value.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - AttributeElementDTO attributeElementDTO = new AttributeElementDTO(); - attributeElementDTO.setAttributeValues(Arrays.asList(values)); - attributeElementDTO.setAttributeId(attributeId); - attributeElementDTO.setIncludeInResult(rowDTO.isNotCompleted()); - attributesElementDTO.addAttributeElementDTO(attributeElementDTO); - if (rowDTO.getAttributeDataType() != null && rowDTO. - getAttributeDataType().trim().length() > 0) { - attributeElementDTO.setDataType(rowDTO.getAttributeDataType()); - } else { - attributeElementDTO.setDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - } - dtoMap.put(category, attributesElementDTO); - } - } - } - - requestElement.setMultipleRequest(requestDTO.isMultipleRequest()); - requestElement.setCombinedDecision(requestDTO.isCombinedDecision()); - requestElement.setReturnPolicyIdList(requestDTO.isReturnPolicyIdList()); - if (!requestDTO.isMultipleRequest()) { - dtoList = new ArrayList(); - for (Map.Entry entry : dtoMap.entrySet()) { - dtoList.add(entry.getValue()); - } - } - requestElement.setAttributesElementDTOs(dtoList); - return requestElement; - } - - -// public static TargetElementDTO createTargetElementDTOs(String policy) -// throws EntitlementPolicyCreationException { -// -// TargetElementDTO targetElementDTO = null; -// OMElement omElement; -// try { -// omElement = AXIOMUtil.stringToOM(policy); -// } catch (XMLStreamException e) { -// throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); -// } -// -// if (omElement != null) { -// Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// TARGET_ELEMENT); -// while(iterator.hasNext()){ -// OMElement targetElement = (OMElement)iterator.next(); -// targetElementDTO = createTargetElementDTO(targetElement, null); -// } -// } -// return targetElementDTO; -// } - - -// -// -// -// public static PolicySetDTO createPolicySetDTO(String policySet) -// throws EntitlementPolicyCreationException { -// PolicySetDTO policySetDTO = new PolicySetDTO(); -// OMElement omElement; -// try { -// omElement = AXIOMUtil.stringToOM(policySet); -// } catch (XMLStreamException e) { -// throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); -// } -// -// if(omElement != null){ -// policySetDTO.setPolicySetId(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_SET_ID))); -// -// String policyCombiningAlgorithm = omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ALGORITHM)); -// //TODO -// -// if(policyCombiningAlgorithm.contains(PolicyEditorConstants.POLICY_ALGORITHM_IDENTIFIER_1)){ -// policySetDTO.setPolicyCombiningAlgId(policyCombiningAlgorithm. -// split(PolicyEditorConstants.POLICY_ALGORITHM_IDENTIFIER_1)[1]); -// } else { -// policySetDTO.setPolicyCombiningAlgId(policyCombiningAlgorithm. -// split(PolicyEditorConstants.POLICY_ALGORITHM_IDENTIFIER_3)[1]); -// } -// -// Iterator iterator1 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// -// if(iterator1.hasNext()){ -// OMElement descriptionElement = (OMElement) iterator1.next(); -// if(descriptionElement != null && descriptionElement.getText() != null){ -// policySetDTO.setDescription(descriptionElement.getText().trim()); -// } -// } -// -// -// Iterator iterator2 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// POLICY_ELEMENT); -// while(iterator2.hasNext()){ -// OMElement policyElement = (OMElement)iterator2.next(); -// if(policyElement != null){ -// policySetDTO.setPolicyIds(policyElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ID))); -// } -// } -// -// Iterator iterator3 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// POLICY_SET_ELEMENT); -// while(iterator3.hasNext()){ -// OMElement policySetElement = (OMElement)iterator3.next(); -// if(policySetElement != null){ -// policySetDTO.setPolicyIds(policySetElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_SET_ID))); -// } -// } -// -// Iterator iterator4 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// POLICY_SET_REFERENCE); -// while(iterator4.hasNext()){ -// OMElement policySetReferenceElement = (OMElement)iterator4.next(); -// if(policySetReferenceElement != null){ -// policySetDTO.setPolicyIds(policySetReferenceElement.getText().trim()); -// } -// } -// -// Iterator iterator5 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// POLICY_REFERENCE); -// while(iterator5.hasNext()){ -// OMElement policyReferenceElement = (OMElement)iterator5.next(); -// if(policyReferenceElement != null){ -// policySetDTO.setPolicyIds(policyReferenceElement.getText().trim()); -// } -// } -// -// } -// -// return policySetDTO; -// } -// - -// -// public static ConditionElementDT0 createConditionElementDT0(OMElement omElement){ -// ConditionElementDT0 conditionElementDT0 = new ConditionElementDT0(); -// if(omElement != null){ -// Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// APPLY_ELEMENT); -// while(iterator.hasNext()){ -// OMElement applyElement = (OMElement)iterator.next(); -// ApplyElementDTO applyElementDTO = new ApplyElementDTO(); -// conditionElementDT0.setApplyElement(createApplyElementDTO(applyElementDTO, -// applyElement, 0, 0, "")); -// } -// } -// return conditionElementDT0; -// } -// -// public static ApplyElementDTO createApplyElementDTO(ApplyElementDTO applyElementDTO, -// OMElement omElement , int applyElementNo, -// int addApplyElementNo, String applyElementId){ -// if(applyElementDTO == null){ -// applyElementDTO = new ApplyElementDTO(); -// } -// if(omElement != null){ -// applyElementNo ++; -// -// applyElementId = applyElementId + "/" + applyElementNo; -// applyElementDTO.setApplyElementNumber(applyElementNo); -//// applyElementDTO.setAddApplyElementPageNumber(addApplyElementNo); -// applyElementDTO.setApplyElementId(applyElementId); -// applyElementDTO.setFunctionId(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.FUNCTION_ID))); -// Iterator iterator1 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// APPLY_ELEMENT); -// while(iterator1.hasNext()){ -// OMElement applyElement = (OMElement)iterator1.next(); -// ApplyElementDTO elementDTO = createApplyElementDTO(null, applyElement,applyElementNo, -// addApplyElementNo, applyElementId); -// applyElementNo = elementDTO.getApplyElementNumber() + 1; -// applyElementDTO.setApplyElement(elementDTO); -// } -// -// Iterator iterator2 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// SUBJECT_ELEMENT + EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR); -// int attributeDesignatorElementNo = 0; -// while(iterator2.hasNext()){ -// OMElement attributeDesignatorElement = (OMElement)iterator2.next(); -// applyElementDTO.setAttributeDesignators(createAttributeDesignatorDTO( -// attributeDesignatorElement, addApplyElementNo, -// EntitlementPolicyConstants.SUBJECT_ELEMENT, attributeDesignatorElementNo, applyElementId)); -// attributeDesignatorElementNo ++; -// } -// -// Iterator iterator3 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// RESOURCE_ELEMENT + EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR); -// -// while(iterator3.hasNext()){ -// OMElement attributeDesignatorElement = (OMElement)iterator3.next(); -// applyElementDTO.setAttributeDesignators(createAttributeDesignatorDTO( -// attributeDesignatorElement, addApplyElementNo, -// EntitlementPolicyConstants.RESOURCE_ELEMENT, 0, applyElementId)); -// attributeDesignatorElementNo ++; -// } -// -// Iterator iterator4 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// ACTION_ELEMENT + EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR); -// -// while(iterator4.hasNext()){ -// OMElement attributeDesignatorElement = (OMElement)iterator4.next(); -// applyElementDTO.setAttributeDesignators(createAttributeDesignatorDTO( -// attributeDesignatorElement, addApplyElementNo, -// EntitlementPolicyConstants.ACTION_ELEMENT, 0, applyElementId)); -// attributeDesignatorElementNo ++; -// } -// -// Iterator iterator5 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// ENVIRONMENT_ELEMENT + EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR); -// -// while(iterator5.hasNext()){ -// OMElement attributeDesignatorElement = (OMElement)iterator5.next(); -// applyElementDTO.setAttributeDesignators(createAttributeDesignatorDTO( -// attributeDesignatorElement, addApplyElementNo, -// EntitlementPolicyConstants.ENVIRONMENT_ELEMENT, 0, applyElementId)); -// attributeDesignatorElementNo ++; -// } -// -// Iterator iterator6 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// ATTRIBUTE_VALUE); -// int attributeValueElementNo = 0; -// while(iterator6.hasNext()){ -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// OMElement attributeValueElement = (OMElement)iterator6.next(); -// attributeValueElementDTO.setAttributeDataType(attributeValueElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.DATA_TYPE))); -// attributeValueElementDTO.setAttributeValue(attributeValueElement.getText()); -// attributeValueElementDTO.setApplyElementNumber(addApplyElementNo); -// attributeValueElementDTO.setApplyElementId(applyElementId); -// attributeValueElementDTO.setElementId(attributeValueElementNo); -// applyElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); -// attributeValueElementNo ++; -// } -// -// Iterator iterator7 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// FUNCTION); -// -// while(iterator7.hasNext()){ -// OMElement functionElement = (OMElement)iterator7.next(); -// applyElementDTO.setFunctionFunctionId(functionElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.FUNCTION_ID))); -// } -// -// Iterator iterator8 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// ENVIRONMENT_ELEMENT + EntitlementPolicyConstants.ATTRIBUTE_SELECTOR); -// int attributeSelectorElementNo = 0; -// while(iterator8.hasNext()){ -// OMElement attributeSelectorElement = (OMElement)iterator8.next(); -// applyElementDTO.setAttributeSelectors(createAttributeSelectorDTO( -// attributeSelectorElement, addApplyElementNo, attributeSelectorElementNo, applyElementId)); -// attributeSelectorElementNo ++; -// } -// -// applyElementDTO.setAttributeValueElementCount(attributeValueElementNo); -// applyElementDTO.setAttributeDesignatorsElementCount(attributeDesignatorElementNo); -// applyElementDTO.setAttributeSelectorElementCount(attributeSelectorElementNo); -// } -// return applyElementDTO; -// } -// -// public static TargetElementDTO createTargetElementDTO(OMElement omElement, String ruleId){ -// -// TargetElementDTO targetElementDTO = new TargetElementDTO(); -// List subElementDTOs = new ArrayList(); -// int subElementId = 0; -// -// if(omElement != null){ -// if(omElement.getChildrenWithLocalName(EntitlementPolicyConstants.RESOURCE_ELEMENT + "s"). -// hasNext()){ -// OMElement element = (OMElement) omElement.getChildrenWithLocalName( -// EntitlementPolicyConstants.RESOURCE_ELEMENT + "s").next(); -// Iterator iterator1 = element.getChildrenWithLocalName(EntitlementPolicyConstants. -// RESOURCE_ELEMENT); -// while(iterator1.hasNext()){ -// OMElement resourceElement = (OMElement)iterator1.next(); -// subElementDTOs.add(createSubElementDTO(resourceElement, ruleId, -// EntitlementPolicyConstants.RESOURCE_ELEMENT, subElementId)); -// subElementId ++; -// } -// } -// -// if(omElement.getChildrenWithLocalName(EntitlementPolicyConstants.SUBJECT_ELEMENT + "s"). -// hasNext()){ -// OMElement element = (OMElement) omElement.getChildrenWithLocalName( -// EntitlementPolicyConstants.SUBJECT_ELEMENT + "s").next(); -// Iterator iterator2 = element.getChildrenWithLocalName(EntitlementPolicyConstants. -// SUBJECT_ELEMENT); -// while(iterator2.hasNext()){ -// OMElement resourceElement = (OMElement)iterator2.next(); -// subElementDTOs.add(createSubElementDTO(resourceElement,ruleId, -// EntitlementPolicyConstants.SUBJECT_ELEMENT, subElementId)); -// subElementId ++; -// } -// } -// -// if(omElement.getChildrenWithLocalName(EntitlementPolicyConstants.ACTION_ELEMENT + "s"). -// hasNext()){ -// OMElement element = (OMElement) omElement.getChildrenWithLocalName( -// EntitlementPolicyConstants.ACTION_ELEMENT + "s").next(); -// Iterator iterator3 = element.getChildrenWithLocalName(EntitlementPolicyConstants. -// ACTION_ELEMENT); -// while(iterator3.hasNext()){ -// OMElement resourceElement = (OMElement)iterator3.next(); -// subElementDTOs.add(createSubElementDTO(resourceElement,ruleId, -// EntitlementPolicyConstants.ACTION_ELEMENT, subElementId)); -// subElementId ++; -// } -// } -// -// if(omElement.getChildrenWithLocalName(EntitlementPolicyConstants.SUBJECT_ELEMENT + "s"). -// hasNext()){ -// OMElement element = (OMElement) omElement.getChildrenWithLocalName( -// EntitlementPolicyConstants.SUBJECT_ELEMENT + "s").next(); -// Iterator iterator4 = element.getChildrenWithLocalName(EntitlementPolicyConstants. -// ENVIRONMENT_ELEMENT); -// while(iterator4.hasNext()){ -// OMElement resourceElement = (OMElement)iterator4.next(); -// subElementDTOs.add(createSubElementDTO(resourceElement,ruleId, -// EntitlementPolicyConstants.ENVIRONMENT_ELEMENT, subElementId)); -// subElementId ++; -// } -// } -// } -// -// targetElementDTO.setSubElementDTOs(subElementDTOs); -// targetElementDTO.setSubElementCount(subElementId); -// -// return targetElementDTO; -// } -// -// public static SubElementDTO createSubElementDTO(OMElement omElement, String ruleId, -// String subElementName, int subElementId){ -// -// SubElementDTO subElementDTO = new SubElementDTO(); -// subElementDTO.setElementName(subElementName); -// subElementDTO.setElementId(subElementId); -// subElementDTO.setRuleId(ruleId); -// int matchElementId = 0; -// if(omElement != null){ -// Iterator iterator1 = omElement.getChildrenWithLocalName(subElementName + -// EntitlementPolicyConstants.MATCH_ELEMENT); -// -// while(iterator1.hasNext()){ -// MatchElementDTO matchElementDTO = new MatchElementDTO(); -// OMElement matchElement = (OMElement)iterator1.next(); -// matchElementDTO.setMatchElementName(subElementName); -// matchElementDTO.setElementId(matchElementId); -// matchElementDTO.setRuleElementName(ruleId); -// matchElementDTO.setMatchId(matchElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.MATCH_ID))); -// -// Iterator iterator2 = matchElement.getChildrenWithLocalName(subElementName + -// EntitlementPolicyConstants.ATTRIBUTE_DESIGNATOR); -// -// while(iterator2.hasNext()){ -// OMElement attributeDesignatorElement = (OMElement)iterator2.next(); -// matchElementDTO.setAttributeDesignatorDTO(createAttributeDesignatorDTO( -// attributeDesignatorElement, 0, subElementName, 0, "")); -// } -// -// Iterator iterator3 = matchElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// ATTRIBUTE_VALUE); -// -// while(iterator3.hasNext()){ -// AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); -// OMElement attributeValueElement = (OMElement)iterator3.next(); -// attributeValueElementDTO.setAttributeDataType(attributeValueElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.DATA_TYPE))); -// attributeValueElementDTO.setAttributeValue(attributeValueElement.getText()); -// matchElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); -// } -// -// Iterator iterator4 = matchElement.getChildrenWithLocalName(subElementName + -// EntitlementPolicyConstants.ATTRIBUTE_SELECTOR); -// while(iterator4.hasNext()){ -// OMElement attributeSelectorElement = (OMElement)iterator4.next(); -// matchElementDTO.setAttributeSelectorDTO(createAttributeSelectorDTO( -// attributeSelectorElement, 0, 0, "")); -// } -// matchElementId ++; -// subElementDTO.setMatchElementDTOs(matchElementDTO); -// } -// } -// subElementDTO.setMatchElementCount(matchElementId); -// -// return subElementDTO; -// } -// -// /** -// * This method creates the AttributeDesignatorDTO object using matchElement -// * @param omElement attributeDesignator OMElement -// * @param applyElementNo if attributeDesignator element is embed in a apply element, its number -// * @param elementName attributeSelectorElement number to uniquely identification -// * @param matchElementId match element id to identity the element -// * @param applyElementId apply element id to identity the element -// * @return AttributeDesignatorDTO object -// */ -// public static AttributeDesignatorDTO createAttributeDesignatorDTO(OMElement omElement, -// int applyElementNo, -// String elementName, -// int matchElementId, -// String applyElementId){ -// AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); -// -// if(omElement != null){ -// attributeDesignatorDTO.setAttributeId(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.ATTRIBUTE_ID))); -// attributeDesignatorDTO.setDataType(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.DATA_TYPE))); -// attributeDesignatorDTO.setIssuer(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.ISSUER))); -// attributeDesignatorDTO.setMustBePresent(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.MUST_BE_PRESENT))); -// attributeDesignatorDTO.setApplyElementNumber(applyElementNo); -// attributeDesignatorDTO.setElementName(elementName); -// attributeDesignatorDTO.setElementId(matchElementId); -// attributeDesignatorDTO.setApplyElementId(applyElementId); -// } -// return attributeDesignatorDTO; -// } -// -// /** -// * This method creates the AttributeSelectorDTO object using matchElement -// * @param omElement attributeSelector OMElement -// * @param applyElementNo if attributeSelector element is embed in a apply element, its number -// * @param attributeSelectorElementNo attributeSelectorElement number to uniquely identification -// * @param applyElementId apply element id to identity the element -// * @return AttributeSelectorDTO object -// */ -// public static AttributeSelectorDTO createAttributeSelectorDTO(OMElement omElement, -// int applyElementNo, -// int attributeSelectorElementNo, -// String applyElementId){ -// AttributeSelectorDTO attributeSelectorDTO = new AttributeSelectorDTO(); -// -// if(omElement != null){ -// attributeSelectorDTO.setAttributeSelectorDataType(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.DATA_TYPE))); -// attributeSelectorDTO.setAttributeSelectorRequestContextPath(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.REQUEST_CONTEXT_PATH))); -// attributeSelectorDTO.setAttributeSelectorMustBePresent(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.MUST_BE_PRESENT))); -// attributeSelectorDTO.setApplyElementNumber(applyElementNo); -// attributeSelectorDTO.setElementNumber(attributeSelectorElementNo); -// attributeSelectorDTO.setApplyElementId(applyElementId); -// } -// return attributeSelectorDTO; -// } -// -// /** -// * -// * @param applyElementDTO -// * @param attributeValueElementNumber -// * @return -// */ -// public static int getAttributeValueElementCount(ApplyElementDTO applyElementDTO, -// int attributeValueElementNumber){ -// attributeValueElementNumber = applyElementDTO.getAttributeValueElementCount(); -// List applyElementDTOs = applyElementDTO.getApplyElements(); -// for(ApplyElementDTO elementDTO : applyElementDTOs){ -// attributeValueElementNumber = attributeValueElementNumber + -// getAttributeValueElementCount(elementDTO, attributeValueElementNumber); -// } -// return attributeValueElementNumber; -// } -// -// public static int getAttributeDesignatorElementCount(ApplyElementDTO applyElementDTO, -// int attributeDesignatorElementNumber){ -// attributeDesignatorElementNumber = attributeDesignatorElementNumber + applyElementDTO. -// getAttributeDesignatorsElementCount(); -// List applyElementDTOs = applyElementDTO.getApplyElements(); -// for(ApplyElementDTO elementDTO : applyElementDTOs){ -// attributeDesignatorElementNumber = attributeDesignatorElementNumber + -// getAttributeDesignatorElementCount(elementDTO, attributeDesignatorElementNumber); -// } -// return attributeDesignatorElementNumber; -// } -// -// public static int getAttributeSelectorElementCount(ApplyElementDTO applyElementDTO, -// int attributeSelectorElementNumber){ -// attributeSelectorElementNumber = attributeSelectorElementNumber + applyElementDTO. -// getAttributeSelectorElementCount(); -// List applyElementDTOs = applyElementDTO.getApplyElements(); -// for(ApplyElementDTO elementDTO : applyElementDTOs){ -// attributeSelectorElementNumber = attributeSelectorElementNumber + -// getAttributeSelectorElementCount(elementDTO, attributeSelectorElementNumber); -// } -// return attributeSelectorElementNumber; -// } -// -// /** -// * This method creates policy set element -// * @param policySetDTO PolicySetDTO -// * @param doc Document -// * @return DOM Element of Policy Set -// * @throws EntitlementPolicyCreationException throw exception -// */ -// public static Element createPolicySetElement(PolicySetDTO policySetDTO, Document doc) -// throws EntitlementPolicyCreationException { -// -// Element policySetElement = doc.createElement(EntitlementPolicyConstants.POLICY_SET_ELEMENT); -// Element targetElement = null; -// policySetElement.setAttribute("xmlns", EntitlementPolicyConstants.XACML3_POLICY_NAMESPACE); -// -// if(policySetDTO.getPolicySetId() != null && policySetDTO.getPolicySetId().trim().length() > 0) { -// policySetElement.setAttribute(EntitlementPolicyConstants.POLICY_SET_ID, policySetDTO. -// getPolicySetId()); -// } -// -// String combiningAlgId = policySetDTO.getPolicyCombiningAlgId(); -// if(combiningAlgId != null && combiningAlgId.trim().length() > 0) { -// -// if(PolicyEditorConstants.CombiningAlog.ONLY_ONE_APPLICABLE_ID.equals(combiningAlgId) || -// PolicyEditorConstants.CombiningAlog.FIRST_APPLICABLE_ID.equals(combiningAlgId)){ -// policySetElement.setAttribute(EntitlementPolicyConstants.POLICY_ALGORITHM, -// PolicyEditorConstants.POLICY_ALGORITHM_IDENTIFIER_1 + combiningAlgId); -// } else { -// policySetElement.setAttribute(EntitlementPolicyConstants.POLICY_ALGORITHM, -// PolicyEditorConstants.POLICY_ALGORITHM_IDENTIFIER_3 + combiningAlgId); -// } -// } -// -// if(policySetDTO.getVersion() != null && policySetDTO.getVersion().trim().length() > 0){ -// policySetElement.setAttribute(EntitlementPolicyConstants.POLICY_VERSION, -// policySetDTO.getVersion()); -// } else { -// // policy version is handled by wso2 registry. therefore we can ignore it, although it -// // is a required attribute -// policySetElement.setAttribute(EntitlementPolicyConstants.POLICY_VERSION, "1.0"); -// } -// -// -// Element descriptionElement = doc.createElement(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// if(policySetDTO.getDescription() != null && policySetDTO. -// getDescription().trim().length() > 0) { -// descriptionElement.setTextContent(policySetDTO.getDescription()); -// policySetElement.appendChild(descriptionElement); -// } else { -// String description = "This is " + policySetDTO.getPolicySetId() + " policy set"; -// descriptionElement.setTextContent(description); -// policySetElement.appendChild(descriptionElement); -// } -// -//// if(policySetDTO.getTargetElementDTO() != null && // TODO -//// policySetDTO.getTargetElementDTO().getSubElementDTOs() != null){ -//// if(policySetDTO.getTargetElementDTO().getSubElementDTOs().size() > 0){ -//// targetElement = PolicyEditorUtil.createTargetElement(policySetDTO.getTargetElementDTO(). -//// getSubElementDTOs(), doc); -//// } -//// } else if(policySetDTO.getBasicTargetDTO() != null){ -//// targetElement = createBasicTargetElementDTO(policySetDTO.getBasicTargetDTO(), doc); -//// } -// -// if(targetElement != null){ -// policySetElement.appendChild(targetElement); -// } else { -// targetElement = doc.createElement(EntitlementPolicyConstants.TARGET_ELEMENT); -// policySetElement.appendChild(targetElement); -// } -// -// if(policySetDTO.getPolicyIdReferences() != null && policySetDTO.getPolicyIdReferences().size() > 0){ -// for(String policeReferences : policySetDTO.getPolicyIdReferences()){ -// Element policeReferencesElement = doc. -// createElement(EntitlementPolicyConstants.POLICY_REFERENCE); -// policeReferencesElement.setTextContent(policeReferences); -// policySetElement.appendChild(policeReferencesElement); -// } -// } -// -// if(policySetDTO.getPolicySetIdReferences() != null && policySetDTO.getPolicySetIdReferences().size() > 0){ -// for(String policeSetReferences : policySetDTO.getPolicySetIdReferences()){ -// Element policeSetReferencesElement = doc. -// createElement(EntitlementPolicyConstants.POLICY_SET_REFERENCE); -// policeSetReferencesElement.setTextContent(policeSetReferences); -// policySetElement.appendChild(policeSetReferencesElement); -// } -// } -// return policySetElement; -// } -// -// /** -// * Convert XACML policy Document element to a String object -// * @param doc Document element -// * @return String XACML policy -// * @throws EntitlementPolicyCreationException throws when transform fails -// */ -// public static String getStringFromDocument(Document doc) throws EntitlementPolicyCreationException { -// try { -// -// DOMSource domSource = new DOMSource(doc); -// StringWriter writer = new StringWriter(); -// StreamResult result = new StreamResult(writer); -// TransformerFactory transformerFactory = TransformerFactory.newInstance(); -// Transformer transformer = transformerFactory.newTransformer(); -// transformer.transform(domSource, result); -// return writer.toString().substring(writer.toString().indexOf('>') + 1); -// -// } catch(TransformerException e){ -// throw new EntitlementPolicyCreationException("While transforming policy element to String", e); -// } -// } -// -// /** -// * Select relavent function ID for given function name -// * @param functionName function name as String argument -// * @return returns function ID -// */ -// private static String getFunctionId(String functionName){ -// -// String functionId; -// -// if(functionName.equals(EntitlementPolicyConstants.REGEXP_MATCH)){ -// functionId = EntitlementPolicyConstants.FUNCTION_REGEXP; -// } else if(functionName.equals(EntitlementPolicyConstants.IS_IN)){ -// functionId = EntitlementPolicyConstants.FUNCTION_IS_IN; -// } else if(functionName.equals(EntitlementPolicyConstants.SET_OF)){ -// functionId = EntitlementPolicyConstants.FUNCTION_SET_EQUAL; -// } else if(functionName.equals(EntitlementPolicyConstants.SUBSET_OF)){ -// functionId = EntitlementPolicyConstants.FUNCTION_SUBSET; -// } else if(functionName.equals(EntitlementPolicyConstants.AT_LEAST)){ -// functionId = EntitlementPolicyConstants.FUNCTION_AT_LEAST; -// } else { -// functionId = EntitlementPolicyConstants.FUNCTION_EQUAL; -// } -// -// return functionId; -// } -// -// -//// /** -//// * create policy meta data that helps to edit the policy using basic editor -//// * @param order of the rule element are decided by this -//// * @return String Array to dent to back end -//// */ -//// public static String[] generateBasicPolicyEditorData(TargetDTO basicTargetDTO, -//// List ruleDTOs, -//// String ruleElementOrder){ -//// -//// List policyMetaDataList = new ArrayList(); -//// -//// if(basicTargetDTO != null){ -//// List rowDTOs = basicTargetDTO.getRowDTOList(); -//// for(RowDTO rowDTO : rowDTOs){ -//// createMetaDataFromRowDTO("target", rowDTO, policyMetaDataList); -//// } -//// } -//// -//// if(ruleDTOs != null && ruleDTOs.size() > 0){ -//// if(ruleElementOrder != null && ruleElementOrder.trim().length() > 0){ -//// String[] ruleIds = ruleElementOrder. -//// split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); -//// for(String ruleId : ruleIds){ -//// for(RuleDTO ruleDTO : ruleDTOs) { -//// if(ruleId.trim().equals(ruleDTO.getRuleId())){ -//// List rowDTOs = ruleDTO.getRowDTOList(); -//// if(rowDTOs != null && rowDTOs.size() > 0){ -//// for(RowDTO rowDTO : rowDTOs){ -//// createMetaDataFromRowDTO("rule" + ruleId, rowDTO, -//// policyMetaDataList); -//// } -//// } -//// -//// if(ruleDTO.getTargetDTO() != null && -//// ruleDTO.getTargetDTO().getRowDTOList() != null){ -//// for(RowDTO rowDTO : ruleDTO.getTargetDTO().getRowDTOList()){ -//// createMetaDataFromRowDTO("ruleTarget" + ruleId, rowDTO, -//// policyMetaDataList); -//// } -//// } -//// } -//// } -//// } -//// } else { -//// for(RuleDTO ruleDTO : ruleDTOs) { -//// List rowDTOs = ruleDTO.getRowDTOList(); -//// if(rowDTOs != null && rowDTOs.size() > 0){ -//// for(RowDTO rowDTO : rowDTOs){ -//// createMetaDataFromRowDTO("rule" + ruleDTO.getRuleId(), rowDTO, -//// policyMetaDataList); -//// } -//// } -//// -//// if(ruleDTO.getTargetDTO() != null && -//// ruleDTO.getTargetDTO().getRowDTOList() != null){ -//// for(RowDTO rowDTO : ruleDTO.getTargetDTO().getRowDTOList()){ -//// createMetaDataFromRowDTO("ruleTarget" + ruleDTO.getRuleId(), rowDTO, -//// policyMetaDataList); -//// } -//// } -//// } -//// } -//// } -//// -//// return policyMetaDataList.toArray(new String[policyMetaDataList.size()]); -//// } -// -// -// private static void createMetaDataFromRowDTO(String prefix, RowDTO rowDTO, List metaDataList){ -// -// if(metaDataList != null){ -// metaDataList.add(prefix + "|" + rowDTO.getCategory()); -// metaDataList.add(prefix + "|" + rowDTO.getPreFunction()); -// metaDataList.add(prefix + "|" + rowDTO.getFunction()); -// metaDataList.add(prefix + "|" + rowDTO.getAttributeValue()); -// metaDataList.add(prefix + "|" + rowDTO.getAttributeId()); -// metaDataList.add(prefix + "|" + rowDTO.getAttributeDataType()); -// metaDataList.add(prefix + "|" + rowDTO.getCombineFunction()); -// } -// } - -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyEditorUtil.java b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyEditorUtil.java deleted file mode 100644 index 5234a1cb0fb7..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/java/org/wso2/carbon/identity/entitlement/ui/util/PolicyEditorUtil.java +++ /dev/null @@ -1,3025 +0,0 @@ -/* -* Copyright (c) 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.identity.entitlement.ui.util; - -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.util.AXIOMUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.balana.utils.Constants.PolicyConstants; -import org.wso2.balana.utils.exception.PolicyBuilderException; -import org.wso2.balana.utils.policy.PolicyBuilder; -import org.wso2.balana.utils.policy.dto.AllOfElementDTO; -import org.wso2.balana.utils.policy.dto.AnyOfElementDTO; -import org.wso2.balana.utils.policy.dto.ApplyElementDTO; -import org.wso2.balana.utils.policy.dto.AttributeAssignmentElementDTO; -import org.wso2.balana.utils.policy.dto.AttributeDesignatorDTO; -import org.wso2.balana.utils.policy.dto.AttributeSelectorDTO; -import org.wso2.balana.utils.policy.dto.AttributeValueElementDTO; -import org.wso2.balana.utils.policy.dto.BasicPolicyDTO; -import org.wso2.balana.utils.policy.dto.BasicRuleDTO; -import org.wso2.balana.utils.policy.dto.BasicTargetDTO; -import org.wso2.balana.utils.policy.dto.ConditionElementDT0; -import org.wso2.balana.utils.policy.dto.MatchElementDTO; -import org.wso2.balana.utils.policy.dto.ObligationElementDTO; -import org.wso2.balana.utils.policy.dto.PolicyElementDTO; -import org.wso2.balana.utils.policy.dto.RuleElementDTO; -import org.wso2.balana.utils.policy.dto.TargetElementDTO; -import org.wso2.carbon.identity.entitlement.common.EntitlementConstants; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorEngine; -import org.wso2.carbon.identity.entitlement.common.PolicyEditorException; -import org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder; -import org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants; -import org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreationException; -import org.wso2.carbon.identity.entitlement.ui.PolicyEditorConstants; -import org.wso2.carbon.identity.entitlement.ui.dto.ExtendAttributeDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicyDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.PolicySetDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RowDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.RuleDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorElementDTO; -import org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO; - -import javax.xml.namespace.QName; -import javax.xml.stream.XMLStreamException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -/** - * Util class that helps to create the XACML policy which is defined by the XACML basic policy editor - */ - -/** - * @deprecated As this moved to org.wso2.carbon.identity.entitlement.common - */ -@Deprecated -public class PolicyEditorUtil { - - private static Log log = LogFactory.getLog(PolicyEditorUtil.class); - - /** - * map of apply element w.r.t identifier - */ - private static Map applyElementMap = new HashMap(); - - /** - * Create XACML policy with the simplest input attributes - * - * @param policyEditorDTO - * @return - * @throws PolicyEditorException - */ - public static String createSOAPolicy(SimplePolicyEditorDTO policyEditorDTO) throws PolicyEditorException { - - BasicPolicyDTO basicPolicyDTO = new BasicPolicyDTO(); - BasicTargetDTO basicTargetDTO = null; - List ruleElementDTOs = new ArrayList(); - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - - //create policy element - basicPolicyDTO.setPolicyId(policyEditorDTO.getPolicyId()); - // setting rule combining algorithm - basicPolicyDTO.setRuleAlgorithm(PolicyConstants.RuleCombiningAlog.FIRST_APPLICABLE_ID); - basicPolicyDTO.setDescription(policyEditorDTO.getDescription()); - - if (PolicyEditorConstants.SOA_CATEGORY_USER.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getUserAttributeValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY. - equals(policyEditorDTO.getUserAttributeValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - String selectedDataType = null; - - if (policyEditorDTO.getUserAttributeId() == null) { - basicTargetDTO.setSubjectId(PolicyEditorConstants.SUBJECT_ID_DEFAULT); - } else { - basicTargetDTO.setSubjectId(holder.getAttributeIdUri(policyEditorDTO.getUserAttributeId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(policyEditorDTO.getUserAttributeId())) != null) { - basicTargetDTO.setSubjectDataType(selectedDataType); - } - } - - if (basicTargetDTO.getSubjectDataType() == null) { - basicTargetDTO.setSubjectDataType(PolicyConstants.DataType.STRING); - } - - String function = findFunction(policyEditorDTO.getUserAttributeValue(), - basicTargetDTO.getSubjectDataType()); - String value = findAttributeValue(policyEditorDTO.getUserAttributeValue()); - basicTargetDTO.setSubjectList(value); - basicTargetDTO.setFunctionOnSubjects(function); - } - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - addActionElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_RESOURCE.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getResourceValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getResourceValue().trim())) { - basicTargetDTO = new BasicTargetDTO(); - - basicTargetDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); - basicTargetDTO.setResourceDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(policyEditorDTO.getResourceValue(), - basicTargetDTO.getResourceDataType()); - String value = findAttributeValue(policyEditorDTO.getResourceValue()); - basicTargetDTO.setResourceList(value); - basicTargetDTO.setFunctionOnResources(function); - } - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - - addActionElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_ACTION.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getActionValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getActionValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - - basicTargetDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); - basicTargetDTO.setActionDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(policyEditorDTO.getActionValue(), - basicTargetDTO.getActionDataType()); - String value = findAttributeValue(policyEditorDTO.getActionValue()); - basicTargetDTO.setActionList(value); - basicTargetDTO.setFunctionOnActions(function); - - } - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())) { - addEnvironmentElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } else if (PolicyEditorConstants.SOA_CATEGORY_ENVIRONMENT.equals(policyEditorDTO.getAppliedCategory())) { - - if (policyEditorDTO.getEnvironmentValue() != null && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(policyEditorDTO.getEnvironmentValue().trim())) { - - basicTargetDTO = new BasicTargetDTO(); - - String selectedDataType = null; - - if (policyEditorDTO.getEnvironmentId() == null) { - basicTargetDTO.setEnvironmentId(PolicyEditorConstants.ENVIRONMENT_ID_DEFAULT); - } else { - basicTargetDTO.setEnvironmentId(holder.getAttributeIdUri(policyEditorDTO.getEnvironmentId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(policyEditorDTO.getEnvironmentId())) != null) { - basicTargetDTO.setEnvironmentDataType(selectedDataType); - } - } - - if (basicTargetDTO.getEnvironmentDataType() == null) { - basicTargetDTO.setEnvironmentDataType(PolicyConstants.DataType.STRING); - } - - - String function = findFunction(policyEditorDTO.getEnvironmentValue(), - basicTargetDTO.getEnvironmentDataType()); - String value = findAttributeValue(policyEditorDTO.getEnvironmentValue()); - basicTargetDTO.setEnvironmentList(value); - basicTargetDTO.setFunctionOnEnvironment(function); - - } - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null) { - int ruleNo = 1; - for (SimplePolicyEditorElementDTO dto : elementDTOs) { - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - - if (dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())) { - addResourceElement(ruleElementDTO, dto); - } - - if (dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())) { - addSubjectElement(ruleElementDTO, dto); - } - - if (dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && - !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())) { - addActionElement(ruleElementDTO, dto); - } - - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); - ruleElementDTO.setRuleId("Rule-" + ruleNo); - ruleElementDTOs.add(ruleElementDTO); - ruleNo++; - } - - BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); - ruleElementDTO.setRuleId("Deny-Rule"); - ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); - ruleElementDTOs.add(ruleElementDTO); - } - } - - if (basicTargetDTO != null) { - basicPolicyDTO.setTargetDTO(basicTargetDTO); - } - - if (ruleElementDTOs.size() > 0) { - basicPolicyDTO.setBasicRuleDTOs(ruleElementDTOs); - } - - try { - return PolicyBuilder.getInstance().build(basicPolicyDTO); - } catch (PolicyBuilderException e) { - log.error(e); - throw new PolicyEditorException("Error while building policy"); - } - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addResourceElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - - ruleElementDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); - ruleElementDTO.setResourceDataType(PolicyConstants.DataType.STRING); - String function = findFunction(editorElementDTO.getResourceValue(), - ruleElementDTO.getResourceDataType()); - String value = findAttributeValue(editorElementDTO.getResourceValue()); - ruleElementDTO.setResourceList(value); - ruleElementDTO.setFunctionOnResources(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addSubjectElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - String selectedDataType = null; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - - if (editorElementDTO.getUserAttributeId() == null) { - ruleElementDTO.setSubjectId(PolicyEditorConstants.SUBJECT_ID_DEFAULT); - } else { - ruleElementDTO.setSubjectId(holder.getAttributeIdUri(editorElementDTO.getUserAttributeId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(editorElementDTO.getUserAttributeId())) != null) { - ruleElementDTO.setSubjectDataType(selectedDataType); - } - } - - if (ruleElementDTO.getSubjectDataType() == null) { - ruleElementDTO.setSubjectDataType(PolicyConstants.DataType.STRING); - } - String function = findFunction(editorElementDTO.getUserAttributeValue(), - ruleElementDTO.getSubjectDataType()); - String value = findAttributeValue(editorElementDTO.getUserAttributeValue()); - ruleElementDTO.setSubjectList(value); - ruleElementDTO.setFunctionOnSubjects(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addActionElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - ruleElementDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); - ruleElementDTO.setActionDataType(PolicyConstants.DataType.STRING); - - String function = findFunction(editorElementDTO.getActionValue(), - ruleElementDTO.getActionDataType()); - String value = findAttributeValue(editorElementDTO.getActionValue()); - ruleElementDTO.setActionList(value); - ruleElementDTO.setFunctionOnActions(function); - } - - /** - * Helper method to create SOA policy - * - * @param ruleElementDTO - * @param editorElementDTO - */ - private static void addEnvironmentElement(BasicRuleDTO ruleElementDTO, - SimplePolicyEditorElementDTO editorElementDTO) { - - String selectedDataType = null; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.RBAC); - if (editorElementDTO.getEnvironmentId() == null) { - ruleElementDTO.setEnvironmentId(PolicyEditorConstants.ENVIRONMENT_ID_DEFAULT); - } else { - ruleElementDTO.setEnvironmentId(holder.getAttributeIdUri(editorElementDTO.getEnvironmentId())); - if ((selectedDataType = holder.getDataTypeUriForAttribute(editorElementDTO.getEnvironmentId())) != null) { - ruleElementDTO.setEnvironmentDataType(selectedDataType); - } - } - - if (ruleElementDTO.getEnvironmentDataType() == null) { - ruleElementDTO.setEnvironmentDataType(PolicyConstants.DataType.STRING); - } - - String function = findFunction(editorElementDTO.getEnvironmentValue(), - ruleElementDTO.getEnvironmentDataType()); - String value = findAttributeValue(editorElementDTO.getEnvironmentValue()); - ruleElementDTO.setEnvironmentDataType(ruleElementDTO.getEnvironmentDataType()); - ruleElementDTO.setEnvironmentList(value); - ruleElementDTO.setFunctionOnEnvironment(function); - - } - - /** - * Helper method to create SOA policy - * - * @param value - * @param dataType - * @return - */ - private static String findFunction(String value, String dataType) { - - if (value == null) { - return PolicyConstants.Functions.FUNCTION_EQUAL; - } - - value = value.replace(">", ">"); - value = value.replace("<", "<"); - - // only time range finction are valid for following data types - if (PolicyConstants.DataType.DATE.equals(dataType) || - PolicyConstants.DataType.INT.equals(dataType) || - PolicyConstants.DataType.TIME.equals(dataType) || - PolicyConstants.DataType.DATE_TIME.equals(dataType) || - PolicyConstants.DataType.DOUBLE.equals(dataType) || - PolicyConstants.DataType.STRING.equals(dataType)) { - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE)) { - if (value.contains(PolicyEditorConstants.FunctionIdentifier.RANGE_CLOSE)) { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS; - } else { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS_EQUAL; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.RANGE)) { - if (value.contains(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE_CLOSE)) { - return PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL; - } else { - return PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER)) { - return PolicyConstants.Functions.FUNCTION_GREATER; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER_EQUAL)) { - return PolicyConstants.Functions.FUNCTION_GREATER_EQUAL; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS)) { - return PolicyConstants.Functions.FUNCTION_LESS; - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS_EQUAL)) { - return PolicyConstants.Functions.FUNCTION_LESS_EQUAL; - } - } - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.REGEX)) { - return PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP; - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.OR)) { - return PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE; - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.AND)) { - return PolicyConstants.Functions.FUNCTION_SET_EQUALS; - } - - return PolicyConstants.Functions.FUNCTION_EQUAL; - } - - /** - * Helper method to create SOA policy - * - * @param value - * @return - */ - private static String findAttributeValue(String value) { - - if (value == null) { - return null; - } - - value = value.replace(">", ">"); - value = value.replace("<", "<"); - - if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.EQUAL_RANGE) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.RANGE) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.REGEX)) { - - return value.substring(1, value.length() - 1).trim(); - - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS)) { - return value.substring(1).trim(); - } else if (value.startsWith(PolicyEditorConstants.FunctionIdentifier.GREATER_EQUAL) || - value.startsWith(PolicyEditorConstants.FunctionIdentifier.LESS_EQUAL)) { - return value.substring(2).trim(); - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.AND)) { - value = value.replace(PolicyEditorConstants.FunctionIdentifier.AND, - PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - } - - if (value.contains(PolicyEditorConstants.FunctionIdentifier.OR)) { - value = value.replace(PolicyEditorConstants.FunctionIdentifier.OR, - PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - } - - return value.trim(); - } - - -// TODO for what? -// public static String createRules(List elementDTOs, Document doc) -// throws PolicyEditorException { -// -// List ruleElementDTOs = new ArrayList(); -// if(elementDTOs != null){ -// int ruleNo = 1; -// for(SimplePolicyEditorElementDTO dto : elementDTOs){ -// BasicRuleDTO ruleElementDTO = new BasicRuleDTO(); -// -// if(dto.getResourceValue() != null && dto.getResourceValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getResourceValue().trim())){ -// ruleElementDTO.setResourceDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setResourceId(PolicyEditorConstants.RESOURCE_ID_DEFAULT); -// ruleElementDTO.setResourceList(dto.getResourceValue()); -// ruleElementDTO.setFunctionOnResources(getBasicPolicyEditorFunction(dto. -// getFunctionOnResources())); -// } -// -// if(dto.getUserAttributeValue() != null && dto.getUserAttributeValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getUserAttributeValue().trim())){ -// ruleElementDTO.setSubjectDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setSubjectId(dto.getUserAttributeId()); -// ruleElementDTO.setSubjectList(dto.getUserAttributeValue()); -// ruleElementDTO.setFunctionOnSubjects(getBasicPolicyEditorFunction(dto. -// getFunctionOnUsers())); -// } -// -// if(dto.getActionValue() != null && dto.getActionValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getActionValue().trim())){ -// ruleElementDTO.setActionDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setActionList(dto.getActionValue()); -// ruleElementDTO.setActionId(PolicyEditorConstants.ACTION_ID_DEFAULT); -// ruleElementDTO.setFunctionOnActions(getBasicPolicyEditorFunction(dto. -// getFunctionOnActions())); -// } -// -// if(dto.getEnvironmentValue() != null && dto.getEnvironmentValue().trim().length() > 0 && -// !PolicyEditorConstants.FunctionIdentifier.ANY.equals(dto.getEnvironmentValue().trim())){ -// ruleElementDTO.setEnvironmentId(dto.getEnvironmentId()); -// ruleElementDTO.setEnvironmentList(dto.getEnvironmentValue()); -// ruleElementDTO.setEnvironmentDataType(PolicyEditorConstants.DataType.STRING); -// ruleElementDTO.setFunctionOnEnvironment(getBasicPolicyEditorFunction(dto. -// getFunctionOnEnvironments())); -// } -// -// if(dto.getOperationType() != null && PolicyEditorConstants.PreFunctions.CAN_DO. -// equals(dto.getOperationType().trim())){ -// ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_PERMIT); -// } else { -// ruleElementDTO.setRuleEffect(PolicyEditorConstants.RULE_EFFECT_DENY); -// } -// ruleElementDTO.setRuleId("Rule-" + System.currentTimeMillis() + "-" + ruleNo); -// ruleElementDTOs.add(ruleElementDTO); -// ruleNo ++; -// } -// } -// -// if(ruleElementDTOs.size() > 0){ -// for(BasicRuleDTO dto : ruleElementDTOs){ -// Element rule = null; -// try { -// rule = BasicPolicyHelper.createRuleElement(dto, doc); -// } catch (PolicyBuilderException e) { -// throw new PolicyEditorException("Error while creating rule element"); -// } -// doc.appendChild(rule); -// } -// } -// -// return PolicyCreatorUtil.getStringFromDocument(doc); -// } - - - /** - * Creates DOM representation of the XACML rule element. - * - * @param ruleDTO RuleDTO - * @return - * @throws PolicyEditorException throws - */ - public static RuleElementDTO createRuleElementDTO(RuleDTO ruleDTO) throws PolicyEditorException { - - RuleElementDTO ruleElementDTO = new RuleElementDTO(); - - ruleElementDTO.setRuleId(ruleDTO.getRuleId()); - ruleElementDTO.setRuleEffect(ruleDTO.getRuleEffect()); - TargetDTO targetDTO = ruleDTO.getTargetDTO(); - List dynamicAttributeDTOs = ruleDTO.getAttributeDTOs(); - List obligationDTOs = ruleDTO.getObligationDTOs(); - - if (dynamicAttributeDTOs != null && dynamicAttributeDTOs.size() > 0) { - Map dtoMap = new HashMap(); - //1st creating map of dynamic attribute elements - for (ExtendAttributeDTO dto : dynamicAttributeDTOs) { - dtoMap.put("${" + dto.getId().trim() + "}", dto); - } - //creating map of apply element with identifier - for (ExtendAttributeDTO dto : dynamicAttributeDTOs) { - ApplyElementDTO applyElementDTO = createApplyElement(dto, dtoMap); - if (applyElementDTO == null) { - continue; - } - applyElementMap.put("${" + dto.getId().trim() + "}", applyElementDTO); - } - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null && targetDTO.getRowDTOList().size() > 0) { - TargetElementDTO targetElementDTO = createTargetElementDTO(ruleDTO.getTargetDTO()); - if (targetElementDTO != null) { - ruleElementDTO.setTargetElementDTO(targetElementDTO); - } - } - - if (ruleDTO.getRowDTOList() != null && ruleDTO.getRowDTOList().size() > 0) { - ConditionElementDT0 conditionElementDT0 = createConditionDTO(ruleDTO.getRowDTOList()); - if (conditionElementDT0 != null) { - ruleElementDTO.setConditionElementDT0(conditionElementDT0); - } - } - - if (obligationDTOs != null && obligationDTOs.size() > 0) { - for (ObligationDTO obligationDTO : obligationDTOs) { - ObligationElementDTO elementDTO = createObligationElement(obligationDTO); - if (elementDTO != null) { - ruleElementDTO.addObligationElementDTO(elementDTO); - } - } - } - - return ruleElementDTO; - } - - /** - * creates DOM representation of the XACML obligation/advice element. - * - * @param obligationDTOs List of ObligationDTO - * @return - * @throws PolicyEditorException throws - */ - public static List createObligation(List obligationDTOs) - throws PolicyEditorException { - - List obligationElementDTOs = new ArrayList(); - if (obligationDTOs != null) { - for (ObligationDTO obligationDTO : obligationDTOs) { - ObligationElementDTO elementDTO = createObligationElement(obligationDTO); - if (elementDTO != null) { - obligationElementDTOs.add(elementDTO); - } - } - } - - return obligationElementDTOs; - } - - - /** - * @param dynamicAttributeDTO - * @param map - * @return - */ - private static ApplyElementDTO createApplyElement(ExtendAttributeDTO dynamicAttributeDTO, - Map map) { - - if (PolicyEditorConstants.DYNAMIC_SELECTOR_CATEGORY.equals(dynamicAttributeDTO.getSelector())) { - - String category = dynamicAttributeDTO.getCategory(); - String attributeId = dynamicAttributeDTO.getAttributeId(); - String attributeDataType = dynamicAttributeDTO.getDataType(); - - if (category != null && category.trim().length() > 0 && attributeDataType != null && - attributeDataType.trim().length() > 0) { - AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); - designatorDTO.setCategory(category); - designatorDTO.setAttributeId(attributeId); - designatorDTO.setDataType(attributeDataType); - designatorDTO.setMustBePresent("true"); - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setAttributeDesignators(designatorDTO); - applyElementDTO.setFunctionId(processFunction("bag", attributeDataType)); - return applyElementDTO; - } - - } else { - - String function = dynamicAttributeDTO.getFunction(); - String attributeValue = dynamicAttributeDTO.getAttributeValue(); - String attributeDataType = dynamicAttributeDTO.getDataType(); - - if (attributeValue != null && function != null) { - String[] values = attributeValue.split(","); - - if (values != null && values.length > 0) { - - if (function.contains("concatenate")) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction(function, attributeDataType, "2.0")); - // there can be any number of inputs - for (String value : values) { - if (map.containsKey(value)) { - applyElementDTO.setApplyElement(createApplyElement(map.get(value), map)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(value); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - - return applyElementDTO; - } - } - } - } - - return null; - } - - - private static ObligationElementDTO createObligationElement(ObligationDTO obligationDTO) { - - String id = obligationDTO.getObligationId(); - String effect = obligationDTO.getEffect(); - String type = obligationDTO.getType(); - - if (id != null && id.trim().length() > 0 && effect != null) { - - ObligationElementDTO elementDTO = new ObligationElementDTO(); - elementDTO.setId(id); - elementDTO.setEffect(effect); - if ("Advice".equals(type)) { - elementDTO.setType(ObligationElementDTO.ADVICE); - } else { - elementDTO.setType(ObligationElementDTO.OBLIGATION); - } - - String attributeValue = obligationDTO.getAttributeValue(); - String attributeDataType = obligationDTO.getAttributeValueDataType(); - String resultingAttributeId = obligationDTO.getResultAttributeId(); - - if (attributeValue != null && attributeValue.trim().length() > 0 && - resultingAttributeId != null && resultingAttributeId.trim().length() > 0) { - - AttributeAssignmentElementDTO assignmentElementDTO = new - AttributeAssignmentElementDTO(); - assignmentElementDTO.setAttributeId(resultingAttributeId); - if (attributeValue.contains(",")) { - String[] values = attributeValue.split(","); - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction("bag", attributeDataType)); - for (String value : values) { - if (applyElementMap.containsKey(value)) { - applyElementDTO.setApplyElement(applyElementMap.get(value)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(value); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - assignmentElementDTO.setApplyElementDTO(applyElementDTO); - } else { - if (applyElementMap.containsKey(attributeValue)) { - assignmentElementDTO.setApplyElementDTO(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(attributeDataType); - valueElementDTO.setAttributeValue(attributeValue); - assignmentElementDTO.setValueElementDTO(valueElementDTO); - } - } - - elementDTO.addAssignmentElementDTO(assignmentElementDTO); - } - - return elementDTO; - } - - return null; - } - - /** - * Creates ConditionElementDT0 Object that represents the XACML Condition element - * - * @param rowDTOs - * @return - * @throws PolicyEditorException - */ - public static ConditionElementDT0 createConditionDTO(List rowDTOs) throws PolicyEditorException { - - ConditionElementDT0 rootApplyDTO = new ConditionElementDT0(); - - ArrayList temp = new ArrayList(); - Set> listSet = new HashSet>(); - - for (int i = 0; i < rowDTOs.size(); i++) { - - if (i == 0) { - temp.add(rowDTOs.get(0)); - continue; - } - - String combineFunction = rowDTOs.get(i - 1).getCombineFunction(); - - if (PolicyEditorConstants.COMBINE_FUNCTION_AND.equals(combineFunction)) { - temp.add(rowDTOs.get(i)); - } - - if (PolicyEditorConstants.COMBINE_FUNCTION_OR.equals(combineFunction)) { - listSet.add(temp); - temp = new ArrayList(); - temp.add(rowDTOs.get(i)); - } - } - - listSet.add(temp); - - if (listSet.size() > 1) { - ApplyElementDTO orApplyDTO = new ApplyElementDTO(); - orApplyDTO.setFunctionId(processFunction("or")); - for (ArrayList rowDTOArrayList : listSet) { - if (rowDTOArrayList.size() > 1) { - ApplyElementDTO andApplyDTO = new ApplyElementDTO(); - andApplyDTO.setFunctionId(processFunction("and")); - for (RowDTO rowDTO : rowDTOArrayList) { - ApplyElementDTO applyElementDTO = createApplyElement(rowDTO); - andApplyDTO.setApplyElement(applyElementDTO); - } - orApplyDTO.setApplyElement(andApplyDTO); - - } else if (rowDTOArrayList.size() == 1) { - RowDTO rowDTO = rowDTOArrayList.get(0); - ApplyElementDTO andApplyDTO = createApplyElement(rowDTO); - orApplyDTO.setApplyElement(andApplyDTO); - } - } - rootApplyDTO.setApplyElement(orApplyDTO); - } else if (listSet.size() == 1) { - ArrayList rowDTOArrayList = listSet.iterator().next(); - if (rowDTOArrayList.size() > 1) { - ApplyElementDTO andApplyDTO = new ApplyElementDTO(); - andApplyDTO.setFunctionId(processFunction("and")); - for (RowDTO rowDTO : rowDTOArrayList) { - ApplyElementDTO applyElementDTO = createApplyElement(rowDTO); - andApplyDTO.setApplyElement(applyElementDTO); - } - rootApplyDTO.setApplyElement(andApplyDTO); - } else if (rowDTOArrayList.size() == 1) { - RowDTO rowDTO = rowDTOArrayList.get(0); - ApplyElementDTO andApplyDTO = createApplyElement(rowDTO); - rootApplyDTO.setApplyElement(andApplyDTO); - } - } - - return rootApplyDTO; - } - - /** - * Creates ApplyElementDTO Object that represents the XACML Apply element - * - * @param rowDTO - * @return - * @throws PolicyEditorException - */ - public static ApplyElementDTO createApplyElement(RowDTO rowDTO) throws PolicyEditorException { - - String preFunction = rowDTO.getPreFunction(); - String function = rowDTO.getFunction(); - String dataType = rowDTO.getAttributeDataType(); - String attributeValue = rowDTO.getAttributeValue(); - - if (function == null || function.trim().length() < 1) { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required function Id"); - } - - if (attributeValue == null || attributeValue.trim().length() < 1) { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required attribute value"); - } - - ApplyElementDTO applyElementDTO = null; - - AttributeDesignatorDTO designatorDTO = new AttributeDesignatorDTO(); - designatorDTO.setCategory(rowDTO.getCategory()); - designatorDTO.setAttributeId(rowDTO.getAttributeId()); - designatorDTO.setDataType(dataType); - designatorDTO.setMustBePresent("true"); - - - if (rowDTO.getFunction().contains("less") || rowDTO.getFunction().contains("greater")) { - applyElementDTO = processGreaterLessThanFunctions(function, dataType, attributeValue, - designatorDTO); - } else if (PolicyConstants.Functions.FUNCTION_EQUAL.equals(rowDTO.getFunction())) { - applyElementDTO = processEqualFunctions(function, dataType, attributeValue, designatorDTO); - } else if (PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP.equals(rowDTO.getFunction())) { - applyElementDTO = processRegexpFunctions(function, dataType, attributeValue, designatorDTO); - } else { - applyElementDTO = processBagFunction(function, dataType, attributeValue, designatorDTO); - } - - - if (PolicyConstants.PreFunctions.PRE_FUNCTION_NOT.equals(preFunction)) { - ApplyElementDTO notApplyElementDTO = new ApplyElementDTO(); - notApplyElementDTO.setFunctionId(processFunction("not")); - notApplyElementDTO.setApplyElement(applyElementDTO); - applyElementDTO = notApplyElementDTO; - } - - return applyElementDTO; - } - - /** - * Creates TargetElementDTO Object that represents the XACML Target element - * - * @param targetDTO - * @return - */ - public static TargetElementDTO createTargetElementDTO(TargetDTO targetDTO) { - - AllOfElementDTO allOfElementDTO = new AllOfElementDTO(); - AnyOfElementDTO anyOfElementDTO = new AnyOfElementDTO(); - TargetElementDTO targetElementDTO = new TargetElementDTO(); - - List rowDTOs = targetDTO.getRowDTOList(); - ArrayList tempRowDTOs = new ArrayList(); - - // pre function processing - for (RowDTO rowDTO : rowDTOs) { - if (PolicyEditorConstants.PreFunctions.PRE_FUNCTION_ARE.equals(rowDTO.getPreFunction())) { - String[] attributeValues = rowDTO.getAttributeValue().split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - allOfElementDTO = new AllOfElementDTO(); - for (int j = 0; j < attributeValues.length; j++) { - RowDTO newDto = new RowDTO(rowDTO); - newDto.setAttributeValue(attributeValues[j]); - if (j != attributeValues.length - 1) { - newDto.setCombineFunction(PolicyEditorConstants.COMBINE_FUNCTION_AND); - } - tempRowDTOs.add(newDto); - } - } else { - tempRowDTOs.add(rowDTO); - } - } - - if (tempRowDTOs.size() > 0) { - for (int i = 0; i < tempRowDTOs.size(); i++) { - if (i == 0) { - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(0)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - continue; - } - - String combineFunction = tempRowDTOs.get(i - 1).getCombineFunction(); - - if (PolicyEditorConstants.COMBINE_FUNCTION_AND.equals(combineFunction)) { - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(i)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - - } - - if (PolicyEditorConstants.COMBINE_FUNCTION_OR.equals(combineFunction)) { - anyOfElementDTO.addAllOfElementDTO(allOfElementDTO); - allOfElementDTO = new AllOfElementDTO(); - MatchElementDTO matchElementDTO = createTargetMatch(tempRowDTOs.get(i)); - if (matchElementDTO != null) { - allOfElementDTO.addMatchElementDTO(matchElementDTO); - } - } - } - anyOfElementDTO.addAllOfElementDTO(allOfElementDTO); - targetElementDTO.addAnyOfElementDTO(anyOfElementDTO); - } - return targetElementDTO; - } - - - /** - * process Bag functions - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - */ - public static ApplyElementDTO processBagFunction(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_IS_IN.equals(function)) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(processFunction("is-in", dataType)); - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - - applyElementDTO.setAttributeDesignators(designatorDTO); - return applyElementDTO; - - } else if (PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE.equals(function) || - PolicyConstants.Functions.FUNCTION_SET_EQUALS.equals(function)) { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_AT_LEAST_ONE.equals(function)) { - applyElementDTO.setFunctionId(processFunction("at-least-one-member-of", dataType)); - } else { - applyElementDTO.setFunctionId(processFunction("set-equals", dataType)); - } - - String[] values = attributeValue.split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - - ApplyElementDTO applyBagElementDTO = new ApplyElementDTO(); - applyBagElementDTO.setFunctionId(processFunction("bag", dataType)); - for (String value : values) { - if (applyElementMap.containsKey(value)) { - applyBagElementDTO.setApplyElement(applyElementMap.get(value)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(value); - applyBagElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - } - - applyElementDTO.setAttributeDesignators(designatorDTO); - applyElementDTO.setApplyElement(applyBagElementDTO); - - return applyElementDTO; - } - - return null; - } - - /** - * Process equal function - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - */ - public static ApplyElementDTO processEqualFunctions(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_EQUAL.equals(function)) { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - if (PolicyEditorConstants.DataType.DAY_TIME_DURATION.equals(dataType) || - PolicyEditorConstants.DataType.YEAR_MONTH_DURATION.equals(dataType)) { - applyElementDTO.setFunctionId(processFunction("equal", dataType, "3.0")); - } else { - applyElementDTO.setFunctionId(processFunction("equal", dataType)); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - - applyElementDTO.setApplyElement(oneAndOnlyApplyElement); - - return applyElementDTO; - } - - return null; - } - - /** - * Process less than and greater than functions - * - * @param function - * @param dataType - * @param attributeValue - * @param designatorDTO - * @return - * @throws PolicyEditorException - */ - public static ApplyElementDTO processGreaterLessThanFunctions(String function, String dataType, - String attributeValue, AttributeDesignatorDTO designatorDTO) - throws PolicyEditorException { - - String[] values = attributeValue.split(PolicyEditorConstants.ATTRIBUTE_SEPARATOR); - - - if (PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS_EQUAL.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function)) { - - String leftValue; - String rightValue; - - if (values.length == 2) { - leftValue = values[0].trim(); - rightValue = values[1].trim(); - } else { - throw new PolicyEditorException("Can not create Apply element:" + - "Missing required attribute values for function : " + function); - } - - ApplyElementDTO andApplyElement = new ApplyElementDTO(); - - andApplyElement.setFunctionId(processFunction("and")); - - ApplyElementDTO greaterThanApplyElement = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS_EQUAL.equals(function)) { - greaterThanApplyElement.setFunctionId(processFunction("greater-than", dataType)); - } else { - greaterThanApplyElement.setFunctionId(processFunction("greater-than-or-equal", dataType)); - } - - - ApplyElementDTO lessThanApplyElement = new ApplyElementDTO(); - if (PolicyConstants.Functions.FUNCTION_GREATER_AND_LESS.equals(function) || - PolicyConstants.Functions.FUNCTION_GREATER_EQUAL_AND_LESS.equals(function)) { - lessThanApplyElement.setFunctionId(processFunction("less-than", dataType)); - } else { - lessThanApplyElement.setFunctionId(processFunction("less-than-or-equal", dataType)); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - AttributeValueElementDTO leftValueElementDTO = new AttributeValueElementDTO(); - leftValueElementDTO.setAttributeDataType(dataType); - leftValueElementDTO.setAttributeValue(leftValue); - - AttributeValueElementDTO rightValueElementDTO = new AttributeValueElementDTO(); - rightValueElementDTO.setAttributeDataType(dataType); - rightValueElementDTO.setAttributeValue(rightValue); - - greaterThanApplyElement.setApplyElement(oneAndOnlyApplyElement); - greaterThanApplyElement.setAttributeValueElementDTO(leftValueElementDTO); - - lessThanApplyElement.setApplyElement(oneAndOnlyApplyElement); - lessThanApplyElement.setAttributeValueElementDTO(rightValueElementDTO); - - andApplyElement.setApplyElement(greaterThanApplyElement); - andApplyElement.setApplyElement(lessThanApplyElement); - - return andApplyElement; - - } else { - - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - - if (PolicyConstants.Functions.FUNCTION_GREATER.equals(function)) { - applyElementDTO.setFunctionId(processFunction("greater-than", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_GREATER_EQUAL.equals(function)) { - applyElementDTO.setFunctionId(processFunction("greater-than-or-equal", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_LESS.equals(function)) { - applyElementDTO.setFunctionId(processFunction("less-than", dataType)); - } else if (PolicyConstants.Functions.FUNCTION_LESS_EQUAL.equals(function)) { - applyElementDTO.setFunctionId(processFunction("less-than-or-equal", dataType)); - } else { - throw new PolicyEditorException("Can not create Apply element:" + - "Invalid function : " + function); - } - - ApplyElementDTO oneAndOnlyApplyElement = new ApplyElementDTO(); - oneAndOnlyApplyElement.setFunctionId(processFunction("one-and-only", dataType)); - oneAndOnlyApplyElement.setAttributeDesignators(designatorDTO); - - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(values[0]); - - applyElementDTO.setApplyElement(oneAndOnlyApplyElement); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - - return applyElementDTO; - - } - } - - /** - * Process regexp-match functions. - * - * @param function Function name. - * @param dataType Data type. - * @param attributeValue Attribute Value. - * @param designatorDTO AttributeDesignator information. - * @return ApplyElementDTO. - */ - public static ApplyElementDTO processRegexpFunctions(String function, String dataType, String attributeValue, - AttributeDesignatorDTO designatorDTO) { - - if (PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP.equals(function)) { - ApplyElementDTO applyElementDTO = new ApplyElementDTO(); - applyElementDTO.setFunctionId(PolicyConstants.XACMLData.FUNCTION_ANY_OF); - if (applyElementMap.containsKey(attributeValue)) { - applyElementDTO.setApplyElement(applyElementMap.get(attributeValue)); - } else { - AttributeValueElementDTO valueElementDTO = new AttributeValueElementDTO(); - valueElementDTO.setAttributeDataType(dataType); - valueElementDTO.setAttributeValue(attributeValue); - applyElementDTO.setAttributeValueElementDTO(valueElementDTO); - } - applyElementDTO.setFunctionFunctionId( - processFunction(PolicyConstants.Functions.FUNCTION_EQUAL_MATCH_REGEXP, dataType)); - applyElementDTO.setAttributeDesignators(designatorDTO); - return applyElementDTO; - } - return null; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @param type - * @param version - * @return - */ - private static String processFunction(String function, String type, String version) { - return "urn:oasis:names:tc:xacml:" + version + ":function:" + getDataTypePrefix(type) + - "-" + function; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @return - */ - private static String processFunction(String function) { - return "urn:oasis:names:tc:xacml:1.0:function:" + function; - } - - /** - * Helper method to create full XACML function URI - * - * @param function - * @param type - * @return - */ - private static String processFunction(String function, String type) { - return "urn:oasis:names:tc:xacml:1.0:function:" + getDataTypePrefix(type) + "-" + function; - } -// -// /** -// * Helper method to check whether attribute value is pre-defined one -// * -// * @param value -// * @return -// */ -// private static boolean isPreDefinedValue(String value){ -// -// if(value != null && applyElementMap != null && applyElementMap.size() > 0){ -// value = value.trim(); -// if(value.startsWith("${") && value.endsWith("}")){ -// value = value.substring(value.indexOf("{") + 1, value.indexOf("}")); -// return applyElementMap.containsKey(value); -// } -// } -// -// return false; -// } -// -// /** -// * Helper method to check whether attribute value is pre-defined one -// * -// * @param value -// * @param map -// * @return -// */ -// private static boolean isPreDefinedValue(String value, Map map){ -// -// if(value != null && map != null && map.size() > 0){ -// value = value.trim(); -// if(value.startsWith("${") && value.endsWith("}")){ -// value = value.substring(value.indexOf("{") + 1, value.indexOf("}")); -// return map.containsKey(value); -// } -// } -// -// return false; -// } - - /** - * Helper method to create full XACML function URI - * - * @param dataTypeUri - * @return - */ - private static String getDataTypePrefix(String dataTypeUri) { - - if (dataTypeUri != null) { - if (dataTypeUri.contains("#")) { - return dataTypeUri.substring(dataTypeUri.indexOf("#") + 1); - } else if (dataTypeUri.contains(":")) { - String[] stringArray = dataTypeUri.split(":"); - if (stringArray != null && stringArray.length > 0) { - return stringArray[stringArray.length - 1]; - } - } - } - return dataTypeUri; - } - - /** - * Creates match element - * - * @param rowDTO - * @return - */ - public static MatchElementDTO createTargetMatch(RowDTO rowDTO) { - - - String category = rowDTO.getCategory(); - String functionId = rowDTO.getFunction(); - String attributeValue = rowDTO.getAttributeValue(); - String attributeId = rowDTO.getAttributeId(); - String dataType = rowDTO.getAttributeDataType(); - MatchElementDTO matchElementDTO; - - if (functionId != null && functionId.trim().length() > 0 && attributeValue != null && - attributeValue.trim().length() > 0 && category != null && - category.trim().length() > 0 && attributeId != null && - attributeId.trim().length() > 0 && dataType != null && - dataType.trim().length() > 0) { - - functionId = processFunction(functionId, dataType); - - matchElementDTO = new MatchElementDTO(); - - AttributeValueElementDTO attributeValueElementDTO = new AttributeValueElementDTO(); - attributeValueElementDTO.setAttributeDataType(dataType); - attributeValueElementDTO.setAttributeValue(attributeValue.trim()); - - AttributeDesignatorDTO attributeDesignatorDTO = new AttributeDesignatorDTO(); - attributeDesignatorDTO.setDataType(dataType); - attributeDesignatorDTO.setAttributeId(attributeId); - attributeDesignatorDTO.setCategory(category); - - matchElementDTO.setMatchId(functionId); - matchElementDTO.setAttributeValueElementDTO(attributeValueElementDTO); - matchElementDTO.setAttributeDesignatorDTO(attributeDesignatorDTO); - } else { - return null; // TODO - } - - return matchElementDTO; - } - - - /** - * This method creates a match element (such as subject,action,resource or environment) of the XACML policy - * - * @param matchElementDTO match element data object - * @param doc XML document - * @return match Element - * @throws PolicyEditorException if any error occurs - */ - public static Element createMatchElement(MatchElementDTO matchElementDTO, Document doc) - throws PolicyEditorException { - - Element matchElement; - - if (matchElementDTO.getMatchId() != null && matchElementDTO.getMatchId().trim().length() > 0) { - - matchElement = doc.createElement(PolicyEditorConstants.MATCH_ELEMENT); - - matchElement.setAttribute(PolicyEditorConstants.MATCH_ID, - matchElementDTO.getMatchId()); - - if (matchElementDTO.getAttributeValueElementDTO() != null) { - Element attributeValueElement = createAttributeValueElement(matchElementDTO. - getAttributeValueElementDTO(), doc); - matchElement.appendChild(attributeValueElement); - } - - if (matchElementDTO.getAttributeDesignatorDTO() != null) { - Element attributeDesignatorElement = createAttributeDesignatorElement(matchElementDTO. - getAttributeDesignatorDTO(), doc); - matchElement.appendChild(attributeDesignatorElement); - } else if (matchElementDTO.getAttributeSelectorDTO() != null) { - Element attributeSelectorElement = createAttributeSelectorElement(matchElementDTO. - getAttributeSelectorDTO(), doc); - matchElement.appendChild(attributeSelectorElement); - } - } else { - throw new PolicyEditorException("Can not create Match element:" + - " Required Attributes are missing"); - } - return matchElement; - } - - /** - * This method creates attribute value DOM element - * - * @param attributeValueElementDTO attribute value element data object - * @param doc XML document - * @return attribute value element as DOM - */ - public static Element createAttributeValueElement(AttributeValueElementDTO - attributeValueElementDTO, Document doc) { - - Element attributeValueElement = doc.createElement(EntitlementPolicyConstants.ATTRIBUTE_VALUE); - - if (attributeValueElementDTO.getAttributeValue() != null && attributeValueElementDTO. - getAttributeValue().trim().length() > 0) { - - attributeValueElement.setTextContent(attributeValueElementDTO.getAttributeValue().trim()); - - if (attributeValueElementDTO.getAttributeDataType() != null && attributeValueElementDTO. - getAttributeDataType().trim().length() > 0) { - attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - attributeValueElementDTO.getAttributeDataType()); - } else { - attributeValueElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - EntitlementPolicyConstants.STRING_DATA_TYPE); - } - - } - - return attributeValueElement; - } - - /** - * This method creates attribute designator DOM element - * - * @param attributeDesignatorDTO attribute designator data object - * @param doc XML document - * @return attribute designator element as DOM - * @throws PolicyEditorException throws if missing required data - */ - public static Element createAttributeDesignatorElement(AttributeDesignatorDTO - attributeDesignatorDTO, Document doc) throws PolicyEditorException { - - Element attributeDesignatorElement; - - if (attributeDesignatorDTO != null && doc != null) { - - String category = attributeDesignatorDTO.getCategory(); - String attributeId = attributeDesignatorDTO.getAttributeId(); - String dataType = attributeDesignatorDTO.getDataType(); - String mustBe = attributeDesignatorDTO.getMustBePresent(); - - if (category != null && category.trim().length() > 0 && attributeId != null && - attributeId.trim().length() > 0 && dataType != null && dataType.trim().length() > 0 && - mustBe != null && mustBe.trim().length() > 0) { - - attributeDesignatorElement = doc. - createElement(PolicyEditorConstants.ATTRIBUTE_DESIGNATOR); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.ATTRIBUTE_ID, - attributeId); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.CATEGORY, category); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.DATA_TYPE, dataType); - - attributeDesignatorElement.setAttribute(PolicyEditorConstants.MUST_BE_PRESENT, mustBe); - - if (attributeDesignatorDTO.getIssuer() != null && attributeDesignatorDTO.getIssuer(). - trim().length() > 0) { - attributeDesignatorElement.setAttribute(EntitlementPolicyConstants.ISSUER, - attributeDesignatorDTO.getIssuer()); - } - } else { - throw new PolicyEditorException("Can not create AttributeDesignator element:" + - " Required Attributes are missing"); - } - } else { - throw new PolicyEditorException("Can not create AttributeDesignator element:" + - " A Null object is received"); - } - return attributeDesignatorElement; - } - - /** - * This method creates attribute selector DOM element - * - * @param attributeSelectorDTO attribute selector data object - * @param doc xML document - * @return attribute selector element as DOM - */ - public static Element createAttributeSelectorElement(AttributeSelectorDTO attributeSelectorDTO, - Document doc) { - - Element attributeSelectorElement = doc.createElement(EntitlementPolicyConstants. - ATTRIBUTE_SELECTOR); - - if (attributeSelectorDTO.getAttributeSelectorRequestContextPath() != null && - attributeSelectorDTO.getAttributeSelectorRequestContextPath().trim().length() > 0) { - - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.REQUEST_CONTEXT_PATH, - EntitlementPolicyConstants.ATTRIBUTE_NAMESPACE + attributeSelectorDTO. - getAttributeSelectorRequestContextPath()); - - if (attributeSelectorDTO.getAttributeSelectorDataType() != null && - attributeSelectorDTO.getAttributeSelectorDataType().trim().length() > 0) { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - attributeSelectorDTO.getAttributeSelectorDataType()); - } else { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.DATA_TYPE, - EntitlementPolicyConstants.STRING_DATA_TYPE); - } - - if (attributeSelectorDTO.getAttributeSelectorMustBePresent() != null && - attributeSelectorDTO.getAttributeSelectorMustBePresent().trim().length() > 0) { - attributeSelectorElement.setAttribute(EntitlementPolicyConstants.MUST_BE_PRESENT, - attributeSelectorDTO.getAttributeSelectorMustBePresent()); - } - - } - - return attributeSelectorElement; - } - - /** - * Modifies the user data that are got from policy editor. If there are null values for required - * things, replace them with default values - */ - public static String[] processPolicySetData(PolicySetDTO policyDTO) { - - TargetDTO targetDTO = policyDTO.getTargetDTO(); - List obligationDTOs = policyDTO.getObligations(); - List policyRefIdDTOs = policyDTO.getPolicyRefIdDTOs(); - String policyOrder = policyDTO.getPolicyOrder(); - - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.SET); - - List policyMetaDataList = new ArrayList(); - - List arrangedRefIdDTOs = new ArrayList(); - - if (policyOrder != null && policyOrder.trim().length() > 0) { - String[] ruleIds = policyOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (PolicyRefIdDTO dto : policyRefIdDTOs) { - if (ruleId.equals(dto.getId())) { - arrangedRefIdDTOs.add(dto); - } - } - } - policyRefIdDTOs = arrangedRefIdDTOs; - } - createMetaDataFromPolicySet("policy", policyDTO, policyMetaDataList); - String algorithm = policyDTO.getPolicyCombiningAlgId(); - if (algorithm != null && algorithm.trim().length() > 0) { - policyDTO.setPolicyCombiningAlgId(holder.getPolicyAlgorithmUri(algorithm)); - } else { - policyDTO.setPolicyCombiningAlgId(holder.getDefaultPolicyAlgorithm()); - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null) { - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : targetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("target", rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - targetDTO.setRowDTOList(newRowDTOs); - policyDTO.setTargetDTO(targetDTO); - } - - if (policyRefIdDTOs != null) { - policyDTO.setPolicyRefIdDTOs(policyRefIdDTOs); - for (PolicyRefIdDTO dto : policyRefIdDTOs) { - createMetaDataFromReference("reference", dto, policyMetaDataList); - } - } - - if (obligationDTOs != null) { - for (ObligationDTO dto : obligationDTOs) { - createMetaDataFromObligation("obligation", dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() == 0 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - policyDTO.setObligations(obligationDTOs); - } - - return policyMetaDataList.toArray(new String[policyMetaDataList.size()]); - } - - - /** - * Modifies the user data that are got from policy editor. If there are null values for required - * things, replace them with default values - */ - public static String[] processPolicyData(PolicyDTO policyDTO) { - - TargetDTO targetDTO = policyDTO.getTargetDTO(); - List ruleDTOs = policyDTO.getRuleDTOs(); - List obligationDTOs = policyDTO.getObligationDTOs(); - String ruleElementOrder = policyDTO.getRuleOrder(); - - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.STANDARD); - - List policyMetaDataList = new ArrayList(); - - List arrangedRules = new ArrayList(); - - if (ruleElementOrder != null && ruleElementOrder.trim().length() > 0) { - String[] ruleIds = ruleElementOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (RuleDTO ruleDTO : ruleDTOs) { - if (ruleId.equals(ruleDTO.getRuleId())) { - arrangedRules.add(ruleDTO); - } - } - } - ruleDTOs = arrangedRules; - } - createMetaDataFromPolicy("policy", policyDTO, policyMetaDataList); - String algorithm = policyDTO.getRuleAlgorithm(); - if (algorithm != null && algorithm.trim().length() > 0) { - policyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(algorithm)); - } else { - policyDTO.setRuleAlgorithm(holder.getDefaultRuleAlgorithm()); - } - - if (targetDTO != null && targetDTO.getRowDTOList() != null) { - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : targetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("target", rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - targetDTO.setRowDTOList(newRowDTOs); - policyDTO.setTargetDTO(targetDTO); - } - - if (ruleDTOs != null) { - for (RuleDTO ruleDTO : ruleDTOs) { - createMetaDataFromRule("rule", ruleDTO, policyMetaDataList); - List newRowDTOs = new ArrayList(); - for (RowDTO rowDTO : ruleDTO.getRowDTOList()) { - createMetaDataFromRowDTO("ruleRow" + ruleDTO.getRuleId(), rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newRowDTOs.add(rowDTO); - } - - ruleDTO.setRowDTOList(newRowDTOs); - - TargetDTO ruleTargetDTO = ruleDTO.getTargetDTO(); - - if (ruleTargetDTO == null) { - continue; - } - - List newTargetRowDTOs = new ArrayList(); - - for (RowDTO rowDTO : ruleTargetDTO.getRowDTOList()) { - createMetaDataFromRowDTO("ruleTarget" + ruleDTO.getRuleId(), rowDTO, policyMetaDataList); - String category = rowDTO.getCategory(); - - if (category == null) { - continue; - } - - String attributeValue = rowDTO.getAttributeValue(); - if (attributeValue == null || attributeValue.trim().length() < 1) { - continue; - } - rowDTO.setCategory(holder.getCategoryUri(category)); - - if (rowDTO.getAttributeDataType() == null || - rowDTO.getAttributeDataType().trim().length() < 1 || - rowDTO.getAttributeDataType().trim().equals("null")) { - - if (holder.getDefaultDataType() != null) { - rowDTO.setAttributeDataType(holder.getDefaultDataType()); - } else { - rowDTO.setAttributeDataType(PolicyEditorConstants.DataType.STRING); - } - } else { - if (holder.getDataTypeUri(rowDTO.getAttributeDataType()) != null) { - rowDTO.setAttributeDataType(holder.getDataTypeUri(rowDTO.getAttributeDataType())); - } - } - - String attributeId = rowDTO.getAttributeId(); - if (attributeId == null || attributeId.trim().length() < 1 || - attributeId.trim().equals("null")) { - attributeId = holder.getCategoryDefaultAttributeId(category); - } - rowDTO.setAttributeId(holder.getAttributeIdUri(attributeId)); - rowDTO.setFunction(holder.getFunctionUri(rowDTO.getFunction())); - rowDTO.setPreFunction(holder.getPreFunctionUri(rowDTO.getPreFunction())); - newTargetRowDTOs.add(rowDTO); - } - - ruleTargetDTO.setRowDTOList(newTargetRowDTOs); - - List ruleObligationDTOs = ruleDTO.getObligationDTOs(); - - if (ruleObligationDTOs != null) { - for (ObligationDTO dto : ruleObligationDTOs) { - createMetaDataFromObligation("ruleObligation" + ruleDTO.getRuleId(), - dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() < 1 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - ruleDTO.setObligationDTOs(ruleObligationDTOs); - } - - ruleDTO.setTargetDTO(ruleTargetDTO); - } - - policyDTO.setRuleDTOs(ruleDTOs); - } - - if (obligationDTOs != null) { - for (ObligationDTO dto : obligationDTOs) { - createMetaDataFromObligation("obligation", dto, policyMetaDataList); - if (dto.getAttributeValueDataType() == null || - dto.getAttributeValueDataType().trim().length() == 0 || - dto.getAttributeValueDataType().trim().equals("null")) { - dto.setAttributeValueDataType(PolicyEditorConstants.DataType.STRING); - } - if (dto.getResultAttributeId() == null || - dto.getResultAttributeId().trim().length() == 0 || - dto.getResultAttributeId().trim().equals("null")) { - // setting obligation id - dto.setResultAttributeId(dto.getObligationId()); - } - } - policyDTO.setObligationDTOs(obligationDTOs); - } - -// for(ExtendAttributeDTO attributeDTO : ruleDTO.getAttributeDTOs()){ -// -// String id = attributeDTO.getId(); -// String selector = attributeDTO.getSelector(); -// String category = null; -// String function = null; -// -// if(id == null){ -// continue; -// } -// -// if(PolicyEditorConstants.DYNAMIC_SELECTOR_FUNCTION.equals(selector)){ -// -// String attributeValue = attributeDTO.getAttributeValue(); -// if(attributeValue == null || attributeValue.trim().length() < 1){ -// continue; -// } -// function = attributeDTO.getFunction(); -// if(function != null){ -// function = function.replace(">", ">"); -// function = function.replace("<", "<"); -// -// if(ruleFunctionMap.get(function) != null){// TODO -// attributeDTO.setFunction(ruleFunctionMap.get(function)); -// } -// } -// -// if(attributeDTO.getDataType() == null || -// attributeDTO.getDataType().trim().length() < 1 || -// attributeDTO.getDataType().trim().equals("null")) { -// -// if(category != null && defaultDataTypeMap.get(category) != null){ -// attributeDTO.setDataType((defaultDataTypeMap. -// get(category).iterator().next())); -// } else { -// attributeDTO.setDataType(PolicyEditorConstants.DataType.STRING); -// } -// } -// -// } else { -// -// category = attributeDTO.getCategory(); -// -// if(category == null || category.trim().length() < 1){ -// continue; -// } -// -// if(categoryMap.get(category) != null){ -// attributeDTO.setCategory(categoryMap.get(category)); -// } -// -// if(attributeDTO.getDataType() == null || -// attributeDTO.getDataType().trim().length() < 1 || -// attributeDTO.getDataType().trim().equals("null")) { -// -// if(defaultDataTypeMap.get(category) != null){ -// attributeDTO.setDataType((defaultDataTypeMap. -// get(category).iterator().next())); -// } else { -// attributeDTO.setDataType(PolicyEditorConstants.DataType.STRING); -// } -// } -// -// if(attributeDTO.getAttributeId() == null || -// attributeDTO.getAttributeId().trim().length() < 1 || -// attributeDTO.getAttributeId().trim().equals("null")) { -// if(defaultAttributeIdMap.get(category) != null){ -// attributeDTO.setAttributeId((defaultAttributeIdMap. -// get(category).iterator().next())); -// } -// } -// } -// -// -// ExtendAttributeDTO odlRowDTO = new ExtendAttributeDTO(attributeDTO); -// odlRowDTO.setCategory(category); -// odlRowDTO.setFunction(function); -// createMetaDataFromDynamicAttribute("targetRule" + odlRowDTO.getId(), odlRowDTO, -// policyMetaDataList); -// //newDynamicAttributeDTOs.add(attributeDTO); -// } - - return policyMetaDataList.toArray(new String[policyMetaDataList.size()]); - } - - private static void createMetaDataFromPolicy(String prefix, PolicyDTO policyDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + policyDTO.getPolicyId()); - metaDataList.add(prefix + "|" + policyDTO.getRuleAlgorithm()); - if (policyDTO.getDescription() == null) { - policyDTO.setDescription(""); - } - metaDataList.add(prefix + "|" + policyDTO.getDescription()); - metaDataList.add(prefix + "|" + policyDTO.getVersion()); - } - } - - private static void createMetaDataFromPolicySet(String prefix, PolicySetDTO policyDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + policyDTO.getPolicySetId()); - metaDataList.add(prefix + "|" + policyDTO.getPolicyCombiningAlgId()); - if (policyDTO.getDescription() == null) { - policyDTO.setDescription(""); - } - metaDataList.add(prefix + "|" + policyDTO.getDescription()); - metaDataList.add(prefix + "|" + policyDTO.getVersion()); - } - } - - private static void createMetaDataFromRule(String prefix, RuleDTO ruleDTO, List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + ruleDTO.getRuleId()); - metaDataList.add(prefix + "|" + ruleDTO.getRuleEffect()); - metaDataList.add(prefix + "|" + ruleDTO.getRuleDescription()); - } - } - - private static void createMetaDataFromRowDTO(String prefix, RowDTO rowDTO, List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + rowDTO.getCategory()); - metaDataList.add(prefix + "|" + rowDTO.getPreFunction()); - metaDataList.add(prefix + "|" + rowDTO.getFunction()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeValue()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeId()); - metaDataList.add(prefix + "|" + rowDTO.getAttributeDataType()); - metaDataList.add(prefix + "|" + rowDTO.getCombineFunction()); - } - } - - private static void createMetaDataFromDynamicAttribute(String prefix, ExtendAttributeDTO dto, - List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getCategory()); - metaDataList.add(prefix + "|" + dto.getSelector()); - metaDataList.add(prefix + "|" + dto.getFunction()); - metaDataList.add(prefix + "|" + dto.getAttributeValue()); - metaDataList.add(prefix + "|" + dto.getAttributeId()); - metaDataList.add(prefix + "|" + dto.getDataType()); - metaDataList.add(prefix + "|" + dto.getId()); - } - } - - private static void createMetaDataFromObligation(String prefix, ObligationDTO dto, - List metaDataList) { - - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getType()); - metaDataList.add(prefix + "|" + dto.getObligationId()); - metaDataList.add(prefix + "|" + dto.getEffect()); - metaDataList.add(prefix + "|" + dto.getAttributeValue()); - metaDataList.add(prefix + "|" + dto.getResultAttributeId()); - metaDataList.add(prefix + "|" + dto.getAttributeValueDataType()); - } - } - - private static void createMetaDataFromReference(String prefix, PolicyRefIdDTO dto, - List metaDataList) { - if (metaDataList != null) { - metaDataList.add(prefix + "|" + dto.getId()); - metaDataList.add(prefix + "|" + dto.isPolicySet()); - metaDataList.add(prefix + "|" + dto.isReferenceOnly()); - } - } - - public static String[] createBasicPolicyData(SimplePolicyEditorDTO policyEditorDTO) { - - List metaDataList = new ArrayList(); - - metaDataList.add("policyId|" + policyEditorDTO.getPolicyId()); - metaDataList.add("category|" + policyEditorDTO.getAppliedCategory()); - metaDataList.add("policyDescription|" + policyEditorDTO.getDescription()); - metaDataList.add("userAttributeId|" + policyEditorDTO.getUserAttributeId()); - metaDataList.add("userAttributeValue|" + policyEditorDTO.getUserAttributeValue()); - metaDataList.add("function|" + policyEditorDTO.getFunction()); - metaDataList.add("actionValue|" + policyEditorDTO.getActionValue()); - metaDataList.add("resourceValue|" + policyEditorDTO.getResourceValue()); - metaDataList.add("category|" + policyEditorDTO.getAppliedCategory()); - metaDataList.add("environmentValue|" + policyEditorDTO.getEnvironmentValue()); - metaDataList.add("environmentId|" + policyEditorDTO.getEnvironmentId()); - - List elementDTOs = policyEditorDTO.getSimplePolicyEditorElementDTOs(); - - if (elementDTOs != null && elementDTOs.size() > 0) { - for (int i = 0; i < elementDTOs.size(); i++) { - SimplePolicyEditorElementDTO dto = elementDTOs.get(i); - if (dto.getResourceValue() != null) { - metaDataList.add("resourceValue" + i + "|" + dto.getResourceValue()); - } else { - metaDataList.add("resourceValue" + i); - } - if (dto.getEnvironmentValue() != null) { - metaDataList.add("environmentValue" + i + "|" + dto.getEnvironmentValue()); - } else { - metaDataList.add("environmentValue" + i); - } - if (dto.getActionValue() != null) { - metaDataList.add("actionValue" + i + "|" + dto.getActionValue()); - } else { - metaDataList.add("actionValue" + i); - } - if (dto.getOperationType() != null) { - metaDataList.add("operationValue" + i + "|" + dto.getOperationType()); - } else { - metaDataList.add("operationValue" + i); - } - if (dto.getUserAttributeId() != null) { - metaDataList.add("userAttributeId" + i + "|" + dto.getUserAttributeId()); - } else { - metaDataList.add("userAttributeId" + i); - } - if (dto.getUserAttributeValue() != null) { - metaDataList.add("userAttributeValue" + i + "|" + dto.getUserAttributeValue()); - } else { - metaDataList.add("userAttributeValue" + i); - } - if (dto.getEnvironmentId() != null) { - metaDataList.add("environmentId" + i + "|" + dto.getEnvironmentId()); - } else { - metaDataList.add("environmentId" + i); - } - if (dto.getFunctionOnResources() != null) { - metaDataList.add("functionOnResources" + i + "|" + dto.getFunctionOnResources()); - } else { - metaDataList.add("functionOnResources" + i); - } - if (dto.getFunctionOnActions() != null) { - metaDataList.add("functionOnActions" + i + "|" + dto.getFunctionOnActions()); - } else { - metaDataList.add("functionOnActions" + i); - } - if (dto.getFunctionOnUsers() != null) { - metaDataList.add("functionOnUsers" + i + "|" + dto.getFunctionOnUsers()); - } else { - metaDataList.add("functionOnUsers" + i); - } - if (dto.getFunctionOnEnvironments() != null) { - metaDataList.add("functionOnEnvironments" + i + "|" + dto.getFunctionOnEnvironments()); - } else { - metaDataList.add("functionOnEnvironments" + i); - } - - } - } - return metaDataList.toArray(new String[metaDataList.size()]); - } - -////////////////////////////////////// Simple Policy Editor data //////////////////////////////////// - - - public static SimplePolicyEditorDTO createSimplePolicyEditorDTO(String[] policyEditorData) { - - Map metaDataMap = new HashMap(); - List SimplePolicyEditorElementDTOs = new ArrayList(); - - int i = 0; - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - String value = data.substring(data.indexOf("|") + 1); - metaDataMap.put(identifier, value); - } - i++; - } - } - - SimplePolicyEditorDTO policyEditorDTO = new SimplePolicyEditorDTO(); - policyEditorDTO.setPolicyId(metaDataMap.get("policyId")); - policyEditorDTO.setAppliedCategory(metaDataMap.get("policyId")); - policyEditorDTO.setFunction(metaDataMap.get("function")); - policyEditorDTO.setActionValue(metaDataMap.get("actionValue")); - policyEditorDTO.setDescription(metaDataMap.get("policyDescription")); - policyEditorDTO.setUserAttributeId(metaDataMap.get("userAttributeId")); - policyEditorDTO.setUserAttributeValue(metaDataMap.get("userAttributeValue")); - policyEditorDTO.setResourceValue(metaDataMap.get("resourceValue")); - policyEditorDTO.setEnvironmentValue(metaDataMap.get("environmentValue")); - policyEditorDTO.setEnvironmentId(metaDataMap.get("environmentId")); - policyEditorDTO.setAppliedCategory(metaDataMap.get("category")); - - i = (i - 11) / 11; - - for (int j = 0; j < i; j++) { - - SimplePolicyEditorElementDTO elementDTO = new SimplePolicyEditorElementDTO(); - - elementDTO.setResourceValue(metaDataMap.get("resourceValue" + j)); - elementDTO.setEnvironmentValue(metaDataMap.get("environmentValue" + j)); - if (metaDataMap.get("actionValue" + j) != null) { - elementDTO.setActionValue(metaDataMap.get("actionValue" + j)); - } - elementDTO.setOperationType(metaDataMap.get("operationValue" + j)); - elementDTO.setUserAttributeId(metaDataMap.get("userAttributeId" + j)); - elementDTO.setUserAttributeValue(metaDataMap.get("userAttributeValue" + j)); - elementDTO.setEnvironmentId(metaDataMap.get("environmentId" + j)); - elementDTO.setFunctionOnResources(metaDataMap.get("functionOnResources" + j)); - elementDTO.setFunctionOnActions(metaDataMap.get("functionOnActions" + j)); - elementDTO.setFunctionOnUsers(metaDataMap.get("functionOnUsers" + j)); - elementDTO.setFunctionOnEnvironments(metaDataMap.get("functionOnEnvironments" + j)); - - SimplePolicyEditorElementDTOs.add(elementDTO); - } - - if (SimplePolicyEditorElementDTOs.size() > 0) { - policyEditorDTO.setSimplePolicyEditorElementDTOs(SimplePolicyEditorElementDTOs); - } - - return policyEditorDTO; - } - - -///////////////////////////////// policy Set /////////////////////////////////////////////////////// - -// public static PolicyElementDTO createPolicySetElementDTO(String policy) -// throws EntitlementPolicyCreationException { -// -// PolicySetDTO policyElementDTO = new PolicySetDTO(); -// OMElement omElement; -// try { -// omElement = AXIOMUtil.stringToOM(policy); -// } catch (XMLStreamException e) { -// throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); -// } -// -// if (omElement != null) { -// -// policyElementDTO.setPolicySetId(omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_SET_ID))); -// -// String ruleCombiningAlgorithm = omElement. -// getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ALGORITHM)); -// -// try{ -// policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. -// split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_3)[1]); -// } catch (Exception ignore){ -// policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. -// split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_1)[1]); -// // if this is also fails, can not edit the policy -// } -// -// Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. -// DESCRIPTION_ELEMENT); -// -// if(iterator.hasNext()){ -// OMElement descriptionElement = (OMElement) iterator.next(); -// if(descriptionElement != null && descriptionElement.getText() != null){ -// policyElementDTO.setPolicyDescription(descriptionElement.getText().trim()); -// } -// } -// -// } -// return policyElementDTO; -// } - -//////////////////////////////// Standard policy editor///////////////////////////////////////////////////// - - public static PolicyElementDTO createPolicyElementDTO(String policy) - throws EntitlementPolicyCreationException { - - PolicyElementDTO policyElementDTO = new PolicyElementDTO(); - OMElement omElement; - try { - omElement = AXIOMUtil.stringToOM(policy); - } catch (XMLStreamException e) { - throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); - } - - if (omElement != null) { - - policyElementDTO.setPolicyName(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.POLICY_ID))); - - String ruleCombiningAlgorithm = omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_ALGORITHM)); - - try { - policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. - split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_3)[1]); - } catch (Exception ignore) { - policyElementDTO.setRuleCombiningAlgorithms(ruleCombiningAlgorithm. - split(PolicyEditorConstants.RULE_ALGORITHM_IDENTIFIER_1)[1]); - // if this is also fails, can not edit the policy - } - - Iterator iterator = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. - DESCRIPTION_ELEMENT); - - if (iterator.hasNext()) { - OMElement descriptionElement = (OMElement) iterator.next(); - if (descriptionElement != null && descriptionElement.getText() != null) { - policyElementDTO.setPolicyDescription(descriptionElement.getText().trim()); - } - } - - } - return policyElementDTO; - } - - public static List createRuleElementDTOs(String policy) - throws EntitlementPolicyCreationException { - - List ruleElementDTOs = new ArrayList(); - OMElement omElement; - try { - omElement = AXIOMUtil.stringToOM(policy); - } catch (XMLStreamException e) { - throw new EntitlementPolicyCreationException("Policy can not be converted to OMElement"); - } - - if (omElement != null) { - Iterator iterator2 = omElement.getChildrenWithLocalName(EntitlementPolicyConstants. - RULE_ELEMENT); - while (iterator2.hasNext()) { - OMElement ruleElement = (OMElement) iterator2.next(); - ruleElementDTOs.add(createRuleDTO(ruleElement)); - } - } - return ruleElementDTOs; - } - - - public static RuleElementDTO createRuleDTO(OMElement omElement) { - RuleElementDTO ruleElementDTO = new RuleElementDTO(); - - if (omElement != null) { - ruleElementDTO.setRuleId(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_ID)).trim()); - ruleElementDTO.setRuleEffect(omElement. - getAttributeValue(new QName(EntitlementPolicyConstants.RULE_EFFECT)).trim()); - - Iterator iterator1 = omElement. - getChildrenWithLocalName(EntitlementPolicyConstants.DESCRIPTION_ELEMENT); - - while (iterator1.hasNext()) { - OMElement descriptionElement = (OMElement) iterator1.next(); - if (descriptionElement != null && descriptionElement.getText() != null) { - ruleElementDTO.setRuleDescription(descriptionElement.getText().trim()); - } - } - } - - return ruleElementDTO; - } - - - public static void processRuleRowPolicyEditorData(List rules, String[] policyEditorData) { - - for (RuleDTO ruleDTO : rules) { - List ruleList = new ArrayList(); - List ruleTargetList = new ArrayList(); - List obligationList = new ArrayList(); - - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (identifier.startsWith("ruleTarget")) { - String ruleId = identifier.substring(10); - if (ruleId != null && ruleId.contains(ruleDTO.getRuleId())) { - ruleTargetList.add(data.substring(data.indexOf("|") + 1)); - } - } else if (identifier.startsWith("ruleObligation")) { - String ruleId = identifier.substring(14); - if (ruleId != null && ruleId.equals(ruleDTO.getRuleId())) { - obligationList.add(data.substring(data.indexOf("|") + 1)); - } - } else if (identifier.startsWith("ruleRow")) { - String ruleId = identifier.substring(7); - if (ruleId != null && ruleId.equals(ruleDTO.getRuleId())) { - ruleList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - } - - ruleDTO.setRowDTOList(createRowDTO(ruleList)); - ruleDTO.getTargetDTO().setRowDTOList(createRowDTO(ruleTargetList)); - ruleDTO.setObligationDTOs(createObligationDTO(obligationList)); - ruleDTO.setCompletedRule(true); - } - } - - public static void processTargetPolicyEditorData(TargetDTO targetDTO, String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("target").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - targetDTO.setRowDTOList(createRowDTO(targetList)); - } - } - - public static void processPolicyEditorData(PolicyElementDTO policyElementDTO, String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("policy").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - policyElementDTO.setPolicyName(targetList.get(0)); - policyElementDTO.setRuleCombiningAlgorithms(targetList.get(1)); - if (targetList.get(2) != null) { - policyElementDTO.setPolicyDescription(targetList.get(2)); - } - policyElementDTO.setVersion(targetList.get(3)); - } - } - - public static void processObligationPolicyEditorData(List obligationDTOs, - String[] policyEditorData) { - - List targetList = new ArrayList(); - - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("obligation").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - obligationDTOs.addAll(createObligationDTO(targetList)); - } - } - - public static void processRulePolicyEditorData(List ruleDTOs, - String[] policyEditorData) { - List targetList = new ArrayList(); - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("rule").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - ruleDTOs.addAll(createRuleDTO(targetList)); - if (ruleDTOs.size() > 0) { - processRuleRowPolicyEditorData(ruleDTOs, policyEditorData); - } - } - } - - public static void processReferencePolicyEditorData(List policyRefIdDTOs, - String[] policyEditorData) { - - List targetList = new ArrayList(); - if (policyEditorData != null) { - for (String data : policyEditorData) { - if (data.contains("|")) { - String identifier = data.substring(0, data.indexOf("|")); - if (("reference").equals(identifier)) { - targetList.add(data.substring(data.indexOf("|") + 1)); - } - } - } - - policyRefIdDTOs.addAll(createReferenceDTO(targetList)); - } - } - - private static List createRowDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 7) { - List newList = list.subList(i, i + 7); - if (newList != null) { - RowDTO rowDTO = new RowDTO(); - rowDTO.setCategory(newList.get(0)); - rowDTO.setPreFunction(newList.get(1)); - rowDTO.setFunction(newList.get(2)); - rowDTO.setAttributeValue(newList.get(3)); - rowDTO.setAttributeId(newList.get(4)); - rowDTO.setAttributeDataType(newList.get(5)); - rowDTO.setCombineFunction(newList.get(6)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createObligationDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 6) { - List newList = list.subList(i, i + 6); - if (newList != null) { - ObligationDTO rowDTO = new ObligationDTO(); - rowDTO.setType(newList.get(0)); - rowDTO.setObligationId(newList.get(1)); - rowDTO.setEffect(newList.get(2)); - rowDTO.setAttributeValue(newList.get(3)); - rowDTO.setResultAttributeId(newList.get(4)); - rowDTO.setAttributeValueDataType(newList.get(5)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createRuleDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 3) { - List newList = list.subList(i, i + 3); - if (newList != null) { - RuleDTO rowDTO = new RuleDTO(); - rowDTO.setRuleId(newList.get(0)); - rowDTO.setRuleEffect(newList.get(1)); - rowDTO.setRuleDescription(newList.get(2)); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - - private static List createReferenceDTO(List list) { - List rowDTOs = new ArrayList(); - for (int i = 0; i < list.size(); i = i + 3) { - List newList = list.subList(i, i + 3); - if (newList != null) { - PolicyRefIdDTO rowDTO = new PolicyRefIdDTO(); - rowDTO.setId(newList.get(0)); - rowDTO.setPolicySet(Boolean.parseBoolean(newList.get(1))); - rowDTO.setReferenceOnly(Boolean.parseBoolean(newList.get(2))); - rowDTOs.add(rowDTO); - } - } - return rowDTOs; - } - -///////////////////////////////////////// Basic Policy Editor /////////////////////////////////////// - - /** - * create policy meta data that helps to edit the policy using basic editor - * - * @param basicPolicyDTO BasicPolicyDTO - * @param ruleElementOrder String - * @return String Array to dent to back end - */ - public static String[] generateBasicPolicyEditorData(BasicPolicyDTO basicPolicyDTO, - String ruleElementOrder) { - - List basicRuleDTOs = basicPolicyDTO.getBasicRuleDTOs(); - BasicTargetDTO basicTargetDTO = basicPolicyDTO.getTargetDTO(); - - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.BASIC); - List arrangedRules = new ArrayList(); - - if (ruleElementOrder != null && ruleElementOrder.trim().length() > 0) { - String[] ruleIds = ruleElementOrder. - split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String ruleId : ruleIds) { - for (BasicRuleDTO ruleDTO : basicRuleDTOs) { - if (ruleId.equals(ruleDTO.getRuleId())) { - arrangedRules.add(ruleDTO); - } - } - } - basicRuleDTOs = arrangedRules; - } - - int ruleEditorDataConstant = EntitlementPolicyConstants.BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT; - int targetEditorDataConstant = EntitlementPolicyConstants.BASIC_POLICY_EDITOR_TARGET_DATA_AMOUNT; - - int i = 0; - String selectedDataType; - String[] policyEditorData; - if (basicRuleDTOs != null) { - policyEditorData = new String[targetEditorDataConstant + - (basicRuleDTOs.size() * ruleEditorDataConstant)]; - } else { - policyEditorData = new String[targetEditorDataConstant]; - } - - policyEditorData[i++] = basicPolicyDTO.getPolicyId(); - policyEditorData[i++] = basicPolicyDTO.getRuleAlgorithm(); - String algorithm = basicPolicyDTO.getRuleAlgorithm(); - if (algorithm != null && algorithm.trim().length() > 0) { - basicPolicyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(algorithm)); - } else { - basicPolicyDTO.setRuleAlgorithm(holder.getRuleAlgorithmUri(holder.getDefaultRuleAlgorithm())); - } - policyEditorData[i++] = basicPolicyDTO.getVersion(); - policyEditorData[i++] = basicPolicyDTO.getDescription(); - - policyEditorData[i++] = basicTargetDTO.getFunctionOnResources(); - policyEditorData[i++] = basicTargetDTO.getResourceList(); - policyEditorData[i++] = basicTargetDTO.getResourceId(); - String resourceId = basicTargetDTO.getResourceId(); - policyEditorData[i++] = basicTargetDTO.getResourceDataType(); - basicTargetDTO.setFunctionOnResources(holder.getFunctionUri(basicTargetDTO.getFunctionOnResources())); - basicTargetDTO.setResourceId(holder.getAttributeIdUri(resourceId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(resourceId)) != null) { - basicTargetDTO.setResourceDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnSubjects(); - policyEditorData[i++] = basicTargetDTO.getSubjectList(); - policyEditorData[i++] = basicTargetDTO.getSubjectId(); - policyEditorData[i++] = basicTargetDTO.getSubjectDataType(); - String subjectId = basicTargetDTO.getSubjectId(); - basicTargetDTO.setFunctionOnSubjects(holder.getFunctionUri(basicTargetDTO.getFunctionOnSubjects())); - basicTargetDTO.setSubjectId(holder.getAttributeIdUri(subjectId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(subjectId)) != null) { - basicTargetDTO.setSubjectDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnActions(); - policyEditorData[i++] = basicTargetDTO.getActionList(); - policyEditorData[i++] = basicTargetDTO.getActionId(); - String actionId = basicTargetDTO.getActionId(); - policyEditorData[i++] = basicTargetDTO.getActionDataType(); - basicTargetDTO.setFunctionOnActions(holder.getFunctionUri(basicTargetDTO.getFunctionOnActions())); - basicTargetDTO.setActionId(holder.getAttributeIdUri(actionId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(actionId)) != null) { - basicTargetDTO.setActionDataType(selectedDataType); - } - - policyEditorData[i++] = basicTargetDTO.getFunctionOnEnvironment(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentList(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentId(); - policyEditorData[i++] = basicTargetDTO.getEnvironmentDataType(); - String environmentId = basicTargetDTO.getEnvironmentId(); - basicTargetDTO.setFunctionOnEnvironment(holder.getFunctionUri(basicTargetDTO.getFunctionOnEnvironment())); - basicTargetDTO.setEnvironmentId(holder.getAttributeIdUri(environmentId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(environmentId)) != null) { - basicTargetDTO.setEnvironmentDataType(selectedDataType); - } - - - if (basicRuleDTOs != null && basicRuleDTOs.size() > 0) { - for (BasicRuleDTO basicRuleDTO : basicRuleDTOs) { - generateBasicPolicyEditorDataForRule(basicRuleDTO, policyEditorData, i); - i = i + ruleEditorDataConstant; - - if (basicRuleDTO.getRuleId() == null || basicRuleDTO.getRuleId().trim().length() == 0) { - basicRuleDTO.setRuleId(UUID.randomUUID().toString()); - } - - if (basicRuleDTO.getRuleEffect() == null || basicRuleDTO.getRuleEffect().trim().length() == 0) { - basicRuleDTO.setRuleEffect(holder.getDefaultEffect()); - } - } - } - - if (holder.isAddLastRule()) { - - if (basicRuleDTOs == null) { - basicRuleDTOs = new ArrayList(); - } - - BasicRuleDTO basicRuleDTO = new BasicRuleDTO(); - basicRuleDTO.setRuleId(UUID.randomUUID().toString()); - if (holder.getLastRuleEffect() != null) { - basicRuleDTO.setRuleEffect(holder.getLastRuleEffect()); - } else { - basicRuleDTO.setRuleEffect(holder.getDefaultEffect()); - } - basicRuleDTOs.add(basicRuleDTO); - } - - //as we have rearrage the rules - basicPolicyDTO.setBasicRuleDTOs(basicRuleDTOs); - - return policyEditorData; - } - - public static String[] generateBasicPolicyEditorDataForRule(BasicRuleDTO basicRuleDTO, - String[] policyEditorData, int currentArrayIndex) { - int i = currentArrayIndex; - String selectedDataType; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.BASIC); - - policyEditorData[i++] = basicRuleDTO.getRuleId(); - policyEditorData[i++] = basicRuleDTO.getRuleEffect(); - policyEditorData[i++] = basicRuleDTO.getRuleDescription(); - basicRuleDTO.setRuleEffect(holder.getRuleEffectUri(basicRuleDTO.getRuleEffect())); - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnResources(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnResources(); - policyEditorData[i++] = basicRuleDTO.getResourceList(); - policyEditorData[i++] = basicRuleDTO.getResourceId(); - String resourceId = basicRuleDTO.getResourceId(); - policyEditorData[i++] = basicRuleDTO.getResourceDataType(); - basicRuleDTO.setPreFunctionOnResources(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnResources())); - basicRuleDTO.setFunctionOnResources(holder.getFunctionUri(basicRuleDTO.getFunctionOnResources())); - basicRuleDTO.setResourceId(holder.getAttributeIdUri(resourceId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(resourceId)) != null) { - basicRuleDTO.setResourceDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnSubjects(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnSubjects(); - policyEditorData[i++] = basicRuleDTO.getSubjectList(); - policyEditorData[i++] = basicRuleDTO.getSubjectId(); - policyEditorData[i++] = basicRuleDTO.getSubjectDataType(); - String subjectId = basicRuleDTO.getSubjectId(); - basicRuleDTO.setPreFunctionOnSubjects(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnSubjects())); - basicRuleDTO.setFunctionOnSubjects(holder.getFunctionUri(basicRuleDTO.getFunctionOnSubjects())); - basicRuleDTO.setSubjectId(holder.getAttributeIdUri(subjectId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(subjectId)) != null) { - basicRuleDTO.setSubjectDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnActions(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnActions(); - policyEditorData[i++] = basicRuleDTO.getActionList(); - policyEditorData[i++] = basicRuleDTO.getActionId(); - String actionId = basicRuleDTO.getActionId(); - policyEditorData[i++] = basicRuleDTO.getActionDataType(); - basicRuleDTO.setPreFunctionOnActions(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnActions())); - basicRuleDTO.setFunctionOnActions(holder.getFunctionUri(basicRuleDTO.getFunctionOnActions())); - basicRuleDTO.setActionId(holder.getAttributeIdUri(actionId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(actionId)) != null) { - basicRuleDTO.setActionDataType(selectedDataType); - } - - policyEditorData[i++] = basicRuleDTO.getPreFunctionOnEnvironment(); - policyEditorData[i++] = basicRuleDTO.getFunctionOnEnvironment(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentList(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentId(); - policyEditorData[i++] = basicRuleDTO.getEnvironmentDataType(); - String environmentId = basicRuleDTO.getSubjectId(); - basicRuleDTO.setPreFunctionOnEnvironment(holder.getPreFunctionUri(basicRuleDTO.getPreFunctionOnEnvironment())); - basicRuleDTO.setFunctionOnEnvironment(holder.getFunctionUri(basicRuleDTO.getFunctionOnEnvironment())); - basicRuleDTO.setEnvironmentId(holder.getAttributeIdUri(environmentId)); - if ((selectedDataType = holder.getDataTypeUriForAttribute(environmentId)) != null) { - basicRuleDTO.setEnvironmentDataType(selectedDataType); - } - - return policyEditorData; - } - - - public static BasicPolicyDTO createBasicPolicyDTO(String[] policyEditorData) { - - BasicPolicyDTO basicPolicyDTO = new BasicPolicyDTO(); - int i = 0; - - if (policyEditorData[i] != null) { - basicPolicyDTO.setPolicyId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setRuleAlgorithm(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setVersion(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicPolicyDTO.setDescription(policyEditorData[i]); - } - i++; - - BasicTargetDTO basicTargetDTO = new BasicTargetDTO(); - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnResources(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setResourceDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnSubjects(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setSubjectDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnActions(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setActionDataType(policyEditorData[i]); - } - i++; - - if (policyEditorData[i] != null) { - basicTargetDTO.setFunctionOnEnvironment(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentList(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentId(policyEditorData[i]); - } - i++; - if (policyEditorData[i] != null) { - basicTargetDTO.setEnvironmentDataType(policyEditorData[i]); - } - i++; - - basicPolicyDTO.setTargetDTO(basicTargetDTO); - List basicRuleDTOs = createBasicRuleDTOs(policyEditorData, i); - if (basicRuleDTOs != null && basicRuleDTOs.size() > 0) { - basicPolicyDTO.setBasicRuleDTOs(basicRuleDTOs); - } - - return basicPolicyDTO; - } - - public static List createBasicRuleDTOs(String[] policyEditorData, int nextIndex) { - - List basicRuleDTOs = new ArrayList(); - if (policyEditorData != null) { - while (true) { - if (policyEditorData.length == nextIndex) { - break; - } - BasicRuleDTO basicRuleDTO = createBasicRuleDTO(policyEditorData, nextIndex); - nextIndex = nextIndex + EntitlementPolicyConstants.BASIC_POLICY_EDITOR_RULE_DATA_AMOUNT; - basicRuleDTO.setCompletedRule(true); - basicRuleDTOs.add(basicRuleDTO); - } - } - return basicRuleDTOs; - } - - public static BasicRuleDTO createBasicRuleDTO(String[] policyEditorDataForRule, int nextIndex) { - - BasicRuleDTO basicRuleDTO = new BasicRuleDTO(); - int i = nextIndex; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleEffect(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setRuleDescription(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnResources(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnResources(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setResourceDataType(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnSubjects(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnSubjects(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setSubjectDataType(policyEditorDataForRule[i]); - } - i++; - - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnActions(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnActions(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setActionDataType(policyEditorDataForRule[i]); - } - i++; - - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setPreFunctionOnEnvironment(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setFunctionOnEnvironment(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentList(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentId(policyEditorDataForRule[i]); - } - i++; - if (policyEditorDataForRule[i] != null) { - basicRuleDTO.setEnvironmentDataType(policyEditorDataForRule[i]); - } - - return basicRuleDTO; - } -} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/META-INF/component.xml b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/META-INF/component.xml deleted file mode 100644 index d4d53ef11466..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/META-INF/component.xml +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - my_pap_menu - my.pap - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - identity_entitlement_menu - # - region1 - 60 - manage - ../entitlement/images/policy.gif - /permission/admin/manage/identity/entitlement/pap/policy/view - - - policy_pap_menu - my.pap.policy - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pap_menu - ../entitlement/index.jsp - region1 - 5 - manage - ../entitlement/images/policies.gif - /permission/admin/manage/identity/entitlement/pap/policy/view - - - policy_publish_menu - identity.policy.publish - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pap_menu - ../entitlement/policy-publish.jsp - region1 - 9 - manage - ../entitlement/images/publish.gif - /permission/admin/manage/identity/entitlement/pap/subscriber - - - - - my_pdp_menu - my.pdp - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - identity_entitlement_menu - # - region1 - 70 - manage - ../entitlement/images/policy.gif - /permission/admin/manage/identity/entitlement/pdp/view - - - pdp_policy_menu - my.pdp.policies - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pdp_menu - ../entitlement/my-pdp.jsp - region1 - 6 - manage - ../entitlement/images/policies.gif - /permission/admin/manage/identity/entitlement/pdp/view - - - pdp_config_menu - my.pdp.extension - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pdp_menu - ../entitlement/pdp-manage.jsp - region1 - 7 - manage - ../entitlement/images/config.gif - /permission/admin/manage/identity/entitlement/pdp/view - - - policy_search_menu - identity.policy.search - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pdp_menu - ../entitlement/advance-search.jsp - region1 - 10 - manage - ../entitlement/images/search-top.png - /permission/admin/manage/identity/entitlement/pdp - - - - - my_pep_menu - xacml - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - tools_menu - # - region5 - 4 - tools - ../entitlement/images/policy.gif - /permission/admin/manage/identity/entitlement/pep - - - policy_tryit_menu - identity.policy.tryit - org.wso2.carbon.identity.entitlement.ui.i18n.Resources - my_pep_menu - ../entitlement/create-evaluation-request.jsp - region5 - 5 - tools - ../entitlement/images/evaluate.png - /permission/admin/manage/identity/entitlement/pep - - - - - - - - entitlement-policy - - org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyUploadExecutor - - - - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/org/wso2/carbon/identity/entitlement/ui/i18n/Resources.properties b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/org/wso2/carbon/identity/entitlement/ui/i18n/Resources.properties deleted file mode 100644 index 766dc0074362..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/org/wso2/carbon/identity/entitlement/ui/i18n/Resources.properties +++ /dev/null @@ -1,469 +0,0 @@ -identity.entitlement=Policies -identity.pap=Administration -identity.pdp.config=Configuration -identity.pdp.policy=Policy -identity.policy.tryit=TryIt -try.this = Try -xacml=XACML -next=Next -back=Back -prev=prev -my.pdp=PDP -my.pap=PAP -my.pep=PEP -my.pap.policy=Policy Administration -my.pdp.policy=PDP Policy View -my.pdp.policies=Policy View -my.pdp.extension=Extension -eval.policy=Evaluate Policy -eval.ent.policy=Evaluate Entitlement Policy -eval.ent.policy.for.policyId=Evaluation is done with one policy which policy id is -ent.eval.policy.request=Entitlement Policy Evaluation Request [XACML] -ent.eval.policy.response=Entitlement Policy Response [XACML] -evaluate=Evaluate -test.evaluate=Test Evaluate -pdp.evaluate=Evaluate With PDP -back.evaluate=Back To Evaluate -cancel=Cancel -clear=Clear -order=Edit Order -import.policy=Import Policy -import.new.ent.policy=Import New Entitlement Policy -ent.clear.cache=Clear Decision Cache -import.ent.policy=Import Entitlement Policy -ent.policy=Entitlement Policy -upload=Upload -ent.policies=Entitlement Policies -user.ent=User Entitlement -add.new.ent.policy=Add New Entitlement Policy -eval.ent.policies=Evaluate Entitlement Policies -create.ent.policy=Create New Entitlement Policy -available.ent.policies=Available Entitlement Policies -no.policies.defined=No policies defined -no.policies.reference.defined=No policies references are defined -remove.policy=Remove Policy -edit.policy=Edit Policy -versions=Versions -ent.policy.added.successfully=Entitlement policy is added to PAP policy store successfully. -error.while.retreiving.policies=Error while retrieving policy from the backend. Error is {0} -invalid.request=Invalid entitlement policy request -empty.form=At least one of the 4 fields should be non-empty -empty.request=Entitlement policy request cannot be empty -imported.successfuly=Entitlement policy imported successfully -select.policy.to.upload=Please select a policy to upload -error.while.loading.policy=Error while loading entitlement policies. -error.while.loading.policy.resource=Error while loading entitlement policy resource -error.while.performing.advance.search=Error while performing Advance Search -error.while.publishing.policies=Error while publishing policies -error.while.ordering.invalid.policy.value=Error while ordering entitlement policies. Please enter a valid value. -error.while.ordering.policy=Error while ordering entitlement policies. Error is : -cannot.order.policies=Can not re-order policies. You are not authorize for all the policies in PDP -policy.could.not.be.deleted=Policy could not be deleted. Error is : -subscriber.could.not.be.deleted=Subscriber could not be deleted. Error is : -policy.could.not.be.rollback=Policy could not be rollback. Error is : -policy.pdp.deleted.successfully=Entitlement Policies will be de-promoted from PDP. Please Refresh the page after few seconds to check the new status. -policy.deleted.successfully=Entitlement policies are deleted successfully. -policy.rollbacked.successfully=Entitlement is rollbacked successfully. -updated.successfully=Entitlement policy is updated successfully. -ordered.successfully=Entitlement policy will be ordered. Please Refresh the page after few seconds to check the new status. -policy.enabled.successfully=Entitlement Policy will be enabled. Please Refresh the page after few seconds to check the new status. -policy.disable.successfully=Entitlement Policy will be disabled. Please Refresh the page after few seconds to check the new status. -error.while.enabling.policy=Policy could not be enabled or disabled. Error is : -invalid.policy.not.updated=Entitlement policy is not updated. Error is : -delete=Delete -cache.clear.message=You are about to clear decision cache. Do you want to proceed? -attribute.cache.clear.message=You are about to clear attribute cache. Do you want to proceed? -refresh.finder=You are about to re-initialize the finder. Do you want to proceed? -remove.message1=You are about to remove -remove.message2=. Do you want to proceed? -entitlement.policy.creation=Entitlement Policy Creation Wizard -add.policy.element =Add Policy Element -edit.policy.element =Edit Policy Element -policy.name=Entitlement Policy Name -policy.description=Entitlement Policy Description -policy.based.on=This policy is based on -policy.create= Create -policy.name.is.required=Policy Name is required -policy.name.is.conformance=Policy Name is invalid -policy.name.with.space=Spaces is not allowed in Policy Name -policy.name.with.special-character=Special character is not allowed in Policy Name -policy.description.is.required=Policy Description is required -add=Add -rule.combining.algorithm=Rule Combining Algorithm -finish=Finish -match.id=Match Id -attribute.data.type=Attribute Data Type -attribute.value=Attribute Value -attribute.designator.data.type=Attribute Designator Data Type -attribute.id=Attribute Id -issuer=Issuer -must.present=Must Be Present -subject.category=Subject Category -edit=Edit -view=View -save=Save -view.status=View Status -refresh=Refresh -rollback=RollBack -add.new.subject.element=Add New Subject Element -add.new.action.element=Add New Action Element -add.new.resource.element=Add New Resource Element -add.new.environment.element=Add New Environment Element -add.subject.element=Add Subject Element -add.action.element=Add Action Element -add.resource.element=Add Resource Element -add.environment.element=Add Environment Element -edit.subject.element=Edit Subject Element -edit.action.element=Edit Action Element -edit.resource.element=Edit Resource Element -edit.environment.element=Edit Environment Element -add.match.element=Add Match Element -rule.id=Rule Id -rule.effect=Rule Effect -rule.description=Rule Description -rule.id.is.required=Rule id is required -rule.id.is.existing=Rule id can not be duplicated. -policy.id.is.existing=Policy id can not be duplicated. -rule.id.is.not.conformance=Rule id is not valid. -rule.effect.is.required=Rule effect is required -add.target.element=Add Target Element -add.condition.element=Add Condition Element -expression.element=Select Expression -add.new.rule.element=Add New Rule Element -add.expression=Add Expression Element -add.apply.element=Add Apply Element -add.apply.match.element=Add New Apply Element -edit.apply.match.element=Edit Apply Element -add.new.action.match=Add New Action Match -add.new.resource.match=Add New Resource Match -add.new.environment.match=Add New Environment Match -function.id=Function Name -add.attribute.value.element=Add Attribute Value Element -attribute.value.element=Attribute Value Element -functionId.is.required=Function Id is required -edit.apply.element=Edit Apply Element -edit.attribute.value.element=Edit Attribute Value Element -add.rule.element=Add Rule Element -add.rule.elements=Add Rule Elements -edit.rule.element=Edit Rule Element -edit.rule.elements=Edit Rule Elements -edit.target.element=Edit Target Element -edit.condition.element=Edit Condition Element -attribute.designator.element=Attribute Designator Element -attribute.selector.element=Attribute Selector Element -attribute.selector.data.type=Attribute Selector Data Type -request.context.path=Request Context Path -attribute.value.is.required=Attribute Value is required -add.policy.Element=Add Policy Element -add.subject.attribute.designator.element=Add Subject Attribute Designator Element -add.action.attribute.designator.element=Add Action Attribute Designator Element -add.resource.attribute.designator.element=Add Resource Attribute Designator Element -add.environment.attribute.designator.element=Add Environment Attribute Designator Element -attribute.id.is.required=Attribute ID is required -error.while.creating.policy=Error while creating entitlement policy using policy editor. -error.while.adding.policy=Error while adding entitlement policy. -permit=Permit -deny=Deny -delete.this.row=Delete This Row -resource.name=Resource Name -parent.resource.name=Parent Resource Name -resource.names=Resource Names -child.resource.names=Child Resource Names -subject.names=Subject Names -environment.names=Environment Name -roles.users=User's -access.name=Access -delete.rule=Delete -add.new.entry=Add New Rule Entry -select.roles=Select Roles -select.resource=Select Resource -resource=Resource -resources=Resources -subject=Subject -action=Action -environment=Environment -effect=Effect -select.resources.registry=Select Resources From Registry -conf.registry=Configuration Registry -gov.registry=Governance Registry -select.resources.discovery=Select Resources From Discovery Proxy -function.on.resources=Function Apply On Resources -function.on.subjects=Function Apply On Subjects -function.on.actions=Function Apply On Actions -select.subjects=Select Subjects -no.subjects.filtered=No Matching Subjects Found -select.subject.type=Select Subject Type -list.subjects=List Subject Names -subject.search=Search -select.all=Select All -unSelect.all=UnSelect All -select.discovery.resources=Select Discovery Resources -configure.wsdiscovery=Configure WS-Discovery By Visiting WS-Discovery Control Panel -create.basic.ent.policy=Create Basic Entitlement Policy -function.on.environment=Function Apply On Environment -add.new.entitlement.rule=Define Entitlement Rule(s) -add.new.obligations=Define Policy Obligations or Advices -add.new.policy.references=Define Policy references -add.extend.attribute=Define Extend Attribute Values -rule.name=Rule Name -user.attribute=User Attribute -update=Update -rollaback=RollBack -reset=Reset -policy.apply.to=This Policy is going to evaluated, Only when followings are matched.... -policy.set.apply.to=The Policy Set Applies To -import.entitlement.policy.from=Import Entitlement Policy From -function.element.value=Function Element Value -subject.match=Subject Match -resource.match=Resource Match -action.match=Action Match -environment.match=Environment Match -attributeValue.element.id=Attribute Value Element Id -select.attribute.designator.type=Select Attribute Designator Type -not.attribute.value.element.defined=No attribute Value elements defined yet -not.attribute.designator.element.defined=No attribute Designator elements defined yet -not.attribute.selector.element.defined=No attribute Selector elements defined yet -attribute.designator.element.id=Attribute Designator Element Id -attribute.selector.element.id=Attribute Selector Element Id -no.subject.match.define=No subject match elements defined yet -no.action.match.define=No action match elements defined yet -no.resource.match.define=No resource match elements defined yet -no.environment.match.define=No environment match elements defined yet -no.subject.define=No subject elements defined yet -no.action.define=No action elements defined yet -no.resource.define=No resource elements defined yet -no.environment.define=No environment elements defined yet -attribute.designator.selector.element.is.required=Attribute designator or selector element is required -no.rule.element.define=No rules defined yet -match.element.id=Match Element Id -function.element=Function Element -no.apply.element.define=No apply elements defined yet -apply.element.id=Apply Element Id -apply.element=Apply Element -resource.names.are=Resource -action.name=Action -action.names=Action Name -subject.name=Subject Name -subject.attribute=Subject Attribute Name -subject.attribute.value=Subject Attribute Value -create.request.using.editor=Create Request Using Editor -policy.could.not.be.edited=Policy could not be edited using policy editor wizard -policy.could.not.be.edited.with.basic=Policy could not be edited using Basic policy editor wizard. Please use the advanced wizard -subject.element.name=Subject Element Name -action.element.name=Action Element Name -resource.element.name=Resource Element Name -environment.element.name=Environment Element Name -create.policy=Create XACML Policy -edit.xacml.policy=Edit XACML Policy -create.policy.set=Create XACML Policy Set -edit.xacml.policy.set=Edit XACML Policy Set -select.registry.resource=Select Registry Resource -create.request=Create Request -create.evaluation.request=Create Evaluation Request -enable.policy=Enable -disable.policy=Disable -policy.order=Order -policy.order.header=Policy Order -promote.policy=Promote To PDP -sync.policy=Sync With PDP -not.promote.policy=Remove From PDP -cache.clear.error=Error occurred while clearing decision cache. -use.advance.view=Use Advanced View -use.xml.view=Use XML View -policy.set.name=Policy Set Name -policy.combining.algorithm=Policy Combining Algorithm -policy.set.description=Policy Set Description -add.new.policy.set=Add New Policy Set -select.polices=Select Policies -select.policy.set=Select Policy Sets -list.policy.set=List Policy Set -no.policy.set.filtered=No Matching policy Sets Founded -list.policies=List Policies -no.policies.filtered=No Matching policies Founded -error.while.creating.policy.set=Error while creating entitlement policy Set. -select.policies.policySets=Select Already Defined Policies or Policy Sets -selected.policies=Selected Policies -no.selected.policy=No policies are selected -create.entitlement.policy.set=Create Entitlement Policy Set -create.entitlement.policy=Create Entitlement Policy -create.simple.entitlement.policy=Create Simple Policy -all=ALL -policy.type=Policy Type -policy.status.type=Policy Status Type -search.policy=Search Policy -search.status.by.user=Search Status by user -search.status.by.policy=Search Status by policy -search=Search -enter.subscriber.search=Enter subscriber search pattern -select.policies.to.be.deleted=Please select the policies to be deleted. -select.subscribers.to.be.deleted=Please select the subscribers to be deleted. -delete.all.policies.prompt=Do you want to delete all policies? -delete.all.subscribers.prompt=Do you want to delete all subscribers? -de.promote.policy.message=Do you want to de-promote this policy from PDP? This would completely remove policy from PDP. You can disable policy, if you only want to make it unavailable for PDP evaluation. Do you want to continue? -disable.policy.message=Do you want to disable this policy? After disabling policy would not be available for PDP evaluation. -enable.policy.message=Do you want to enable this policy? After enabling policy would be available for PDP evaluation. -delete.services.on.page.prompt=Do you want to delete the selected policies? -delete.subscribers.on.page.prompt=Do you want to delete the selected subscribers? -select.policies.to.be.published=Please select the policies to be published. -publish.all.policies.prompt=Do you want to publish all policies? -publish.services.on.page.prompt=Do you want to publish the selected polices? -select.subscriber.to.be.published=Please select subscriber to publish -no.subscriber.to.be.published=No subscribersList are configured -publish.to.all.subscribersList.prompt=Do you want to publish to all subscribers? -publish.selected.subscriber.prompt=Do you want to publish to the selected subscribers? -publish.pdp.subscriber.prompt=You are going to publish to PDP. Do you want to continue? -publish.to.all.subscribers.prompt=Do you want to publish to all subscribers? -selectAllInPage=Select all in this page -selectAll=Select all in all pages -no.subscribers.found=No matching subscribers are found -error.loading.subscribers=Error while loading subscribers. Error is : -selectNone=Select none -no.rule.defined=No rules defined yet -no.subscribersList.defined=No subscribersList defined yet -no.status.defined=No status can be found -search.results=Search Results -advance.search=Advanced Search -entitled.data.search=Search Entitled Data -attribute.type=Attribute Type -subject.type=Subject Type -attribute.dataType=Attribute Data Type -policy.id=Policy Id -id=Id -type=Type -actions=Actions -entitlement.policy.id=Entitlement Policy Id -policy.version=Entitlement Policy Version -policy.version.created.time=Entitlement Policy Version Created Time -policy.version.created.user=Entitlement Policy Version Created User -policy.version.view=Policy View -policy.viewer=Policy Viewer -policy.reference=Policy Reference -policy.version.manage=Manage Policy Version -policy.action=Policy Action -policy.user=Performed By -target=Target -target.action=Target Action -no.result.found=No Result is found -policy.search=Policy Search -attribute.search=Attribute Search -identity.policy.search=Search -advance.search.message1=This search finds the resources that given subject can access -subject.id=Subject Id -user.role=User / Role Name -enter.attribute.search.pattern=Enter attribute search pattern -ent.clear.attribute.cache=Clear Attribute Cache -define.policy.policy.sets=Define Policies and Policy Sets -add.to.policy.set=Add to Policy Set -subject.name.is.required=User or Role name is required -select.attribute.values=Select Attribute Values -select.meta.data.finder=Select Meta Data Finder Module -tree.of.attribute.values=Tree Of Attribute Values -select=Select -order.not.null=Policy Order can not be empty -order.not.integer=Policy Order can be Integer -selected.attribute.values=Selected Attribute Values -select.attribute.dataType=Select Attribute DataType -select.attribute.id=Select Attribute Id -enable.child.search=Enable search through child resources -error.while.retrieving.attribute.values=Error retrieving attribute values -no.entitlement.data.defined=No entitlement data is found for this category -no.entitlement.data.finder.defined=No entitlement data finder module is defined for this category -attribute.finder.module=Entitlement Data module -select.attribute.data=Select Entitlement Data -attribute.values=Attribute Values -rule.target= Rule's conditions are evaluated Only when followings are matched.... -rule.condition=Define your conditions by using followings.... -rule.obligation=Define your obligations or advices for sending back to PEP... -error.while.creating.request=Error while creating XACML request. -identity.policy.publish=Policy Publish -policy.publisher=Policy Publisher -publish.policy=Publish Policy -select.policy.publisher=Select Policy Publisher -select.publish.data=Select Publish Data -add.new.policy=Add New Policy -add.new.policy.description=Add New Policy -add.new.policy.method=Policy creation methods -add.new.policy.simple=Simple Policy Editor -add.new.policy.simple.description=You can define simple access control rules using this editor. Then you can convert these rules in to XACML 3.0 policy. Categories are limited to Resource, Action, Subject and Environment. Attribute Id and Data Types are configurable. You can do it from -add.new.policy.basic=Basic Policy Editor -add.new.policy.basic.description= You can create a basic XACML 3.0 policy. Categories are limited to Resource, Action, Subject and Environment. This editor is configurable. You can do it from -add.new.policy.editor=Standard Policy Editor -add.new.policy.editor.description= You can create a normal XACML 3.0 policy. Here you can define custom categories, attributeIs and DataTypes. Also you can add Obligations and Advices in to your rules and policy. This editor is configurable. You can do it from -add.new.policy.set.editor=Policy Set Editor -add.new.policy.set.editor.description= You can create a XACML 3.0 policy sets. Here you can define Policy Set Target, Obligations, Advices and References to already defined policies or policy sets. This editor is configurable. You can do it from -add.new.policy.import=Import Existing Policy -add.new.policy.import.description= You can import existing XACML policy from file system or from carbon registry -add.new.policy.write=Write Policy in XML -add.new.policy.write.description= You can write XACML policy using XML editor -here=here -policy.status=Policy Status -select.publish.actions= Select policy publishing action -select.publish.version= Select policy version -select.publish.order= Select policy order -select.publish.enable.disable= Select policy Enable/Disable -select.publish.enable.disable.policies= Select Enable/Disable of Policies -select.subscriber= Select Subscriber -select.publish.version.current= Use current policy version -select.publish.version.older= Use older policy version -select.publish.order.default= Use default policy order -select.publish.enable=Publish As Enabled Policy -select.publish.disable=Publish As Disabled Policy -select.publish.enable.policies=Publish as Enabled Policies -select.publish.disable.policies=Publish as Disabled Policies -select.publish.order.custom= Define policy order -select.publish.actions.add= Add Policy -select.publish.actions.update= Update Policy -select.publish.actions.delete= Delete Policy -select.publish.actions.enable= Enable Policy -select.publish.actions.disable= Disable Policy -select.publish.actions.order= Order Policy -select.publish.actions.add.policies= Add Selected Policies -select.publish.actions.update.policies= Update Selected Policies -select.publish.actions.delete.policies= Delete Selected Policies -select.publish.actions.enable.policies= Enable Selected Policies -select.publish.actions.disable.policies= Disable Selected Policies -select.publish.actions.promote= Promote Policy -select.publish.version.no=As multiple policies are published. Latest version of the policies are used to publish. -subscriber.list=Policy Subscribers -subscriber.name= Subscriber Name -status=Status -details=Details -time.stamp=Time Stamp -status.success=Succeed -status.fail=Failed -back.to.subscribersList=<< Back to Subscriber List -back.to.policies=<< Back to Policy List -subscriber.id=Subscriber Id -subscriber.url=Subscriber Url -authentication=Authentication Scheme -subscriber.username=Subscriber User Name -subscriber.password=Subscriber Password -subscriber.clientKey=Key for subscriber -subscriber.clientSecret=Secret for subscriber -subscriber.accessToken=Access token for subscriber -no.policy.editor.data=Policy Editor data can not loaded. Please check with policy editor configurations -add.subscriber=Add Subscriber -show.subscriber=Subscriber Details -subscriber.configurations=Subscriber Configurations -subscriber.status=Subscriber Status -subscriber.id.is.required=Subscriber id is required -subscriber.url.is.required=Subscriber url is required -policy.editor.config.can.not.update=Policy editor config could not be updated. Error is : -policy.editor.config.update=Policy editor config is updated successfully -publish=Publish -publish.to.pdp=Publish To My PDP -publish.selected=Publish -publish.to.all=Publish To all -publish.all.policies=Publish All -select.module=Select Module -add.new.subscriber=Add Subscriber -pdp.configuration=PDP Configurations -policy.administration=Policy Administration -policy.editor.config=Policy Editor Configuration -policy.finder=Policy Finder Extensions -attribute.finer=Attribute Finder Extensions -resource.finder=Resource Finder Extensions -view.finder=Extension Details -back.to.pdp.config=<< Back to PDP Configurations -configure.authorization=Configure Authorization -unsafe.char.validation.msg=For security measures following characters are restricted < > ` \\\" diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-policy.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-policy.jsp deleted file mode 100644 index e73d741be8df..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-policy.jsp +++ /dev/null @@ -1,131 +0,0 @@ - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorEngine" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorException" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="org.owasp.encoder.Encode" %> -<% - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - String type = request.getParameter("type"); - if(request.getParameter("editorConfig") != null){ - try { - PolicyEditorEngine.getInstance().persistConfig(type, request.getParameter("editorConfig")); - String message = resourceBundle.getString("policy.editor.config.update"); - %> - - <% - } catch (PolicyEditorException e) { - String message = resourceBundle. - getString("policy.editor.config.can.not.update") + e.getMessage(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - %> - - - <% - } - } -%> - - -
-

-
- <%--

--%> - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - -
- -
- -
-
-
-
- \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-subscriber.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-subscriber.jsp deleted file mode 100644 index fc3105a8b6ac..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/add-subscriber.jsp +++ /dev/null @@ -1,340 +0,0 @@ - -<%@page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> -<%@ page import="org.wso2.carbon.CarbonConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PublisherDataHolder" %> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PublisherPropertyDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.PropertyDTOComparator" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="org.owasp.encoder.Encode" %> - -<% - String subscriberId; - PublisherDataHolder subscriber = null; - PublisherDataHolder[] dataHolders; - PublisherPropertyDTO[] propertyDTOs = null; - String selectedModule = null; - String forwardTo = null; - boolean view = false; - String paginationValue = "" ; - - EntitlementPolicyAdminServiceClient client = null; - - - int numberOfPages = 0; - String isPaginatedString = request.getParameter("isPaginated"); - if (isPaginatedString != null && isPaginatedString.equals("true")) { - client = (EntitlementPolicyAdminServiceClient) session.getAttribute(EntitlementPolicyConstants.ENTITLEMENT_SUBSCRIBER_CLIENT); - } - - - - String pageNumber = request.getParameter("pageNumber"); - if (pageNumber == null) { - pageNumber = "0"; - } - int pageNumberInt = 0; - try { - pageNumberInt = Integer.parseInt(pageNumber); - } catch (NumberFormatException ignored) { - } - - - selectedModule = request.getParameter("selectedModule"); - String viewString = request.getParameter("view"); - subscriberId = request.getParameter("subscriberId"); - dataHolders = (PublisherDataHolder[]) session. - getAttribute(EntitlementPolicyConstants.ENTITLEMENT_PUBLISHER_MODULE); - - if((viewString != null)){ - view = Boolean.parseBoolean(viewString); - } - - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - try { - - if (client == null) { - - client = new EntitlementPolicyAdminServiceClient(cookie, - serverURL, configContext); - session.setAttribute(EntitlementPolicyConstants.ENTITLEMENT_SUBSCRIBER_CLIENT, client); - } - - if(subscriberId != null){ - subscriber = client.getSubscriber(subscriberId); - if(subscriber != null){ - propertyDTOs = subscriber.getPropertyDTOs(); - selectedModule = subscriber.getModuleName(); - dataHolders = new PublisherDataHolder[]{subscriber}; - } - } else { - if(dataHolders == null){ - dataHolders = client.getPublisherModuleData(); - } - if(dataHolders != null){ - session.setAttribute(EntitlementPolicyConstants.ENTITLEMENT_PUBLISHER_MODULE, dataHolders); - if(selectedModule != null){ - for(PublisherDataHolder holder : dataHolders){ - if(selectedModule.equals(holder.getModuleName())){ - propertyDTOs = holder.getPropertyDTOs(); - break; - } - } - } - } - } - if(propertyDTOs != null){ - session.setAttribute(EntitlementPolicyConstants.ENTITLEMENT_PUBLISHER_PROPERTY, propertyDTOs); - java.util.Arrays.sort(propertyDTOs , new PropertyDTOComparator()); - } - - paginationValue = "isPaginated=true&view="+viewString+"&subscriberId="+subscriberId; - } catch (Exception e) { - String message = resourceBundle.getString("error.while.performing.advance.search"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "../admin/error.jsp"; -%> - - - -<% - } -%> - - - - - - - - - - - - - - - -
- <% - if(view){ - %> -

- <% - } else { - %> -

- <% - } - %> -
- <% - if(view){ - %> -
- -
- <% - } - %> -
- <% - if(view){ - %> -
- - <% - if(propertyDTOs != null){ - for(PublisherPropertyDTO dto : propertyDTOs){ - if(dto.getSecret()){ - continue; - } - if(dto.getDisplayName() != null && dto.getValue() != null){ - %> - - - - - <% - } - } - } - %> -
<%=Encode.forHtmlContent(dto.getDisplayName())%><%=Encode.forHtmlContent(dto.getValue())%>
-
- -
-
-
- <% - } else { - %> - - - - - - - <% - if(propertyDTOs != null){ - for (PublisherPropertyDTO dto : propertyDTOs) { - if(dto.getDisplayName() == null){ - continue; - } - String inputType = "text"; - if (dto.getSecret()) { - inputType = "password"; - } - %> - - - - - <% - } - } - %> - - - -
* - -
<%=Encode.forHtmlContent(dto.getDisplayName())%> - <% - if(dto.getRequired()){ - %> - * - <% - } - %> - - <% if(dto.getValue() != null) {%> - readonly='readonly' <% } %> /> - <% - } else { - %> - autocomplete="off" <% } %>/> - <% - } - %> -
- value="" onclick="doUpdate();" <%} else { %> - value="" onclick="doAdd();" <% } %> /> - -
- <% - } - %> -
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/advance-search.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/advance-search.jsp deleted file mode 100644 index a1ef9ab30c2e..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/advance-search.jsp +++ /dev/null @@ -1,358 +0,0 @@ - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.EntitledAttributesDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.EntitledResultSetDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementServiceClient" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.HashSet" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="java.util.Set" %> -<%@ page import="org.owasp.encoder.Encode" %> -<% - String subjectType = ""; - String action = ""; - String subjectName = ""; - String subjectId = ""; - String resourceName = ""; - String enableChildSearchParameter; - boolean enableChildSearch; - String[] subjectTypes = new String[]{"Role","User"}; - EntitledResultSetDTO results = null; - EntitledAttributesDTO[] entitledAttributes = null; - String forwardTo; - - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - subjectType = (String)request.getParameter("subjectType"); - if("Role".equals(subjectType)) { - subjectId = EntitlementPolicyConstants.SUBJECT_ID_ROLE; - } else { - subjectType = "User"; - subjectId = EntitlementPolicyConstants.SUBJECT_ID_DEFAULT; - } - - String userSelectedSubjectId = (String)request.getParameter("subjectId"); - if(userSelectedSubjectId != null && !"".equals(userSelectedSubjectId)){ - subjectId = userSelectedSubjectId; - } - subjectName = (String)request.getParameter("subjectName"); - resourceName = (String) request.getParameter("resourceName"); - action = (String)request.getParameter("action"); - enableChildSearchParameter = (String)request.getParameter("enableChildSearch"); - if("true".equals(enableChildSearchParameter)){ - enableChildSearch = true; - } else { - enableChildSearch =false; - } - - try { - if (subjectName != null) { - EntitlementServiceClient client = new EntitlementServiceClient(cookie, - serverURL, configContext); - results = client.getEntitledAttributes(subjectName, resourceName, subjectId, action, - enableChildSearch); - - if(EntitlementPolicyConstants.SEARCH_ERROR.equals(results.getMessageType())){ -%> - - - -<% - } else { - entitledAttributes = results.getEntitledAttributesDTOs(); - } - } - } catch (Exception e) { - String message = resourceBundle.getString("error.while.performing.advance.search"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "../admin/error.jsp"; -%> - - - -<% - } -%> - - - - - - - - - - - - - -
-

- <% - if (CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/identity/entitlement/pdp")) { - %> -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - -
* - <% - if (subjectName != null && !subjectName.equals("")) { - %> - - <% - } else { - %> - - <% - } - %> -
* - -
- <% - if (action != null && !action.equals("")) { - %> - - <% - } else { - %> - - <% - } - %> -
- <% - if (resourceName != null && !resourceName.equals("")) { - %> - - <% - } else { - %> - - <% - } - %> -
- checked="checked" <%}%> type="checkbox" name="enableChildSearch" value="true" /> -
- -
-
- - - - - <% - if(action == null || action.trim().length() < 1){ - %> - - - <% - } else { - %> - - <% - } - %> - - - - - <% - if(entitledAttributes != null && entitledAttributes.length > 0) { - Set resourceSet = new HashSet (); - for(EntitledAttributesDTO result : entitledAttributes){ - if(result.getAllResources()){ - resourceSet.add("ANY"); - } else { - resourceSet.add(result.getResourceName()); - } - } - for(String resource : resourceSet){ - %> - - - <% - - if(action == null || action.trim().length() < 1){ - Set actionSet = new HashSet(); - String actionNames = ""; - for(EntitledAttributesDTO result : entitledAttributes){ - if(result.getAllResources()){ - if(result.getAllActions()){ - actionSet.add("ANY"); - } else { - actionSet.add(result.getAction()); - } - } else if(resource.equals(result.getResourceName())){ - if(result.getAllActions()){ - actionSet.add("ANY"); - } else { - actionSet.add(result.getAction()); - } - } - } - - for(String actionName : actionSet){ - if("".equals(actionNames)){ - actionNames = actionName; - } else { - actionNames = actionNames + " , " + actionName; - } - } - %> - - <% - } - %> - - <% - } - } else { - %> - - - - - <% - } - %> - -
<%=Encode.forHtmlContent(resource)%><%=Encode.forHtmlContent(actionNames)%>
No Result is found
-
- <% - } - %> -
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/attribute-search.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/attribute-search.jsp deleted file mode 100644 index ca423a8834b4..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/attribute-search.jsp +++ /dev/null @@ -1,267 +0,0 @@ - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.AttributeDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@page import="org.wso2.carbon.utils.ServerConstants"%> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="org.owasp.encoder.Encode" %> - -<% - String policyId = ""; - String attributeType = ""; - String attributeId = ""; - String attributeDataType = ""; - String [] results = null; - String[] policyIds = null; - String[] attributeTypes = new String[] {EntitlementPolicyConstants.RESOURCE_ELEMENT, - EntitlementPolicyConstants.SUBJECT_ELEMENT, - EntitlementPolicyConstants.ACTION_ELEMENT, - EntitlementPolicyConstants.ENVIRONMENT_ELEMENT}; - String forwardTo; - - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - policyId = (String)request.getParameter("policyId"); - attributeType = (String)request.getParameter("attributeType"); - attributeId = (String)request.getParameter("attributeId"); - attributeDataType = (String)request.getParameter("attributeDataType"); - - List attributeValueDTOs = new ArrayList(); - - if(policyId != null && !"".equals(policyId)){ - AttributeDTO attributeValueDTO = new AttributeDTO(); - attributeValueDTO.setPolicyId(policyId); - if(!EntitlementPolicyConstants.COMBO_BOX_ANY_VALUE.equals(attributeType)){ - attributeValueDTO.setAttributeType(attributeType); - } - attributeValueDTO.setAttributeDataType(attributeDataType); - attributeValueDTO.setAttributeId(attributeId); - attributeValueDTOs.add(attributeValueDTO); - } - - try { - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, - serverURL, configContext); - policyIds = client.getAllPolicyIds(); - if(attributeValueDTOs.size() > 0){ - results = client.getAdvanceSearchResult(attributeValueDTOs.toArray(new AttributeDTO[attributeValueDTOs.size()])); - } - - } catch (Exception e) { - String message = resourceBundle.getString("error.while.loading.policy.resource"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "../admin/error.jsp"; -%> - - - -<% - } -%> - - - - - - - - - - - - - -
-

-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- <% - if (attributeId != null && !attributeId.equals("")) { - %> - - <% - } else { - %> - - <% - } - %> -
- <% - if (attributeDataType != null && !attributeDataType.equals("")) { - %> - - <% - } else { - %> - - <% - } - %> -
- -
-
-

- - - - - - - - - - <% - if(results != null && results.length > 0) { - for(String result : results){ - %> - - <% - String[] resultData = result.split(","); - for(String data : resultData){ - %> - - <% - } - %> - - <% - } - } else { - %> - - - - <% - } - %> - -
<%=data%>
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-add.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-add.jsp deleted file mode 100644 index 9cbc424e0907..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-add.jsp +++ /dev/null @@ -1,117 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.PolicyEditorConstants"%> - -<%@page - import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient"%> -<%@page import="org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorElementDTO"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> -<% - String serverURL = CarbonUIUtil.getServerURL(config - .getServletContext(), session); - ConfigurationContext configContext = (ConfigurationContext) config - .getServletContext().getAttribute( - CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session - .getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String action = request.getParameter("rule"); - String policyid = request.getParameter("policyid"); - String type = request.getParameter("type"); - String value = request.getParameter("value"); - PolicyDTO dto = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - if ((request.getParameter("policyid") != null)) { - - try { - EntitlementPolicyAdminServiceClient client = - new EntitlementPolicyAdminServiceClient(cookie, serverURL, configContext); - int i = 0; - dto = client.getPolicy(policyid, false); - String[] data = dto.getBasicPolicyEditorMetaData(); - - if(data != null){ - i = (data.length -11)/11; - } - List elementDTOs = new ArrayList(); - SimplePolicyEditorElementDTO elementDTO = new SimplePolicyEditorElementDTO(); - if("permit".equals(action)){ - elementDTO.setOperationType(PolicyEditorConstants.PreFunctions.CAN_DO); - } - elementDTO.setResourceValue(PolicyEditorConstants.ANY); - elementDTO.setActionValue(PolicyEditorConstants.ANY); - elementDTO.setEnvironmentValue(PolicyEditorConstants.ANY); - elementDTO.setUserAttributeValue(value); - if("role".equals(type)){ - elementDTO.setUserAttributeId(PolicyEditorConstants.SUBJECT_ID_ROLE); - } - elementDTOs.add(elementDTO); - EntitlementPolicyCreator creator = new EntitlementPolicyCreator(); - String policy = creator.addNewRules(dto.getPolicy(),elementDTOs); - if(PolicyEditorConstants.SOA_POLICY_EDITOR.equals(dto.getPolicyEditor())){ - List metaDataList = new ArrayList(); - metaDataList.add("resourceValue" + i + "|" + "*"); - metaDataList.add("actionValue" + i + "|" + "*"); - metaDataList.add("userAttributeValue" + i + "|" + value); - if("role".equals(type)){ - metaDataList.add("userAttributeValue" + i + "|" + value); - } - metaDataList.add("environmentValue" + i + "|" + "*"); - metaDataList.add("operationValue" + i + "|" + PolicyEditorConstants.PreFunctions.CAN_DO); - metaDataList.add("update"); - dto.setBasicPolicyEditorMetaData(metaDataList.toArray(new String[metaDataList.size()])); - } - - if(policy != null){ - dto.setPolicy(policy); - client.updatePolicy(dto); - } - //session.setAttribute("entitlementpolicy", dto.getPolicy()); - forwardTo = "index.jsp?region=region1&item=policy_menu"; - } catch (Exception e) { - String message = resourceBundle.getString("invalid.policy.not.updated"); - //session.setAttribute("entitlementpolicy", dto.getPolicy()); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?region=region1&item=policy_menu"; - } - } else { - forwardTo = "index.jsp?region=region1&item=policy_menu"; - } -%> - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-index.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-index.jsp deleted file mode 100644 index a80ff345658b..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/authorization-index.jsp +++ /dev/null @@ -1,281 +0,0 @@ - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" prefix="carbon" %> -<%@ page import="org.apache.axis2.context.ConfigurationContext" %> -<%@ page import="org.wso2.carbon.CarbonConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PaginatedPolicySetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil"%> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="org.owasp.encoder.Encode" %> - - - -<% - entitlementPolicyBean.cleanEntitlementPolicyBean(); - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - PaginatedPolicySetDTO paginatedPolicySetDTO = null; - PolicyDTO[] policies = null; - String[] policyTypes = new String[] {"Policy", "PolicySet", "Active" , "Promoted"}; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - String type = "role"; - String userName = request.getParameter("userName"); - String value = request.getParameter("roleName"); - if(userName != null && userName.trim().length() > 0 ) { - type = "user"; - value = userName; - } - - int numberOfPages = 0; - String pageNumber = request.getParameter("pageNumber"); - if (pageNumber == null) { - pageNumber = "0"; - } - int pageNumberInt = 0; - try { - pageNumberInt = Integer.parseInt(pageNumber); - } catch (NumberFormatException ignored) { - } - - String policyTypeFilter = request.getParameter("policyTypeFilter"); - if (policyTypeFilter == null || "".equals(policyTypeFilter)) { - policyTypeFilter = "ALL"; - } - String policySearchString = request.getParameter("policySearchString"); - if (policySearchString == null) { - policySearchString = ""; - } else { - policySearchString = policySearchString.trim(); - } - - String paginationValue = "policyTypeFilter=" + policyTypeFilter + - "&policySearchString=" + policySearchString; - - try { - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, serverURL, configContext); - paginatedPolicySetDTO = client.getAllPolicies(policyTypeFilter, policySearchString, pageNumberInt, false); - policies = paginatedPolicySetDTO.getPolicySet(); - numberOfPages = paginatedPolicySetDTO.getNumberOfPages(); - - } catch (Exception e) { - String message = resourceBundle.getString("error.while.loading.policy"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request, e); - forwardTo = "../admin/error.jsp"; -%> - - - - -<% - } -%> - - - - - - - - - -
-

-
- - - - - -
-
- -
-
- - -
- - - - -
- - - - - - - - "> - - -
- - - -     - - "/>  - - - "> -
-
-
- - -
- - - - - - - - <% - if (policies != null) { - for (int i = 0; i < policies.length; i++) { - if(policies[i] != null){ - if(!"Policy".equals(policies[i].getPolicyType())){ - continue; - } - - boolean edit = policies[i].getPolicyEditable(); - boolean delete = policies[i].getPolicyCanDelete(); - %> - - - - - - - - - - <%} } - } else { %> - - - - <%}%> - -
- , - <%=numberOfPages%>)" style="background-image:url(../admin/images/up-arrow.gif)"> - , - <%=numberOfPages%>)" style="background-image:url(../admin/images/down-arrow.gif)"> - - - disabled="disabled"<% } %>/> - - href="policy-view.jsp?policyid=<%=Encode.forUriComponent(policies[i].getPolicyId())%>" <% } %>> - <%=Encode.forHtmlContent(policies[i].getPolicyId())%> - - -
-
- -
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-editor.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-editor.jsp deleted file mode 100644 index 549e073651e8..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-editor.jsp +++ /dev/null @@ -1,1467 +0,0 @@ - -<%@ page import="org.owasp.encoder.Encode" %> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicRuleDTO" %> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicTargetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorEngine" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.PolicyEditorConstants" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.Set" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" prefix="carbon" %> - - - -<% - BasicRuleDTO basicRuleDTO = null; - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.BASIC); - Set functionIds = holder.getRuleFunctions(); - Set preFunctionIds = holder.getPreFunctionMap().keySet(); - Set targetFunctionIds = holder.getTargetFunctions(); - Set ruleEffects = holder.getRuleEffectMap().keySet(); - Set subjectIds = holder.getCategoryAttributeIdMap().get(PolicyEditorConstants.SOA_CATEGORY_SUBJECT); - Set environmentIds = holder.getCategoryAttributeIdMap().get(PolicyEditorConstants.SOA_CATEGORY_ENVIRONMENT); - Set algorithmNames = holder.getRuleCombiningAlgorithms().keySet(); - Set availableCategories = holder.getCategoryMap().keySet(); - - List basicRuleDTOs = entitlementPolicyBean.getBasicRuleDTOs(); - BasicTargetDTO basicTargetDTO = entitlementPolicyBean.getBasicTargetDTO(); - - String selectedAttributeDataType = request.getParameter("selectedAttributeDataType"); - String selectedAttributeId = request.getParameter("selectedAttributeId"); - String category = request.getParameter("category"); - - String ruleId = Encode.forHtml(request.getParameter("ruleId")); - if(ruleId != null && ruleId.trim().length() > 0 && !ruleId.trim().equals("null") ) { - basicRuleDTO = entitlementPolicyBean.getBasicRuleElement(ruleId); - } - - // Why null TODO - if("null".equals(selectedAttributeId)){ - selectedAttributeId = null; - } - - if("null".equals(selectedAttributeDataType)){ - selectedAttributeDataType = null; - } - - String selectedAttributeNames = ""; - - String selectedSubjectNames = ""; - String selectedResourceNames = ""; - String selectedActionNames = ""; - String selectedEnvironmentNames = ""; - String selectedResourceId=""; - String selectedResourceDataType=""; - String selectedSubjectId=""; - String selectedSubjectDataType=""; - String selectedActionId=""; - String selectedActionDataType=""; - String selectedEnvironmentId=""; - String selectedEnvironmentDataType=""; - - String resourceNames = ""; - String environmentNames = ""; - String subjectNames = ""; - String actionNames = ""; - String functionOnResources = ""; - String functionOnSubjects = ""; - String functionOnActions = ""; - String functionOnEnvironment = ""; - String preFunctionOnResources = ""; - String preFunctionOnSubjects = ""; - String preFunctionOnActions = ""; - String preFunctionOnEnvironment = ""; - String resourceDataType = ""; - String subjectDataType = ""; - String actionDataType = ""; - String environmentDataType = ""; - String resourceId= ""; - String subjectId = ""; - String actionId = ""; - String environmentId = ""; - String ruleDescription = ""; - String ruleEffect = ""; - - String resourceNamesTarget = ""; - String environmentNamesTarget = ""; - String subjectNamesTarget = ""; - String actionNamesTarget = ""; - - String functionOnResourcesTarget = ""; - String functionOnSubjectsTarget = ""; - String functionOnActionsTarget = ""; - String functionOnEnvironmentTarget = ""; - - String preFunctionOnSubjectsTarget = ""; - String preFunctionOnActionsTarget = ""; - String preFunctionOnEnvironmentTarget = ""; - String preFunctionOnResourcesTarget = ""; - - String resourceDataTypeTarget = ""; - String subjectDataTypeTarget = ""; - String actionDataTypeTarget = ""; - String environmentDataTypeTarget = ""; - - String resourceIdTarget = ""; - String subjectIdTarget = ""; - String actionIdTarget = ""; - String environmentIdTarget = ""; - - int noOfSelectedAttributes = 1; - /** - * Get posted resources from jsp pages and put then in to a String object - */ - while(true) { - String attributeName = request.getParameter("attributeValue" + noOfSelectedAttributes); - if (attributeName == null || attributeName.trim().length() < 1) { - break; - } - if(selectedAttributeNames.equals("")) { - selectedAttributeNames = attributeName.trim(); - } else { - selectedAttributeNames = selectedAttributeNames + "," + attributeName.trim(); - } - noOfSelectedAttributes ++; - } - - - if(category != null){ - if (EntitlementPolicyConstants.RESOURCE_ELEMENT.equals(category)){ - selectedResourceNames = selectedAttributeNames; - selectedResourceId = selectedAttributeId; - selectedResourceDataType = selectedAttributeDataType; - } else if (EntitlementPolicyConstants.SUBJECT_ELEMENT.equals(category)){ - selectedSubjectNames = selectedAttributeNames; - selectedSubjectId = selectedAttributeId; - selectedSubjectDataType = selectedAttributeDataType; - } else if (EntitlementPolicyConstants.ACTION_ELEMENT.equals(category)){ - selectedActionNames = selectedAttributeNames; - selectedActionId = selectedAttributeId; - selectedActionDataType = selectedAttributeDataType; - } else if (EntitlementPolicyConstants.ENVIRONMENT_ELEMENT.equals(category)){ - selectedEnvironmentNames = selectedAttributeNames; - selectedEnvironmentId = selectedAttributeId; - selectedEnvironmentDataType = selectedAttributeDataType; - } - } - /** - * Assign current BasicRule Object Values to variables to show on UI - */ - if(basicRuleDTO != null){ - - ruleEffect = basicRuleDTO.getRuleEffect(); - ruleId = basicRuleDTO.getRuleId(); - ruleDescription = basicRuleDTO.getRuleDescription(); - - resourceNames = basicRuleDTO.getResourceList(); - subjectNames = basicRuleDTO.getSubjectList(); - actionNames = basicRuleDTO.getActionList(); - environmentNames = basicRuleDTO.getEnvironmentList(); - - functionOnActions = basicRuleDTO.getFunctionOnActions(); - functionOnResources = basicRuleDTO.getFunctionOnResources(); - functionOnSubjects = basicRuleDTO.getFunctionOnSubjects(); - functionOnEnvironment = basicRuleDTO.getFunctionOnEnvironment(); - - preFunctionOnActions = basicRuleDTO.getPreFunctionOnActions(); - preFunctionOnResources = basicRuleDTO.getPreFunctionOnResources(); - preFunctionOnSubjects = basicRuleDTO.getPreFunctionOnSubjects(); - preFunctionOnEnvironment = basicRuleDTO.getPreFunctionOnEnvironment(); - - if(selectedResourceDataType != null && selectedResourceDataType.trim().length() > 0){ - resourceDataType = selectedResourceDataType; - } else { - resourceDataType = basicRuleDTO.getResourceDataType(); - } - - if(selectedSubjectDataType != null && selectedSubjectDataType.trim().length() > 0){ - subjectDataType = selectedSubjectDataType; - } else { - subjectDataType = basicRuleDTO.getSubjectDataType(); - } - - if(selectedActionDataType != null && selectedActionDataType.trim().length() > 0){ - actionDataType = selectedActionDataType; - } else { - actionDataType = basicRuleDTO.getActionDataType(); - } - - if(selectedEnvironmentDataType != null && selectedEnvironmentDataType.trim().length() > 0){ - environmentDataType = selectedEnvironmentDataType; - } else { - environmentDataType = basicRuleDTO.getEnvironmentDataType(); - } - - if(selectedResourceId != null && selectedResourceId.trim().length() > 0){ - resourceId = selectedResourceId; - } else { - resourceId = basicRuleDTO.getResourceId(); - } - - if(selectedSubjectId != null && selectedSubjectId.trim().length() > 0){ - subjectId = selectedSubjectId; - } else { - subjectId = basicRuleDTO.getSubjectId(); - } - - if(selectedActionId != null && selectedActionId.trim().length() > 0){ - actionId = selectedActionId; - } else { - actionId = basicRuleDTO.getActionId(); - } - - if(selectedEnvironmentId != null && selectedEnvironmentId.trim().length() > 0){ - environmentId = selectedEnvironmentId; - } else { - environmentId = basicRuleDTO.getEnvironmentId(); - } - - if(selectedResourceNames != null && selectedResourceNames.trim().length() > 0){ - if(resourceNames != null && resourceNames.trim().length() > 0){ - resourceNames = resourceNames + "," + selectedResourceNames; - } else { - resourceNames = selectedResourceNames; - } - } - - if(selectedSubjectNames != null && selectedSubjectNames.trim().length() > 0){ - if(subjectNames != null && subjectNames.trim().length() > 0){ - subjectNames = subjectNames + "," + selectedSubjectNames; - } else { - subjectNames = selectedSubjectNames; - } - } - - if(selectedActionNames != null && selectedActionNames.trim().length() > 0){ - if(actionNames != null && actionNames.trim().length() > 0){ - actionNames = actionNames + "," + selectedActionNames; - } else { - actionNames = selectedActionNames; - } - } - - if(selectedEnvironmentNames != null && selectedEnvironmentNames.trim().length() > 0){ - if(environmentNames != null && environmentNames.trim().length() > 0){ - environmentNames = environmentNames + "," + selectedEnvironmentNames; - } else { - environmentNames = selectedEnvironmentNames; - } - } - - } - - /** - * Assign current BasicTarget Object Values to variables to show on UI. - */ - if(basicTargetDTO != null){ - - resourceNamesTarget = basicTargetDTO.getResourceList(); - subjectNamesTarget = basicTargetDTO.getSubjectList(); - actionNamesTarget = basicTargetDTO.getActionList(); - environmentNamesTarget = basicTargetDTO.getEnvironmentList(); - - functionOnActionsTarget = basicTargetDTO.getFunctionOnActions(); - functionOnResourcesTarget = basicTargetDTO.getFunctionOnResources(); - functionOnSubjectsTarget = basicTargetDTO.getFunctionOnSubjects(); - functionOnEnvironmentTarget = basicTargetDTO.getFunctionOnEnvironment(); - - resourceDataTypeTarget = basicTargetDTO.getResourceDataType(); - subjectDataTypeTarget = basicTargetDTO.getSubjectDataType(); - actionDataTypeTarget = basicTargetDTO.getActionDataType(); - environmentDataTypeTarget = basicTargetDTO.getEnvironmentDataType(); - - resourceIdTarget = basicTargetDTO.getResourceId(); - subjectIdTarget = basicTargetDTO.getSubjectId(); - actionIdTarget = basicTargetDTO.getActionId(); - environmentIdTarget = basicTargetDTO.getEnvironmentId(); - - if(basicRuleDTO == null) { - if(selectedResourceNames != null && selectedResourceNames.trim().length() > 0){ - if(resourceNamesTarget != null && resourceNamesTarget.trim().length() > 0){ - resourceNamesTarget = resourceNamesTarget + "," + selectedResourceNames; - } else { - resourceNamesTarget = selectedResourceNames; - } - } - - if(selectedSubjectNames != null && selectedSubjectNames.trim().length() > 0){ - if(subjectNamesTarget != null && subjectNamesTarget.trim().length() > 0){ - subjectNamesTarget = subjectNamesTarget + "," + selectedSubjectNames; - } else { - subjectNamesTarget = selectedSubjectNames; - } - } - - if(selectedActionNames != null && selectedActionNames.trim().length() > 0){ - if(actionNamesTarget != null && actionNamesTarget.trim().length() > 0){ - actionNamesTarget = actionNamesTarget + "," + selectedActionNames; - } else { - actionNamesTarget = selectedActionNames; - } - } - - if(selectedEnvironmentNames != null && selectedEnvironmentNames.trim().length() > 0){ - if(environmentNamesTarget != null && environmentNamesTarget.trim().length() > 0){ - environmentNamesTarget = environmentNamesTarget + "," + selectedEnvironmentNames; - } else { - environmentNamesTarget = selectedEnvironmentNames; - } - } - - if(selectedResourceDataType != null && selectedResourceDataType.trim().length() > 0){ - resourceDataTypeTarget = selectedResourceDataType; - } - - if(selectedSubjectDataType != null && selectedSubjectDataType.trim().length() > 0){ - subjectDataTypeTarget = selectedSubjectDataType; - } - - if(selectedActionDataType != null && selectedActionDataType.trim().length() > 0){ - actionDataTypeTarget = selectedActionDataType; - } - - if(selectedEnvironmentDataType != null && selectedEnvironmentDataType.trim().length() > 0){ - environmentDataTypeTarget = selectedEnvironmentDataType; - } - - if(selectedResourceId != null && selectedResourceId.trim().length() > 0){ - resourceIdTarget = selectedResourceId; - } - - if(selectedSubjectId != null && selectedSubjectId.trim().length() > 0){ - subjectIdTarget = selectedSubjectId; - } - - if(selectedActionId != null && selectedActionId.trim().length() > 0){ - actionIdTarget = selectedActionId; - } - - if(selectedEnvironmentId != null && selectedEnvironmentId.trim().length() > 0){ - environmentIdTarget = selectedEnvironmentId; - } - } - } - -%> - - - - -<% if(entitlementPolicyBean.isEditPolicy()){%> - -<% } else { %> - -<%}%> - - - - - - - - - - - - - -
-<%if(entitlementPolicyBean.isEditPolicy()){%> -

-<%} else {%>

<%}%> -
-
- - - - - <% - if(entitlementPolicyBean.getPolicyName() != null) { - %> - - <% - } else { - %> - - <% - } - %> - - - <% - if(holder.isShowRuleAlgorithms() && algorithmNames != null){ - %> - - - - - <% - } - %> - <% - if(holder.isShowPolicyDescription()){ - %> - - - <% - if(entitlementPolicyBean.getPolicyDescription() != null) { - %> - - <% - } else { - %> - - <% - } - %> - - <% - } - %> - - - - - - - - - - - - - - - - -
*
- -
-

-
- - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - - <% - if (resourceNamesTarget != null && resourceNamesTarget.trim().length() > 0) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - -
-
- - - - - - - -
- - - - - <% - if (subjectNamesTarget != null && subjectNamesTarget.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - -
-
- - - - - - - - -
- - - <% - if (actionNamesTarget != null && actionNamesTarget.trim().length() > 0) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - -
-
- - - - - - - -
- - - - - <% - if (environmentNamesTarget != null && environmentNamesTarget.trim().length() > 0) { - - %> - - <% - } else { - %> - - - <% - } - %> - - -
-
-
-
-

-
- - - - - - - - - - -
- - <% - if(holder.isShowRuleId()){ - %> - - - - - <% - } - %> - - <% - if(holder.isShowRuleEffect()){ - %> - - - - - <% - } - %> - - <% - if(holder.isShowRuleDescription()){ - %> - - - <% - if(ruleDescription != null) { - %> - - <% - } else { - %> - - <% - } - %> - - <% - } - %> - - - - - - - - - - - - - - - - - - - - - -
* - - <% - if (ruleId != null && ruleId.trim().length() > 0 && !ruleId.trim().equals("null")) { - %> - - <% - } else { - %> - - <% - } - %> -
- -
- - - - - - - - - - -
- - - - - <% - if (resourceNames != null && !resourceNames.equals("")) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - - - -
-
- - - - - - - - - - -
- - - - - - - <% - if (subjectNames != null && !subjectNames.equals("")) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - -
-
- - - - - - - - - - - -
- - - - - <% - if (actionNames != null && !actionNames.equals("")) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - - - -
-
- - - - - - - - - - -
- - - - - - - <% - if (environmentNames != null && !environmentNames.equals("")) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - -
-
-
- <% - if (basicRuleDTO != null && basicRuleDTO.isCompletedRule()) { - %> - - - - - <% - } else { - %> - - - <% - } - %> -
-
-
- - - - - - - - - <% - if (basicRuleDTOs != null && basicRuleDTOs.size() > 0) { - List orderedBasicRuleDTOs = new ArrayList(); - String ruleElementOrder = entitlementPolicyBean.getRuleElementOrder(); - if(ruleElementOrder != null){ - String[] orderedRuleIds = ruleElementOrder.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for(String orderedRuleId : orderedRuleIds){ - for(BasicRuleDTO orderedBasicRuleElementDTO : basicRuleDTOs) { - if(orderedRuleId.trim().equals(orderedBasicRuleElementDTO.getRuleId())){ - orderedBasicRuleDTOs.add(orderedBasicRuleElementDTO); - } - } - } - } - - if(orderedBasicRuleDTOs.size() < 1){ - orderedBasicRuleDTOs = basicRuleDTOs; - } - for (BasicRuleDTO ruleElementDTO : orderedBasicRuleDTOs) { - if(ruleElementDTO.isCompletedRule()){ - %> - - - - - - - <% - } - } - } else { - %> - - - - <% - } - %> -
- - - - <%=Encode.forHtml(ruleElementDTO.getRuleId())%> - <%=ruleElementDTO.getRuleEffect()%> - - -

-
- " class="button"/> - " class="button"/> -
-
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-finish.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-finish.jsp deleted file mode 100644 index 5d2e9c957c75..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-finish.jsp +++ /dev/null @@ -1,139 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicPolicyDTO"%> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicRuleDTO"%> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicTargetDTO"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorException"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.util.PolicyEditorUtil" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> - - -<% - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - String policy = ""; - PolicyDTO policyDTO = null; - BasicPolicyDTO basicPolicyDTO = new BasicPolicyDTO(); - EntitlementPolicyCreator policyCreator = new EntitlementPolicyCreator(); - - String ruleElementOrder = request.getParameter("ruleElementOrder"); - if(ruleElementOrder != null && ruleElementOrder.trim().length() > 0){ - entitlementPolicyBean.setRuleElementOrder(ruleElementOrder.trim()); - } else { - ruleElementOrder = entitlementPolicyBean.getRuleElementOrder(); - } - - List basicRuleDTOs = entitlementPolicyBean.getBasicRuleDTOs(); - BasicTargetDTO basicTargetDTO = entitlementPolicyBean.getBasicTargetDTO(); - - String policyName = entitlementPolicyBean.getPolicyName(); - String algorithmName = entitlementPolicyBean.getAlgorithmName(); - String policyDescription = entitlementPolicyBean.getPolicyDescription(); - - String[] policyEditorData = null; - - try { - - if(policyName != null && policyName.trim().length() > 0) { - - basicPolicyDTO.setPolicyId(policyName); - basicPolicyDTO.setRuleAlgorithm(algorithmName); - basicPolicyDTO.setDescription(policyDescription); - basicPolicyDTO.setBasicRuleDTOs(basicRuleDTOs); - basicPolicyDTO.setTargetDTO(basicTargetDTO); - - if(basicRuleDTOs != null && basicTargetDTO != null){ - policyEditorData = PolicyEditorUtil.generateBasicPolicyEditorData(basicPolicyDTO, ruleElementOrder); - policy = policyCreator.createBasicPolicy(basicPolicyDTO); - } - - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, - serverURL, configContext); - - String message = null; - if(entitlementPolicyBean.isEditPolicy()){ - try{ - policyDTO = client.getPolicy(policyName, false); - } catch (Exception e){ - //ignore - } - - if(policyDTO == null){ - policyDTO = new PolicyDTO(); - } - - policyDTO.setPolicy(policy); - policyDTO.setPolicyEditor(EntitlementConstants.PolicyEditor.BASIC); - if(policyEditorData != null){ - policyDTO.setPolicyEditorData(policyEditorData); - } - client.updatePolicy(policyDTO); - message = resourceBundle.getString("updated.successfully"); - } else { - policyDTO = new PolicyDTO(); - policyDTO.setPolicyId(policyName); - policyDTO.setPolicy(policy); - policyDTO.setPolicyEditor(EntitlementConstants.PolicyEditor.BASIC); - if(policyEditorData != null){ - policyDTO.setPolicyEditorData(policyEditorData); - } - client.addPolicy(policyDTO); - message = resourceBundle.getString("ent.policy.added.successfully"); - } - entitlementPolicyBean.cleanEntitlementPolicyBean(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - forwardTo = "index.jsp?"; - } - } catch (PolicyEditorException e) { - String message = resourceBundle.getString("error.while.creating.policy"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?"; - } catch (Exception e) { - String message = resourceBundle.getString("error.while.adding.policy") + " " + e.getMessage(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?"; - } -%> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-update.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-update.jsp deleted file mode 100644 index 24cd530548ad..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/basic-policy-update.jsp +++ /dev/null @@ -1,314 +0,0 @@ - -<%@ page import="org.wso2.balana.utils.policy.dto.BasicRuleDTO" %> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicTargetDTO" %> -<%@ page import="org.owasp.encoder.Encode" %> - - - - -<% - BasicRuleDTO basicRuleDTO = new BasicRuleDTO(); - BasicTargetDTO basicTargetDTO = new BasicTargetDTO(); - entitlementPolicyBean.setRuleElementOrder(null); - - String action = request.getParameter("action"); - - String category = request.getParameter("category"); - String ruleElementOrder = request.getParameter("ruleElementOrder"); - String updateRule = request.getParameter("updateRule"); - // rules - String ruleId = request.getParameter("ruleId"); - String ruleEffect = request.getParameter("ruleEffect"); - String ruleDescription = request.getParameter("ruleDescription"); - String completedRule = request.getParameter("completedRule"); - String editRule = request.getParameter("editRule"); - - String resourceNames = request.getParameter("resourceNames"); - String functionOnResources = request.getParameter("functionOnResources"); - String resourceDataType = request.getParameter("resourceDataType"); - String preFunctionOnResources = request.getParameter("preFunctionOnResources"); - String resourceId = request.getParameter("resourceId"); - - String subjectNames = request.getParameter("subjectNames"); - String functionOnSubjects = request.getParameter("functionOnSubjects"); - String subjectDataType = request.getParameter("subjectDataType"); - String subjectId = request.getParameter("subjectId"); - String preFunctionOnSubjects = request.getParameter("preFunctionOnSubjects"); - - String actionNames = request.getParameter("actionNames"); - String functionOnActions = request.getParameter("functionOnActions"); - String actionDataType = request.getParameter("actionDataType"); - String actionId = request.getParameter("actionId"); - String preFunctionOnActions = request.getParameter("preFunctionOnActions"); - - String environmentNames = request.getParameter("environmentNames"); - String functionOnEnvironment = request.getParameter("functionOnEnvironment"); - String environmentDataType = request.getParameter("environmentDataType"); - String environmentId = request.getParameter("environmentId"); - String preFunctionOnEnvironment = request.getParameter("preFunctionOnEnvironment"); - - // targets - String resourceNamesTarget = request.getParameter("resourceNamesTarget"); - String functionOnResourcesTarget = request.getParameter("functionOnResourcesTarget"); - String resourceDataTypeTarget = request.getParameter("resourceDataTypeTarget"); - String resourceIdTarget = request.getParameter("resourceIdTarget"); - String preFunctionOnResourcesTarget = request.getParameter("preFunctionOnResourcesTarget"); - - String subjectNamesTarget = request.getParameter("subjectNamesTarget"); - String functionOnSubjectsTarget = request.getParameter("functionOnSubjectsTarget"); - String subjectDataTypeTarget = request.getParameter("subjectDataTypeTarget"); - String subjectIdTarget = request.getParameter("subjectIdTarget"); - String preFunctionOnSubjectsTarget = request.getParameter("preFunctionOnSubjectsTarget"); - - String actionNamesTarget = request.getParameter("actionNamesTarget"); - String functionOnActionsTarget = request.getParameter("functionOnActionsTarget"); - String actionDataTypeTarget = request.getParameter("actionDataTypeTarget"); - String actionIdTarget = request.getParameter("actionIdTarget"); - String preFunctionOnActionsTarget = request.getParameter("preFunctionOnActionsTarget"); - - String environmentNamesTarget = request.getParameter("environmentNamesTarget"); - String functionOnEnvironmentTarget = request.getParameter("functionOnEnvironmentTarget"); - String preFunctionOnEnvironmentTarget = request.getParameter("preFunctionOnEnvironmentTarget"); - String environmentDataTypeTarget = request.getParameter("environmentDataTypeTarget"); - String environmentIdTarget = request.getParameter("environmentIdTarget"); - -// String attributeIdTarget = request.getParameter("attributeIdTarget"); -// String functionOnAttributesTarget = request.getParameter("functionOnAttributesTarget"); -// String userAttributeValueTarget = request.getParameter("userAttributeValueTarget"); - - - if(ruleId != null && ruleId.trim().length() > 0 && !ruleId.trim().equals("null") && editRule == null ) { - - basicRuleDTO.setRuleId(ruleId); - basicRuleDTO.setRuleEffect(ruleEffect); - - if(ruleDescription != null && ruleDescription.trim().length() > 0 ){ - basicRuleDTO.setRuleDescription(ruleDescription); - } - - if(resourceNames != null && !resourceNames.equals("")){ - basicRuleDTO.setResourceList(resourceNames); - } - - if(functionOnResources != null && !functionOnResources.equals("")){ - basicRuleDTO.setFunctionOnResources(functionOnResources); - } - - if(resourceDataType != null && resourceDataType.trim().length() > 0 && - !resourceDataType.trim().equals("null")){ - basicRuleDTO.setResourceDataType(resourceDataType); - } - - if(resourceId != null && resourceId.trim().length() > 0 && !resourceId.trim().equals("null")){ - basicRuleDTO.setResourceId(resourceId); - } - - if(preFunctionOnResources != null && preFunctionOnResources.trim().length() > 0){ - basicRuleDTO.setPreFunctionOnResources(preFunctionOnResources); - } - - if(subjectNames != null && !subjectNames.equals("")){ - basicRuleDTO.setSubjectList(subjectNames); - } - - if(subjectNames != null && !functionOnSubjects.equals("")){ - basicRuleDTO.setFunctionOnSubjects(functionOnSubjects); - } - - if(subjectDataType != null && subjectDataType.trim().length() > 0 && - !subjectDataType.trim().equals("null")) { - basicRuleDTO.setSubjectDataType(subjectDataType); - } - - if(subjectId != null && subjectId.trim().length() > 0 && !subjectId.trim().equals("null")){ - basicRuleDTO.setSubjectId(subjectId); - } - - if(preFunctionOnSubjects != null && preFunctionOnSubjects.trim().length() > 0){ - basicRuleDTO.setPreFunctionOnSubjects(preFunctionOnSubjects); - } - - if(actionNames != null && !actionNames.equals("")){ - basicRuleDTO.setActionList(actionNames); - } - - if(functionOnActions != null && !functionOnActions.equals("")){ - basicRuleDTO.setFunctionOnActions(functionOnActions); - } - - if(actionDataType != null && actionDataType.trim().length() > 0 && - !actionDataType.trim().equals("null")){ - basicRuleDTO.setActionDataType(actionDataType); - } - - if(actionId != null && actionId.trim().length() > 0 && !actionId.trim().equals("null")){ - basicRuleDTO.setActionId(actionId); - } - - if(preFunctionOnActions != null && preFunctionOnActions.trim().length() > 0){ - basicRuleDTO.setPreFunctionOnActions(preFunctionOnActions); - } - - if(environmentNames != null && !environmentNames.equals("")){ - basicRuleDTO.setEnvironmentList(environmentNames); - } - - if(functionOnEnvironment != null && !functionOnEnvironment.equals("")){ - basicRuleDTO.setFunctionOnEnvironment(functionOnEnvironment); - } - - if(environmentDataType != null && environmentDataType.trim().length() > 0 && - !environmentDataType.trim().equals("null")){ - basicRuleDTO.setEnvironmentDataType(environmentDataType); - } - - if(environmentId != null && environmentId.trim().length() > 0 && - !environmentId.trim().equals("null")){ - basicRuleDTO.setEnvironmentId(environmentId); - } - - if(preFunctionOnEnvironment != null && preFunctionOnEnvironment.trim().length() > 0){ - basicRuleDTO.setPreFunctionOnEnvironment(preFunctionOnEnvironment); - } - - if(completedRule != null && completedRule.equals("true")){ - basicRuleDTO.setCompletedRule(true); - } - - entitlementPolicyBean.setBasicRuleElementDTOs(basicRuleDTO); - } - - if(resourceNamesTarget != null && !resourceNamesTarget.equals("")){ - basicTargetDTO.setResourceList(resourceNamesTarget); - } - - if(functionOnResourcesTarget != null && !functionOnResourcesTarget.equals("")){ - basicTargetDTO.setFunctionOnResources(functionOnResourcesTarget); - } - - if(resourceDataTypeTarget != null && resourceDataTypeTarget.trim().length() > 0 && - !resourceDataTypeTarget.trim().equals("null")){ - basicTargetDTO.setResourceDataType(resourceDataTypeTarget); - } - - if(resourceIdTarget != null && resourceIdTarget.trim().length() > 0 && - !resourceIdTarget.trim().equals("null")){ - basicTargetDTO.setResourceId(resourceIdTarget); - } - - if(subjectNamesTarget != null && !subjectNamesTarget.equals("")){ - basicTargetDTO.setSubjectList(subjectNamesTarget); - } - - if(functionOnSubjectsTarget != null && !functionOnSubjectsTarget.equals("")){ - basicTargetDTO.setFunctionOnSubjects(functionOnSubjectsTarget); - } - - if(subjectDataTypeTarget != null && subjectDataTypeTarget.trim().length() > 0 && - !subjectDataTypeTarget.trim().equals("null")){ - basicTargetDTO.setSubjectDataType(subjectDataTypeTarget); - } - - if(subjectIdTarget != null && subjectIdTarget.trim().length() > 0 && - !subjectIdTarget.trim().equals("null")){ - basicTargetDTO.setSubjectId(subjectIdTarget); - } - - if(actionNamesTarget != null && !actionNamesTarget.equals("")){ - basicTargetDTO.setActionList(actionNamesTarget); - } - - if(functionOnActionsTarget != null && !functionOnActionsTarget.equals("")){ - basicTargetDTO.setFunctionOnActions(functionOnActionsTarget); - } - - if(actionDataTypeTarget != null && actionDataTypeTarget.trim().length() > 0 && - !actionDataTypeTarget.trim().equals("null")){ - basicTargetDTO.setActionDataType(actionDataTypeTarget); - } - - if(actionIdTarget != null && actionIdTarget.trim().length() > 0 && - !actionIdTarget.trim().equals("null")){ - basicTargetDTO.setActionId(actionIdTarget); - } - - if(environmentNamesTarget != null && !environmentNamesTarget.equals("")){ - basicTargetDTO.setEnvironmentList(environmentNamesTarget); - } - - if(functionOnEnvironmentTarget != null && !functionOnEnvironmentTarget.equals("")){ - basicTargetDTO.setFunctionOnEnvironment(functionOnEnvironmentTarget); - } - - if(environmentDataTypeTarget != null && environmentDataTypeTarget.trim().length() > 0 && - !environmentDataTypeTarget.trim().equals("null")){ - basicTargetDTO.setEnvironmentDataType(environmentDataTypeTarget); - } - - if(environmentIdTarget != null && environmentIdTarget.trim().length() > 0 && - !environmentIdTarget.trim().equals("null")){ - basicTargetDTO.setEnvironmentId(environmentIdTarget); - } - - entitlementPolicyBean.setBasicTargetDTO(basicTargetDTO); - - if(ruleElementOrder != null && ruleElementOrder.trim().length() > 0){ - if(basicRuleDTO.isCompletedRule() && !"true".equals(updateRule)){ - entitlementPolicyBean.setRuleElementOrder(ruleElementOrder.trim() + ", " + - basicRuleDTO.getRuleId()); - } else{ - entitlementPolicyBean.setRuleElementOrder(ruleElementOrder.trim()); - } - } - - String forwardTo = "basic-policy-editor.jsp"; - if ("completePolicy".equals(action)) { - forwardTo = "basic-policy-finish.jsp"; - } else if ("updateRule".equals(action) || "addRule".equals(action) || "cancelRule".equals(action) || - "editRule".equals(action)) { - forwardTo = "basic-policy-editor.jsp"; - } else if ("deleteRule".equals(action)) { - forwardTo = "delete-rule-entry.jsp"; - } else if ("selectAttributes".equals(action)) { - forwardTo = "select-attribute-values.jsp"; - } - - if (completedRule == null || !Boolean.parseBoolean(completedRule)) { - forwardTo = forwardTo + "?ruleId=" + Encode.forUriComponent(ruleId); - if (category != null && category.trim().length() > 0) { - forwardTo = forwardTo + "&category=" + Encode.forUriComponent(category); - } - - if ("deleteRule".equals(action)) { - forwardTo = forwardTo + "&initiatedFrom=basic-policy-editor"; - } - } - -%> - - - - diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-attribute-cache-ajaxprocessor.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-attribute-cache-ajaxprocessor.jsp deleted file mode 100644 index d4e7ed85b261..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-attribute-cache-ajaxprocessor.jsp +++ /dev/null @@ -1,59 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementAdminServiceClient"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil"%> - -<% - String serverURL = CarbonUIUtil.getServerURL(config - .getServletContext(), session); - ConfigurationContext configContext = (ConfigurationContext) config - .getServletContext().getAttribute( - CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session - .getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - try { - EntitlementAdminServiceClient client = new EntitlementAdminServiceClient(cookie, serverURL, configContext); - client.clearAttributeCache(); - forwardTo = "pdp-manage.jsp?region=region1&item=policy_menu"; - } catch (Exception e) { - String message = resourceBundle.getString("cache.clear.error"); - CarbonUIMessage.sendCarbonUIMessage(message,CarbonUIMessage.ERROR, request); - forwardTo = "pdp-manage.jsp?region=region1&item=policy_menu"; - } - -%> - -<%@page import="org.wso2.carbon.utils.ServerConstants"%> -<%@ page import="java.util.ResourceBundle" %> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-cache-ajaxprocessor.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-cache-ajaxprocessor.jsp deleted file mode 100644 index c4df09dbece4..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/clear-cache-ajaxprocessor.jsp +++ /dev/null @@ -1,65 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementAdminServiceClient"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil"%> - -<% - String httpMethod = request.getMethod(); - if (!"post".equalsIgnoreCase(httpMethod)) { - response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); - return; - } - - String serverURL = CarbonUIUtil.getServerURL(config - .getServletContext(), session); - ConfigurationContext configContext = (ConfigurationContext) config - .getServletContext().getAttribute( - CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session - .getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - try { - EntitlementAdminServiceClient client = new EntitlementAdminServiceClient(cookie, serverURL, configContext); - client.clearDecisionCache(); - forwardTo = "pdp-manage.jsp?region=region1&item=policy_menu"; - } catch (Exception e) { - String message = resourceBundle.getString("cache.clear.error"); - CarbonUIMessage.sendCarbonUIMessage(message,CarbonUIMessage.ERROR, request); - forwardTo = "pdp-manage.jsp?region=region1&item=policy_menu"; - } - -%> - -<%@page import="org.wso2.carbon.utils.ServerConstants"%> -<%@ page import="java.util.ResourceBundle" %> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-evaluation-request.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-evaluation-request.jsp deleted file mode 100644 index 0330e33a5447..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-evaluation-request.jsp +++ /dev/null @@ -1,292 +0,0 @@ -<%@ page import="org.owasp.encoder.Encode" %> - - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" prefix="carbon" %> - - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> - - -<% - String resourceNames; - String subjectNames; - String actionNames; - String environmentNames; - String multipleRequest; - String returnPolicyList; - String resourceNamesInclude; - String subjectNamesInclude; - String actionNamesInclude; - String environmentNamesInclude; - - String clearAttributes = request.getParameter("clearAttributes"); - if("true".equals(clearAttributes)){ - session.removeAttribute("resourceNames"); - session.removeAttribute("subjectNames"); - session.removeAttribute("attributeId"); - session.removeAttribute("environmentNames"); - session.removeAttribute("actionNames"); - session.removeAttribute("resourceNamesInclude"); - session.removeAttribute("subjectNamesInclude"); - session.removeAttribute("actionNamesInclude"); - session.removeAttribute("environmentNamesInclude"); - session.removeAttribute("multipleRequest"); - session.removeAttribute("returnPolicyList"); - } - - // remove request and response from session - session.removeAttribute("txtRequest"); - session.removeAttribute("txtResponse"); - - - String policyId = request.getParameter("policyId"); - if(policyId != null && policyId.trim().length() > 0){ - session.setAttribute("policyId", policyId); - } else { - policyId = (String)session.getAttribute("policyId"); - } - - resourceNames = (String)session.getAttribute("resourceNames"); - subjectNames = (String)session.getAttribute("subjectNames"); - actionNames = (String)session.getAttribute("actionNames"); - environmentNames = (String)session.getAttribute("environmentNames"); - - multipleRequest = (String)session.getAttribute("multipleRequest"); - returnPolicyList = (String)session.getAttribute("returnPolicyList"); - - resourceNamesInclude = (String)session.getAttribute("resourceNamesInclude"); - subjectNamesInclude = (String)session.getAttribute("subjectNamesInclude"); - actionNamesInclude = (String)session.getAttribute("actionNamesInclude"); - environmentNamesInclude = (String)session.getAttribute("environmentNamesInclude"); -%> - - - - - - - - - - - - - - - -
-

-
-
- -
-
- - - <% - if(policyId != null){ - %> - - - - <% - } - %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<%=Encode.forHtmlContent(policyId)%>
- - - -
- <% - if (resourceNames != null && resourceNames.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - -
- <% - if (subjectNames != null && subjectNames.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - -
- <% - if (actionNames != null && actionNames.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - -
- <% - if (environmentNames != null && environmentNames.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - -
- <% - if(policyId != null){ - %> - " class="button"/> - <% - } else { - %> - " class="button"/> - <% - } - %> - " class="button"/> - " class="button"/> - - <% - if(policyId != null){ - %> - " class="button"/> - <% - } - %> - -
-
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-policy-set.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-policy-set.jsp deleted file mode 100644 index 1b7a0a5d2002..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/create-policy-set.jsp +++ /dev/null @@ -1,1008 +0,0 @@ - - -<%@ page import="org.apache.axis2.context.ConfigurationContext" %> -<%@ page import="org.owasp.encoder.Encode" %> -<%@ page import="org.wso2.balana.utils.Constants.PolicyConstants" %> -<%@ page import="org.wso2.carbon.CarbonConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorEngine" %> -<%@ page import="org.wso2.carbon.identity.entitlement.common.dto.PolicyEditorDataHolder" %> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PaginatedPolicySetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.PolicyEditorConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.RowDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> -<%@ page import="java.util.Set" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" prefix="carbon" %> - - - - -<% - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - PolicyEditorDataHolder holder = PolicyEditorEngine.getInstance(). - getPolicyEditorData(EntitlementConstants.PolicyEditor.SET); - if(holder == null){ - //String message = MessageFormat.format(resourceBundle.getString("no.policy.editor.data")); - String message = "Policy Editor data can not loaded. Please check with policy editor configurations"; -%> - -<% - } - - String currentCategory = null; - String currentPreFunction = null; - String currentFunction = null; - String currentAttributeValue = null; - String currentAttributeId = null; - String currentAttributeDataType = null; - String currentCombineFunction = null; - - String currentObligationId = null; - String currentObligationEffect = null; - String currentObligationType = null; - String currentObligationAttributeValue = null; - String currentObligationAttributeId = null; - - String selectedAttributeNames = ""; - - String[] ruleEffects = PolicyConstants.RuleEffect.effect; - - String[] combineFunctions = new String[] {PolicyEditorConstants.COMBINE_FUNCTION_END, - PolicyEditorConstants.COMBINE_FUNCTION_AND, PolicyEditorConstants.COMBINE_FUNCTION_OR}; - - Set policyCombingAlgorithm = holder.getPolicyCombiningAlgorithms().keySet(); - - String[] obligationTypes = new String[]{"Obligation", "Advice"}; - - String selectedAttributeDataType = request.getParameter("selectedAttributeDataType"); - String selectedAttributeId = request.getParameter("selectedAttributeId"); - - // These are pass as hidden values. So can contain null value ... - if ("null".equals(selectedAttributeId)) { - selectedAttributeId = null; - } - - if ("null".equals(selectedAttributeDataType)) { - selectedAttributeDataType = null; - } - - int noOfSelectedAttributes = 1; - /** - * Get posted resources from jsp pages and put then in to a String object - */ - while(true) { - String attributeName = request.getParameter("attributeValue" + noOfSelectedAttributes); - if (attributeName == null || attributeName.trim().length() < 1) { - break; - } - if(selectedAttributeNames.equals("")) { - selectedAttributeNames = attributeName.trim(); - } else { - selectedAttributeNames = selectedAttributeNames + "," + attributeName.trim(); - } - noOfSelectedAttributes ++; - } - - - Set categories = holder.getCategoryMap().keySet(); - String[] targetPreFunctions = new String[]{"is"}; - Set targetFunctions = holder.getTargetFunctions(); - - List policyIds = entitlementPolicyBean.getPolicyRefIds(); - TargetDTO targetDTO = entitlementPolicyBean.getTargetDTO(); - List obligationDTOs = entitlementPolicyBean.getObligationDTOs(); - - int numberOfPages = 0; - int pageNumberInt = 0; - String pageNumber = request.getParameter("pageNumber"); - if (pageNumber == null) { - pageNumber = "0"; - } - try { - pageNumberInt = Integer.parseInt(pageNumber); - } catch (NumberFormatException ignored) { - } - - String policyTypeFilter = request.getParameter("policyTypeFilter"); - if (policyTypeFilter == null || "".equals(policyTypeFilter)) { - policyTypeFilter = "ALL"; - } - String policySearchString = request.getParameter("policySearchString"); - if (policySearchString == null) { - policySearchString = "*"; - } else { - policySearchString = policySearchString.trim(); - } - - String paginationValue = "policyTypeFilter=" + policyTypeFilter + - "&policySearchString=" + policySearchString; - - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - PaginatedPolicySetDTO paginatedPolicySetDTO = null; - org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO[] policies = null; - try { - EntitlementPolicyAdminServiceClient client = - new EntitlementPolicyAdminServiceClient(cookie, serverURL, configContext); - paginatedPolicySetDTO = client. - getAllPolicies(policyTypeFilter, policySearchString, pageNumberInt, false); - policies = paginatedPolicySetDTO.getPolicySet(); - numberOfPages = paginatedPolicySetDTO.getNumberOfPages(); - } catch (Exception e){ - //ignore - } -%> - - - -<% - if(targetDTO != null){ - List rowDTOs = targetDTO.getRowDTOList(); - if(rowDTOs != null && rowDTOs.size() > 0){ - RowDTO rowDTO = rowDTOs.get(0); - currentCategory = rowDTO.getCategory(); - currentPreFunction = rowDTO.getPreFunction(); - currentFunction = rowDTO.getFunction(); - if(rowDTO.isNotCompleted()){ - if(rowDTO.getAttributeValue() != null && rowDTO.getAttributeValue().trim().length() > 0){ - if(selectedAttributeNames != null && selectedAttributeNames.trim().length() > 0){ - currentAttributeValue = rowDTO.getAttributeValue() + "," + selectedAttributeNames; - } else { - currentAttributeValue = rowDTO.getAttributeValue(); - } - } else { - currentAttributeValue = selectedAttributeNames; - } - currentAttributeId = selectedAttributeId; - currentAttributeDataType = selectedAttributeDataType; - } else { - currentAttributeValue = rowDTO.getAttributeValue(); - currentAttributeId = rowDTO.getAttributeId(); - currentAttributeDataType = rowDTO.getAttributeDataType(); - } - currentCombineFunction = rowDTO.getCombineFunction(); - } - } - - - if(obligationDTOs != null && obligationDTOs.size() > 0){ - ObligationDTO dto = obligationDTOs.get(0); - currentObligationType = dto.getType(); - currentObligationId = dto.getObligationId(); - currentObligationEffect = dto.getEffect(); - currentObligationAttributeValue = dto.getAttributeValue(); - currentObligationAttributeId = dto.getResultAttributeId(); - } else { - obligationDTOs = null; - } - -%> - - -<% if(entitlementPolicyBean.isEditPolicy()){%> - -<% } else { %> - -<%}%> - - - - - - - - - -
-<%if(entitlementPolicyBean.isEditPolicy()){%> -

-<%} else {%>

<%}%> -
-
- - - - <% - if (entitlementPolicyBean.getPolicyName() != null) { - %> - - <% - } else { - %> - - <% - } - %> - - - - - - - - - - <% - if (entitlementPolicyBean.getPolicyDescription() != null) { - %> - - <% - } else { - %> - - <% - } - %> - - - - - - - - - - - - - - - - - - - - - - - -
*
- -
- -

- -
- - - - - -
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - <% - if (currentAttributeValue != null && !"".equals(currentAttributeValue)) { - - %> - - <% - } else { - %> - - - <% - } - %> - - - - - - - - -
-
- <% - if(targetDTO != null){ - List rowDTOs = targetDTO.getRowDTOList(); - if(rowDTOs != null && rowDTOs.size() > 0){ - //rowDTOs.remove(0); - for(int i = 1; i < rowDTOs.size(); i ++){ - RowDTO rowDTO = rowDTOs.get(i); - currentCategory = rowDTO.getCategory(); - currentPreFunction = rowDTO.getPreFunction(); - currentFunction = rowDTO.getFunction(); - if(rowDTO.isNotCompleted()){ - if(rowDTO.getAttributeValue() != null && rowDTO.getAttributeValue().trim().length() > 0){ - if(selectedAttributeNames != null && selectedAttributeNames.trim().length() > 0){ - currentAttributeValue = rowDTO.getAttributeValue() + "," + selectedAttributeNames; - } else { - currentAttributeValue = rowDTO.getAttributeValue(); - } - } else { - currentAttributeValue = selectedAttributeNames; - } - currentAttributeId = selectedAttributeId; - currentAttributeDataType = selectedAttributeDataType; - } else { - currentAttributeValue = rowDTO.getAttributeValue(); - currentAttributeId = rowDTO.getAttributeId(); - currentAttributeDataType = rowDTO.getAttributeDataType(); - } - currentCombineFunction = rowDTO.getCombineFunction(); - - %> - - <% - } - } - } - %> -
-
-

-
- - - - - - -
Obligation TypeIdEffect Attribute Value
- - - - - - - - - - - <% - if(obligationDTOs != null && obligationDTOs.size() > 0){ - //obligationDTOs.remove(0); - for(int i = 1; i < obligationDTOs.size(); i++){ - ObligationDTO dto = obligationDTOs.get(i); - currentObligationType = dto.getType(); - currentObligationId = dto.getObligationId(); - currentObligationEffect = dto.getEffect(); - currentObligationAttributeValue = dto.getAttributeValue(); - currentObligationAttributeId = dto.getResultAttributeId(); - %> - - <% - } - } - %> -
- - - <% - if (currentObligationId != null && currentObligationId.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - - - - <% - if (currentObligationAttributeValue != null && currentObligationAttributeValue.trim().length() > 0) { - %> - - <% - } else { - %> - - <% - } - %> - -
-
-
-

-
- - - - -
- - - - - - - -
- - - "/>  - - - "> -
-
- - - - <% - if (policies != null) { - for (int i = 0; i < policies.length; i++) { - if(policies[i] != null){ - %> - - - - - <% } - } - } else { %> - - - - <%}%> - -
- <%=Encode.forHtmlContent(policies[i].getPolicyId())%> - - - -
- -
-
- - - - - - - - - <% - if (policyIds != null && policyIds.size() > 0) { - List orderedPolicyDTOs = new ArrayList(); - String policyReferenceOrder = entitlementPolicyBean.getPolicyReferenceOrder(); - if (policyReferenceOrder != null) { - String[] orderedRuleIds = policyReferenceOrder.split(EntitlementPolicyConstants.ATTRIBUTE_SEPARATOR); - for (String orderedRuleId : orderedRuleIds) { - for (PolicyRefIdDTO dto : policyIds) { - if (orderedRuleId.trim().equals(dto.getId())) { - orderedPolicyDTOs.add(dto); - } - } - } - } - - if (orderedPolicyDTOs.size() < 1) { - orderedPolicyDTOs = policyIds; - } - for (PolicyRefIdDTO orderedRuleDTO : orderedPolicyDTOs) { - %> - - - - - - - <% - } - } else { - %> - - - - <% - } - %> -
- - - - <%=Encode.forHtml(orderedRuleDTO.getId())%> - <%=orderedRuleDTO.isReferenceOnly()%> - - -

-
- " - class="button"/> - " - class="button"/> -
-
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/entitlement.css b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/entitlement.css deleted file mode 100644 index aa5f41b7b460..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/entitlement.css +++ /dev/null @@ -1,91 +0,0 @@ -.arrowUp { - background-image: url(../images/up.gif) !important; -} - -.arrowDown { - background-image: url(../images/down.gif) !important; -} - -#middle { - line-height: 30px; -} - -.noRuleBox { - color: #999; - border: solid 1px #ccc; - padding: 5px; - font-style: italic; -} - -.text-box-big { - width: 320px !important; -} - -.defaultText { - color: #666666; - font-style: italic; -} - -.goToAdvance { - border: solid 1px #ccc; - background-color: #e3f2db; - padding: 5px; - margin-bottom: 10px; -} - -.formTableTabed{ - margin:10px; -} - -.formTableTabed td{ - padding:10px; -} - -table#main-table table.oneline-listing td { - padding: 0 5px !important; - line-height: 15px; -} -table#main-table table.oneline-listing { - border-left: 1px solid #CCCCCC; - border-right: 1px solid #CCCCCC; - border-bottom: 1px solid #CCCCCC; - border-top: 5px solid #CCCCCC; - margin-top: 3px; - padding: 8px; -} - - -table#main-table table.oneline-listing-alt td { - padding: 0 5px !important; - line-height: 15px; -} -table#main-table table.oneline-listing-alt { - margin-top: 3px; - padding: 8px; -} - -#middle div.sectionSeperator, #middle div.sectionHelp{ - line-height:10px; -} -#middle div.sectionHelp{ - margin-top:10px; -} -.sectionSubShifter{ - margin-top:-25px; -} -.leftCol-vsmall{ - width:50px; -} -div#workArea table.styledLeft tbody tr td table.ob-table{ - line-height:20px; -} -div#workArea table.styledLeft tbody tr td table.ob-table td{ - height:auto; - padding:0 !important; -} -#obligationRuleTable,#obligationTable{ - margin-top:-10px; -} -.heading_A{ - padding-top:20px; -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/tree-styles.css b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/tree-styles.css deleted file mode 100644 index d20769b238fb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/css/tree-styles.css +++ /dev/null @@ -1,86 +0,0 @@ -.treeControl{ - height: 300px; - overflow: auto; - width: 500px; -} -.treeControl ul{ - padding:0px; - margin:0px; -} - -.treeControl ul li{ - list-style:none; - padding-left:15px; - padding-top:5px; - white-space:nowrap; -} -.treeControl ul li a.plus{ - background-image:url(../images/plus.gif); - background-repeat:no-repeat; - background-position:0px 2px; - padding-left:15px; - cursor:pointer; -} -.treeControl ul li a.minus{ - background-image:url(../images/minus.gif); - background-repeat:no-repeat; - background-position:0px 2px; - padding-left:15px; - cursor:pointer; -} -.treeControl ul li a.nodata{ - background-image:url(../images/nodata.gif); - background-repeat:no-repeat; - background-position:0px 2px; - padding-left:15px; - cursor:pointer; -} -.treeControl ul li a.treeNode{ - cursor:pointer; - color:#4c99c3; - padding:3px; -} -.treeControl ul li a.selected{ - background-color: #666666; - color:#fff; -} -.button-dif, .button-dif:visited { - width:30px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#ffffff)); /* mozilla - FF3.6+ */ - background-image: -moz-linear-gradient(top, #eeeeee 0%, #ffffff 100%); /* IE 5.5 - 7 */ - filter: progid:DXImageTransform.Microsoft.gradient(gradientType = 0, startColorStr = #eeeeee, endColorStr = #ffffff); /* IE8 */ - -ms-filter: progid: DXImageTransform.Microsoft.gradient(gradientType = 0, startColorStr = #eeeeee, endColoStr = #ffffff); - display: inline-block; - padding: 5px 5px 6px; - color: #000; - text-decoration: none; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.6); - -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.6); - text-shadow: 0 -1px 1px rgba(0,0,0,0.25); - border-bottom: 1px solid rgba(0,0,0,0.25); - position: relative; - cursor: pointer -} -.treeTable td{ - padding:10px; - vertical-align:top; - border:solid 1px #ccc; -} -.listViewItem{ - width:auto; -} - -.listViewItemDel { - cursor: pointer; - float: left; - display: block; - width: 15%; - padding-top: 5px; -} - -.listViewItemContent { - float: left; - width: 85% -} \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-policy-entry.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-policy-entry.jsp deleted file mode 100644 index 8ff3b710a2cb..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-policy-entry.jsp +++ /dev/null @@ -1,38 +0,0 @@ - - - - -<% - String forwardTo = "create-policy-set.jsp"; - String policyId = request.getParameter("policyRefId"); - if(policyId != null && policyId.trim().length() > 0){ - entitlementPolicyBean.removePolicyRefId(policyId); - } -%> - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-rule-entry.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-rule-entry.jsp deleted file mode 100644 index ef3264aae757..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/delete-rule-entry.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ page import="org.apache.commons.lang.StringUtils" %> - - - - -<% - String forwardTo = null; - String ruleId = request.getParameter("ruleId"); - String initiatedPage = request.getParameter("initiatedFrom"); - if(StringUtils.equals("basic-policy-editor", initiatedPage)){ - if(ruleId != null && ruleId.trim().length() > 0){ - entitlementPolicyBean.removeBasicRuleElement(ruleId); - } - forwardTo = "basic-policy-editor.jsp"; - } else { - if(ruleId != null && ruleId.trim().length() > 0){ - entitlementPolicyBean.removeRuleDTO(ruleId); - } - forwardTo = "policy-editor.jsp"; - } -%> - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/edit-policy.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/edit-policy.jsp deleted file mode 100644 index 5b58d78325c5..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/edit-policy.jsp +++ /dev/null @@ -1,134 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.balana.utils.policy.dto.BasicPolicyDTO"%> -<%@ page import="org.wso2.balana.utils.policy.dto.PolicyElementDTO"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> - - -<% - entitlementPolicyBean.cleanEntitlementPolicyBean(); - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, serverURL, configContext); - String policyId = request.getParameter("policyid"); - PolicyDTO policyDTO = client.getPolicy(policyId, false); - String[] policyEditorData = policyDTO.getPolicyEditorData(); - - try { - if(EntitlementConstants.PolicyEditor.SET.equals(policyDTO.getPolicyEditor())){ - TargetDTO targetDTO = new TargetDTO(); - List obligationDTOs = new ArrayList(); - List policyRefIdDTOs = new ArrayList(); - PolicyElementDTO elementDTO = new PolicyElementDTO(); - - PolicyEditorUtil.processPolicyEditorData(elementDTO, policyEditorData); - PolicyEditorUtil.processTargetPolicyEditorData(targetDTO, policyEditorData); - PolicyEditorUtil.processObligationPolicyEditorData(obligationDTOs, policyEditorData); - PolicyEditorUtil.processReferencePolicyEditorData(policyRefIdDTOs, policyEditorData); - - entitlementPolicyBean.setPolicyName(elementDTO.getPolicyName()); - entitlementPolicyBean.setAlgorithmName(elementDTO.getRuleCombiningAlgorithms()); - entitlementPolicyBean.setPolicyDescription(elementDTO.getPolicyDescription()); - - entitlementPolicyBean.setTargetDTO(targetDTO); - entitlementPolicyBean.setObligationDTOs(obligationDTOs); - entitlementPolicyBean.setPolicyRefIds(policyRefIdDTOs); - entitlementPolicyBean.setEditPolicy(true); - forwardTo="create-policy-set.jsp"; - } else { - if(EntitlementConstants.PolicyEditor.BASIC.equals(policyDTO.getPolicyEditor())){ - BasicPolicyDTO basicPolicyDTO = PolicyEditorUtil.createBasicPolicyDTO(policyEditorData); - - entitlementPolicyBean.setPolicyName(basicPolicyDTO.getPolicyId()); - entitlementPolicyBean.setAlgorithmName(basicPolicyDTO.getRuleAlgorithm()); - entitlementPolicyBean.setPolicyDescription(basicPolicyDTO.getDescription()); - - entitlementPolicyBean.setBasicTargetDTO(basicPolicyDTO.getTargetDTO()); - entitlementPolicyBean.setBasicRuleDTOs(basicPolicyDTO.getBasicRuleDTOs()); - entitlementPolicyBean.setEditPolicy(true); - forwardTo="basic-policy-editor.jsp"; - - } else if(EntitlementConstants.PolicyEditor.STANDARD.equals(policyDTO.getPolicyEditor())){ - - TargetDTO targetDTO = new TargetDTO(); - List ruleDTOs = new ArrayList(); - List obligationDTOs = new ArrayList(); - PolicyElementDTO elementDTO = new PolicyElementDTO(); - - PolicyEditorUtil.processPolicyEditorData(elementDTO, policyEditorData); - PolicyEditorUtil.processRulePolicyEditorData(ruleDTOs, policyEditorData); - PolicyEditorUtil.processTargetPolicyEditorData(targetDTO, policyEditorData); - PolicyEditorUtil.processObligationPolicyEditorData(obligationDTOs, policyEditorData); - - entitlementPolicyBean.setPolicyName(elementDTO.getPolicyName()); - entitlementPolicyBean.setAlgorithmName(elementDTO.getRuleCombiningAlgorithms()); - entitlementPolicyBean.setPolicyDescription(elementDTO.getPolicyDescription()); - - entitlementPolicyBean.setTargetDTO(targetDTO); - entitlementPolicyBean.setRuleDTOs(ruleDTOs); - entitlementPolicyBean.setObligationDTOs(obligationDTOs); - entitlementPolicyBean.setEditPolicy(true); - forwardTo="policy-editor.jsp"; - - } else if (EntitlementConstants.PolicyEditor.RBAC.equals(policyDTO.getPolicyEditor())) { - SimplePolicyEditorDTO editorDTO = PolicyEditorUtil.createSimplePolicyEditorDTO(policyEditorData); - entitlementPolicyBean.setSimplePolicyEditorDTO(editorDTO); - entitlementPolicyBean.setEditPolicy(true); - forwardTo="simple-policy-editor.jsp"; - } else { - session.setAttribute("policy", policyDTO.getPolicy()); - forwardTo="policy-view.jsp?policyid=" + Encode.forUriComponent(policyId); - } - } - } catch (Exception e) { - session.setAttribute("policy", policyDTO.getPolicy()); - forwardTo="policy-view.jsp?policyid=" + Encode.forUriComponent(policyId); - } -%> - -<%@page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.RuleDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.SimplePolicyEditorDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.util.PolicyEditorUtil" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="org.owasp.encoder.Encode" %> - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/enable-disable-policy-ajaxprocessor.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/enable-disable-policy-ajaxprocessor.jsp deleted file mode 100644 index c53c886aa5c3..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/enable-disable-policy-ajaxprocessor.jsp +++ /dev/null @@ -1,75 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage"%> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil"%> - -<%@page import="org.wso2.carbon.utils.ServerConstants"%> -<%@page import="java.util.ResourceBundle"%> -<% - String httpMethod = request.getMethod(); - if (!"post".equalsIgnoreCase(httpMethod)) { - response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); - return; - } - - String serverURL = CarbonUIUtil.getServerURL(config - .getServletContext(), session); - ConfigurationContext configContext = (ConfigurationContext) config - .getServletContext().getAttribute( - CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session - .getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = "my-pdp.jsp"; - String action = request.getParameter("action"); - String policyid = request.getParameter("policyid"); - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - if ((request.getParameter("policyid") != null)) { - try { - EntitlementPolicyAdminServiceClient client = - new EntitlementPolicyAdminServiceClient(cookie, serverURL, configContext); - if ("enable".equals(action)){ - client.enableDisablePolicy(policyid, true); - String message = resourceBundle.getString("policy.enabled.successfully"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - } else if("disable".equals(action)) { - client.enableDisablePolicy(policyid, false); - String message = resourceBundle.getString("policy.disable.successfully"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - } - } catch (Exception e) { - String message = resourceBundle.getString("error.while.enabling.policy") + e.getMessage(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - } - } -%> - - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy-submit.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy-submit.jsp deleted file mode 100644 index b35e18cfe2a0..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy-submit.jsp +++ /dev/null @@ -1,170 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementAdminServiceClient"%> - -<% - boolean evaluatedWithPDP = false; - String requestString = request.getParameter("txtRequest"); - String withPDP = request.getParameter("withPDP"); - if("true".equals(withPDP)){ - evaluatedWithPDP = true; - } - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext(). - getAttribute(CarbonConstants.CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String resp = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - List rowDTOs = new ArrayList(); - String resourceNames = request.getParameter("resourceNames"); - String subjectNames = request.getParameter("subjectNames"); - String actionNames = request.getParameter("actionNames"); - String environmentNames = request.getParameter("environmentNames"); - String multipleRequest = request.getParameter("multipleRequest"); - String returnPolicyList = request.getParameter("returnPolicyList"); - - if (resourceNames != null && resourceNames.trim().length() > 0){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(resourceNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:resource:resource-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:resource"); - String resourceNamesInclude = request.getParameter("resourceNamesInclude"); - if(resourceNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(resourceNamesInclude)); - session.setAttribute("resourceNamesInclude",resourceNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("resourceNames",resourceNames); - } - if (subjectNames != null && subjectNames.trim().length() > 0){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(subjectNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:subject:subject-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"); - String subjectNamesInclude = request.getParameter("subjectNamesInclude"); - if(subjectNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(subjectNamesInclude)); - session.setAttribute("subjectNamesInclude",subjectNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("subjectNames",subjectNames); - } - if (actionNames != null && actionNames.trim().length() > 0){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(actionNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:action:action-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:action"); - String actionNamesInclude = request.getParameter("actionNamesInclude"); - if(actionNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(actionNamesInclude)); - session.setAttribute("actionNamesInclude",actionNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("actionNames",actionNames); - } - if (environmentNames != null && environmentNames.trim().length() > 0){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(environmentNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:environment:environment-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:environment"); - rowDTOs.add(rowDTO); - String environmentNamesInclude = request.getParameter("environmentNamesInclude"); - if(environmentNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(environmentNamesInclude)); - session.setAttribute("actionNamesInclude",environmentNamesInclude); - } - session.setAttribute("environmentNames", environmentNames); - } - - RequestDTO requestDTO = new RequestDTO(); - if(multipleRequest != null){ - requestDTO.setMultipleRequest(Boolean.parseBoolean(multipleRequest)); - session.setAttribute("multipleRequest", multipleRequest); - } - if(returnPolicyList != null){ - requestDTO.setReturnPolicyIdList(Boolean.parseBoolean(returnPolicyList)); - session.setAttribute("returnPolicyList", returnPolicyList); - } - requestDTO.setRowDTOs(rowDTOs); - - EntitlementPolicyCreator entitlementPolicyCreator = new EntitlementPolicyCreator(); - - try { - EntitlementAdminServiceClient adminClient = - new EntitlementAdminServiceClient(cookie, serverURL, configContext); - EntitlementServiceClient client = new EntitlementServiceClient(cookie, serverURL, configContext); - if(requestString == null || requestString.trim().length() < 1){ - String createdRequest = entitlementPolicyCreator.createBasicRequest(requestDTO); - if(createdRequest != null && createdRequest.trim().length() > 0){ - requestString = createdRequest.trim().replaceAll("><", ">\n<"); - } - } - if(evaluatedWithPDP){ - resp = client.getDecision(requestString); - } else { - String policyId = (String) session.getAttribute("policyId"); - if(policyId != null){ - resp = adminClient.getDecision(requestString, new String[]{policyId}); - } else { - resp = adminClient.getDecision(requestString); - } - } - - String responseValue = ClientUtil.getStatus(resp); - - session.setAttribute("txtRequest", requestString); - session.setAttribute("txtResponse", resp); - - CarbonUIMessage.sendCarbonUIMessage(responseValue, CarbonUIMessage.INFO, request); - } catch (Exception e) { - String message = resourceBundle.getString("invalid.request"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - } -%> - -<%@page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementServiceClient"%> -<%@page import="org.wso2.carbon.identity.entitlement.ui.dto.RequestDTO"%> -<%@page import="org.wso2.carbon.identity.entitlement.ui.dto.RowDTO" %> -<%@page import="org.wso2.carbon.identity.entitlement.ui.util.ClientUtil" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy.jsp deleted file mode 100644 index a8ba968fd855..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/eval-policy.jsp +++ /dev/null @@ -1,273 +0,0 @@ - - -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyConstants" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.RequestDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.RowDTO" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.List" %> -<%@ page import="org.owasp.encoder.Encode" %> - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" - prefix="carbon"%> - - - -<% - String forwardTo = null; - boolean showResponse = false; - String requestString = (String)session.getAttribute("txtRequest"); - String responseString = (String)session.getAttribute("txtResponse"); - String policyId = (String)session.getAttribute("policyId"); - String isResponse = request.getParameter("isResponse"); - if(isResponse != null && isResponse.trim().length() > 0){ - showResponse = true; - } - if(responseString != null){ - responseString = responseString.trim().replaceAll("><", ">\n<"); - } else { - responseString = ""; - } - if(!showResponse){ - List rowDTOs = new ArrayList(); - String multipleRequest = request.getParameter("multipleRequest"); - String returnPolicyList = request.getParameter("returnPolicyList"); - String resourceNames = request.getParameter("resourceNames"); - String subjectNames = request.getParameter("subjectNames"); - String actionNames = request.getParameter("actionNames"); - String environmentNames = request.getParameter("environmentNames"); - - if (resourceNames != null && !resourceNames.trim().equals("")){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(resourceNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:resource:resource-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:resource"); - String resourceNamesInclude = request.getParameter("resourceNamesInclude"); - if(resourceNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(resourceNamesInclude)); - session.setAttribute("resourceNamesInclude",resourceNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("resourceNames",resourceNames); - } - if (subjectNames != null && !subjectNames.trim().equals("")){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(subjectNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:subject:subject-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"); - String subjectNamesInclude = request.getParameter("subjectNamesInclude"); - if(subjectNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(subjectNamesInclude)); - session.setAttribute("subjectNamesInclude",subjectNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("subjectNames",subjectNames); - } - if (actionNames != null && !actionNames.trim().equals("")){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(actionNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:action:action-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:action"); - String actionNamesInclude = request.getParameter("actionNamesInclude"); - if(actionNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(actionNamesInclude)); - session.setAttribute("actionNamesInclude",actionNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("actionNames",actionNames); - } - if (environmentNames != null && !environmentNames.trim().equals("")){ - RowDTO rowDTO = new RowDTO(); - rowDTO.setAttributeValue(environmentNames); - rowDTO.setAttributeDataType(EntitlementPolicyConstants.STRING_DATA_TYPE); - rowDTO.setAttributeId("urn:oasis:names:tc:xacml:1.0:environment:environment-id"); - rowDTO.setCategory("urn:oasis:names:tc:xacml:3.0:attribute-category:environment"); - String environmentNamesInclude = request.getParameter("environmentNamesInclude"); - if(environmentNamesInclude != null){ - rowDTO.setNotCompleted(Boolean.parseBoolean(environmentNamesInclude)); - session.setAttribute("actionNamesInclude",environmentNamesInclude); - } - rowDTOs.add(rowDTO); - session.setAttribute("environmentNames",environmentNames); - } - - RequestDTO requestDTO = new RequestDTO(); - if(multipleRequest != null){ - requestDTO.setMultipleRequest(Boolean.parseBoolean(multipleRequest)); - session.setAttribute("multipleRequest", multipleRequest); - } - if(returnPolicyList != null){ - requestDTO.setReturnPolicyIdList(Boolean.parseBoolean(returnPolicyList)); - session.setAttribute("returnPolicyList", returnPolicyList); - } - requestDTO.setRowDTOs(rowDTOs); - - EntitlementPolicyCreator entitlementPolicyCreator = new EntitlementPolicyCreator(); - try { - if(requestString != null && requestString.trim().length() > 0){ - requestString = requestString.trim().replaceAll("><", ">\n<"); - } else if(!requestDTO.getRowDTOs().isEmpty()){ - String createdRequest = entitlementPolicyCreator.createBasicRequest(requestDTO); - if(createdRequest != null && createdRequest.trim().length() > 0){ - requestString = createdRequest.trim().replaceAll("><", ">\n<"); - } - } else { - requestString = ""; - } - } catch (Exception e) { - CarbonUIMessage.sendCarbonUIMessage(e.getMessage(), CarbonUIMessage.ERROR, request); - forwardTo = "../admin/error.jsp"; - %> - - <% - } - } -%> - - - - - - - - - - - - - -
-

-
-
- - - - - - - - - - - - - - - -
- <% - if(showResponse){ - %> - - <% - } else { - %> - - <% - } - %> -
-
- - - -
-
- <% - if(showResponse){ - %> - - <% - } else { - %> - <% - if(policyId != null){ - %> - - <% - }else { - %> - - <% - } - %> - - - <% - } - %> -
-
-
-
-
diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish-policy-set.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish-policy-set.jsp deleted file mode 100644 index bdc6e697e2ce..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish-policy-set.jsp +++ /dev/null @@ -1,127 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.PolicyRefIdDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.PolicySetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.util.PolicyEditorUtil" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> - - -<% - - String policyOrderOrder = entitlementPolicyBean.getPolicyReferenceOrder(); - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - String policyName = entitlementPolicyBean.getPolicyName(); - String algorithmName = entitlementPolicyBean.getAlgorithmName(); - String policyDescription = entitlementPolicyBean.getPolicyDescription(); - - TargetDTO targetDTO = entitlementPolicyBean.getTargetDTO(); - List obligationDTOs = entitlementPolicyBean.getObligationDTOs(); - List policyRefIdDTOs = entitlementPolicyBean.getPolicyRefIds(); - - PolicySetDTO policySetDTO = new PolicySetDTO(); - org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO policyDTO = null; - String message = null; - try { - if(policyName != null && policyName.trim().length() > 0 && algorithmName != null - && algorithmName.trim().length() > 0) { - policySetDTO.setPolicySetId(policyName); - policySetDTO.setPolicyCombiningAlgId(algorithmName); - policySetDTO.setDescription(policyDescription); - policySetDTO.setPolicyOrder(policyOrderOrder); - policySetDTO.setTargetDTO(targetDTO); - policySetDTO.setObligations(obligationDTOs); - policySetDTO.setPolicyRefIdDTOs(policyRefIdDTOs); - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, - serverURL, configContext); - EntitlementPolicyCreator policyCreator = new EntitlementPolicyCreator(); - - String[] policyEditorData = PolicyEditorUtil.processPolicySetData(policySetDTO); - String policyString = policyCreator.createPolicySet(policySetDTO, client); - - if(entitlementPolicyBean.isEditPolicy()){ - try{ - policyDTO = client.getPolicy(policyName, false); - } catch (Exception e){ - //ignore - } - - if(policyDTO == null){ - policyDTO = new PolicyDTO(); - } - - policyDTO.setPolicy(policyString); - policyDTO.setPolicyEditor(EntitlementConstants.PolicyEditor.SET); - if(policyEditorData != null){ - policyDTO.setPolicyEditorData(policyEditorData); - } - client.updatePolicy(policyDTO); - message = resourceBundle.getString("updated.successfully"); - } else { - policyDTO = new PolicyDTO(); - policyDTO.setPolicyId(policyName); - policyDTO.setPolicy(policyString); - policyDTO.setPolicyEditor(EntitlementConstants.PolicyEditor.SET); - if(policyEditorData != null){ - policyDTO.setPolicyEditorData(policyEditorData); - } - client.addPolicy(policyDTO); - message = resourceBundle.getString("ent.policy.added.successfully"); - } - entitlementPolicyBean.cleanEntitlementPolicyBean(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - } - entitlementPolicyBean.cleanEntitlementPolicyBean(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - forwardTo = "index.jsp?"; - } catch (Exception e) { - message = resourceBundle.getString("error.while.adding.policy") + " " + e.getMessage(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?"; - } -%> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish.jsp b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish.jsp deleted file mode 100644 index da6bea9594f1..000000000000 --- a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/finish.jsp +++ /dev/null @@ -1,129 +0,0 @@ - -<%@ page import="org.apache.axis2.context.ConfigurationContext"%> -<%@ page import="org.wso2.carbon.CarbonConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.EntitlementConstants"%> -<%@ page import="org.wso2.carbon.identity.entitlement.common.PolicyEditorException"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.EntitlementPolicyCreator"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.client.EntitlementPolicyAdminServiceClient"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.ObligationDTO"%> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.PolicyDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.RuleDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.dto.TargetDTO" %> -<%@ page import="org.wso2.carbon.identity.entitlement.ui.util.PolicyEditorUtil" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="java.util.List" %> -<%@ page import="java.util.ResourceBundle" %> - - -<% - - String ruleElementOrder = entitlementPolicyBean.getRuleElementOrder(); - String serverURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants. - CONFIGURATION_CONTEXT); - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - String forwardTo = null; - String BUNDLE = "org.wso2.carbon.identity.entitlement.ui.i18n.Resources"; - ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE, request.getLocale()); - - org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO policy = null; - String policyName = entitlementPolicyBean.getPolicyName(); - String algorithmName = entitlementPolicyBean.getAlgorithmName(); - String policyDescription = entitlementPolicyBean.getPolicyDescription(); - - List ruleDTOs = entitlementPolicyBean.getRuleDTOs(); - TargetDTO targetDTO = entitlementPolicyBean.getTargetDTO(); - List obligationDTOs = entitlementPolicyBean.getObligationDTOs(); - String message = ""; - try { - - if(policyName != null && policyName.trim().length() > 0 && algorithmName != null - && algorithmName.trim().length() > 0) { - PolicyDTO policyDTO = new PolicyDTO(); - policyDTO.setPolicyId(policyName); - policyDTO.setRuleAlgorithm(algorithmName); - policyDTO.setDescription(policyDescription); - policyDTO.setRuleOrder(ruleElementOrder); - policyDTO.setRuleDTOs(ruleDTOs); - policyDTO.setTargetDTO(targetDTO); - policyDTO.setObligationDTOs(obligationDTOs); - EntitlementPolicyAdminServiceClient client = new EntitlementPolicyAdminServiceClient(cookie, - serverURL, configContext); - EntitlementPolicyCreator policyCreator = new EntitlementPolicyCreator(); - String[] policyEditorData = PolicyEditorUtil.processPolicyData(policyDTO); - String policyString = policyCreator.createPolicy(policyDTO); - - if(entitlementPolicyBean.isEditPolicy()){ - try{ - policy = client.getPolicy(policyName, false); - } catch (Exception e){ - //ignore - } - - if(policy == null){ - policy = new org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO(); - } - policy.setPolicyEditor(EntitlementConstants.PolicyEditor.STANDARD); - if(policyEditorData != null){ - policy.setPolicyEditorData(policyEditorData); - } - policy.setPolicyId(policyName); - policy.setPolicy(policyString); - client.updatePolicy(policy); - message = resourceBundle.getString("updated.successfully"); - } else { - policy = new org.wso2.carbon.identity.entitlement.stub.dto.PolicyDTO(); - if(policyEditorData != null){ - policy.setPolicyEditorData(policyEditorData); - } - policy.setPolicyId(policyName); - policy.setPolicy(policyString); - policy.setPolicyEditor(EntitlementConstants.PolicyEditor.STANDARD); - client.addPolicy(policy); - message = resourceBundle.getString("ent.policy.added.successfully"); - } - - entitlementPolicyBean.cleanEntitlementPolicyBean(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.INFO, request); - forwardTo = "index.jsp?"; - } - } catch (PolicyEditorException e) { - message = resourceBundle.getString("error.while.creating.policy"); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?"; - } catch (Exception e) { - message = resourceBundle.getString("error.while.adding.policy") + " " + e.getMessage(); - CarbonUIMessage.sendCarbonUIMessage(message, CarbonUIMessage.ERROR, request); - forwardTo = "index.jsp?"; - } -%> - - - \ No newline at end of file diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/Policy-type.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/Policy-type.gif deleted file mode 100644 index f07a5202980f24743d04260d45cc181ac8e2862a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et>PNk%w1VGsZi0M$GI|M714>1gKER_xnc^5SC6w?4tCGTFsS;LT94mOQSL zAo=(4!LMn@usF1uCc2?4?dst3@8Z+GM5vA}+tk3Eggd~rkiV*E$-kiX_3)E*47;XU z#jk3|w|LIKhpv<Em{m4838nnRz2CWvho+Rvuc z$Ct5}C#aE1v!r+D-^8ktK$wF^jc^K~j#s>~B#c;`^yl?`91Q0+B7|WT>6$nrZ zgF}lcgj8+=fq?)RC_FsKZly5@00g^WL*{`v4|o6o2mlI7OecT<4tE3u2ni8P88sRM zZXIM97&$Z!2LJ~plS3FNDhdMx4Fz6|r9);Z2LS~QcL51x78fLgYJ~+XWFsO|q6Py1 hABaP}CW8U3UJrarFfs;%00jvleL@Qf6ERFd06RK=n_>U} diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/PolicySet-type.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/PolicySet-type.gif deleted file mode 100644 index 638d8ab6ea9d42a0e5cb3e85ba715db9e6df8ca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZ?wbhEHb6krfwI3mDcTWyd!*QIMqcK9^Cs&#(K>9PxtRhg74xz^cbE;Ejq;2YRu z<<_pT<7VgL3rRi4?EnA&&p--L{K>+|0JKU6qzPoF18e95WjjumUX5g{H=8zXc+BS$ zJELT+eA@f}d#7-k1~K;UJCMX^pgH}*vXvJDd{*9gwbDYxF65Bz#SWK49P4K=^EU3h al@(d(CmOSv*V%u8!wivz#s&dJ25SHcPeL&O diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/actions.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/actions.png deleted file mode 100644 index b59bf13c1e47d5605240efc794e7ef8848204e0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)K~y-6g_CJW6mb~Fpa0Cb<4(2VxuR^AYqxZl8e6SVQHW)1 zX}Pt5*+E6o0a1bV!S0nTiVj2m#GYHr-Td%ZhA{sTxnaolQge5qJbkQdNV z8o*JT;Hi5q%&e-at^)w>_w@23XRik3Q2F`I`Db$Xm!?b@7+2Kgs-IZ6B|ILAgqHUz zrS+?-w!8cnKo=94q!Gf4R$5P(#}Co#Ik!DFYc>RcM@Nvyo+Iq*&tI7w05C6_ypd(P z(mCU{Vr_DK>}hlcl=PJ3Q9Kt$^oB|CqlfBYJKy5<_!tVpliE72!{t_Nq9_I|X2apR zvs_CaH3)VtvR|JOlZWfm(uXBQ7nN8+o|b=()sJm?Ic5G>LwcH~y6Qen9jC&Kse<}R zgS^SS$e6iuX&`l4ny*hoqtM1(+rC<~94vkO$=*DNudy{7cy4@t>BXNp`%h)5)%Ghs zzs!JW07%%nUY+1@coVeI6ren0nG15O4wW9yP8~6m=T&GOl-inqsnQ1kY)D%0t)YV5 zwP_FlKL81YNYKXe0F|I9JbrevGAY=5(65V72_uJ&f;%9|O`n`iEX(o1SJlG{H|R)A zlnhWW+S}c@Uhep=OOQ4F`*wz%yR5uxcVP`Tu(EKB(m}pA796rK&YG{Gcrv=Jsh-I; z>k$*92B;6AkP1asNAt7BKsEqvR0K1)-OZGVqUh@pX`Qv$&vv#+o;PnR7UmlAGH2)r zs1KlClpL%7cJHCnboJWp2Y;H@<3Ys3k~v?Hl#(_*V`t{9aRk&0K*F6GhyUpd&(VLC z0RWUzP)cDm8VBsyzR|8o&nT7dQ5vkEADd4q%PjM5b!YyyOgAVlPP^2y#591AZ~#1l zK?b`I+<9gH=*j8rS$Y79LOnmc9U%}NAUyUJm$!bfyK+TQ4D<%*IbudehB`4(cQHDu pe@ZA6l$=gi@rAN0w%*DB@C$SlazDztAvgd4002ovPDHLkV1kaYrCI<0 diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/add-new-policy.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/add-new-policy.png deleted file mode 100644 index 05d899d0b1342441e5b1270ddd5391a54bdd7b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42768 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 Bs*wNy diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/advance-search.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/advance-search.png deleted file mode 100644 index 01248fbecbce6ee25f0064b02322b8f41ae01d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23816 zcmce;cU)85wl0jXU5al+K%{Au-lR)c0g*1fgMf5M=)LHRLI42~>AiO%y(iM8_fF`& z1qcvA3Ezr)pYuCspS^$go_oG~^UqAyoNJab*Bav)&loeoZxLiL_|a?_eNTc zi0GOk5z&=`TYmsoQeM9v1qx~x866jOsD+EWiIX{zB?M}3&gpFCWNr>|wt~8#uOcOY zMpvC*$!XlWb!&P-WuA!W5s{qqOAU{tZIrix1~&O}|L#67^Qe=sDPIVr333HT0+V7`Ri4n_?i8u6X9pg{a0j!GWON4D?l-?c1xJ> z)8NkIn?UhF;qiaIIU8P1OsJn%>?l5^GBzwa_cm;il)}FxJ;I#yiN_}EkM=(LeT#cO zH(Sa1YRfl;s={&m^G)Wi}3Ogf`pR09Ubu8tL3^P!S~ z*IQfL{$aG8Z*Il@QIm`r72U}6#Ke|B^?HTvP5LmJm8D^i9E>)ayRm9N5adu}NhNyb z5QFJNwNxQqe=wXtklr)9AYpIB@ygwP;rgN78q(Opjf9*$8(DAa*CkWclI^)I zV+gM$_xe#8XP^5Z^PbI}!kg@1uh6jS@D^oJ-!k-e#C~Mgg=1v5c94Gq=ghp-H5XZL zBijaY-()}5UB(?tw9kPQgN(H3g?X4amC8L}V%3t>eqB(B^H>A zwsvz#Q)r^btu_)Tv5)7cgyLnTsI=DWV<2eQV=xcWE7ZTH0R z#;d0Zr>L6#kFj&-{fL)5bK=#7Z|l=S`(cBZ2R$uM&^sT=x0}AIyB{=4aj)9A4s~$b zbxpyVF4z$#orV5Kd}B!`byfcFej!OXQQr(rqF+jehI)*6936J}pSvD^4%IFpBYA+d zNQZCei5l-1owwKr2A8jK>+yS=QaQn@{P7h^E%bC+dU~FC_UYEqY3-oyL4mFCWJ%0u z(qzC*6@zNe#kw|qGl^Nd8b34VtI;>dIgP6?*%Ny$9@JW)a%xHotj^X{ro}c@u>m(F zMY+xJo*1W=s?q826k$n^bg z*^q7D_yeCnQiz8NouItE^ZVt)<7~(2z6m?QM3dzqr9{*A0`L?b7bS=jJAGkp9k!Oy z8@ySyQix3{rEY!ZF*vs47$B2nad|3Jh)q53I{taC1T4h;0UFq>0Ze#uK13&bb#+zn z0RJ&%H*oPl;WFA&OFE-vH}$#C+Y_mFls_AKiz#;JU@#vkzP&OUy$Vn9gU)eF>>}Uc zGr36`wF~5{A^kWx`^!sg&(|^Rf`J4E*TLui^|)vLVxgaH0)pjOL-|Q zoxz%Vo$ql4LkWIOXiltV(#^$lc@qWn6r8q9nZg1}CTQHt@)U1_ca3iNA1B*=EN(#ygpGUqTJA?HPN4X29k;D9~MoGJ$<( zW^Np!F+w{|T6o-2Zs8fWR#tjuW=49M-qBg;@S=VvBoXCzu2}i0`i`(a_qpn;1=8vB zhxptoyRC)LC93{V>yuAVpLK2G?$t|tH+iKLQ*}x<_41{`#QaCF6MUQxgEzT^B7ES@ zk~s>IU6H$iNoX?E3H~3%itQ zGk``Hh38GbmLg&Me(tOdJ_|1KM_Yy52m=nVn!b>OPV$>e%3}5uv$fVQ$>inAqK%jC z{oE0XPR4cUpPQ1?X+RM+ zJzDGc5jbezYPk<`WZ;w3uz%3c=jVu_Nz~GiX=UQAaeOu!sSXUOl^HrSL=gaN)t{i+ z_w`;8i4V{_#1yhJ0cef%*I+*?(FwJEw>g#a1i-K;8>tTLo2E#cL(Bri#ErGV&_ElVCHV>j| ze6h6sTLpiDq|6d;1f*|NHVrJO8Wv<_MhSdT^vUHDdgN-+AAWPpd7@Rgg{d!|0g_nZ zgY9gUmR-y9uVdN`Yf7A(l+>cwNyZJk38k8LmpZ;R9 z5dl}BE=N-?9V>-GioP!T5#q0=o*yFW{z4`-aH#3;&(`8&&ZgO+13w@%l3=|A6|53K~fz(TTk9eAZ0r6S62b$D1{*DrvgW6f&VEk~8j;^0KV{p_3cs0#6h#xRM{Y6#v2hZ%04BDoRSL{44}*=!|!k}O$Zo(nCZFLYUX zPiG_kN5HgX8oBSJJQnVa$MFe(1rwXlgUh|4KGLmC!UbkAmp#6?MO;0DgOG=p#5=2t zJnPgpeWB#w(8NR0#HM#1X&X%hZ0LXpLNlDSY5OB>s)yEVIzjc zSQoVEW{vwB#W?S6S%%^Up{GnI5@yJ{A!qZO%6EM%5b)BYKCe!=`z)3_;_N}8yk9k@ zuv>~*%x_p|83vnf3$5DgbnQ;*@r ztWZ~Nu61q7PageVH7h>NqvXiTREo88|4aCiK8H3t4o58Pidn^DvjUm(Mw9W+p$cxD z!Nf;k-gg7OO(si=xn%S#+Rj2~AAHw{ct4KB&f`-B@8j7<58K_(#7+_8utDyb!zWqg zWn~sJf#d{0{Gq(F)Q2pEU=^2b37cMxty4>Kie9Q+0~dfKJnI>&S9 zY2Vp$+}-Giekt|Kb2&McWFzv-;UWL0B>H-00($3| z16YfQ{RZ+ihleqRJW+(booRg4BM+OL@j6S6b4YMh`R{=L|B>hLZ#UOy{2G){#u(K| z94}K?Qh`r{lM%$m1|F}FoxUP!_{DzXLp)BlO=$2MFxz?4Q@67>7h96Zs;wm+5^ix<j7~1ruC#Zet|fYcjVJ9V?^Pyh?_sQZ41+z#+A> z{O8<`Yt2cdWZ`iq;sLOo>CkL*V+QekTtUC23ce+-!atFxc=+Q;Z7wi4k&6-bRk+{b zQA=uwN#DW5$oxmn>e!T6BZcSMhjj?~OCxKqy&t#PDQD+eqOnLr3$dA?a6`e|w#iXV zW?)}~aO~OhL7YFL>kzZ-eb^&Z${mD%uq~X3b&Jtg@dDZ`94@s7c z)2L?~vYhy#+Ao0#$PEvnt-nWL9FDLjF8;PM{6K2@s?1CcT0{$;=>uEo>E_Z!_&%zI`JDMhqZ1N+IQ_dm%10C zzG*39Hgf4awouDCfk^4x0Ul^8D+?n?Ism{mLi#q6v3c7pVj{`|Uc0r7`lhmkEV+;N5yd5a zG5m3O*ExaNlBv6Vo-E+9ToJ9nX? zO9G|8I0#iB_qhRkGe^nCOn756nMhqF4P4TsFZbtd(O-P+D*7u?_|w&n1fPz}&mB|x zeu8eZSwV@h3Z#PlwJH+gm#)?*mdYIgjX)D}b$U!4q?-s%dC@h|@!Cu9((J={MN=6( zQ?NcS6SRdLcR%0?7FnI#?^U>VCUHI?sXTKwJGkpQ;h*+WnrovfXH3LdSZ`xi6Oljx&HmL|!a66!)TJ zq+5M|!G6i@hj`31k$N7?`8^74$0mFDls>MAD0uZ@bh&{6gak_arc<@HUtuhaUoyKMt-_|A;1LX|EQks_)g`(&)8!g)n;Z7mJz{7 zfBcj$_Y{s@U`fWJB{>B51tth!xzj= z>N5>ls>Q{EQH``HQ3AQRZjN=?Vz~&N;cJU6nbXonpnou#J`j)w)uMycHERtjoY3P! zVp585$b^F?(r0M_ewkjB>4!dBc&dru^xD5TpkYv2mA;?|fVt(PuItgEhX-LtNNC^5 zm5gMcmDaW#_Y$9dJVSlCR&mMc1t;`r5;^s~nD^E?nd8CT3-kBu+(CeFKg^Eya$mi0 z887+7+maU)sC;lSd$qt+^z!IqLq=voO@!a_TFY6;uRZ3qV&Qm%4fOO=)RWYN=Po*z z?0ULwgXI1a1L#P}Vur2BIon;2mg5%LRHH)fL>Hvj#+L8p8Lor(#j;xc#W5XznY@2B z8(C&MeOLJlej)2jTt?E+XZ0rzWX;ZeQsMpntS=Qm+@36?nC7AAW!KCf5gwr#_~ikk zzi=G}HRrd59#$cdI;W?R__1|%xbvc>0J<~S;IzhVeHjt8W+bWk zo*cA+`S~Yianb~t#8a`)`u;*m5|6cH=sVp*&PrmYj-v!Y8$$24pCKtCE&}R-H(X93 zv-;2*+t!j=EOHd@BO8`<+UmU&nsScq7hSKtyx=Z6>zpuTKpgC^bxuoAMK)ncwq42yr={{Z(y5cuVKEUNi2&K$)|AjW+}g6e%+LvEyij10^3HG*EZF1A8$-!{ z%dH@|CBt(Tg0ZvNL57K6BpzyuunoBFVwRo5;3#A!nYWe8(8#Rm5GR^;D^r32+4w47Y(mJ*X!w`XLT{ec4s(vc| z|A1qMs$-`vmZMa>@_!TOT<>OT92-ZRpr2_sdNT-mYG%;ORqfNtZ;bx02=ae5?a;ZX zs}&kXMk&e3JKJm}X4TWVDyh308ynlNfSw1UZVA`Ol$DiHa_G#ju3A)2LsL_|kGDNf zH*%B31%Vdpa-V2tz!#@S<aMhs2eZN&vdrhg_s6^5qKI>s0|mybNHJL`3}#rA*)uJ z^&@74?7cm^eZ4L%eSI6tZ{7d~5$~by9But`-_ zT>aa_BgiC)p|qW+V~kAMPU~vt4Up>hlBX;|Lz&qkdOk8)(rRO&9X7$ojgx{6p#FVGEI7mC`fITZmmgCn zMlu#dVxiT8R)uaxDFBg(7 zHb)C9QzaQ_Y0u6j!vtmR+@34&Ij{D-47lOx;lY3IbH3jZ-w8aaH8js3FSD$|_5+{D zb*uB15f^bfe=+)D;bstinR8xNPgt zZdG#0^a_3CkEc2mssU!&eFMC6To6a;eqhO-uU+1~v~l|kvyxSd$WtW_Vh4jm&c2+m zl*3@cY<^{&m>pA;BelTi&-aiD_X3_e#?UjK%m0kSNGrBBtlZU&*ypn>%hGY*1>#>f{*tbtdJc z=hj16fwRm?3H-p9v9sSA+91N2{&8`fWji#5nma>#Ij5~BBKS7#Wz)UNoSHITZl+(R z&tR|#yJ%hmTeACtvS=FttzP!#a&~w4^X;jbSx~{`@W8p+Xo!9v(UFE`xQ7e}HBwNZ z`_x6FDTdZ{q3eZ=G!T)&Ha`-vI`gVbj&%zl3d>6y8dx*+wjPG#dP zL?|x+wFR#nI9=oR$93oB!g>q4u>Tv-qNFY*j)Fa(JUfKY1WgKx+L-xT+@)5i zR_4a$#@|*L;pMWMocDg7o_cLaI`vIe2;0h>Esip(;Gc>g-c8xvC9ghbT`HvvFoye^ zK;v%NtW_lhlQRQ5R=V)H<>Gg6wWI@3k44n1tkktyN>qcz!uhPSt^OgpAjW5c^1VJL zQf@7Gc#Bz>>*uG6f?M39e@?Inuv^==ye?*`enSqD5nxXkwb}9+&xm7AEY=ksYxga) z)uUC9YJAM8O+M(PK5mf@QXzqYo_ggJROKz1F>52v?S?>?jC^nAB#7U z*mbM--2>QUWn@)uO%(!xsGA=(KHuEAQ{TAYmq3QRZP^w=(H+aZ=1pMJcIlOCnLE_) zsF^j>)0*;=-PWrZ{`0K;n9%~H`bQKNl4$VtzF?~rzgG~4a%YJh4`yM{kkMgfw^;p7 zOb`jr!?2jPd{XS*iL5x4>O)N0;JT=-ETE$)F~c-Vq%=ADubOkX`-zigOpD{2m~8@G z?P1mXO_QR&-{#&R{K~Rq3v9fz+B;sqaa=iBryl1GZ(?SXw=J^tP$#T?Cw)|0cvoF$ z*J#K6nZz=~F4BK_i902w#@gL!-F?TcMY2a<qZ_S+`$^ ztax+B&$}sxQ=i`d+)+qKs2=5acJ702#QL2Mr;2#n5o9g0v;0{hmdmw%vZ$y?H*!H4 z!MvuN9ZhL#q-q0YCKVSFsC4SefrY0&_q}PAB3UaichHIb2$;~B%A`_*9kN`ir@Hid zCF03{j_yiLLSkZg`n`W;#(!jwdQykEwmGdPl~IH81KR&=dlofpF8}TzxM0}`{W{ER zD=|;Y_a;=rv0=P^m(JDIwR%BO+0Zcg?{MJD*8u(Zr-vKp28=R5jwBiW5&*DE*q1LZ zZWO@8*G&k}Ci8XJLjjxb<%PhN4_iwFMgBicR`?fK?B6mSPDSd8Y7mXySS<~W=k<4p zgv^^i-KGp}o74mV8EemS+PJ2MhKHx8Fi?jQGHJe6KDoWk2F#bk!pVVMLqmf@zp4jl zyq-f$#r3=%;4AAs#Q)>8X$Og8^f~0N*OmVUtOMqKw}id=z;hpJW^6&tb&Rdvr{O6+ z=P?5Ib=l^3!D2Gh5`Xq~F^6l@ROfE##9WtI+jwQ0DNS zTyV_cH=`XO&_Pt=jDkGQ1&dn8v`zm;f;n(&oo8B+@%;UZ_5d>E#Hcy(g9e?KIAXGG z7cD;Pa6EP_Ui=&rYeGjq%C-c9y##^U#LPRJgY2{0NXxms2E%K95M>Tpk=zQM9<&M5 z+nUuE5D_*BE;F+aJZk4Hi?Y!5Nwf$rW6#PzsNp1K-VpWmtQt+I_3;9rC`nx9s@_(y zXqYm^obR_9m3!oELaG_QqT*S=RDYsYj_(M2?FO#IuPWhyHELSkwg1A)o4Aq?0p;L&*@2d#yZ0Lwi*sw5PYT!OZrSrE4uqjndNn zatVzY&uz{o3ku4oGefj{j3bA^s}-YXq=6kwviG5HI%^+4s#OV}^UVNY(e~TF5=vcU zmU<$K`T4pnR~DdM2T>?K%3i(iJoxDIf-FR;EpA2$WKeCh?CCw9 zY>HKx3g_?}u;M54v^wsVZ{F=y*8nxXvyAD{p{6Mc$!jWQ&wMJ%se&BSplO`bsj`%A zcD8AsN*-5Q&1>R&a;^!4Q8VvljQq8o5f~_L$;5G6ONOW4;2z685W@-_cJDdnwzG_K z{_N}A{|r{XekTMAp1bM$Q0GBxebTQn*%?+^*bg06wjJz!Inkt9>KMPTt+m>AO_$^b z2$Wc?7HC`N5%N+%G^JpWnD=0WSxflWbJMtn#ywPgK}@~*;CZZiIL9Pq`jkyk!o!8h z2Ql~i7YbsEC$mbe6PIS&UiRZvnEQQ%EtK4(H84!Yk2qOb1?tmYQAH*^^vqb`CoQmC z+P~5E?rm?uP>n7q5kd}fae<`Q`g4qJZ&=T!_+KROi&ytn9W53;k(Vy2ZQKp; zuM;-0e4{4cl&;x=>MhWEn;(iCdK;YMRS=jXPP!ZJ1O=wx5PhlgWBq1nK6Eql}W%1qZc*E9E z;;ITFA#bvvYUPq)?^qo^q@-7Ob(o7$BBVVH?+<>y508|;97 zpS6!7{?;7$AnY~zYa8oi^iKBmtw;|0bMh9^Bo9?)W)9Wz@$DaM>Vmt<$DMJPX@e*8 z=On4iD4N`g=QXyC?COi;OhVj^#L92NS;C2lZzoFlss@To<}P)nL0kzW*}MoLZ*6;% z=jsiTb%#_H3EX?Y=|-__SZHj=35c`f_h>-&5_+W7v$pU?CUAEQr?cB*qPmUd&%|I} ztAR(BRDTdT(EWqmtDYPlg~TW&M}B=4|LJcrFGy%^;SnvSCskr+n-D4^dL9+pyG-~} zGhI8ONCr{&^YbIMJ^c+d+ZD;Yl2cRX;&{xG3<*)9T}py65I^|!q>qch1Gs}M{!en} z{uk!x?}>Nv#+Fn>au6q^k zT<_+L$r_vXZaC8)BK6WXG5ydn6HtAoIf8ND>2ilee%`t&2F42KrJqimzKKd48hfP0 zV8F0ZSW{ceiiixpS?FDcu>wJ$OwpR)xqO*eBS7O_4 zAD)l2em~#6@o82AVfoU^&hJH@Hq8^AMsBy4A+qu&#VDh1rc;%Vyj1R{$Y{e2p(JK1 zqYkp?^uSZG=KT8CAa5*}{9r~^3R__TTlZWen@vr+H)%e=K{VO)Q;wG$TFD8s)WM9v ztb^Z-oQTg5OB=Z0D>>K0{9DHE_8r}N!*QS0fZ<(2;sd&6lZ1M7>*=H6neVOF7t+(O zFsWOeBb-2km?hunz4nM6ug;PQ2ji&D_q_41GKYze0>d^2)0ytxjS32aT5YE|fk2JV zd|!Sg)Qc&;BpxDmWi_DNr15?0eyG*Wb%$6<`{%0ahzx7aSRHX_4Z& zE;IMmQcgZkcHs0?qoaX%^RNOfs3QePNnYq!q*}kXCrl>%}n&Tk>o*G!j01Ca&Fxb**WCE34AKB+-~yK7CCZ$54!-g zGQDM;cQT^zI5556SIfItUsh^!o>rf1$zC-e^RZYZpr#xz7sm}GfmzX;LF>7{&&G<>(SEFz$9{W`{T zWglA5w`-)6!0&Ir>*|jkAs*`q@7|yLZmgvllWM0Ns+*wt_?^_3Zz=rZm@tupn0;cp0%?& z_CBUHK`@r|(tQMOqoY7{w^0sPdgwE^e*I+#?A~{eqH~=Fw5#`x)?DVU)9cPuSzbjd z5yuokG9orv0cH9Q260kewOk=Xre7%<4aW5=2Kp#!BOkK}io5|FYD(#w-x5@NVY#h?gCsMwBxE>aOd?ZnkSUw5BX&y@sZS{XbkCBbr)W|+1K*W*xiD%36{)HUWSl9MABuG{i zi3O5GwvsUOSK7q*{4n($#7I`r%1dFX*NQ#Lwl`(-EL5a03Yzth8^5&F4Rqrv$lqH( zbG83C!C%~7;CbE4Z7V7O_?F+27%p%^g0=H`BBuApeV)&ua*-cu@6FaCoibl`+YT;X zbzJj2@p|Kmv6FK3tYksZkJe{UWw8}vDJUsd*U$^iWE(XO--@X~6q{k!LPTdghZ6k~Ck2b$G)1apYB8rtczW8t*>YQ(ydC|zY zO}tUrzqJ?rEkG$9`4lPb6974ZFSV0Pj*p=Oj0_D?hw@Zy*eO4< zvG2OQs+f;>0WpmQvJ0C{zqL(%bl4nl_ArJRu&n`I>go{!GY}+u<+Dd3Ga815CEnMr z$4O`T7|WmDPBbc3kh6Kebg>xHDfDZ^>09%l{&=0kFB2*{-p}oUFuEy3xBo;0^&7>V9jqai1i3mwzLl(dnNChAHpoI~Q(scU(cNlTiuK zJJ8a1eG6YjL^^C+JoHD>Jov@fTQb|sXvF?%R{Fd_XeaKk-Nlm#Fdy{GU%s04zLD$v zRcTWPgY?QN34`(KJs~jD6uT-5V7IZICDx9LO2>f}21?T1N`{Hquf=#8WV-&{c@Qe{ z8V+$PBj*22C(7$h|4?P`;vABeR_zV3sC3)=`0BR7gU7o0lN4dmwE5Ql{w^WbO{Y5M zu2wIsJUo2-JeJ>XNYCCMBv#K{V-obqISfNZ(|g)|gm=C_NUmq*_f@g`aMEYUP*`-A z7kA^D48s>iT`IK)4AlC(LOf;91b?;wpC|lnX0A3BP<3wvv0me78L=#_o8ylbm2AWy z>8MwnBK^z#&o2iTa>Bi^w?fFc{qc|0mrI=X2}AkWeUwubdo_Gj&8_XG!L+($%!5Yu zM~sX^Qi{ZCV~InV-`DPWxsY7+d>V+Eq;EuLbr?Q zWKR7;Bhl1vFXb% zWctI1gCiM1V6{>|5|w*`duiT`6ioMWFr$7>rUq4Lmm&ZRNCkU zVc}+lYKxLE1$j|58*=P|%2V|0afNPco!Q1Y1(a%fh8gK}j>^@S@J_P|Gq*8vTBzp( zoIt1QR`Eo=cW)a{pXL!0sicGlY`H z=_ebNbq8Nr0z_8}I5QvU#|s~KbYhoh?iW|+U>=st7Bh%^sQ=*S@DbhWVh$-HM+el? z5rV0PL*tXzU80P>-sg1Cn`WcJtM<(vdkQ4{6fgE#-VAF5uhNi_x$!y|NY?BiZZdVSCdmHWBvB#55>V$9Y;^*B)2_~1{<>P!=LNK#uFzd5eq$Dax>Ui`|a z0FPDvc9p4_Khrio5^oXllWRTsOx)|4uRGQrX1mt$K2e*VtFWLzq*UCkfvxL%?{ucG zkEtXJ2dnVDmPROAZ_xRh1)L>(%CD+mbNe`NkpiQ=ybcEIS-Z`CR|<+q{WV8pZ&(fv zK&Jtgh-jCq@3yelOPkj#CyY^z_b;i5d#_u^14B{p2{QHbvx75EZ=O|`vng>;#53|~ zwcjWN+c<1@v2-eT56ejJC*fvD%3&<4tRSPYCt9n2%LEQl2i(`#g#0jL-bn@Nb4w0> z|Hu^8r>2FaHbx&)lD%_25KMcoD0@naX0cj%FzluMtkv7LoN2EW5`t`JN|HcM6%8Xr z52qvJ9zlT*I^Q-l`#ERh3!$1s&EmA7!5)Pz`*C!UHl=MruFX2Cjv%v{D@lJkv6ZQp zk@8j1i$>4QkEByEaP_`n|N8exP?aVXKo9+UEXZr=)0h9q2>p#*O1Y`3w)B>V@ZLgX_1nV3rYJ>Z)4aa{wLo~cgaST4g&w{l%w-EweC zGS)l|SS-;1@!yG$e>-uwv9 zr`XF!W}yR}C^2X5EjtnHl{44oKY|8N5528MAFfPl*{&XJ0Lp{s-B^NcvHJ`m zcliUC^MSaqmyGgMpJ{(khj%dSza}hvxg+l0a-fLGIVUW73cEDWK5w1PGKK@d)#VqPch)~wdMEu$E35pr$vWtu{ zk6J;SzfW#bp0C_Tiyof?1Qx{228(25i@utPmYuxJ z9DKfNwvz2F0g>W!KdO<_5SuH(vYUK z1kG&6a02Wd~D*HF&3W_5Z@sZ~c}-uCU}Xj1V_VXtW5@ysbD}Z}0R{ZQ{?& z!F9T_=Zy7gRGiELOz&ZUaSkjVrGyw!7qR>k0-goDnk&>!BdA#Y>64Oi3f1$;;r(mD z_iCK5W31P^r3jpU_u>c;bD}+-W-^!eX@0LiEcqAtw%|KLL#rS)=^6|!DgW~w_ zgAxO}|D345U9ws^ZbTmWn{)n?2u0wWLDT?cS5AC|s3zR)pgCJ1whm?Yw?xEgKyL%m zCh{WthtuWCexLYv@BQEB;H#%<9GAS{j{iq_kcX~rS8D1F5I(rf2#GqE4K*N^t%nqF znEwfb!Tc^xg|i8XdNns*kwNl%dU^)0&I5lFKpQ~#Ux0;{Aa8GPQ6KE~B*FXvIa{@D zn!tniGx~=CY4ylTcdQbVI*{gufguZe#(>l( zpI9$Q661TNkFz%3zro@_)-YlnbZu~!H?9 zgA*Z5OLuM#r39oPHn4x()}mwO1lq-2$kwd_oZsQ-&8ykHm?7=v>rFfWAaFq+{nP_< zttpXKN3@=`R?~8C5Rfp05Z1Xf))&z!2p2QZ($sV{_1->dXJrFe)4+tiCc*%+_n#Km zAc#QbU8_5T5)!2h_hY^%d9ZgCHcFLjaWPvThb-ppSQZxaK_b|Uc>HCQr&EzfNm*?) z73+7q3J}6c?|ymIA5Q7heP_;aM>mwXHk$gGjWay`)fZz}?Q-#^3UMvGL__;^nkE&Q za@SzC`v5lpzUYDH+rR2bD8nJ--q^XUQ=9XuGhYulBQ96kLpMSP2we(zSbRdVfkXT? zUVYd5ihAxo|Bq>O`!BV*-%RJrJcWPRQ-;64jn* z4Z2(}J#bOw(9h2L3DNi}t^459>!NRO9qzS!dpl2ZrSF=Pg|Q<2t)As8d{1c+sZ<8> zd~1FQwOqTnUf)!{qZaFw2(VJZbR72*Rc`@ zn=f$5Ta|Xc*s`tErAf8T_cnGmP&%`|6H(zMUc52T&~P2Xjn<$s`e>W5$D5~BmH1$@ z90*g+LxF4`tBwc;^mH{Gp4%|{YU+LE=fJAXddK4DLIT4)wp+8ssuqJGe2Y1Pb_-4# zb*-2|E!VuTR5KZA#U{bR(W>M5E}c{c-`-MI_NttsKPx?YdxEX0TO?9evSC_D!kyk* zN>jXrZP5vb^(CZA_KhQ%*3Nq7!8TP1O5iRE%~}mjzED_Pkzl!AhE2+Nr{+f9cfaxR zw~6t8*<17u4pa=MS4~vF-8l~v+zXE2FKlm&cDdaxp>K*203xt=rbiv5!stY+fNbr& zy!A|5pOb|kKnED)tw6e0UJ&XnnESIlT3);?H?5`zQ-uZ4)b%Hd z?5ZjXYfFIDF$=9V3RbvYEY)SCdZy?LJg-`&6wx1F9EE)EgiT5&L1#YuB$EI!{zey1vk9$^0e5fKJ}p()VK&6c^netoZcYId76y zm_wpLqARXBszbDF(ThS$emP)rt1Quv7%pv&tQX_Fj56Y7;)UBUI$5p@zeCuMx8~o2T)OHp)}va)ZLFZ=FYecob%?fQ@D=J@yZj zD;FrNdeihKAzK~5$%3hA`_a)+d(PoX+i}YN(&-%@9-i@0Mxx}8b@rw%$_KkB)~fJb zz%#3l!Dk=*Kd@4mLBBCIoQX-(z1OzG4 z1(YfvH9&w6gG!HrAdwJ%d7CpE0?x_-1MC7c`E6n8+#Ko{ z=f#Wo5te3iH}Tn&Qn?gsT3x#kbF*)LtW9&VgYY`KU1VJB-a|V<@VcgphzQUzG+=00 z{Zmp)tPFhT15>TlQ?Z=&w!A3znzw1@Hrcnv?pcktMQBv=GL=ZjM9g)kJ*+Npgjnk9 zCw-dw!by2W;}OR+L1U7Hz0Dr-FYq&3DbKl<8`Wjfby&2iR2VjMXX$CUA0Y*Np>T(? z!hBG^ZK3~qO!&rG-@&!<$D*P;bqGOyctr@JDoj%g6C!@|#f&I0tt`m=0Fm;vou!yn zbQS&?`^J;SyV-MuC&=l`^P<>?Z3DO#l^Doyp4f`8k+h7hPgkde|8OB*U;`_SXiLUH z#9+dTX-tKrr~{fI?lVntoJp~aQaPJ((%R;xY)n+^Ols4KiOy7T_M^{PkF%McgHxOJ z+RUJ~X4L1xyMu&qvbdSw7AuL{Cb}w705Hd%s@Ry(v>M8JGqVG9!-S& z*9JS|IMYD^4GOw2DE8(~&l5uY`Q<~~>&4GaPR^ZqzcigWasAf}p*pjGkB1mtPP5wN zm{t!y7`5>J!~NL9mt>S-2KP3{PVo9fMjg;N`udNehk^L^w@B=m+N_<5v^?g7(~8?W z7s;>)j;Oo0!Y+T5q1;WPOKKeD;yp}NU0;^rYq>^z9kd5!RH7@q%;`ZJ8(c01aLa&; z=uy0Q7Zd&+A0ca5SF*O1BHLjQq%v`mcjx>4J0d51(!mwac0YuB1>oiiyf{qVSp#WY z2pqUaeyjr<_AsC=*CE{QlC<)!W|b$e64Y`Te@Rr-2D{dfgQ-q+>&iV4N%GN`H%~k9 zam*HC;I-njhol*#D^M8Js%*R5acNPQ9-)*u9a)b&9@YA1y;~Am|B2!jt&G5OXpzP7 zD{#Oe)a1#Ab(f1WaA{qm;0x_YE>04p83immQ+BK%w-f8-Rtl;^%g|{bV%#qtUdl_Z zzABEWuNtV(y>UGnJs1 zWD~>Nt8z=j0F~%bx>0`Gfy$?vs!emmiR~55A;G7zb%DAcWJ=T%l`+xG^_#K=ZA8JmwV~`M+Vf8bT5#iw~e|0qp{SA57wGO*@ zYrC7Z9k`M?YXenhuSXfRI!CaB4g*+X^t2YVkLH$vbIS;;z*AVtSTOqy&(rDG_CWVf z>vfjuu`coX#lMP^>^j)I%A0EutswmO_yw+^bbp%%(zvIsu;5{^sPU$W()Hi0@3pdP zYg-1mmuTW8Ba9G(vHcMzXMHO?_ZTRs^f%IZ^e@2C@ZT31TVN%?y9BYvglmJEzkb~+ z^+kjW;sf?P*g_uH@BOO(&d_${FU<2lD=v`pgMo0eOgDDe)*}!g)}9p(+nv*947&o` z#aB=2F6IPzkcpZ+)kW+*xN=erL#ZWsvgOFF{3f6=of8lOp#h)%_i-}G^1d`PZc0sl z_rnv{#6Bi!f2hy49A#i=XeTg_vi&{2G%<*IBb=M%YBmm;sM#qM1A(^ES1buROWe~A z{oHY*KWY?OlHr-T!sbjx}hBB8yxZC5TM`uuqn7M!&SkGm(d)jrb4>L-yj(7tqXK7R>4Ys`r%A8fna zE*bGY_t$Q7MW!X)s7~+RIdvBd0_>2Ljq(h34%nC_6pA}e4!jbu+v+{52}A6>Stn1P&@Tl%wl7P53-ho z#VlIQXnXCJU2~j#BaFqkN7^M{-OTBg=CZ@9eXmo2{90;(0pZ&r&GMskM*&n^b&Ofi z)<-ErykTu%dsAP^dnEKIYQHpMCr6uqgZZTS?<5=Z+^Bi%fI=29X4eDsNwgvV z8kxK|=oUoJD0ar^y2u zd1vGwf#$z5PWgt|N)*(Sp8Mb@YUHH8Z?~PnZwACr?VQ)Z{tmclUvV6;eA!XB~b^~wgTQ@7nd|ilz@7F z62y>5%FwRDV(Rz542Jfrq}K&j-=hs1R>u+pWQT?VRwsa~r7MCH6&d}FZjs7?3sBeq zwTfo~_7U1W0@ZcyJpS{B#P!Zc{#Ao&4fF72E+5W=;RgZ@jvqSY>+U45K4LW?tqbxl zn*WpLmc59@K#>{o@^dtFvANoAM?W-RkyPQb0+2f6I|DVut|f1b?YI)6S1XP|gl*rP z!pY}C|6KK+(Nt*?7sa$2yLb~k_hApjJXs$dyq4e3hlUMYUR%UQ9q_9!f0_xZsJOI^ugsf$U>D0m54>>|(k{&+pX(9~*_Q#_kRt%tX>=sD$? zDg)Z>HM2Bj$^J3y^3Wm_6Et#UUJV#Man3gYhduitt}STok!kBB_$3|Ysxajl0I=eb zPsC#L_0KEN_l=w6dIG%0)4pKj2BZ&xQM<`X8qY(AW?gx^is-n8LuB2ZX1cFHGMU3D zNLoG|m*N2dd3XF+Bn^gOfD2X68e8a{n(r+LUdCG|FYtIu*^d%|B(+rr5OC{Mza|EUN)M{HD1m1MWQK@Z}lI;KdF?&0(GVJ=99&>92&$ zl?(-^wG~*z+9|;^#ELN*W^mn#MC0#011ya-uqcZOoHd_52sahG%`=?|-))Y0&nJdRBE31!KIgSiB()kF0>3pb^5F(DF)arK&BUSFmx$m?MTO9qNIp7do z+m^Ofm}bch8likOp8?RaI0c07H3BtuYRmiCngYK|&FHTAHjP=dC)qu3{)ValGm-u;>Hq*vo86RE zR?e}YW9I@5{GKMCB6ip>pen!hda4wc!tA8MY|%bes4PwqYnbSiTX?k+bk#;|%hP)P?E>#^sW2WCigpKkH!cCyNAX2Gyi0EKZa>(wzv~(RUnatemesUvy(6qf&d~l5~e2 zb)v@0Z(7%c^!C{3Af})?9_tZ&$L#}z#i(uEm23?7I_e#=etR^DUr0qBI-VF-JI~ym z&MQ^QzFx@~S*x|>*DIZmwhULe*vH;Bg@Rb?w&*lex<$g<`h1;Ny&I1AQtc8NHoh

I9Bf9HCj5M#;E-Mz8o~L^vP^)0Ct)v_+*H%4P# z0{f*3e@gsCc_(0=$RkbcKE$0_wYoap!i`H8q~b`kh1c&})WA$be*8HDi$gT}SC<_7 z0>rm;9NCDoD1)thc)8N;?byAEzT`n*6ev+&rSs+AU%Hp{nq@lF$9DM$wYF*r7i>;V zR&8mJaG&NwDp~#f7IF&z#H`rzt036jh>c((^e=hysh)mZX3=!;Ua*eNM1yabrG~U^ zg^_-zZQ>t=QM}6MR7ll`FVFI`qo@~{Yf%@o!?ZN38v2V-DqbE{C1<)(*R3TxPkEi- zX}%#UH()g1qftqI&2jadii9rDVWId8VK2A*$Lw$aZQujcd~wrzII909NyPAJxrTAx&D_*;8@Ykw0m+uvEO9Su1t3Z$u`CP54!zgV#9^ z;rI+s>DEr^0y@R(NOj5}xgFblyrf*?x^-8hnM`L{g?XO!s=P1qx*W%7@erkolRGGc zxg9-iEpnU>^0Yms1QwU6T76x!L%-vDPP7h>tA(CVK_Sr}_0BWW+oNiH`wxSnogOrA zmk}bNV_`Cz{Wr-{650hTRl6b+1{>0LGZJ$&^z{-M#SQSnD6FikJ5oIFsQaw$>CrF9 z6ZbJ~QV&ocE!$>22(u>@ukrA#w`RPsH-(&hItn#D!Ba8pW~Lz*ZI7%``n9R3p&@AP z%avwM{J4h{UaJ`+=URz0aOXFx1{R4EDjre3Cs==P+6LzE=`toqJ@$gwY+g(KX_3nl zX+n)oZeh*5a{hWi3fvj7RGf9FlB!Dc!#8!GKkT7+jf!IDI_=BWVqn*5vW!mv2%g)+ zOVAfXK+0M4Ni*i^k z{ogzfFVFw~{-5W0U+MUZ{+_g9)~5{@Yz%YpZLSX(vL!T-oA5S1mlLRE^6c^%b>VfBL}C+s81OuSeRYjegG00O`jt741q zS$fXlE3G9ba$I_H*xon%_<}$T7Zi|!At&IT>ew;(?Z*_gadD@^S6a(ZG>LCoG5(51 z+uLZ5kubln`JaO@;58D~sM}`H{jx^gdg&3@pN(*Lub=ndA0$(mWD@B9LqH0KtiW=z zxh|(w-nL7tb7{3M`Ss_RIDM;EluXKs2a$vEFNq-~BeEAIX#d+m0J!EXQX*};7f)SZ z?~wu4*14s?{OR~l+!m*9EVFu@mBXv&-6?Mgbo7s|Q9tnL>FGTi-To?%+GSP9lSknz zv(eylCKJix^x&siX8|34y@Nx54X7OaU@VHpb2SL0LW9X$yp)%k(&`Bn1FH)qcR5tewMX?}BRY0X^ zZTgz8FX$i`asg4G8hFL8A9x#ZiPomxv9&(|=f4C;zz@t100000NkvXXu0mjf!meB; diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-pap.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-pap.png deleted file mode 100644 index 88e0b76b5afefd1cf1dfa185be4cd8899ebdfb79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42978 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 aarV4n!_WT3PUQM1fs71Hui^FYKKw6|w2Ybn diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-policy-editor.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/basic-policy-editor.png deleted file mode 100644 index ac3c3a2b544dde84a3cd4e1570d658f27dede34a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37515 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 diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/calendar.jpg b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/calendar.jpg deleted file mode 100644 index b609c898c5a625c848c7bb242c73d5a4349601ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 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 diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/disable.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/disable.gif deleted file mode 100644 index 46c2b6d41fe393ae429869a92e20bc80bcd47672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmZ?wbhEHb6krfwc;?RV_t}#V-+upj`uJnG@9#4wKP5+fpE2occguyxAHUR`MGKBfm?6-ciejL_S>JE*BRp1ehl+naQyKHPy2+07xb%leJ;#w z*m9F0ab1Rg2}9~e*~Eo6CQbXkWWIgtfeCx>DU|IrXxzWy!gGd%wfA3rxxI5gfBFWU z*cnq?BNPfI|7M_g{Yc_a9|Q+tlij z#E`T;eMzGDH?Pt~uxy8g@)hPXBFZH>N7pZLx|3rHIax@k!2%S*X3v$^swVPIxuayfg3nPG|WnnS$I&MZx8T&gxI_Ilfv zNLVS&Gg9YjS!^O_JI}(&K+~1Y{bG}}p^S)#uC^C_%kDou=J9}QgdDA~}%DZ>( zU%h_4eaEg}K=Awb$4{TWegFRA<;xc@UVi=d?d#XC&tJS;zhTpxw{M?4d%pj`p${KE z{`~p#+qdt}pTGF|^Vjc`@Ef@CTLgFFMpy4j z(9fVCQUqy1c@?_QjhC(Hq6SiC}SYH4dzYm>B1Z?P>TE^;BZECjq36k|}UZ+kHE z9?nKg;B-#jk%I+=BvFV_AxRuaqC(Qz7m{eUy4Fb^&tnv3mp8-^#1Ps^p*zPAgb=)) zoa>0gdECSApS3Nk^<7C19Am4K7)+GP7FO0_36JwxT3p0K`23^Ng<}YkcE=FB`t+@n zb~{UpTlw~I3%k?hnzi~)_qweEqVZD2eCvG`3_%{Uv^a}L@NRl>-*sPp{Mwtg*%jM$ z6OFM_#m4q-SDaj^n5(Qp6@wkPD`shN3Qro%rZ-db-JgB&VXA`+WNC3@pV+P&XpVj_ zsjk<3nfqmCX$6*Xw-?Mco6Wz>D?`tQap}bIW6HHno7+2ZElZ07z1-eJxQ^<~(n?1f t!JWO(J~2y+Wn92(JjcZ>EjIRYe*ja?mz|nXKehk>002ovPDHLkV1oIT^tk{4 diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/edit.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/edit.gif deleted file mode 100644 index 90bd4dce695dffa491f2c9977c6d30a31ba77740..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmeH`X-|>?0D#{vqqPdOgLT`eIkRPDP3@SaD=hP9tq;|vHOtB}Ds<||%FN72s4*g4 z$RQ#~p{R)mnx&P5pn&iyM<5u7me)(5yke`b{e_;d&$nlLj>R4gkGOyYkbs*Fn9M^i zm#d{!(oP2)&XJ#EV;1YMPH#~4Yc$|MzZM)DAD^3nd_JGu;iwhWPbfB+cz8&cJ~K1p z(%*yzuUbkIU>JTU5?ISlv2!uZyMdBdF|bPmLu!NZo3p7Hf}nSe;%tEuPiA>Xw6n9b z20s1{x2N(kAbpu6tPx$McTSIXkIUD}YiU1*)j|@`)ZFU!c&yFOtreHm8m+VHqMT2> z&irhx-V6<V~I5**aMmxEju-3uw%#j##U^_tF5wAIk>0k#zt|oOh~nVMn6tl zn8ojXn0d(AUg~jh&Fm{iX8LGjUiBNH;BC#AkqVMdYH7(iZ&dJyTN8>+gc^;Rd9b^Q zqE*TZa^nq;w!`kpkBJZ=5m<^qi>DSmKn3prQ%$Md z!Y$$ZWU`1rYuqBlE{**>c(e->v6e=>WPi@B@;gTkKFO-PfsQ5lF{|cd4wH{0hd%Si zb#x=bu#v;P`AigI_rYQe!(jjb diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/enable.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/enable.gif deleted file mode 100644 index 1b86800383fb85f4c76d6ff5372f2efcce12abf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 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 diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/icon-refresh.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/icon-refresh.gif deleted file mode 100644 index dafc8b36215aa8fd3d792f82242b65ba2e563194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmZ?wbhEHb6krfwc*ek>n`6{Ay(fNd!i4#gT_zi^JGs1mf5nrhPZwOC>NUYLyFcHq z-fqE*uD-KPN6#NjI%qWSZg;?3W3w9Lh3l4-ZY`dEtz++*9j=9bbyHiyHtDXrx*&X7 zt!#^3SDEgY44^r zZ>O~$tO}Uxb@KAD>W#U^S(g2m>lZ!hU3O#ok{5l>T~29hlU=4-#%;BjzGSX_t4+}4 z5c6W211Ao~&5gHeGWS_%ShKry+2$3eFQ1%zwIy?T+Qzdh(oY(@*ZC~JIdj>Y{)YXP z!Ap&1UhlH5c8=YvXIf_S>h-I6&)X+oXbfl$HLJ4p?e}+|YUb4BI&Jav&J*>C%M(0i z7|*#k<@kl8OV_W8niXx`qvtu(#J%5n|LNW5uATY+|33qjfZ|UUMs|jD1|5)jpg3V* zztfQ3lpd5S<7FZv7S!D9!oee-=sGcuuQy#RSl-y!+AP}G)SS6FE!bEfS|mloK~~X+ zLA!~=l#MglQOhzw&feI;Gbr9$HpzouFxJx7flbj~NZ8#-SzS;;BwUG`cdmg7msE^~ zBa^X?O`zyXV_lU{DZPLcKLKNrkd;3^gtF=xeRy!4v+1Cu6N5&Dph4roc7Ep^h6PW3 zxI`lsIJO8VE$n1YuXzwKajEP+NyTknHY`e>ASNTYY0HX$g^d#>R16ZBKDRWquyT7a YR2Z>LUck)g^`)aQkzui8BLjmq0GaaaX8-^I diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import-policy.png b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import-policy.png deleted file mode 100644 index 9bd6f5ecdcd3450bb852430e6388a8fa695234a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14820 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 E0i%KsApigX diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/import.gif deleted file mode 100644 index c9fb1df14b31c1e6b3b67fd3c44ac1d84aaf734f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmZ?wbhEHb6krf!_|5-$3*>(hE` zs%KTYHqLTwn(f{?Kd5PvN83WL&ZXYn%YAxR`Sq{$pSV77^5&qaTSI2-2${JnY|g&$ zx%*T4=ciAYpEYH1&Xk4O^OqIPSXwrFdDQ$vkqeJREj(JV_H@mb3oW9eEn;GAk`ir_ zl5H|F9rAKr3JP6{ioNRUy}D}sTAEFUrjzycrkfZ}GclfJV?Eo!exb8{Z=}-PQwD56)z~d0gDGe9NQ_yVrM5*|w)+&Bon* zd#=r0cW~kE!~3=!-n0Acw!_Ukj`i+2-Mj1LwB4r{>^-+~|HVz~&z)I+>c+ZLx7MD% zz4r9oHK*@yJbq#0@k<*{T;6cv>V}io_8+;v=FEc)=N_NxZaXt?-i_&f*XK?@vajRN zvULY{Z+Wf9=%& z8)yFCJooqJ`JcBg|G#tj@skt(A6)~-r3r3eY?E+f`IGh(Hxv~hlHEcX$I8BC`S;9oZv&fMnLL>F8WxxZkY18#L zngkjg>zf-|A|#`b?ACH#K__mPcU2}UbA`dTlriZvy+xP5tDRTRU|!C(ylj~l?* diff --git a/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/minus.gif b/components/entitlement/org.wso2.carbon.identity.entitlement.ui/src/main/resources/web/entitlement/images/minus.gif deleted file mode 100644 index 55445a2b9f421b6b7d7ca5232d42aad5b9b6864a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 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