/*
* 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.governance.taxonomy.services;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.NodeList;
import org.wso2.carbon.governance.taxonomy.beans.PaginationBean;
import org.wso2.carbon.governance.taxonomy.beans.QueryBean;
import org.wso2.carbon.governance.taxonomy.beans.TaxonomyBean;
import org.wso2.carbon.governance.taxonomy.exception.TaxonomyException;
import org.wso2.carbon.governance.taxonomy.util.CommonUtils;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.user.api.UserStoreException;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import java.io.IOException;
import java.util.Map;
/**
* This is the main class which manage all taxonomy operations including map storage and registry operations
*/
public class TaxonomyManager {
private IStorageProvider storageProvider;
private IQueryProvider queryProvider;
private IManagementProvider managementProvider;
/**
* Constructor will initialize new object instances for above attributes
*/
public TaxonomyManager() {
this.storageProvider = new StorageProviderImpl();
this.queryProvider = new QueryProviderImpl();
this.managementProvider = new ManagementProviderImpl();
}
/**
* This method will invoke add taxonomy methods for management provider and storage provider
*
* @param taxonomyBean Taxonomy document bean object
* @return return state of the operation
* @throws RegistryException
*/
boolean addTaxonomy(TaxonomyBean taxonomyBean) throws RegistryException {
return managementProvider.addTaxonomy(storageProvider, taxonomyBean);
}
/**
* This method will invoke delete taxonomy methods for management provider and storage provider
*
* @param taxonomyName of the taxonomy file
* @return return state of the operation
* @throws RegistryException
*/
boolean deleteTaxonomy(String taxonomyName) throws RegistryException {
return managementProvider.deleteTaxonomy(storageProvider, taxonomyName);
}
/**
* This method will invoke update taxonomy methods for management provider and storage provider
*
* @param oldName String value of old name
* @param taxonomyBean Taxonomy meta data contained object
* @return return state of the operation
* @throws RegistryException
*/
boolean updateTaxonomy(String oldName, TaxonomyBean taxonomyBean) throws RegistryException {
return managementProvider.updateTaxonomy(storageProvider, oldName, taxonomyBean);
}
/**
* This method will return text content of given taxonomy (This will be a registry call)
*
* @param taxonomyName taxonomy file taxonomyName
* @return String content of taxonomy file taxonomyName
* @throws RegistryException
*/
String getTaxonomy(String taxonomyName) throws RegistryException {
return managementProvider.getTaxonomy(storageProvider, taxonomyName);
}
/**
* This method will return taxonomyBean object for a given query bean (This will return from map)
*
* @param taxonomyQueryBean Taxonomy query bean
* @return taxonomy bean object
*/
TaxonomyBean getTaxonomy(QueryBean taxonomyQueryBean) {
return storageProvider.getTaxonomy(taxonomyQueryBean);
}
/**
* This method will return all available taxonomy file list in specific registry location
*
* @return String array of taxonomy file names
* @throws RegistryException
*/
String[] getTaxonomyList() throws RegistryException {
return managementProvider.getTaxonomyList(storageProvider);
}
/**
* This method will retrieve the results for rest api queries
*
* @return Json array with processed results
* @throws XPathExpressionException
* @throws JSONException
* @throws TaxonomyException
*/
JSONArray query(QueryBean taxonomyQueryBean, PaginationBean taxonomyPaginationBean)
throws XPathExpressionException, JSONException, TaxonomyException {
NodeList nodeList = queryProvider.query(taxonomyQueryBean);
return CommonUtils.toJson(taxonomyQueryBean.getQuery(), queryProvider.getUpdatedQuery(taxonomyQueryBean),
taxonomyPaginationBean.getStartNode(), taxonomyPaginationBean.getEndNode(), nodeList);
}
/**
* This method will retrieve the results for rest api queries
*
* @return Json array with processed results
* @throws XPathExpressionException
* @throws JSONException
* @throws TaxonomyException
*/
JSONArray query(QueryBean taxonomyQueryBean)
throws XPathExpressionException, JSONException, RegistryException, UserStoreException {
JSONArray jsonArray = new JSONArray();
JSONObject taxonomyNameObj = new JSONObject();
String taxonomyName = queryProvider.getTaxonomyNameById(taxonomyQueryBean);
taxonomyNameObj.put("taxonomyName",taxonomyName);
jsonArray.put(taxonomyNameObj);
return jsonArray;
}
public void initTaxonomyStorage()
throws UserStoreException, RegistryException, ParserConfigurationException, SAXException, IOException {
storageProvider.initTaxonomyStorage();
}
public IStorageProvider getStorageProvider() {
return storageProvider;
}
/**
* This method will return all available taxonomies for a specific tenant
* @return Map of taxonomy bean objects
*/
public Map<String, TaxonomyBean> getTaxonomyBeanMap () {
return storageProvider.getTaxonomyBeanMap();
}
}