/* * 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.bpmn.analytics.publisher.config; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xmlbeans.XmlException; import org.wso2.carbon.bpmn.analytics.publisher.AnalyticsPublisherConstants; import org.wso2.carbon.bps.common.analytics.config.BPSAnalyticsDocument; import org.wso2.carbon.bps.common.analytics.config.TAnalyticServer; import org.wso2.carbon.bps.common.analytics.config.TBPMN; import org.wso2.carbon.bps.common.analytics.config.TBPSAnalytics; import org.wso2.securevault.SecretResolver; import org.wso2.securevault.SecretResolverFactory; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * The memory model of the BPS analytics configuration - bps-analytics.xml. */ public class BPSAnalyticsConfiguration { private static final Log log = LogFactory.getLog(BPSAnalyticsConfiguration.class); private BPSAnalyticsDocument bpsAnalyticsDocument; /* Configurations related to analytics server */ private String analyticsReceiverURLSet; private String analyticsAuthURLSet; private String analyticsServerUsername; private String analyticsServerPassword; /* Configurations related to bpmn analytics */ private String bpmnAnalyticsPublisherType; private boolean bpmnDataPublishingEnabled; private boolean bpmnKPIDataPublishingEnabled; private boolean bpmnAsyncDataPublishingEnabled; /** * Create BPS Analytics Configuration from a configuration file. If error occurred while parsing configuration * file, default configuration will be created. * * @param BPSAnalyticsConfig XMLBeans object of BPS Analytics configuration file */ public BPSAnalyticsConfiguration(File BPSAnalyticsConfig) { bpsAnalyticsDocument = readConfigurationFromFile(BPSAnalyticsConfig); if (bpsAnalyticsDocument == null) { return; } initConfigurationFromFile(BPSAnalyticsConfig); } // Getters retrieve BPS analytics configuration elements public static Log getLog() { return log; } /** * Parse BPS analytics configuration file - bps-analytics.xml and read configurations * * @param BPSAnalyticsConfigurationFile * @return */ private BPSAnalyticsDocument readConfigurationFromFile(File BPSAnalyticsConfigurationFile) { try { return BPSAnalyticsDocument.Factory.parse(new FileInputStream(BPSAnalyticsConfigurationFile)); } catch (XmlException e) { log.error("Error parsing BPS analytics configuration.", e); } catch (FileNotFoundException e) { log.info("Cannot find the BPS analytics configuration in specified location " + BPSAnalyticsConfigurationFile.getPath() + " . Loads the default configuration."); } catch (IOException e) { log.error("Error reading BPS analytics configuration file" + BPSAnalyticsConfigurationFile.getPath()); } return null; } /** * Initialize the configuration object from the properties in the BPS Analytics config xml file. */ private void initConfigurationFromFile(File BPSAnalyticsConfigurationFile) { SecretResolver secretResolver = null; try (InputStream in = new FileInputStream(BPSAnalyticsConfigurationFile);) { StAXOMBuilder builder = new StAXOMBuilder(in); secretResolver = SecretResolverFactory.create(builder.getDocumentElement(), true); } catch (Exception e) { log.warn("Error occurred while retrieving secured BPS Analytics configuration.", e); } TBPSAnalytics tBPSAnalytics = bpsAnalyticsDocument.getBPSAnalytics(); if (tBPSAnalytics == null) { return; } if (tBPSAnalytics.getAnalyticServer() != null) { initAnalytics(secretResolver, tBPSAnalytics.getAnalyticServer()); } if (tBPSAnalytics.getBPMN() != null) { initBPMNAnalytics(tBPSAnalytics.getBPMN()); } } /** * Initialize analytics common configurations * * @param tAnalyticServer * @param secretResolver */ private void initAnalytics(SecretResolver secretResolver, TAnalyticServer tAnalyticServer) { // Get Auth URL Set this.analyticsAuthURLSet = tAnalyticServer.getAuthURLSet(); // Get Receiver URL Set this.analyticsReceiverURLSet = tAnalyticServer.getReceiverURLSet(); // Get Username this.analyticsServerUsername = tAnalyticServer.getUsername(); // Get Password if (secretResolver != null && secretResolver.isInitialized() && secretResolver.isTokenProtected(AnalyticsPublisherConstants .BPS_BPMN_ANALYTICS_SERVER_PASSWORD_SECRET_ALIAS)) { this.analyticsServerPassword = secretResolver.resolve(AnalyticsPublisherConstants .BPS_BPMN_ANALYTICS_SERVER_PASSWORD_SECRET_ALIAS); if (log.isDebugEnabled()) { log.debug("Loaded analytics password from secure vault"); } } else { if (tAnalyticServer.getPassword() != null) { this.analyticsServerPassword = tAnalyticServer.getPassword(); } } } /** * Initialize bpmn analytics configurations * * @param tbpmn */ private void initBPMNAnalytics(TBPMN tbpmn) { // Get Enabled configurations this.bpmnAnalyticsPublisherType = tbpmn.getPublisherType(); this.bpmnDataPublishingEnabled = tbpmn.getDataPublishingEnabled(); this.bpmnKPIDataPublishingEnabled = tbpmn.getKPIDataPublishingEnabled(); this.bpmnAsyncDataPublishingEnabled = tbpmn.getAsyncDataPublishingEnabled(); } public String getAnalyticsServerPassword() { return analyticsServerPassword; } public String getAnalyticsServerUsername() { return analyticsServerUsername; } public String getAnalyticsAuthURLSet() { return analyticsAuthURLSet; } public String getAnalyticsReceiverURLSet() { return analyticsReceiverURLSet; } public String getBpmnAnalyticsPublisherType() { return bpmnAnalyticsPublisherType; } public boolean isBpmnAsyncDataPublishingEnabled() { return bpmnAsyncDataPublishingEnabled; } public boolean isBpmnKPIDataPublishingEnabled() { return bpmnKPIDataPublishingEnabled; } public boolean isBpmnDataPublishingEnabled() { return bpmnDataPublishingEnabled; } }