Package org.apache.cayenne.project.validation

Source Code of org.apache.cayenne.project.validation.DefaultProjectValidator

/*****************************************************************
*   Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF 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.apache.cayenne.project.validation;

import java.util.Iterator;

import org.apache.cayenne.configuration.ConfigurationNode;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.configuration.DataNodeDescriptor;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.EmbeddableAttribute;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.map.ProcedureParameter;
import org.apache.cayenne.query.EJBQLQuery;
import org.apache.cayenne.query.ProcedureQuery;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.validation.ValidationResult;

/**
* @since 3.1
*/
public class DefaultProjectValidator implements ProjectValidator {

    private DataChannelValidator dataChannelValidator;
    private DataNodeValidator nodeValidator;
    private DataMapValidator mapValidator;
    private ObjEntityValidator objEntityValidator;
    private ObjAttributeValidator objAttrValidator;
    private ObjRelationshipValidator objRelValidator;
    private DbEntityValidator dbEntityValidator;
    private DbAttributeValidator dbAttrValidator;
    private DbRelationshipValidator dbRelValidator;
    private EmbeddableAttributeValidator embeddableAttributeValidator;
    private EmbeddableValidator embeddableValidator;
    private ProcedureValidator procedureValidator;
    private ProcedureParameterValidator procedureParameterValidator;
    private SelectQueryValidator selectQueryValidator;
    private ProcedureQueryValidator procedureQueryValidator;
    private EJBQLQueryValidator ejbqlQueryValidator;
    private SQLTemplateValidator sqlTemplateValidator;

    DefaultProjectValidator() {
        dataChannelValidator = new DataChannelValidator();
        nodeValidator = new DataNodeValidator();
        mapValidator = new DataMapValidator();
        objEntityValidator = new ObjEntityValidator();
        objAttrValidator = new ObjAttributeValidator();
        objRelValidator = new ObjRelationshipValidator();
        dbEntityValidator = new DbEntityValidator();
        dbAttrValidator = new DbAttributeValidator();
        dbRelValidator = new DbRelationshipValidator();
        embeddableAttributeValidator = new EmbeddableAttributeValidator();
        embeddableValidator = new EmbeddableValidator();
        procedureValidator = new ProcedureValidator();
        procedureParameterValidator = new ProcedureParameterValidator();
        selectQueryValidator = new SelectQueryValidator();
        procedureQueryValidator = new ProcedureQueryValidator();
        ejbqlQueryValidator = new EJBQLQueryValidator();
        sqlTemplateValidator = new SQLTemplateValidator();
    }

    public ValidationResult validate(ConfigurationNode node) {
        return node.acceptVisitor(new ValidationVisitor());
    }

    class ValidationVisitor implements ConfigurationNodeVisitor<ValidationResult> {

        private ValidationResult validationResult;

        ValidationVisitor() {
            validationResult = new ValidationResult();
        }

        public ValidationResult visitDataChannelDescriptor(
                DataChannelDescriptor channelDescriptor) {

            dataChannelValidator.validate(channelDescriptor, validationResult);

            for (DataNodeDescriptor node : channelDescriptor.getNodeDescriptors()) {
                visitDataNodeDescriptor(node);
            }

            for (DataMap map : channelDescriptor.getDataMaps()) {
                visitDataMap(map);
            }

            return validationResult;
        }

        public ValidationResult visitDataMap(DataMap dataMap) {
            mapValidator.validate(dataMap, validationResult);
            Iterator<Embeddable> itEmb = dataMap.getEmbeddables().iterator();
            while (itEmb.hasNext()) {
                Embeddable emb = itEmb.next();
                visitEmbeddable(emb);
            }

            Iterator<ObjEntity> itObjEnt = dataMap.getObjEntities().iterator();
            while (itObjEnt.hasNext()) {
                ObjEntity ent = itObjEnt.next();
                visitObjEntity(ent);
            }

            Iterator<DbEntity> itDbEnt = dataMap.getDbEntities().iterator();
            while (itDbEnt.hasNext()) {
                DbEntity ent = itDbEnt.next();
                visitDbEntity(ent);
            }

            Iterator<Procedure> itProc = dataMap.getProcedures().iterator();
            while (itProc.hasNext()) {
                Procedure proc = itProc.next();
                visitProcedure(proc);
            }

            Iterator<Query> itQuer = dataMap.getQueries().iterator();
            while (itQuer.hasNext()) {
                Query q = itQuer.next();
                visitQuery(q);
            }

            return validationResult;
        }

