Package org.wso2.carbon.registry.jcr.query

Source Code of org.wso2.carbon.registry.jcr.query.RegistryQuery

/*
* Copyright (c) 2010, 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.registry.jcr.query;

import org.wso2.carbon.registry.core.CollectionImpl;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.RegistryConstants;
import org.wso2.carbon.registry.core.Resource;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.jcr.RegistryNode;
import org.wso2.carbon.registry.jcr.RegistrySession;
import org.wso2.carbon.registry.jcr.nodetype.RegistryNodeType;

import javax.jcr.*;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.Query;
import javax.jcr.query.QueryResult;
import javax.jcr.version.VersionException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;


public class RegistryQuery implements Query {

    private String statement = "";
    private String language = "";
    private RegistrySession session;


    public RegistryQuery(String statement, String language, RegistrySession session) {

        this.statement = statement;
        this.language = language;
        this.session = session;

    }

    public QueryResult execute() throws InvalidQueryException, RepositoryException {

        QueryResult jcr_result = null;
        Registry registry;
        String sql1 = "";
        registry = session.getUserRegistry();

        if (statement.startsWith("org.wso2.registry.direct.query")) {

            sql1 = statement.split(";;")[1];
        } else {

            sql1 = getConvertedRegQuery(statement);
        }


        Resource q1 = null;
        Set nodes = new HashSet();

        try {
//this modifications are done so that the queries are not stored in the registry.
//            q1 = registry.newResource();

//            q1.setContent(sql1);

//            q1.setMediaType(RegistryConstants.SQL_QUERY_MEDIA_TYPE);

//            q1.addProperty(RegistryConstants.RESULT_TYPE_PROPERTY_NAME,

//                    RegistryConstants.RESOURCES_RESULT_TYPE);

//            registry.put(RegistryConstants.CONFIG_REGISTRY_BASE_PATH + RegistryConstants.QUERIES_COLLECTION_PATH + "/custom-queries", q1);
            Map parameters = new HashMap();
            parameters.put("query",sql1);
//            Resource result = registry.executeQuery(RegistryConstants.CONFIG_REGISTRY_BASE_PATH + RegistryConstants.QUERIES_COLLECTION_PATH + "/custom-queries", parameters);
            Resource result = registry.executeQuery(null, parameters);

            String[] paths = (String[]) result.getContent();

            for (String path : paths) {

                nodes.add(session.getNode(path));
            }

        } catch (RegistryException e) {

            e.printStackTrace();
        }

        jcr_result = new RegistryQueryResult(nodes, session);


        return jcr_result;
    }


    public void setLimit(long l) {

    }

    public void setOffset(long l) {

    }

    public String getStatement() {

        return statement;
    }

    public String getLanguage() {

        return language;
    }

    public String getStoredQueryPath() throws ItemNotFoundException, RepositoryException {
        return RegistryConstants.CONFIG_REGISTRY_BASE_PATH +
                RegistryConstants.QUERIES_COLLECTION_PATH +
                "/custom-queries";
    }

    public Node storeAsNode(String s) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
        RegistryNode node = new RegistryNode(s, session);
        CollectionImpl subCollection = null;

        try {
            subCollection = (CollectionImpl) session.getUserRegistry().newCollection();
            subCollection.setDescription("nt:query");
            session.getUserRegistry().put(s, subCollection);

        } catch (RegistryException e) {
            e.printStackTrace();

        }
        node.nodeType = (RegistryNodeType) node.getParent().getPrimaryNodeType();
        node.setPrimaryType("nt:query");

        node.nodeType.setNode(node);

        return node;
    }

    public void bindValue(String s, Value value) throws IllegalArgumentException, RepositoryException {


    }

    public String[] getBindVariableNames() throws RepositoryException {
        return new String[0];
    }

    private String getConvertedRegQuery(String s) { //Here we assume that all properties are set here under jcr namespace conditions
        String temp[];
        String nodetype = "";
        String reg_sql = "";
        String secndPart = "";
        String firstPart = "";


        if (s.contains("WHERE")) {

            temp = s.split("WHERE");
            firstPart = temp[0];
            secndPart = temp[1];
            if (secndPart.startsWith(" ")) {
                secndPart = secndPart.substring(1, secndPart.length());
            }
            if (secndPart.endsWith(" ")) {
                secndPart = secndPart.substring(0, secndPart.length() - 1);

            }

            String tt[] = firstPart.split(" ");

            for (String tc : tt) {

                if (tc.contains(":")) {
                    nodetype = tc;
                    break;
                }

            }

            String secndPArr[] = secndPart.split(" ");
            String new_secndPart = "";

            for (int i = 0; i < secndPArr.length; i++) {

                String tmpp = secndPArr[i].trim();

                if ((tmpp.contains(":")) && (i < (secndPArr.length - 2)) && (!tmpp.contains("CONTAINS"))) {

                    if ((secndPArr[i + 1].equals("="))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE = " + secndPArr[i + 2];
                        i = i + 2;
                    } else if ((secndPArr[i + 1].equals(">"))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE > " + secndPArr[i + 2];
                        i = i + 2;
                    } else if ((secndPArr[i + 1].equals("<"))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE < " + secndPArr[i + 2];
                        i = i + 2;
                    } else if ((secndPArr[i + 1].equals("!="))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE != " + secndPArr[i + 2];
                        i = i + 2;
                    } else if ((secndPArr[i + 1].equals(">="))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE >= " + secndPArr[i + 2];
                        i = i + 2;
                    } else if ((secndPArr[i + 1].equals("<="))) {
                        tmpp = "PP.REG_NAME='" + tmpp + "'" + "AND PP.REG_VALUE <= " + secndPArr[i + 2];
                        i = i + 2;
                    } else {

                        tmpp = "PP.REG_NAME = '" + tmpp + "'";
                    }

                }

                new_secndPart = new_secndPart.concat(tmpp + " ");

            }
            reg_sql = "SELECT R.REG_PATH_ID, R.REG_NAME FROM REG_RESOURCE R, REG_PROPERTY PP, REG_RESOURCE_PROPERTY RP WHERE R.REG_PATH_ID=RP.REG_PATH_ID AND R.REG_NAME IS NULL AND RP.REG_RESOURCE_NAME IS NULL AND RP.REG_PROPERTY_ID=PP.REG_ID AND REG_DESCRIPTION = '" + nodetype + "'";
            reg_sql = reg_sql.concat(" AND(" + new_secndPart + ")");

        } else {

            firstPart = s;
            String tt[] = firstPart.split(" ");

            for (String tc : tt) {

                if (tc.contains(":")) {
                    nodetype = tc;
                    break;
                }
            }
            reg_sql = "SELECT R.REG_PATH_ID, R.REG_NAME FROM REG_RESOURCE R, REG_PROPERTY PP, REG_RESOURCE_PROPERTY RP WHERE R.REG_PATH_ID=RP.REG_PATH_ID AND R.REG_NAME IS NULL AND RP.REG_RESOURCE_NAME IS NULL AND RP.REG_PROPERTY_ID=PP.REG_ID AND REG_DESCRIPTION = '" + nodetype + "'";
        }

        return reg_sql;

    }
}
TOP

Related Classes of org.wso2.carbon.registry.jcr.query.RegistryQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.