00001
00026 package org.objectweb.jonas_ws.deployment.api;
00027
00028 import java.util.HashMap;
00029 import java.util.Iterator;
00030 import java.util.List;
00031 import java.util.Map;
00032 import java.util.Set;
00033 import java.util.Vector;
00034
00035 import org.objectweb.jonas_lib.I18n;
00036 import org.objectweb.jonas_lib.deployment.api.AbsDeploymentDesc;
00037
00038 import org.objectweb.jonas_ws.deployment.xml.JonasWebserviceDescription;
00039 import org.objectweb.jonas_ws.deployment.xml.JonasWebservices;
00040 import org.objectweb.jonas_ws.deployment.xml.WebserviceDescription;
00041 import org.objectweb.jonas_ws.deployment.xml.Webservices;
00042
00043 import org.objectweb.util.monolog.api.BasicLevel;
00044 import org.objectweb.util.monolog.api.Logger;
00045
00054 public class WSDeploymentDesc extends AbsDeploymentDesc {
00055
00057 private Vector services = new Vector();
00058
00060 private String displayName;
00061
00063 private String warFile = null;
00064
00066 private Logger logger;
00067
00071 private static I18n i18n = I18n.getInstance(WSDeploymentDesc.class);
00072
00076 private String contextRoot = null;
00077
00089 public WSDeploymentDesc(ClassLoader jarCL, Logger log, Webservices ws, JonasWebservices jws)
00090 throws WSDeploymentDescException {
00091 this.logger = log;
00092
00093
00094 displayName = ws.getDisplayName();
00095
00096
00097 if (jws != null) {
00098 if (jws.getWar() != null) {
00099 warFile = jws.getWar();
00100 }
00101
00102 String ctx = jws.getContextRoot();
00103 if (ctx != null && !"".equals(ctx)) {
00104 contextRoot = ctx;
00105 }
00106
00107 }
00108
00109
00110 List wdl = ws.getWebserviceDescriptionList();
00111 Map links = associateWDAndJWD(ws, jws);
00112
00113 for (int i = 0; i < wdl.size(); i++) {
00114 WebserviceDescription wd = (WebserviceDescription) wdl.get(i);
00115 JonasWebserviceDescription jwd = (JonasWebserviceDescription) links.get(wd.getWebserviceDescriptionName());
00116 services.add(new ServiceDesc(jarCL, wd, jwd));
00117 }
00118
00119
00120
00121
00122 Vector serviceNames = new Vector();
00123
00124 for (int i = 0; i < services.size(); i++) {
00125 String sn = ((ServiceDesc) services.get(i)).getName();
00126
00127 if (serviceNames.contains(sn)) {
00128
00129 String err = getI18n().getMessage("WSDeploymentDesc.serviceNameNotUnique", sn);
00130 logger.log(BasicLevel.ERROR, err);
00131 throw new WSDeploymentDescException(err);
00132 }
00133
00134 serviceNames.add(sn);
00135 }
00136
00137
00138
00139 Vector pcNames = new Vector();
00140
00141 for (int i = 0; i < services.size(); i++) {
00142 ServiceDesc s = (ServiceDesc) services.get(i);
00143 List pcl = s.getPortComponents();
00144
00145 for (int j = 0; j < pcl.size(); j++) {
00146 PortComponentDesc pcd = (PortComponentDesc) pcl.get(j);
00147 String pcn = pcd.getName();
00148
00149 if (pcNames.contains(pcn)) {
00150
00151
00152 String err = getI18n().getMessage("WSDeploymentDesc.portCompNameNotUnique", pcn);
00153 logger.log(BasicLevel.ERROR, err);
00154 throw new WSDeploymentDescException(err);
00155 }
00156
00157 pcNames.add(pcn);
00158 }
00159 }
00160
00161
00162
00163 Vector pcQNames = new Vector();
00164
00165 for (int i = 0; i < services.size(); i++) {
00166 List pcl = ((ServiceDesc) services.get(i)).getPortComponents();
00167
00168 for (int j = 0; j < pcl.size(); j++) {
00169 PortComponentDesc pc = (PortComponentDesc) pcl.get(j);
00170 pcQNames.add(pc.getQName());
00171 }
00172 }
00173
00174
00175 for (int i = 0; i < services.size(); i++) {
00176 WSDLFile wsdlf = ((ServiceDesc) services.get(i)).getWSDL();
00177
00178 if (!wsdlf.hasPortsIncludedIn(pcQNames)) {
00179 String err = getI18n().getMessage("WSDeploymentDesc.wsdlDeclareUnknownPort", wsdlf.getName());
00180 logger.log(BasicLevel.ERROR, err);
00181 throw new WSDeploymentDescException(err);
00182 }
00183 }
00184 }
00185
00192 private Map associateWDAndJWD(Webservices ws, JonasWebservices jws) {
00193 Map res = new HashMap();
00194
00195 for (Iterator i = ws.getWebserviceDescriptionList().iterator(); i.hasNext();) {
00196 WebserviceDescription wsd = (WebserviceDescription) i.next();
00197 res.put(wsd.getWebserviceDescriptionName(), null);
00198 }
00199
00200 if (jws != null) {
00201
00202
00203 Set keys = res.keySet();
00204
00205
00206 for (Iterator i = jws.getJonasWebserviceDescriptionList().iterator(); i.hasNext();) {
00207 JonasWebserviceDescription jwsd = (JonasWebserviceDescription) i.next();
00208 String wsdName = jwsd.getWebserviceDescriptionName();
00209
00210 if (keys.contains(wsdName)) {
00211
00212 res.put(wsdName, jwsd);
00213 } else {
00214 String err = "jonas-webservice-description '" + wsdName + "' is not linked to any webservice-description. It will be ignored.";
00215 logger.log(BasicLevel.WARN, err);
00216 }
00217 }
00218 }
00219 return res;
00220 }
00221
00226 public List getServiceDescs() {
00227 return services;
00228 }
00229
00234 public String getDisplayName() {
00235 return displayName;
00236 }
00237
00241 public String getContextRoot() {
00242 return contextRoot;
00243 }
00244
00249 public String toString() {
00250 StringBuffer sb = new StringBuffer();
00251
00252 sb.append("\nWSDeploymentDesc :");
00253 sb.append("\ngetDisplayName()=" + getDisplayName());
00254
00255 for (Iterator i = getServiceDescs().iterator(); i.hasNext();) {
00256 sb.append("\ngetServiceDesc()=" + ((ServiceDesc) i.next()).toString());
00257 }
00258
00259 sb.append("\ngetWarFile()=" + getWarFile());
00260
00261 return sb.toString();
00262 }
00263
00271 public String getWarFile() {
00272 return warFile;
00273 }
00274
00278 protected static I18n getI18n() {
00279 return i18n;
00280 }
00281 }