00001
00025 package org.objectweb.jonas_ws.wsgen.ddmodifier;
00026
00027 import org.objectweb.util.monolog.api.BasicLevel;
00028 import org.w3c.dom.Document;
00029 import org.w3c.dom.Element;
00030 import org.w3c.dom.Node;
00031 import org.w3c.dom.NodeList;
00032 import org.w3c.dom.Text;
00033
00038 public class WsEndpointDDModifier extends DeploymentDescModifier {
00039
00043 private static final String SERVLET = "servlet";
00044
00048 private static final String SERVLET_NAME = "servlet-name";
00049
00053 private static final String SERVLET_CLASS = "servlet-class";
00054
00058 private static final String SERVLET_MAPPING = "servlet-mapping";
00059
00063 private static final String URL_MAPPING = "url-pattern";
00064
00068 private static final String INIT_PARAM = "init-param";
00069
00073 private static final String PARAM_NAME = "param-name";
00074
00078 private static final String PARAM_VALUE = "param-value";
00079
00083 private static final String SECURITY_ROLE_REF = "security-role-ref";
00084
00088 private static final String URL_PATTERN = "url-pattern";
00089
00093 private static final String SECURITY_CONSTRAINT = "security-constraint";
00094
00099 public WsEndpointDDModifier(Document web) {
00100 super(web.getDocumentElement(), web);
00101 }
00102
00108 public void addServlet(String name, String classname) {
00109 Element servlet = newJ2EEElement(SERVLET);
00110 Element servletName = newJ2EEElement(SERVLET_NAME, name);
00111 Element servletClass = newJ2EEElement(SERVLET_CLASS, classname);
00112
00113 servlet.appendChild(servletName);
00114 servlet.appendChild(servletClass);
00115
00116
00117 getElement().appendChild(servlet);
00118
00119 }
00120
00125 public void removeServlet(String name) {
00126 Element servlet = findServlet(name);
00127
00128 if (servlet != null) {
00129 getElement().removeChild(servlet);
00130 }
00131 }
00132
00138 public NodeList removeServletWithSecurity(String name) {
00139 Element servlet = findServlet(name);
00140 NodeList elements = null;
00141
00142 if (servlet != null) {
00143
00144 elements = servlet.getElementsByTagNameNS(J2EE_NS, SECURITY_ROLE_REF);
00145
00146 if (elements.getLength() == 0) {
00147 elements = null;
00148 }
00149 getElement().removeChild(servlet);
00150 }
00151 return elements;
00152 }
00153
00159 public void addServletMapping(String name, String mapping) {
00160 Element servletMapping = newJ2EEElement(SERVLET_MAPPING);
00161 Element servletName = newJ2EEElement(SERVLET_NAME, name);
00162 Element urlMapping = newJ2EEElement(URL_MAPPING, mapping);
00163
00164 servletMapping.appendChild(servletName);
00165 servletMapping.appendChild(urlMapping);
00166
00167
00168 getElement().appendChild(servletMapping);
00169 }
00170
00177 public void addServletParam(String servletName, String pName, String pValue) {
00178 Element ip = newJ2EEElement(INIT_PARAM);
00179 Element pn = newJ2EEElement(PARAM_NAME, pName);
00180 Element pv = newJ2EEElement(PARAM_VALUE, pValue);
00181
00182 ip.appendChild(pn);
00183 ip.appendChild(pv);
00184
00185 Element servlet = findServlet(servletName);
00186 servlet.appendChild(ip);
00187
00188 }
00189
00196 public void addServletSecurityRoleRefs(String servletName, NodeList securityRoleRefs) {
00197
00198 Element servlet = findServlet(servletName);
00199
00200 for (int i = 0; i < securityRoleRefs.getLength(); i++) {
00201 Node securityRoleRefItem = securityRoleRefs.item(i);
00202 servlet.appendChild(securityRoleRefItem);
00203 }
00204 }
00205
00212 private Element findServlet(String name) {
00213 NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SERVLET);
00214 Element servlet = null;
00215
00216 for (int i = 0; (i < nl.getLength()) && (servlet == null); i++) {
00217 Element e = (Element) nl.item(i);
00218
00219 NodeList names = e.getElementsByTagNameNS(J2EE_NS, SERVLET_NAME);
00220
00221
00222 if (names.item(0).getFirstChild().getNodeValue().equals(name)) {
00223 servlet = e;
00224 }
00225 }
00226
00227 return servlet;
00228 }
00229
00235 public String removeServletMapping(String sName) {
00236 NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SERVLET_MAPPING);
00237 Element mapping = null;
00238 String urlPatternValue = null;
00239
00240 for (int i = 0; (i < nl.getLength()) && (mapping == null); i++) {
00241 Element e = (Element) nl.item(i);
00242
00243 NodeList names = e.getElementsByTagNameNS(J2EE_NS, SERVLET_NAME);
00244
00245
00246 if (names.item(0).getFirstChild().getNodeValue().equals(sName)) {
00247 mapping = e;
00248 }
00249 }
00250
00251 if (mapping != null) {
00252 getLogger().log(BasicLevel.DEBUG, "mapping element found : " + mapping);
00253
00254 NodeList urlPatterns = mapping.getElementsByTagNameNS(J2EE_NS, URL_PATTERN);
00255 urlPatternValue = urlPatterns.item(0).getFirstChild().getNodeValue();
00256
00257 getElement().removeChild(mapping);
00258 }
00259
00260 return urlPatternValue;
00261 }
00262
00269 public void updateSecurityConstraint(String oldUrlPatter, String newUrlPatterValue) {
00270
00271 NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SECURITY_CONSTRAINT);
00272
00273
00274 for (int i = 0; i < nl.getLength(); i++) {
00275 Element e = (Element) nl.item(i);
00276
00277
00278 NodeList urlPatternCollection = e.getElementsByTagNameNS(J2EE_NS, URL_PATTERN);
00279 for (int j = 0; j < urlPatternCollection.getLength(); j++) {
00280
00281 Element urlPatternElement = (Element) urlPatternCollection.item(j);
00282 Text urlPatternText = (Text) urlPatternElement.getFirstChild();
00283
00284
00285 if (urlPatternText.getNodeValue().equals(oldUrlPatter)) {
00286 urlPatternText.setNodeValue(newUrlPatterValue);
00287 }
00288 }
00289 }
00290 }
00291
00299 public void addEjbRef(String name, String home, String remote, String link) {
00300
00301 Element ejbRef = newJ2EEElement("ejb-ref");
00302 Element ejbRefName = newJ2EEElement("ejb-ref-name", name);
00303 Element ejbRefType = newJ2EEElement("ejb-ref-type", "Session");
00304 Element ejbHome = newJ2EEElement("home", home);
00305 Element ejbRemote = newJ2EEElement("remote", remote);
00306 Element ejbLink = newJ2EEElement("ejb-link", link);
00307
00308 ejbRef.appendChild(ejbRefName);
00309 ejbRef.appendChild(ejbRefType);
00310 ejbRef.appendChild(ejbHome);
00311 ejbRef.appendChild(ejbRemote);
00312 ejbRef.appendChild(ejbLink);
00313
00314 getElement().appendChild(ejbRef);
00315
00316 }
00317
00325 public void addEjbLocalRef(String name, String home, String remote, String link) {
00326
00327 Element ejbRef = newJ2EEElement("ejb-local-ref");
00328 Element ejbRefName = newJ2EEElement("ejb-ref-name", name);
00329 Element ejbRefType = newJ2EEElement("ejb-ref-type", "Session");
00330 Element ejbHome = newJ2EEElement("local-home", home);
00331 Element ejbRemote = newJ2EEElement("local", remote);
00332 Element ejbLink = newJ2EEElement("ejb-link", link);
00333
00334 ejbRef.appendChild(ejbRefName);
00335 ejbRef.appendChild(ejbRefType);
00336 ejbRef.appendChild(ejbHome);
00337 ejbRef.appendChild(ejbRemote);
00338 ejbRef.appendChild(ejbLink);
00339
00340 getElement().appendChild(ejbRef);
00341
00342 }
00343 }