| /******************************************************************************* |
| * 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.olingo.odata2.jpa.processor.core.factory; |
| |
| import java.util.Locale; |
| |
| import org.apache.olingo.odata2.api.edm.provider.EdmProvider; |
| import org.apache.olingo.odata2.api.processor.ODataSingleProcessor; |
| import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext; |
| import org.apache.olingo.odata2.jpa.processor.api.ODataJPADefaultProcessor; |
| import org.apache.olingo.odata2.jpa.processor.api.ODataJPAResponseBuilder; |
| import org.apache.olingo.odata2.jpa.processor.api.access.JPAEdmMappingModelAccess; |
| import org.apache.olingo.odata2.jpa.processor.api.access.JPAMethodContext.JPAMethodContextBuilder; |
| import org.apache.olingo.odata2.jpa.processor.api.access.JPAProcessor; |
| import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAMessageService; |
| import org.apache.olingo.odata2.jpa.processor.api.factory.JPAAccessFactory; |
| import org.apache.olingo.odata2.jpa.processor.api.factory.JPQLBuilderFactory; |
| import org.apache.olingo.odata2.jpa.processor.api.factory.ODataJPAAccessFactory; |
| import org.apache.olingo.odata2.jpa.processor.api.factory.ODataJPAFactory; |
| import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLContext.JPQLContextBuilder; |
| import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLContextType; |
| import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLContextView; |
| import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLStatement.JPQLStatementBuilder; |
| import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmMapping; |
| import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmModelView; |
| import org.apache.olingo.odata2.jpa.processor.core.ODataJPAContextImpl; |
| import org.apache.olingo.odata2.jpa.processor.core.ODataJPAResponseBuilderDefault; |
| import org.apache.olingo.odata2.jpa.processor.core.access.data.JPAFunctionContext; |
| import org.apache.olingo.odata2.jpa.processor.core.access.data.JPAProcessorImpl; |
| import org.apache.olingo.odata2.jpa.processor.core.access.model.JPAEdmMappingModelService; |
| import org.apache.olingo.odata2.jpa.processor.core.edm.ODataJPAEdmProvider; |
| import org.apache.olingo.odata2.jpa.processor.core.exception.ODataJPAMessageServiceDefault; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLJoinSelectContext; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLJoinSelectSingleContext; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLJoinSelectSingleStatementBuilder; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLJoinStatementBuilder; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLSelectContext; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLSelectSingleContext; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLSelectSingleStatementBuilder; |
| import org.apache.olingo.odata2.jpa.processor.core.jpql.JPQLSelectStatementBuilder; |
| import org.apache.olingo.odata2.jpa.processor.core.model.JPAEdmMappingImpl; |
| import org.apache.olingo.odata2.jpa.processor.core.model.JPAEdmModel; |
| |
| public class ODataJPAFactoryImpl extends ODataJPAFactory { |
| |
| @Override |
| public JPQLBuilderFactory getJPQLBuilderFactory() { |
| return JPQLBuilderFactoryImpl.create(); |
| }; |
| |
| @Override |
| public JPAAccessFactory getJPAAccessFactory() { |
| return JPAAccessFactoryImpl.create(); |
| }; |
| |
| @Override |
| public ODataJPAAccessFactory getODataJPAAccessFactory() { |
| return ODataJPAAccessFactoryImpl.create(); |
| }; |
| |
| private static class JPQLBuilderFactoryImpl implements JPQLBuilderFactory { |
| |
| private static JPQLBuilderFactoryImpl factory = null; |
| |
| private JPQLBuilderFactoryImpl() {} |
| |
| @Override |
| public JPQLStatementBuilder getStatementBuilder(final JPQLContextView context) { |
| JPQLStatementBuilder builder = null; |
| switch (context.getType()) { |
| case SELECT: |
| case SELECT_COUNT: // for $count, Same as select |
| builder = new JPQLSelectStatementBuilder(context); |
| break; |
| case SELECT_SINGLE: |
| builder = new JPQLSelectSingleStatementBuilder(context); |
| break; |
| case JOIN: |
| case JOIN_COUNT: // for $count, Same as join |
| builder = new JPQLJoinStatementBuilder(context); |
| break; |
| case JOIN_SINGLE: |
| builder = new JPQLJoinSelectSingleStatementBuilder(context); |
| default: |
| break; |
| } |
| |
| return builder; |
| } |
| |
| @Override |
| public JPQLContextBuilder getContextBuilder(final JPQLContextType contextType) { |
| JPQLContextBuilder contextBuilder = null; |
| |
| switch (contextType) { |
| case SELECT: |
| JPQLSelectContext selectContext = new JPQLSelectContext(false); |
| contextBuilder = selectContext.new JPQLSelectContextBuilder(); |
| break; |
| case SELECT_SINGLE: |
| JPQLSelectSingleContext singleSelectContext = new JPQLSelectSingleContext(); |
| contextBuilder = singleSelectContext.new JPQLSelectSingleContextBuilder(); |
| break; |
| case JOIN: |
| JPQLJoinSelectContext joinContext = new JPQLJoinSelectContext(false); |
| contextBuilder = joinContext.new JPQLJoinContextBuilder(); |
| break; |
| case JOIN_SINGLE: |
| JPQLJoinSelectSingleContext joinSingleContext = new JPQLJoinSelectSingleContext(); |
| contextBuilder = joinSingleContext.new JPQLJoinSelectSingleContextBuilder(); |
| break; |
| case SELECT_COUNT: |
| JPQLSelectContext selectCountContext = new JPQLSelectContext(true); |
| contextBuilder = selectCountContext.new JPQLSelectContextBuilder(); |
| break; |
| case JOIN_COUNT: |
| JPQLJoinSelectContext joinCountContext = new JPQLJoinSelectContext(true); |
| contextBuilder = joinCountContext.new JPQLJoinContextBuilder(); |
| default: |
| break; |
| } |
| |
| return contextBuilder; |
| } |
| |
| private static JPQLBuilderFactory create() { |
| if (factory == null) { |
| return new JPQLBuilderFactoryImpl(); |
| } else { |
| return factory; |
| } |
| } |
| |
| @Override |
| public JPAMethodContextBuilder getJPAMethodContextBuilder(final JPQLContextType contextType) { |
| |
| JPAMethodContextBuilder contextBuilder = null; |
| switch (contextType) { |
| case FUNCTION: |
| JPAFunctionContext methodConext = new JPAFunctionContext(); |
| contextBuilder = methodConext.new JPAFunctionContextBuilder(); |
| |
| break; |
| default: |
| break; |
| } |
| return contextBuilder; |
| } |
| |
| } |
| |
| private static class ODataJPAAccessFactoryImpl implements ODataJPAAccessFactory { |
| |
| private static ODataJPAAccessFactoryImpl factory = null; |
| |
| private ODataJPAAccessFactoryImpl() {} |
| |
| @Override |
| public ODataSingleProcessor createODataProcessor(final ODataJPAContext oDataJPAContext) { |
| return new ODataJPADefaultProcessor(oDataJPAContext) { }; |
| } |
| |
| @Override |
| public EdmProvider createJPAEdmProvider(final ODataJPAContext oDataJPAContext) { |
| return new ODataJPAEdmProvider(oDataJPAContext); |
| } |
| |
| @Override |
| public ODataJPAContext createODataJPAContext() { |
| return new ODataJPAContextImpl(); |
| } |
| |
| private static ODataJPAAccessFactoryImpl create() { |
| if (factory == null) { |
| return new ODataJPAAccessFactoryImpl(); |
| } else { |
| return factory; |
| } |
| } |
| |
| @Override |
| public ODataJPAMessageService getODataJPAMessageService(final Locale locale) { |
| return ODataJPAMessageServiceDefault.getInstance(locale); |
| } |
| |
| @Override |
| public ODataJPAResponseBuilder getODataJPAResponseBuilder(final ODataJPAContext oDataJPAContext) { |
| return new ODataJPAResponseBuilderDefault(oDataJPAContext); |
| } |
| |
| } |
| |
| private static class JPAAccessFactoryImpl implements JPAAccessFactory { |
| |
| private static JPAAccessFactoryImpl factory = null; |
| |
| private JPAAccessFactoryImpl() {} |
| |
| @Override |
| public JPAEdmModelView getJPAEdmModelView(final ODataJPAContext oDataJPAContext) { |
| JPAEdmModelView view = null; |
| |
| view = new JPAEdmModel(oDataJPAContext); |
| return view; |
| } |
| |
| @Override |
| public JPAProcessor getJPAProcessor(final ODataJPAContext oDataJPAContext) { |
| JPAProcessor jpaProcessor = new JPAProcessorImpl(oDataJPAContext); |
| |
| return jpaProcessor; |
| } |
| |
| private static JPAAccessFactoryImpl create() { |
| if (factory == null) { |
| return new JPAAccessFactoryImpl(); |
| } else { |
| return factory; |
| } |
| } |
| |
| @Override |
| public JPAEdmMappingModelAccess getJPAEdmMappingModelAccess(final ODataJPAContext oDataJPAContext) { |
| JPAEdmMappingModelAccess mappingModelAccess = new JPAEdmMappingModelService(oDataJPAContext); |
| |
| return mappingModelAccess; |
| } |
| |
| @Override |
| public JPAEdmMapping getJPAEdmMappingInstance() { |
| return new JPAEdmMappingImpl(); |
| } |
| |
| } |
| } |