You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2010/04/06 07:14:12 UTC
svn commit: r931020 [3/6] - in /geronimo/server/trunk:
framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/
framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/
plugins/j2ee/geronimo-web-2.5-bu...
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,115 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.EjbLocalRefType;
+import org.apache.geronimo.xbeans.javaee6.InjectionTargetType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EjbLocalRefMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ public static final String EJB_LOCAL_REF_NAME_PREFIX = "ejb-local-ref.ejb-ref-name.";
+
+ /**
+ * Steps :
+ * a. If we already have a ejb-local-ref in the current merged web.xml file, then
+ * a.1 If it is from web-fragment.xml, throw an error, as it is not allowed that the same ejb-local-ref in different web-fragment.xml while it is not present in web.xml
+ * a.2 Else it is from web.xml, check whether inject-target is configured in the initial web.xml, if not, merge the configurations from web-fragment.xml, else ignore.
+ * b. web.xml file should inherit it from the web-fragment.xml file
+ */
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EjbLocalRefType srcEjbLocalRef : webFragment.getEjbLocalRefArray()) {
+ String ejbLocalRefName = srcEjbLocalRef.getEjbRefName().getStringValue();
+ String ejbLocalRefKey = createEjbLocalRefKey(ejbLocalRefName);
+ MergeItem mergeItem = (MergeItem) mergeContext.getAttribute(ejbLocalRefKey);
+ if (mergeItem != null) {
+ if (mergeItem.isFromWebFragment()) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateJNDIRefMessage("ejb-local-ref", ejbLocalRefName, mergeItem.getBelongedURL(), mergeContext.getCurrentJarUrl()));
+ } else if (mergeItem.isFromWebXml() && !isEjbLocalRefInjectTargetsConfiguredInInitialWebXML(ejbLocalRefName, mergeContext)) {
+ //Merge InjectTarget
+ EjbLocalRefType ejbLocalRef = (EjbLocalRefType) mergeItem.getValue();
+ for (InjectionTargetType injectTarget : srcEjbLocalRef.getInjectionTargetArray()) {
+ String ejbLocalRefInjectTargetKey = createEjbLocalRefInjectTargetKey(ejbLocalRefName, injectTarget.getInjectionTargetClass().getStringValue(), injectTarget
+ .getInjectionTargetName().getStringValue());
+ if (!mergeContext.containsAttribute(ejbLocalRefInjectTargetKey)) {
+ ejbLocalRef.addNewInjectionTarget().set(injectTarget);
+ mergeContext.setAttribute(ejbLocalRefInjectTargetKey, Boolean.TRUE);
+ }
+ }
+ }
+ } else {
+ EjbLocalRefType targetEjbLocalRef = (EjbLocalRefType) webApp.addNewEjbLocalRef().set(srcEjbLocalRef);
+ mergeContext.setAttribute(ejbLocalRefKey, new MergeItem(targetEjbLocalRef, mergeContext.getCurrentJarUrl(), ElementSource.WEB_FRAGMENT));
+ for (InjectionTargetType injectionTarget : targetEjbLocalRef.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEjbLocalRefInjectTargetKey(ejbLocalRefName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EjbLocalRefType ejbLocalRef : webApp.getEjbLocalRefArray()) {
+ String ejbLocalRefName = ejbLocalRef.getEjbRefName().getStringValue();
+ mergeContext.setAttribute(createEjbLocalRefKey(ejbLocalRefName), new MergeItem(ejbLocalRef, null, ElementSource.WEB_XML));
+ //Create an attribute tag to indicate whether injectTarget is configured in web.xml file
+ if (ejbLocalRef.getInjectionTargetArray().length > 0) {
+ mergeContext.setAttribute(createEjbLocalRefInjectTargetConfiguredInWebXMLKey(ejbLocalRefName), Boolean.TRUE);
+ }
+ for (InjectionTargetType injectionTarget : ejbLocalRef.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEjbLocalRefInjectTargetKey(ejbLocalRefName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+
+ public static String createEjbLocalRefInjectTargetConfiguredInWebXMLKey(String ejbLocalRefName) {
+ return EJB_LOCAL_REF_NAME_PREFIX + ejbLocalRefName + ".inject_target_configured_in_web_xml";
+ }
+
+ public static String createEjbLocalRefInjectTargetKey(String ejbLocalRefName, String injectTargetClassName, String injectTargetName) {
+ return EJB_LOCAL_REF_NAME_PREFIX + ejbLocalRefName + "." + injectTargetClassName + "." + injectTargetName;
+ }
+
+ public static String createEjbLocalRefKey(String ejbLocalRefName) {
+ return EJB_LOCAL_REF_NAME_PREFIX + ejbLocalRefName;
+ }
+
+ public static boolean isEjbLocalRefInjectTargetConfigured(String ejbLocalRefName, String injectTargetClassName, String injectTargetName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEjbLocalRefInjectTargetKey(ejbLocalRefName, injectTargetClassName, injectTargetName));
+ }
+
+ public static boolean isEjbLocalRefInjectTargetsConfiguredInInitialWebXML(String ejbLocalRefName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEjbLocalRefInjectTargetConfiguredInWebXMLKey(ejbLocalRefName));
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbLocalRefMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,115 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.EjbRefType;
+import org.apache.geronimo.xbeans.javaee6.InjectionTargetType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EjbRefMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ public static final String EJB_REF_NAME_PREFIX = "ejb-ref.ejb-ref-name.";
+
+ /**
+ * Steps :
+ * a. If we already have a ejb-ref in the current merged web.xml file, then
+ * a.1 If it is from web-fragment.xml, throw an error, as it is not allowed that the same ejb-ref in different web-fragment.xml while it is not present in web.xml
+ * a.2 Else it is from web.xml, check whether inject-target is configured in the initial web.xml, if not, merge the configurations from web-fragment.xml, else ignore.
+ * b. web.xml file should inherit it from the web-fragment.xml file
+ */
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EjbRefType srcEjbRef : webFragment.getEjbRefArray()) {
+ String ejbRefName = srcEjbRef.getEjbRefName().getStringValue();
+ String ejbRefKey = createEjbRefKey(ejbRefName);
+ MergeItem mergeItem = (MergeItem) mergeContext.getAttribute(ejbRefKey);
+ if (mergeItem != null) {
+ if (mergeItem.isFromWebFragment()) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateJNDIRefMessage("ejb-ref", ejbRefName, mergeItem.getBelongedURL(), mergeContext.getCurrentJarUrl()));
+ } else if (mergeItem.isFromWebXml() && !isEjbRefInjectTargetsConfiguredInInitialWebXML(ejbRefName, mergeContext)) {
+ //Merge InjectTarget
+ EjbRefType ejbRef = (EjbRefType) mergeItem.getValue();
+ for (InjectionTargetType injectTarget : srcEjbRef.getInjectionTargetArray()) {
+ String ejbRefInjectTargetKey = createEjbRefInjectTargetKey(ejbRefName, injectTarget.getInjectionTargetClass().getStringValue(), injectTarget
+ .getInjectionTargetName().getStringValue());
+ if (!mergeContext.containsAttribute(ejbRefInjectTargetKey)) {
+ ejbRef.addNewInjectionTarget().set(injectTarget);
+ mergeContext.setAttribute(ejbRefInjectTargetKey, Boolean.TRUE);
+ }
+ }
+ }
+ } else {
+ EjbRefType targetEjbRef = (EjbRefType) webApp.addNewEjbRef().set(srcEjbRef);
+ mergeContext.setAttribute(ejbRefKey, new MergeItem(targetEjbRef, mergeContext.getCurrentJarUrl(), ElementSource.WEB_FRAGMENT));
+ for (InjectionTargetType injectionTarget : targetEjbRef.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEjbRefInjectTargetKey(ejbRefName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EjbRefType ejbRef : webApp.getEjbRefArray()) {
+ String ejbRefName = ejbRef.getEjbRefName().getStringValue();
+ mergeContext.setAttribute(createEjbRefKey(ejbRefName), new MergeItem(ejbRef, null, ElementSource.WEB_XML));
+ //Create an attribute tag to indicate whether injectTarget is configured in web.xml file
+ if (ejbRef.getInjectionTargetArray().length > 0) {
+ mergeContext.setAttribute(createEjbRefInjectTargetConfiguredInWebXMLKey(ejbRefName), Boolean.TRUE);
+ }
+ for (InjectionTargetType injectionTarget : ejbRef.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEjbRefInjectTargetKey(ejbRefName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+
+ public static String createEjbRefInjectTargetConfiguredInWebXMLKey(String ejbRefName) {
+ return EJB_REF_NAME_PREFIX + ejbRefName + ".inject_target_configured_in_web_xml";
+ }
+
+ public static String createEjbRefInjectTargetKey(String ejbRefName, String injectTargetClassName, String injectTargetName) {
+ return EJB_REF_NAME_PREFIX + ejbRefName + "." + injectTargetClassName + "." + injectTargetName;
+ }
+
+ public static String createEjbRefKey(String ejbRefName) {
+ return EJB_REF_NAME_PREFIX + ejbRefName;
+ }
+
+ public static boolean isEjbRefInjectTargetConfigured(String ejbRefName, String injectTargetClassName, String injectTargetName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEjbRefInjectTargetKey(ejbRefName, injectTargetClassName, injectTargetName));
+ }
+
+ public static boolean isEjbRefInjectTargetsConfiguredInInitialWebXML(String ejbRefName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEjbRefInjectTargetConfiguredInWebXMLKey(ejbRefName));
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EjbRefMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,115 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.EnvEntryType;
+import org.apache.geronimo.xbeans.javaee6.InjectionTargetType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EnvEntryMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ public static final String ENV_ENTRY_NAME_PREFIX = "env-entry.env-entry-name.";
+
+ /**
+ * Steps :
+ * a. If we already have a env-entry in the current merged web.xml file, then
+ * a.1 If it is from web-fragment.xml, throw an error, as it is not allowed that the same env-entry in different web-fragment.xml while it is not present in web.xml
+ * a.2 Else it is from web.xml, check whether inject-target is configured in the initial web.xml, if not, merge the configurations from web-fragment.xml, else ignore.
+ * b. web.xml file should inherit it from the web-fragment.xml file
+ */
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EnvEntryType srcEnvEntry : webFragment.getEnvEntryArray()) {
+ String envEntryName = srcEnvEntry.getEnvEntryName().getStringValue();
+ String envEntryKey = createEnvEntryKey(envEntryName);
+ MergeItem mergeItem = (MergeItem) mergeContext.getAttribute(envEntryKey);
+ if (mergeItem != null) {
+ if (mergeItem.isFromWebFragment()) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateJNDIRefMessage("env-entry", envEntryName, mergeItem.getBelongedURL(), mergeContext.getCurrentJarUrl()));
+ } else if (mergeItem.isFromWebXml() && !isEnvEntryInjectTargetsConfiguredInInitialWebXML(envEntryName, mergeContext)) {
+ //Merge InjectTarget
+ EnvEntryType envEntry = (EnvEntryType) mergeItem.getValue();
+ for (InjectionTargetType injectTarget : srcEnvEntry.getInjectionTargetArray()) {
+ String envEntryInjectTargetKey = createEnvEntryInjectTargetKey(envEntryName, injectTarget.getInjectionTargetClass().getStringValue(), injectTarget
+ .getInjectionTargetName().getStringValue());
+ if (!mergeContext.containsAttribute(envEntryInjectTargetKey)) {
+ envEntry.addNewInjectionTarget().set(injectTarget);
+ mergeContext.setAttribute(envEntryInjectTargetKey, Boolean.TRUE);
+ }
+ }
+ }
+ } else {
+ EnvEntryType targetEnvEntry = (EnvEntryType) webApp.addNewEnvEntry().set(srcEnvEntry);
+ mergeContext.setAttribute(envEntryKey, new MergeItem(targetEnvEntry, mergeContext.getCurrentJarUrl(), ElementSource.WEB_FRAGMENT));
+ for (InjectionTargetType injectionTarget : targetEnvEntry.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEnvEntryInjectTargetKey(envEntryName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (EnvEntryType envEntry : webApp.getEnvEntryArray()) {
+ String envEntryName = envEntry.getEnvEntryName().getStringValue();
+ mergeContext.setAttribute(createEnvEntryKey(envEntryName), new MergeItem(envEntry, null, ElementSource.WEB_XML));
+ //Create an attribute tag to indicate whether injectTarget is configured in web.xml file
+ if (envEntry.getInjectionTargetArray().length > 0) {
+ mergeContext.setAttribute(createEnvEntryInjectTargetConfiguredInWebXMLKey(envEntryName), Boolean.TRUE);
+ }
+ for (InjectionTargetType injectionTarget : envEntry.getInjectionTargetArray()) {
+ mergeContext.setAttribute(createEnvEntryInjectTargetKey(envEntryName, injectionTarget.getInjectionTargetClass().getStringValue(), injectionTarget.getInjectionTargetName()
+ .getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+
+ public static String createEnvEntryInjectTargetConfiguredInWebXMLKey(String envEntryName) {
+ return ENV_ENTRY_NAME_PREFIX + envEntryName + ".inject_target_configured_in_web_xml";
+ }
+
+ public static String createEnvEntryInjectTargetKey(String envEntryName, String injectTargetClassName, String injectTargetName) {
+ return ENV_ENTRY_NAME_PREFIX + envEntryName + "." + injectTargetClassName + "." + injectTargetName;
+ }
+
+ public static String createEnvEntryKey(String envEntryName) {
+ return ENV_ENTRY_NAME_PREFIX + envEntryName;
+ }
+
+ public static boolean isEnvEntryInjectTargetConfigured(String envEntryName, String injectTargetClassName, String injectTargetName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEnvEntryInjectTargetKey(envEntryName, injectTargetClassName, injectTargetName));
+ }
+
+ public static boolean isEnvEntryInjectTargetsConfiguredInInitialWebXML(String envEntryName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createEnvEntryInjectTargetConfiguredInWebXMLKey(envEntryName));
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/EnvEntryMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,76 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.ErrorPageType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ErrorPageMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (ErrorPageType errorPage : webFragment.getErrorPageArray()) {
+ MergeItem mergeItem = (MergeItem) mergeContext.getAttribute(createErrorPageKey(errorPage));
+ if (mergeItem != null) {
+ if (mergeItem.getSourceType().equals(ElementSource.WEB_XML)) {
+ continue;
+ } else if (mergeItem.getValue().equals(errorPage.getLocation().getStringValue())) {
+ boolean isErrorCodeConfigured = errorPage.getErrorCode() != null;
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateKeyValueMessage("error-page", isErrorCodeConfigured ? "error-code" : "exception-type", isErrorCodeConfigured ? errorPage
+ .getErrorCode().getStringValue() : errorPage.getExceptionType().getStringValue(), "location", (String) mergeItem.getValue(), mergeItem.getBelongedURL(), errorPage
+ .getLocation().getStringValue(), mergeContext.getCurrentJarUrl()));
+ }
+ } else {
+ webApp.addNewErrorPage().set(errorPage);
+ mergeContext.setAttribute(createErrorPageKey(errorPage), new MergeItem(errorPage.getLocation().getStringValue(), mergeContext.getCurrentJarUrl(), ElementSource.WEB_FRAGMENT));
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (ErrorPageType errorPage : webApp.getErrorPageArray()) {
+ context.setAttribute(createErrorPageKey(errorPage), new MergeItem(errorPage.getLocation().getStringValue(), null, ElementSource.WEB_XML));
+ }
+ }
+
+ public static final String createErrorCodeKey(String errorCode) {
+ return "error-page.error-code." + errorCode;
+ }
+
+ public static final String createExceptionTypeKey(String exceptionType) {
+ return "error-page.exception-type." + exceptionType;
+ }
+
+ public static final String createErrorPageKey(ErrorPageType errorPage) {
+ return errorPage.getErrorCode() == null ? createExceptionTypeKey(errorPage.getExceptionType().getStringValue()) : createErrorCodeKey(errorPage.getErrorCode().getStringValue());
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ErrorPageMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,101 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.FilterType;
+import org.apache.geronimo.xbeans.javaee6.ParamValueType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterInitParamMergeHandler implements SubMergeHandler<FilterType, FilterType> {
+
+ @Override
+ public void add(FilterType servlet, MergeContext mergeContext) throws DeploymentException {
+ String servletName = servlet.getFilterName().getStringValue();
+ for (ParamValueType paramValue : servlet.getInitParamArray()) {
+ addFilterInitParam(servletName, paramValue, ElementSource.WEB_FRAGMENT, mergeContext.getCurrentJarUrl(), mergeContext);
+ }
+ }
+
+ @Override
+ public void merge(FilterType srcFilter, FilterType targetFilter, MergeContext mergeContext) throws DeploymentException {
+ String filterName = srcFilter.getFilterName().getStringValue();
+ for (ParamValueType paramValue : srcFilter.getInitParamArray()) {
+ MergeItem existedMergeItem = (MergeItem) mergeContext.getAttribute(createFilterInitParamKey(filterName, paramValue.getParamName().getStringValue()));
+ if (existedMergeItem == null) {
+ targetFilter.addNewInitParam().set(paramValue);
+ addFilterInitParam(filterName, paramValue, ElementSource.WEB_FRAGMENT, mergeContext.getCurrentJarUrl(), mergeContext);
+ } else {
+ ParamValueType existedParamValue = (ParamValueType) existedMergeItem.getValue();
+ switch (existedMergeItem.getSourceType()) {
+ case WEB_XML:
+ continue;
+ case WEB_FRAGMENT:
+ if (!existedParamValue.getParamValue().getStringValue().equals(paramValue.getParamValue().getStringValue())) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateKeyValueMessage("filter " + filterName, "param-name", paramValue.getParamName().getStringValue(), "param-value",
+ existedParamValue.getParamValue().getStringValue(), existedMergeItem.getBelongedURL(), paramValue.getParamValue().getStringValue(), mergeContext.getCurrentJarUrl()));
+ }
+ break;
+ case ANNOTATION:
+ //Spec 8.1.n.iii Init params for servlets and filters defined via annotations, will be
+ //overridden in the descriptor if the name of the init param exactly matches
+ //the name specified via the annotation. Init params are additive between the
+ //annotations and descriptors.
+ //In my understanding, the value of init-param should be overridden even if it is merged from annotation before the current web-fragment.xml file
+ existedParamValue.getParamValue().set(paramValue.getParamValue());
+ existedMergeItem.setBelongedURL(mergeContext.getCurrentJarUrl());
+ existedMergeItem.setSourceType(ElementSource.WEB_FRAGMENT);
+ }
+ }
+ }
+
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (FilterType filter : webApp.getFilterArray()) {
+ String filterName = filter.getFilterName().getStringValue();
+ for (ParamValueType paramValue : filter.getInitParamArray()) {
+ addFilterInitParam(filterName, paramValue, ElementSource.WEB_XML, null, context);
+ }
+ }
+ }
+
+ public static String createFilterInitParamKey(String filterName, String paramName) {
+ return "filter." + filterName + ".init-param.param-name." + paramName;
+ }
+
+ public static boolean isFilterInitParamConfigured(String filterName, String paramName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createFilterInitParamKey(filterName, paramName));
+ }
+
+ public static void addFilterInitParam(String filterName, ParamValueType paramValue, ElementSource source, String relativeUrl, MergeContext mergeContext) {
+ mergeContext.setAttribute(createFilterInitParamKey(filterName, paramValue.getParamName().getStringValue()), new MergeItem(paramValue, relativeUrl, source));
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterInitParamMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,72 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.xbeans.javaee6.DispatcherType;
+import org.apache.geronimo.xbeans.javaee6.FilterMappingType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterMappingDispatcherMergeHandler implements SubMergeHandler<FilterMappingType, FilterMappingType> {
+
+ @Override
+ public void add(FilterMappingType filterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (DispatcherType dispatcher : filterMapping.getDispatcherArray()) {
+ mergeContext.setAttribute(createFilterMappingDispatcherKey(filterName, dispatcher.getStringValue(), mergeContext), Boolean.TRUE);
+ }
+ }
+
+ @Override
+ public void merge(FilterMappingType srcFilterMapping, FilterMappingType targetFilterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = srcFilterMapping.getFilterName().getStringValue();
+ for (DispatcherType dispatcher : srcFilterMapping.getDispatcherArray()) {
+ if (isFilterMappingDispatcherConfigured(filterName, dispatcher.getStringValue(), mergeContext)) {
+ continue;
+ }
+ mergeContext.setAttribute(createFilterMappingDispatcherKey(filterName, dispatcher.getStringValue(), mergeContext), Boolean.TRUE);
+ targetFilterMapping.addNewDispatcher().setStringValue(dispatcher.getStringValue());
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (FilterMappingType filterMapping : webApp.getFilterMappingArray()) {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (DispatcherType dispatcher : filterMapping.getDispatcherArray()) {
+ context.setAttribute(createFilterMappingDispatcherKey(filterName, dispatcher.getStringValue(), context), Boolean.TRUE);
+ }
+ }
+ }
+
+ public static String createFilterMappingDispatcherKey(String filterName, String dispatcherValue, MergeContext mergeContext) {
+ return "filter-mapping.filter-name." + filterName + ".dispatcher." + dispatcherValue;
+ }
+
+ public static boolean isFilterMappingDispatcherConfigured(String filterName, String dispatcherValue, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createFilterMappingDispatcherKey(filterName, dispatcherValue, mergeContext));
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingDispatcherMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,115 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.xbeans.javaee6.DispatcherType;
+import org.apache.geronimo.xbeans.javaee6.FilterMappingType;
+import org.apache.geronimo.xbeans.javaee6.ServletNameType;
+import org.apache.geronimo.xbeans.javaee6.UrlPatternType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterMappingMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ private List<SubMergeHandler<FilterMappingType, FilterMappingType>> subMergeHandlers;
+
+ public FilterMappingMergeHandler() {
+ subMergeHandlers = new ArrayList<SubMergeHandler<FilterMappingType, FilterMappingType>>();
+ subMergeHandlers.add(new FilterMappingUrlPatternMergeHandler());
+ subMergeHandlers.add(new FilterMappingServletNameMergeHandler());
+ subMergeHandlers.add(new FilterMappingDispatcherMergeHandler());
+ }
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (FilterMappingType srcFilterMapping : webFragment.getFilterMappingArray()) {
+ String filterName = srcFilterMapping.getFilterName().getStringValue();
+ FilterMappingType targetFilterMapping = (FilterMappingType) mergeContext.getAttribute(createFilterMappingKey(filterName));
+ if (targetFilterMapping == null) {
+ targetFilterMapping = (FilterMappingType) webApp.addNewFilterMapping().set(srcFilterMapping);
+ mergeContext.setAttribute(createFilterMappingKey(filterName), targetFilterMapping);
+ for (SubMergeHandler<FilterMappingType, FilterMappingType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.add(targetFilterMapping, mergeContext);
+ }
+ } else {
+ if (isFilterMappingFromAnnotation(filterName, mergeContext)) {
+ //If the current url-patterns configurations are from annotations, so let's drop them
+ targetFilterMapping.setUrlPatternArray(new UrlPatternType[0]);
+ targetFilterMapping.setDispatcherArray(new DispatcherType[0]);
+ targetFilterMapping.setServletNameArray(new ServletNameType[0]);
+ mergeContext.removeAttribute(createFilterMappingSourceKey(filterName));
+ }
+ for (SubMergeHandler<FilterMappingType, FilterMappingType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.merge(srcFilterMapping, targetFilterMapping, mergeContext);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (SubMergeHandler<FilterMappingType, FilterMappingType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.postProcessWebXmlElement(webApp, context);
+ }
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (FilterMappingType filterMapping : webApp.getFilterMappingArray()) {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ context.setAttribute(createFilterMappingKey(filterName), filterMapping);
+ }
+ for (SubMergeHandler<FilterMappingType, FilterMappingType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.preProcessWebXmlElement(webApp, context);
+ }
+ }
+
+ public static String createFilterMappingKey(String filterName) {
+ return "filter-mapping.filter-name" + filterName;
+ }
+
+ public static boolean isFilterMappingConfigured(String filterName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createFilterMappingKey(filterName));
+ }
+
+ public static FilterMappingType getFilterMappingType(String filterName, MergeContext mergeContext) {
+ return (FilterMappingType) mergeContext.getAttribute(createFilterMappingKey(filterName));
+ }
+
+ public static String createFilterMappingSourceKey(String filterName) {
+ return "filter-mapping.filter-name." + filterName + ".sources";
+ }
+
+ public static boolean isFilterMappingFromAnnotation(String filterName, MergeContext mergeContext) {
+ ElementSource elementSource = (ElementSource) mergeContext.getAttribute(createFilterMappingSourceKey(filterName));
+ return elementSource != null && elementSource.equals(ElementSource.ANNOTATION);
+ }
+
+ public static void addFilterMapping(FilterMappingType filterMapping, MergeContext mergeContext) {
+ mergeContext.setAttribute(createFilterMappingKey(filterMapping.getFilterName().getStringValue()), filterMapping);
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,68 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.xbeans.javaee6.FilterMappingType;
+import org.apache.geronimo.xbeans.javaee6.ServletNameType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterMappingServletNameMergeHandler implements SubMergeHandler<FilterMappingType, FilterMappingType> {
+
+ @Override
+ public void add(FilterMappingType filterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (ServletNameType servletName : filterMapping.getServletNameArray()) {
+ mergeContext.setAttribute(createFilterMappingServletNameKey(filterName, servletName.getStringValue()), Boolean.TRUE);
+ }
+ }
+
+ @Override
+ public void merge(FilterMappingType srcFilterMapping, FilterMappingType targetFilterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = srcFilterMapping.getFilterName().getStringValue();
+ for (ServletNameType servletName : srcFilterMapping.getServletNameArray()) {
+ String filterMappingServletNameKey = createFilterMappingServletNameKey(filterName, servletName.getStringValue());
+ if (!mergeContext.containsAttribute(filterMappingServletNameKey)) {
+ targetFilterMapping.addNewServletName().set(servletName);
+ mergeContext.setAttribute(filterMappingServletNameKey, Boolean.TRUE);
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (FilterMappingType filterMapping : webApp.getFilterMappingArray()) {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (ServletNameType servletName : filterMapping.getServletNameArray()) {
+ context.setAttribute(createFilterMappingServletNameKey(filterName, servletName.getStringValue()), Boolean.TRUE);
+ }
+ }
+ }
+
+ public static String createFilterMappingServletNameKey(String filterName, String servletName) {
+ return "filter-mapping.filter-name." + filterName + ".servlet-name." + servletName;
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingServletNameMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,84 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentValidationUtils;
+import org.apache.geronimo.xbeans.javaee6.FilterMappingType;
+import org.apache.geronimo.xbeans.javaee6.UrlPatternType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterMappingUrlPatternMergeHandler implements SubMergeHandler<FilterMappingType, FilterMappingType> {
+
+ @Override
+ public void add(FilterMappingType filterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (UrlPatternType urlPattern : filterMapping.getUrlPatternArray()) {
+ String urlPatternStr = urlPattern.getStringValue();
+ if (!WebDeploymentValidationUtils.isUrlPatternValid(urlPatternStr)) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createInvalidUrlPatternErrorMessage("filter-mapping", filterName, urlPatternStr, "web-fragment.xml located in "
+ + mergeContext.getCurrentJarUrl()));
+ }
+ mergeContext.setAttribute(createFilterMappingUrlPatternKey(filterName, urlPatternStr), urlPattern);
+ }
+ }
+
+ @Override
+ public void merge(FilterMappingType srcFilterMapping, FilterMappingType targetFilterMapping, MergeContext mergeContext) throws DeploymentException {
+ String filterName = srcFilterMapping.getFilterName().getStringValue();
+ for (UrlPatternType urlPattern : srcFilterMapping.getUrlPatternArray()) {
+ String urlPatternStr = urlPattern.getStringValue();
+ String filterMappingUrlPatternKey = createFilterMappingUrlPatternKey(filterName, urlPatternStr);
+ if (!mergeContext.containsAttribute(filterMappingUrlPatternKey)) {
+ UrlPatternType newUrlPattern = (UrlPatternType) targetFilterMapping.addNewUrlPattern().set(urlPattern);
+ if (!WebDeploymentValidationUtils.isUrlPatternValid(urlPatternStr)) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createInvalidUrlPatternErrorMessage("filter-mapping", filterName, urlPatternStr, "web-fragment.xml located in "
+ + mergeContext.getCurrentJarUrl()));
+ }
+ mergeContext.setAttribute(filterMappingUrlPatternKey, newUrlPattern);
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (FilterMappingType filterMapping : webApp.getFilterMappingArray()) {
+ String filterName = filterMapping.getFilterName().getStringValue();
+ for (UrlPatternType urlPattern : filterMapping.getUrlPatternArray()) {
+ String urlPatternStr = urlPattern.getStringValue();
+ if (!WebDeploymentValidationUtils.isUrlPatternValid(urlPatternStr)) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createInvalidUrlPatternErrorMessage("filter-mapping", filterName, urlPatternStr, "web.xml"));
+ }
+ context.setAttribute(createFilterMappingUrlPatternKey(filterName, urlPatternStr), urlPattern);
+ }
+ }
+ }
+
+ public static String createFilterMappingUrlPatternKey(String filterName, String urlPattern) {
+ return "filter-mapping.filter-name." + filterName + ".url-pattern." + urlPattern;
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMappingUrlPatternMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,91 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.xbeans.javaee6.FilterType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class FilterMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ private List<SubMergeHandler<FilterType, FilterType>> subMergeHandlers;
+
+ public FilterMergeHandler() {
+ subMergeHandlers = new ArrayList<SubMergeHandler<FilterType, FilterType>>();
+ subMergeHandlers.add(new FilterInitParamMergeHandler());
+ }
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (FilterType srcFilter : webFragment.getFilterArray()) {
+ String filterName = srcFilter.getFilterName().getStringValue();
+ FilterType targetFilter = (FilterType) mergeContext.getAttribute(createFilterKey(filterName));
+ if (targetFilter == null) {
+ targetFilter = (FilterType) webApp.addNewFilter().set(srcFilter);
+ mergeContext.setAttribute(createFilterKey(filterName), targetFilter);
+ for (SubMergeHandler<FilterType, FilterType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.add(targetFilter, mergeContext);
+ }
+ } else {
+ for (SubMergeHandler<FilterType, FilterType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.merge(srcFilter, targetFilter, mergeContext);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (SubMergeHandler<FilterType, FilterType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.postProcessWebXmlElement(webApp, mergeContext);
+ }
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (FilterType filter : webApp.getFilterArray()) {
+ mergeContext.setAttribute(createFilterKey(filter.getFilterName().getStringValue()), filter);
+ }
+ for (SubMergeHandler<FilterType, FilterType> subMergeHandler : subMergeHandlers) {
+ subMergeHandler.preProcessWebXmlElement(webApp, mergeContext);
+ }
+ }
+
+ public static String createFilterKey(String filterName) {
+ return "filter.filter-name." + filterName;
+ }
+
+ public static boolean isFilterConfigured(String filterName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createFilterKey(filterName));
+ }
+
+ public static FilterType getFilter(String filterName, MergeContext mergeContext) {
+ return (FilterType) mergeContext.getAttribute(createFilterKey(filterName));
+ }
+
+ public static void addFilter(FilterType filter, MergeContext mergeContext) {
+ mergeContext.setAttribute(createFilterKey(filter.getFilterName().getStringValue()), filter);
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/FilterMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,86 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeHelper;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.JspConfigType;
+import org.apache.geronimo.xbeans.javaee6.JspPropertyGroupType;
+import org.apache.geronimo.xbeans.javaee6.TaglibType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JspConfigMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ private static final Logger logger = LoggerFactory.getLogger(JspConfigMergeHandler.class);
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ if (webFragment.getJspConfigArray().length == 0) {
+ return;
+ }
+ if (webFragment.getJspConfigArray().length > 1) {
+ logger.warn(WebDeploymentMessageUtils.createMultipleConfigurationWarningMessage("jsp-config", mergeContext.getCurrentJarUrl()));
+ }
+ JspConfigType srcJspConfig = webFragment.getJspConfigArray(0);
+ JspConfigType targetJspConfig = webApp.getJspConfigArray().length == 0 ? webApp.addNewJspConfig() : webApp.getJspConfigArray(0);
+ //Merge Tag lib configurations
+ for (TaglibType taglib : srcJspConfig.getTaglibArray()) {
+ if (MergeHelper.mergeRequired(createTaglibKey(taglib), "jsp-config/tag-lib", "taglib-uri", taglib.getTaglibUri().getStringValue(), "taglib-location", taglib.getTaglibLocation()
+ .getStringValue(), mergeContext)) {
+ TaglibType newTaglib = targetJspConfig.addNewTaglib();
+ newTaglib.set(taglib);
+ }
+ }
+ //Merge jsp-property-group configurations, seem that no merge actions are required, just add them to the web.xml file
+ for (JspPropertyGroupType srcJspPropertyGroup : srcJspConfig.getJspPropertyGroupArray()) {
+ targetJspConfig.addNewJspPropertyGroup().set(srcJspPropertyGroup);
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ if (webApp.getJspConfigArray().length == 0) {
+ return;
+ }
+ if (webApp.getJspConfigArray().length > 1) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createMultipleConfigurationWebAppErrorMessage("jsp-config"));
+ }
+ JspConfigType jspConfig = webApp.getJspConfigArray(0);
+ for (TaglibType taglib : jspConfig.getTaglibArray()) {
+ context.setAttribute(createTaglibKey(taglib), new MergeItem(taglib.getTaglibLocation().getStringValue(), null, ElementSource.WEB_XML));
+ }
+ }
+
+ public static String createTaglibKey(TaglibType taglib) {
+ return "jsp-config.taglib.taglib-uri." + taglib.getTaglibUri().getStringValue();
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/JspConfigMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,67 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.xbeans.javaee6.ListenerType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * According to the spec 8.2.3.g.vii
+ * Multiple <listener> elements with the same <listener-class> are treated as a single <listener> declaration
+ * @version $Rev$ $Date$
+ */
+public class ListenerMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ for (ListenerType listener : webFragment.getListenerArray()) {
+ String listenerClassName = listener.getListenerClass().getStringValue();
+ if (!mergeContext.containsAttribute(createListenerKey(listenerClassName))) {
+ ListenerType targetListener = webApp.addNewListener();
+ targetListener.addNewListenerClass().setStringValue(listenerClassName);
+ mergeContext.setAttribute(createListenerKey(listener.getListenerClass().getStringValue()), listener);
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ for (ListenerType listener : webApp.getListenerArray()) {
+ context.setAttribute(createListenerKey(listener.getListenerClass().getStringValue()), listener);
+ }
+ }
+
+ public static String createListenerKey(String listenerClassName) {
+ return "listener.listener-class." + listenerClassName;
+ }
+
+ public static boolean isListenerConfigured(String listenerClassName, MergeContext mergeContext) {
+ return mergeContext.containsAttribute(createListenerKey(listenerClassName));
+ }
+
+ public static void addListener(ListenerType listener, MergeContext mergeContext) {
+ mergeContext.setAttribute(createListenerKey(listener.getListenerClass().getStringValue()), listener);
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/ListenerMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java?rev=931020&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java (added)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java Tue Apr 6 05:14:09 2010
@@ -0,0 +1,86 @@
+/**
+ * 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.geronimo.web25.deployment.merge.webfragment;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.web25.deployment.merge.ElementSource;
+import org.apache.geronimo.web25.deployment.merge.MergeContext;
+import org.apache.geronimo.web25.deployment.merge.MergeItem;
+import org.apache.geronimo.web25.deployment.utils.WebDeploymentMessageUtils;
+import org.apache.geronimo.xbeans.javaee6.LocaleEncodingMappingListType;
+import org.apache.geronimo.xbeans.javaee6.LocaleEncodingMappingType;
+import org.apache.geronimo.xbeans.javaee6.WebAppType;
+import org.apache.geronimo.xbeans.javaee6.WebFragmentType;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LocaleEncodingMappingListMergeHandler implements WebFragmentMergeHandler<WebFragmentType, WebAppType> {
+
+ @Override
+ public void merge(WebFragmentType webFragment, WebAppType webApp, MergeContext mergeContext) throws DeploymentException {
+ LocaleEncodingMappingListType targetLocaleEncodingMappingList = null;
+ for (LocaleEncodingMappingListType localeEncodingMappingList : webFragment.getLocaleEncodingMappingListArray()) {
+ for (LocaleEncodingMappingType localeEncodingMapping : localeEncodingMappingList.getLocaleEncodingMappingArray()) {
+ String localeEncodingMappingKey = createLocaleEncodingMappingKey(localeEncodingMapping.getLocale());
+ MergeItem mergeItem = (MergeItem) mergeContext.getAttribute(localeEncodingMappingKey);
+ if (mergeItem != null && mergeItem.isFromWebFragment() && !mergeItem.getValue().equals(localeEncodingMapping.getEncoding())) {
+ throw new DeploymentException(WebDeploymentMessageUtils.createDuplicateKeyValueMessage("locale-encoding-mapping", "locale", localeEncodingMapping.getLocale(), "encoding",
+ (String) mergeItem.getValue(), mergeItem.getBelongedURL(), localeEncodingMapping.getLocale(), mergeContext.getCurrentJarUrl()));
+ }
+ if (targetLocaleEncodingMappingList == null) {
+ targetLocaleEncodingMappingList = webApp.getLocaleEncodingMappingListArray().length > 0 ? webApp.getLocaleEncodingMappingListArray(0) : webApp.addNewLocaleEncodingMappingList();
+ }
+ targetLocaleEncodingMappingList.addNewLocaleEncodingMapping().set(localeEncodingMapping);
+ mergeContext.setAttribute(localeEncodingMappingKey, new MergeItem(localeEncodingMapping.getEncoding(), mergeContext.getCurrentJarUrl(), ElementSource.WEB_FRAGMENT));
+ }
+ }
+ }
+
+ @Override
+ public void postProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ }
+
+ @Override
+ public void preProcessWebXmlElement(WebAppType webApp, MergeContext context) throws DeploymentException {
+ LocaleEncodingMappingListType[] localeEncodingMappingLists = webApp.getLocaleEncodingMappingListArray();
+ if (localeEncodingMappingLists.length == 0) {
+ return;
+ }
+ //Spec 14.2 While multiple locale-encoding-mapping lists are found, we need to concatenate the items
+ if (localeEncodingMappingLists.length > 1) {
+ LocaleEncodingMappingListType targetLocaleEncodingMappingList = localeEncodingMappingLists[0];
+ for (int i = 1; i < localeEncodingMappingLists.length; i++) {
+ LocaleEncodingMappingListType localeEncodingMappingList = localeEncodingMappingLists[i];
+ for (LocaleEncodingMappingType localeEncodingMapping : localeEncodingMappingList.getLocaleEncodingMappingArray()) {
+ targetLocaleEncodingMappingList.addNewLocaleEncodingMapping().set(localeEncodingMapping);
+ }
+ }
+ for (int i = 1, iLength = localeEncodingMappingLists.length; i < iLength; i++) {
+ webApp.removeLocaleEncodingMappingList(1);
+ }
+ }
+ for (LocaleEncodingMappingType localeEncodingMapping : webApp.getLocaleEncodingMappingListArray(0).getLocaleEncodingMappingArray()) {
+ context.setAttribute(createLocaleEncodingMappingKey(localeEncodingMapping.getLocale()), new MergeItem(localeEncodingMapping.getEncoding(), null, ElementSource.WEB_XML));
+ }
+ }
+
+ public static String createLocaleEncodingMappingKey(String locale) {
+ return "locale-encoding-mapping-list.locale-encoding-mapping.locale." + locale;
+ }
+}
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/merge/webfragment/LocaleEncodingMappingListMergeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain