/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational; import java.util.List; import org.eclipse.persistence.tools.workbench.mappingsmodel.MWModel; import org.eclipse.persistence.tools.workbench.mappingsmodel.ProblemConstants; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalClassDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWTableDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWTransactionalProjectCachingPolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWTransactionalProjectDefaultsPolicy; import org.eclipse.persistence.tools.workbench.utility.node.Node; import org.eclipse.persistence.descriptors.ClassDescriptor; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.mappings.converters.ObjectTypeConverter; import org.eclipse.persistence.oxm.XMLDescriptor; import org.eclipse.persistence.sessions.Project; /** * This class describes the project defaults for a relational project. * * @version 10.1.3 */ public final class MWRelationalProjectDefaultsPolicy extends MWTransactionalProjectDefaultsPolicy { public static final String MULTI_TABLE_INFO_POLICY = "Multi-Table Info"; public static final String INTERFACE_ALIAS_POLICY = "Interface Alias"; private volatile boolean queriesCacheAllStatements; public final static String QUERIES_CACHE_ALL_STATEMENTS_PROPERTY = "queriesCacheAllStatements"; private volatile boolean queriesBindAllParameters; public final static String QUERIES_BIND_ALL_PARAMETERS_PROPERTY = "queriesBindAllParameters"; public static XMLDescriptor buildDescriptor() { XMLDescriptor descriptor = new XMLDescriptor(); descriptor.setJavaClass(MWRelationalProjectDefaultsPolicy.class); descriptor.getInheritancePolicy().setParentClass(MWTransactionalProjectDefaultsPolicy.class); descriptor.addDirectMapping("queriesCacheAllStatements", "cache-all-statements/text()"); descriptor.addDirectMapping("queriesBindAllParameters", "bind-all-parameters/text()"); return descriptor; } private MWRelationalProjectDefaultsPolicy() { super(); } MWRelationalProjectDefaultsPolicy(MWModel parent) { super(parent); } @Override protected void initialize(Node parent) { super.initialize(parent); this.queriesBindAllParameters = true; } protected void initializePolicyDescriptors() { super.initializePolicyDescriptors(); addPolicyDescriptor(MULTI_TABLE_INFO_POLICY, new MultiTableInfoPolicyDescriptor()); addPolicyDescriptor(INTERFACE_ALIAS_POLICY, new InterfaceAliasPolicyDescriptor()); } public boolean shouldQueriesBindAllParameters() { return this.queriesBindAllParameters; } public void setQueriesBindAllParameters(boolean queriesBindAllParameters) { boolean oldValue = queriesBindAllParameters; this.queriesBindAllParameters = queriesBindAllParameters; firePropertyChanged(QUERIES_BIND_ALL_PARAMETERS_PROPERTY, oldValue, this.queriesBindAllParameters); } public boolean shouldQueriesCacheAllStatements() { return this.queriesCacheAllStatements; } public void setQueriesCacheAllStatements(boolean queriesCacheAllStatements) { boolean oldValue = queriesCacheAllStatements; this.queriesCacheAllStatements = queriesCacheAllStatements; firePropertyChanged(QUERIES_CACHE_ALL_STATEMENTS_PROPERTY, oldValue, this.queriesCacheAllStatements); } protected void adjustRuntimeProject(Project project) { project.getLogin().setShouldBindAllParameters( shouldQueriesBindAllParameters()); project.getLogin().setShouldCacheAllStatements( shouldQueriesCacheAllStatements()); } private class MultiTableInfoPolicyDescriptor implements PolicyDescriptor { public void applyPolicyToDescriptor(MWMappingDescriptor descriptor) { if (((MWRelationalClassDescriptor) descriptor).supportsMultitablePolicy()) { ((MWTableDescriptor) descriptor).addMultiTableInfoPolicy(); } } } private class InterfaceAliasPolicyDescriptor implements PolicyDescriptor { public void applyPolicyToDescriptor(MWMappingDescriptor descriptor) { if (((MWRelationalClassDescriptor) descriptor).supportsInterfaceAliasPolicy()) { ((MWTableDescriptor) descriptor).addInterfaceAliasPolicy(); } } } protected void addProblemsTo(List currentProblems) { super.addProblemsTo(currentProblems); this.checkCacheAllStatementsAndBindAllParameters(currentProblems); } private void checkCacheAllStatementsAndBindAllParameters(List newProblems) { if (this.queriesCacheAllStatements && ! this.queriesBindAllParameters) newProblems.add(this.buildProblem(ProblemConstants.PROJECT_CACHES_QUERY_STATEMENTS_WITHOUT_BINDING_PARAMETERS)); } }