/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. 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 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.spf.impl.internal.config; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.ebayopensource.turmeric.runtime.common.cachepolicy.CachePolicyHolder; import org.ebayopensource.turmeric.runtime.common.impl.internal.config.CommonConfigHolder; import org.ebayopensource.turmeric.runtime.common.impl.internal.config.ConfigUtils; import org.ebayopensource.turmeric.runtime.common.impl.internal.config.OptionList; import org.ebayopensource.turmeric.runtime.spf.impl.internal.service.RequestParamsDescriptor; public class ServiceConfigHolder extends CommonConfigHolder { // When adding properties, please ensure that copy(), dump(), and // getters/setters // are all covered for the new properties. Make sure setters call // checkReadOnly(). // Provider options private String m_serviceImplClassName; private String serviceImplFactoryClassName; private boolean isImplCached; private String m_defaultEncoding; private Set<String> m_supportedGlobalId = new HashSet<String>(); private Set<String> m_supportedLocales = new HashSet<String>(); private List<String> m_supportedDataBindings = new ArrayList<String>(); private List<String> m_unsupportedOperation = new ArrayList<String>(); private List<String> m_supportedVersions = new ArrayList<String>(); private String m_versionCheckHandlerClassName; private OptionList m_headerMappingOptions; private SecurityPolicyConfigHolder m_securityPolicy; private CachePolicyHolder m_cachePolicy; private String m_serviceLayer; private String m_defaultRequestDataBinding; private String m_defaultResponseDataBinding; private String m_RequestPayloadLog; private String m_RequestPayloadCalLog; private String m_ResponsePayloadLog; private String m_ResponsePayloadCalLog; private OperationMappings m_operationMappings; private RequestParamsDescriptor reqParamsDesc; private String m_httpErrorMapperClassName; private static final char NL = '\n'; public ServiceConfigHolder(String adminName) { super(adminName); } /* */ public ServiceConfigHolder copy() { ServiceConfigHolder newCH = new ServiceConfigHolder(getAdminName()); newCH.m_readOnly = false; newCH.copyMemberData(this); newCH.m_serviceImplClassName = m_serviceImplClassName; newCH.serviceImplFactoryClassName = serviceImplFactoryClassName; newCH.isImplCached = isImplCached; newCH.m_versionCheckHandlerClassName = m_versionCheckHandlerClassName; newCH.m_defaultEncoding = m_defaultEncoding; if (m_supportedGlobalId != null) { newCH.m_supportedGlobalId = new HashSet<String>(m_supportedGlobalId); } if (m_supportedLocales != null) { newCH.m_supportedLocales = new HashSet<String>(m_supportedLocales); } if (m_supportedDataBindings != null) { newCH.m_supportedDataBindings = new ArrayList<String>( m_supportedDataBindings); } if (m_unsupportedOperation != null) { newCH.m_unsupportedOperation = new ArrayList<String>( m_unsupportedOperation); } if (m_supportedVersions != null) { newCH.m_supportedVersions = new ArrayList<String>( m_supportedVersions); } if (m_headerMappingOptions != null) { newCH.m_headerMappingOptions = ConfigUtils .copyOptionList(m_headerMappingOptions); } newCH.m_defaultRequestDataBinding = m_defaultRequestDataBinding; newCH.m_defaultResponseDataBinding = m_defaultResponseDataBinding; newCH.m_RequestPayloadLog = m_RequestPayloadLog; newCH.m_RequestPayloadCalLog = m_RequestPayloadCalLog; newCH.m_ResponsePayloadLog = m_ResponsePayloadLog; newCH.m_ResponsePayloadCalLog = m_ResponsePayloadCalLog; if (m_securityPolicy != null) { newCH.m_securityPolicy = m_securityPolicy.copy(); } if (m_cachePolicy != null) { newCH.m_cachePolicy = m_cachePolicy.copy(); } if (reqParamsDesc != null) { newCH.reqParamsDesc = reqParamsDesc; } newCH.m_serviceLayer = m_serviceLayer; return newCH; } /** * set read-only property to true. */ @Override public void lockReadOnly() { if (m_securityPolicy != null) { m_securityPolicy.lockReadOnly(); } if (m_cachePolicy != null) { m_cachePolicy.lockReadOnly(); } super.lockReadOnly(); } /** * @return the m_defaultEncoding */ public String getDefaultEncoding() { return m_defaultEncoding; } /** * @param defaultEncoding * the m_defaultEncoding to set */ public void setDefaultEncoding(String encoding) { checkReadOnly(); m_defaultEncoding = encoding; } /** * @return the m_serviceImplClassName */ public String getServiceImplClassName() { return m_serviceImplClassName; } /** * @param serviceImplClassName * the m_serviceImplClassName to set */ public void setServiceImplClassName(String className) { checkReadOnly(); m_serviceImplClassName = className; } /** * @return the serviceImplFactoryClassName */ public String getServiceImplFactoryClassName() { return serviceImplFactoryClassName; } /** * @param serviceImplFactoryClassName * the serviceImplFactoryClassName to set */ public void setServiceImplFactoryClassName(String className) { checkReadOnly(); serviceImplFactoryClassName = className; } /** * * @param reqParamsDesc */ public void setRequestParamsDescriptor(RequestParamsDescriptor reqParamsDesc) { checkReadOnly(); this.reqParamsDesc = reqParamsDesc; } /** * * @return RequestParamsDescriptor */ public RequestParamsDescriptor getRequestParamsDescriptor() { return this.reqParamsDesc; // TODO: Make a copy and return } /** * @return the m_supportedGlobalId */ public Set<String> getSupportedGlobalId() { if (m_readOnly) { return new HashSet<String>(m_supportedGlobalId); } return m_supportedGlobalId; } /** * @param supportedGlobalId * the m_supportedGlobalId to set */ public void setSupportedGlobalId(Set<String> supportedGlobalId) { checkReadOnly(); this.m_supportedGlobalId = supportedGlobalId; } /** * @return the m_supportedLocales */ public Set<String> getSupportedLocales() { if (m_readOnly) { return new HashSet<String>(m_supportedLocales); } return m_supportedLocales; } /** * @param supportedLocale * the m_supportedLocales to set */ public void setSupportedLocale(Set<String> supportedLocales) { checkReadOnly(); this.m_supportedLocales = supportedLocales; } /** * @return the m_supportedDataBindings */ public List<String> getSupportedDataBindings() { if (m_readOnly) { return new ArrayList<String>(m_supportedDataBindings); } return m_supportedDataBindings; } /** * @param supportedDataBindings * the m_supportedDataBindings to set */ public void setSupportedDataBindings(List<String> supportedDataBindings) { checkReadOnly(); this.m_supportedDataBindings = supportedDataBindings; } /** * @return the m_unsupportedOperation */ public List<String> getUnsupportedOperation() { if (m_readOnly) { return new ArrayList<String>(m_unsupportedOperation); } return m_unsupportedOperation; } /** * @param unsupportedOperation * the m_unsupportedOperation to set */ public void setUnsupportedOperation(List<String> unsupportedOperation) { checkReadOnly(); this.m_unsupportedOperation = unsupportedOperation; } /** * @return the m_supportedVersions */ public List<String> getSupportedVersions() { if (m_readOnly) { return new ArrayList<String>(m_supportedVersions); } return m_supportedVersions; } /** * @param supportedVersions * the m_supportedVersions to set */ public void setSupportedVersions(List<String> supportedVersions) { checkReadOnly(); this.m_supportedVersions = supportedVersions; } /** * @return the m_versionCheckHandlerClassName */ public String getVersionCheckHandlerClassName() { return m_versionCheckHandlerClassName; } /** * @param checkHandlerClassName * the m_versionCheckHandlerClassName to set */ public void setVersionCheckHandlerClassName(String className) { checkReadOnly(); m_versionCheckHandlerClassName = className; } /** * @return the m_headerMappingOptions */ public OptionList getHeaderMappingOptions() { if (m_readOnly) { return ConfigUtils.copyOptionList(m_headerMappingOptions); } return m_headerMappingOptions; } /** * @param options * the m_headerMappingOptions to set */ public void setHeaderMappingOptions(OptionList options) { checkReadOnly(); m_headerMappingOptions = options; } public void setOperationMappings(OperationMappings omo) { checkReadOnly(); m_operationMappings = omo; } public OperationMappings getOperationMappings() { if (m_operationMappings == null) { return null; } if (m_readOnly) { return m_operationMappings.clone(); } return m_operationMappings; } /** * @return the m_securityPolicy */ public SecurityPolicyConfigHolder getSecurityPolicy() { // This object has a read-only state that shadows the ConfigHolder // itself, so no need // to manage cloning at this level - object will take care of cloning // its internal values. return m_securityPolicy; } /** * @param securityPolicy * the m_securityPolicy to set */ public void setSecurityPolicy(SecurityPolicyConfigHolder securityPolicy) { checkReadOnly(); m_securityPolicy = securityPolicy; } /** * @return the m_cachePolicy */ public CachePolicyHolder getCachePolicy() { // This object has a read-only state that shadows the ConfigHolder // itself, so no need // to manage cloning at this level - object will take care of cloning // its internal values. return m_cachePolicy; } /** * @param cachePolicy * the m_cachePolicy to set */ public void setCachePolicy(CachePolicyHolder cachePolicy) { checkReadOnly(); m_cachePolicy = cachePolicy; } /** * @return the m_serviceLayer */ public String getServiceLayer() { return m_serviceLayer; } /** * @param layer * the m_serviceLayer to set */ public void setServiceLayer(String layer) { checkReadOnly(); m_serviceLayer = layer; } /** * @return the m_defaultRequestDataBinding */ public String getDefaultRequestDataBinding() { return m_defaultRequestDataBinding; } /** * @param dataBinding * the m_defaultRequestDataBinding to set */ public void setDefaultRequestDataBinding(String dataBinding) { m_defaultRequestDataBinding = dataBinding; } /** * @return the m_defaultResponseDataBinding */ public String getDefaultResponseDataBinding() { return m_defaultResponseDataBinding; } /** * @param dataBinding * the m_defaultResponseDataBinding to set */ public void setDefaultResponseDataBinding(String dataBinding) { m_defaultResponseDataBinding = dataBinding; } public boolean isImplCached() { return isImplCached; } public void setImplCached(boolean isImplCached) { this.isImplCached = isImplCached; } // ///////////////////// // Dump methods @Override public void dump(StringBuffer sb) { super.dump(sb); if (m_serviceLayer != null) { sb.append("========== Service Layer: " + m_serviceLayer + NL); } sb.append("========== Provider Options ==========" + NL); if (m_defaultEncoding != null) { sb.append("defaultEncoding=" + m_defaultEncoding + NL); } if (m_serviceImplClassName != null) { sb.append("serviceImplClassName=" + m_serviceImplClassName + NL); } if (m_versionCheckHandlerClassName != null) { sb.append("versionCheckHandlerClassName=" + m_versionCheckHandlerClassName + NL); } if (m_supportedGlobalId != null && !m_supportedGlobalId.isEmpty()) { sb.append("supportedGlobalId="); TreeSet<String> supportedGlobalId = new TreeSet<String>( m_supportedGlobalId); ConfigUtils.dumpList(sb, supportedGlobalId); sb.append(NL); } if (m_supportedLocales != null && !m_supportedLocales.isEmpty()) { sb.append("supportedLocale="); TreeSet<String> supportedLocales = new TreeSet<String>( m_supportedLocales); ConfigUtils.dumpList(sb, supportedLocales); sb.append(NL); } if (m_supportedDataBindings != null && !m_supportedDataBindings.isEmpty()) { sb.append("supportedDataBindings="); TreeSet<String> supportedDataBindings = new TreeSet<String>( m_supportedDataBindings); ConfigUtils.dumpList(sb, supportedDataBindings); sb.append(NL); } if (m_unsupportedOperation != null && !m_unsupportedOperation.isEmpty()) { sb.append("unsupportedOperation="); TreeSet<String> unsupportedOperation = new TreeSet<String>( m_unsupportedOperation); ConfigUtils.dumpList(sb, unsupportedOperation); sb.append(NL); } if (m_supportedVersions != null && !m_supportedVersions.isEmpty()) { sb.append("supportedVersions="); TreeSet<String> supportedVersions = new TreeSet<String>( m_supportedVersions); ConfigUtils.dumpList(sb, supportedVersions); sb.append(NL); } if (m_headerMappingOptions != null) { sb.append("headerMappingOptions:" + NL); ConfigUtils.dumpOptionList(sb, m_headerMappingOptions, " "); } if (m_defaultRequestDataBinding != null) { sb.append("defaultRequestDataBinding=" + m_defaultRequestDataBinding + NL); } if (m_defaultResponseDataBinding != null) { sb.append("defaultResponseDataBinding=" + m_defaultResponseDataBinding + NL); } if (m_RequestPayloadLog != null) { sb.append("defaultRequestPayloadLog=" + m_RequestPayloadLog + NL); } if (m_RequestPayloadCalLog != null) { sb.append("defaultRequestPayloadCalLog=" + m_RequestPayloadLog + NL); } if (m_ResponsePayloadLog != null) { sb.append("defaultResponsePayloadLog=" + m_ResponsePayloadLog + NL); } if (m_RequestPayloadCalLog != null) { sb.append("defaultResponsePayloadLog=" + m_ResponsePayloadLog + NL); } if (m_securityPolicy != null) { m_securityPolicy.dump(sb); } if (m_cachePolicy != null) { m_cachePolicy.dump(sb); } if (m_httpErrorMapperClassName != null) { sb.append("httpErrorMapperClassName="+m_httpErrorMapperClassName+NL); } } public void setHttpErrorMapper(String httpErrorMapperClassName) { m_httpErrorMapperClassName = httpErrorMapperClassName; } public String getHttpErrorMapper() { return m_httpErrorMapperClassName; } }