        public ValidationResult visitDataNodeDescriptor(DataNodeDescriptor nodeDescriptor) {
            nodeValidator.validate(nodeDescriptor, validationResult);
            return validationResult;
        }

        public ValidationResult visitDbAttribute(DbAttribute attribute) {
            dbAttrValidator.validate(attribute, validationResult);
            return validationResult;
        }

        public ValidationResult visitDbEntity(DbEntity entity) {
            dbEntityValidator.validate(entity, validationResult);

            Iterator<DbAttribute> itAttr = entity.getAttributes().iterator();
            while (itAttr.hasNext()) {
                DbAttribute attr = itAttr.next();
                visitDbAttribute(attr);
            }

            Iterator<DbRelationship> itRel = entity.getRelationships().iterator();
            while (itRel.hasNext()) {
                DbRelationship rel = itRel.next();
                visitDbRelationship(rel);
            }
            return validationResult;
        }

        public ValidationResult visitDbRelationship(DbRelationship relationship) {
            dbRelValidator.validate(relationship, validationResult);
            return validationResult;
        }

        public ValidationResult visitEmbeddable(Embeddable embeddable) {
            embeddableValidator.validate(embeddable, validationResult);
            Iterator<EmbeddableAttribute> it = embeddable.getAttributes().iterator();
            while (it.hasNext()) {
                EmbeddableAttribute attr = it.next();
                visitEmbeddableAttribute(attr);
            }
            return validationResult;
        }

        public ValidationResult visitEmbeddableAttribute(EmbeddableAttribute attribute) {
            embeddableAttributeValidator.validate(attribute, validationResult);
            return validationResult;
        }

        public ValidationResult visitObjAttribute(ObjAttribute attribute) {
            objAttrValidator.validate(attribute, validationResult);
            return validationResult;
        }

        public ValidationResult visitObjEntity(ObjEntity entity) {
            objEntityValidator.validate(entity, validationResult);

            Iterator<ObjAttribute> itAttr = entity.getAttributes().iterator();
            while (itAttr.hasNext()) {
                ObjAttribute attr = itAttr.next();
                visitObjAttribute(attr);
            }

            Iterator<ObjRelationship> itRel = entity.getRelationships().iterator();
            while (itRel.hasNext()) {
                ObjRelationship rel = itRel.next();
                visitObjRelationship(rel);
            }
            return validationResult;
        }

        public ValidationResult visitObjRelationship(ObjRelationship relationship) {
            objRelValidator.validate(relationship, validationResult);
            return validationResult;
        }

        public ValidationResult visitProcedure(Procedure procedure) {
            procedureValidator.validate(procedure, validationResult);
            ProcedureParameter parameter = procedure.getResultParam();
            if (parameter != null) {
                visitProcedureParameter(parameter);
            }

            Iterator<ProcedureParameter> itPrOut = procedure
                    .getCallOutParameters()
                    .iterator();
            while (itPrOut.hasNext()) {
                ProcedureParameter procPar = itPrOut.next();
                visitProcedureParameter(procPar);
            }

            Iterator<ProcedureParameter> itPr = procedure.getCallParameters().iterator();
            while (itPr.hasNext()) {
                ProcedureParameter procPar = itPr.next();
                visitProcedureParameter(procPar);
            }

            return validationResult;
        }

        public ValidationResult visitProcedureParameter(ProcedureParameter parameter) {
            procedureParameterValidator.validate(parameter, validationResult);
            return validationResult;
        }

        public ValidationResult visitQuery(Query query) {
            if (query instanceof SelectQuery) {
                selectQueryValidator.validate((SelectQuery) query, validationResult);
            }
            else if (query instanceof SQLTemplate) {
                sqlTemplateValidator.validate((SQLTemplate) query, validationResult);
            }
            else if (query instanceof ProcedureQuery) {
                procedureQueryValidator
                        .validate((ProcedureQuery) query, validationResult);
            }
            else if (query instanceof EJBQLQuery) {
                ejbqlQueryValidator.validate((EJBQLQuery) query, validationResult);
            }

            return validationResult;
        }
    }
}
TOP

Related Classes of org.apache.cayenne.project.validation.DefaultProjectValidator

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.