/*
* Copyright (C) 2014 Red Hat, Inc. and/or its affiliates.
*
* 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
*
* 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.jboss.errai.forge.facet.resource;
import org.jboss.errai.forge.facet.plugin.WarPluginFacet;
import org.jboss.errai.forge.xml.ElementFactory;
import org.jboss.forge.addon.facets.constraints.FacetConstraint;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* This facet sets
*
* @author Max Barkley <mbarkley@redhat.com>
*/
@FacetConstraint({ ErraiBusServletConfigFacet.class })
public class CdiWebXmlFacet extends AbstractXmlResourceFacet {
public final String erraiServletExpression = "/web-app/servlet[servlet-name[text()='ErraiServlet']]";
public final String autoDiscoverParamSubExpression = "/init-param[param-name[text()='auto-discover-services']]";
public final String autoDiscoverParamExpression = erraiServletExpression + autoDiscoverParamSubExpression;
@Override
protected Map<XPathExpression, Collection<Node>> getElementsToInsert(final XPath xPath,
final ElementFactory elemFactory) {
return new HashMap<XPathExpression, Collection<Node>>(0);
}
@Override
protected Map<XPathExpression, Node> getReplacements(final XPath xPath, final ElementFactory elemFactory)
throws ParserConfigurationException, XPathExpressionException {
final XPathExpression key = xPath.compile(autoDiscoverParamExpression);
final Element value = elemFactory.createElement("init-param");
value.appendChild(elemFactory.createElement("param-name")).setTextContent("auto-discover-services");
value.appendChild(elemFactory.createElement("param-value")).setTextContent("false");
final Map<XPathExpression, Node> replacements = new HashMap<XPathExpression, Node>(1);
replacements.put(key, value);
return replacements;
}
@Override
protected String getRelPath() {
return WarPluginFacet.getWarSourceDirectory(getProject()) + "/WEB-INF/web.xml";
}
@Override
protected Map<XPathExpression, Node> getRemovalMap(final XPath xPath, final ElementFactory elemFactory)
throws ParserConfigurationException, XPathExpressionException {
assert xPath.compile(erraiServletExpression).evaluate(erraiServletExpression, XPathConstants.NODE) != null;
final XPathExpression key = xPath.compile(autoDiscoverParamExpression);
final Element value = elemFactory.createElement("init-param");
value.appendChild(elemFactory.createElement("param-name")).setTextContent("auto-discover-services");
value.appendChild(elemFactory.createElement("param-value")).setTextContent("true");
final Map<XPathExpression, Node> replacements = new HashMap<XPathExpression, Node>(1);
replacements.put(key, value);
return replacements;
}
}