001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.console.configcreator; 018 019 import java.util.ArrayList; 020 import java.util.List; 021 import java.util.Map; 022 023 import javax.portlet.ActionResponse; 024 import javax.portlet.PortletRequest; 025 import javax.portlet.PortletSession; 026 027 import org.apache.commons.logging.Log; 028 import org.apache.commons.logging.LogFactory; 029 import org.apache.geronimo.console.MultiPageAbstractHandler; 030 import org.apache.geronimo.console.MultiPageModel; 031 import org.apache.geronimo.deployment.xbeans.PatternType; 032 import org.apache.geronimo.xbeans.geronimo.naming.GerPortType; 033 import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType; 034 import org.apache.geronimo.xbeans.geronimo.security.GerDistinguishedNameType; 035 import org.apache.geronimo.xbeans.geronimo.security.GerLoginDomainPrincipalType; 036 import org.apache.geronimo.xbeans.geronimo.security.GerPrincipalType; 037 import org.apache.geronimo.xbeans.geronimo.security.GerRealmPrincipalType; 038 import org.apache.geronimo.xbeans.geronimo.security.GerRoleType; 039 import org.apache.geronimo.xbeans.geronimo.security.GerSecurityType; 040 import org.apache.geronimo.xbeans.geronimo.security.GerSubjectInfoType; 041 042 /** 043 * Base class for portlet helpers 044 * 045 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 046 */ 047 public abstract class AbstractHandler extends MultiPageAbstractHandler { 048 private final static Log log = LogFactory.getLog(AbstractHandler.class); 049 050 protected final static String GET_ARCHIVE_MODE = "index"; 051 // 'mode' of initial portlet must be one of "index" or "list" 052 053 protected final static String ENVIRONMENT_MODE = "environment"; 054 055 protected final static String REFERENCES_MODE = "references"; 056 057 protected final static String SECURITY_MODE = "security"; 058 059 protected final static String DEPENDENCIES_MODE = "dependencies"; 060 061 protected final static String DISPLAY_PLAN_MODE = "displayPlan"; 062 063 protected final static String DEPLOY_STATUS_MODE = "deployStatus"; 064 065 protected final static String WAR_CONFIG_DATA_ID = "org.apache.geronimo.configcreator.warConfigData"; 066 067 protected final static String DATA_PARAMETER = "data"; 068 069 protected final static String MODULE_URI_PARAMETER = "moduleURI"; 070 071 protected final static String UPLOADED_WAR_URI_PARAMETER = "uploadedWarUri"; 072 073 protected final static String DEPLOYMENT_PLAN_PARAMETER = "deploymentPlan"; 074 075 protected final static String CONTEXT_ROOT_PARAMETER = "contextRoot"; 076 077 protected final static String ARTIFACT_ID_PARAMETER = "artifactId"; 078 079 protected final static String GROUP_ID_PARAMETER = "groupId"; 080 081 protected final static String VERSION_PARAMETER = "version"; 082 083 protected final static String TYPE_PARAMETER = "type"; 084 085 protected final static String HIDDEN_CLASSES_PARAMETER = "hiddenClasses"; 086 087 protected final static String NON_OVERRIDABLE_CLASSES_PARAMETER = "nonOverridableClasses"; 088 089 protected final static String INVERSE_CLASSLOADING_PARAMETER = "inverseClassLoading"; 090 091 protected final static String EJB_REF_PREFIX = "ejbRef"; 092 093 protected final static String EJB_LOCAL_REF_PREFIX = "ejbLocalRef"; 094 095 protected final static String JMS_CONNECTION_FACTORY_REF_PREFIX = "jmsConnectionFactoryRef"; 096 097 protected final static String JMS_DESTINATION_REF_PREFIX = "jmsDestinationRef"; 098 099 protected final static String MESSAGE_DESTINATION_PREFIX = "messageDestination"; 100 101 protected final static String JDBC_POOL_REF_PREFIX = "jdbcPoolRef"; 102 103 protected final static String JAVAMAIL_SESSION_REF_PREFIX = "javaMailSessionRef"; 104 105 protected final static String REF_NAME = "refName"; 106 107 protected final static String REF_LINK = "refLink"; 108 109 protected final static String DEPENDENCY_PREFIX = "dependency"; 110 111 protected final static String ARCHIVE_NOT_SUPPORTED_PARAMETER = "archiveNotSupported"; 112 113 protected final static String REFERENCE_NOT_RESOLVED_PARAMETER = "referenceNotResolved"; 114 115 protected final static String DEPLOYED_EJBS_PARAMETER = "deployedEjbs"; 116 117 protected final static String DEPLOYED_JDBC_CONNECTION_POOLS_PARAMETER = "deployedJdbcConnectionPools"; 118 119 protected final static String DEPLOYED_JMS_CONNECTION_FACTORIES_PARAMETER = "deployedJmsConnectionFactories"; 120 121 protected final static String DEPLOYED_JMS_DESTINATIONS_PARAMETER = "deployedJmsDestinations"; 122 123 protected final static String DEPLOYED_JAVAMAIL_SESSIONS_PARAMETER = "deployedJavaMailSessions"; 124 125 protected final static String DEPLOYED_SECURITY_REALMS_PARAMETER = "deployedSecurityRealms"; 126 127 protected final static String DEPLOYED_CREDENTIAL_STORES_PARAMETER = "deployedCredentialStores"; 128 129 protected final static String COMMON_LIBS_PARAMETER = "commonLibs"; 130 131 protected final static String SELECTED_LIBS_PARAMETER = "selectedLibs"; 132 133 protected final static String DEPLOY_ABBR_STATUS_PARAMETER = "abbrStatusMessage"; 134 135 protected final static String DEPLOY_FULL_STATUS_PARAMETER = "fullStatusMessage"; 136 137 public AbstractHandler(String mode, String viewName) { 138 super(mode, viewName); 139 } 140 141 public static class WARConfigModel implements MultiPageModel { 142 public WARConfigModel(PortletRequest request) { 143 } 144 145 public void save(ActionResponse response, PortletSession session) { 146 } 147 } 148 149 public WARConfigData getSessionData(PortletRequest request) { 150 return (WARConfigData) request.getPortletSession().getAttribute(WAR_CONFIG_DATA_ID); 151 } 152 153 public void setNewSessionData(PortletRequest request) { 154 request.getPortletSession().setAttribute(WAR_CONFIG_DATA_ID, new WARConfigData()); 155 } 156 157 public static class WARConfigData { 158 private String uploadedWarUri; 159 160 private String deploymentPlan; 161 162 private String contextRoot; 163 164 private String artifactId; 165 166 private String groupId; 167 168 private String version; 169 170 private String type; 171 172 private String hiddenClasses; 173 174 private String nonOverridableClasses; 175 176 private boolean inverseClassLoading; 177 178 private List ejbRefs = new ArrayList(); 179 180 private List ejbLocalRefs = new ArrayList(); 181 182 private List jdbcPoolRefs = new ArrayList(); 183 184 private List jmsConnectionFactoryRefs = new ArrayList(); 185 186 private List jmsDestinationRefs = new ArrayList(); 187 188 private List messageDestinations = new ArrayList(); 189 190 private List javaMailSessionRefs = new ArrayList(); 191 192 private List<GerServiceRefType> webServiceRefs = new ArrayList<GerServiceRefType>(); 193 194 private List dependencies = new ArrayList(); 195 196 private boolean referenceNotResolved; 197 198 private String securityRealmName; 199 200 private GerSecurityType security = null; 201 202 public WARConfigData() { 203 } 204 205 public void readEnvironmentData(PortletRequest request) { 206 contextRoot = request.getParameter(CONTEXT_ROOT_PARAMETER); 207 artifactId = request.getParameter(ARTIFACT_ID_PARAMETER); 208 groupId = request.getParameter(GROUP_ID_PARAMETER); 209 version = request.getParameter(VERSION_PARAMETER); 210 type = request.getParameter(TYPE_PARAMETER); 211 hiddenClasses = request.getParameter(HIDDEN_CLASSES_PARAMETER); 212 nonOverridableClasses = request.getParameter(NON_OVERRIDABLE_CLASSES_PARAMETER); 213 inverseClassLoading = "true".equalsIgnoreCase(request 214 .getParameter(INVERSE_CLASSLOADING_PARAMETER)) ? true : false; 215 } 216 217 public void readReferencesData(PortletRequest request) { 218 readParameters(EJB_REF_PREFIX, ejbRefs, request); 219 readParameters(EJB_LOCAL_REF_PREFIX, ejbLocalRefs, request); 220 readParameters(JMS_CONNECTION_FACTORY_REF_PREFIX, jmsConnectionFactoryRefs, request); 221 readParameters(JMS_DESTINATION_REF_PREFIX, jmsDestinationRefs, request); 222 readParameters(MESSAGE_DESTINATION_PREFIX, messageDestinations, request); 223 readParameters(JDBC_POOL_REF_PREFIX, jdbcPoolRefs, request); 224 readParameters(JAVAMAIL_SESSION_REF_PREFIX, javaMailSessionRefs, request); 225 readWebServiceRefsData(request); 226 } 227 228 private void readParameters(String prefix1, List list, PortletRequest request) { 229 list.clear(); 230 Map map = request.getParameterMap(); 231 int index = 0; 232 while (true) { 233 String prefix2 = prefix1 + "." + (index++) + "."; 234 if (!map.containsKey(prefix2 + REF_NAME)) { 235 break; 236 } 237 ReferenceData data = new ReferenceData(); 238 data.load(request, prefix2); 239 list.add(data); 240 } 241 } 242 243 public void readWebServiceRefsData(PortletRequest request) { 244 Map map = request.getParameterMap(); 245 for (int i = 0; i < getWebServiceRefs().size(); i++) { 246 GerServiceRefType serviceRef = getWebServiceRefs().get(i); 247 for (int j = serviceRef.getPortArray().length - 1; j >= 0; j--) { 248 serviceRef.removePort(j); 249 } 250 String prefix1 = "serviceRef" + "." + i + "." + "port" + "."; 251 int lastIndex = Integer.parseInt(request.getParameter(prefix1 + "lastIndex")); 252 for (int j = 0; j < lastIndex; j++) { 253 String prefix2 = prefix1 + j + "."; 254 if (!map.containsKey(prefix2 + "portName")) { 255 continue; 256 } 257 GerPortType port = serviceRef.addNewPort(); 258 String value = request.getParameter(prefix2 + "portName"); 259 if (!isEmpty(value)) { 260 port.setPortName(value); 261 } 262 value = request.getParameter(prefix2 + "protocol"); 263 if (!isEmpty(value)) { 264 port.setProtocol(value); 265 } 266 value = request.getParameter(prefix2 + "host"); 267 if (!isEmpty(value)) { 268 port.setHost(value); 269 } 270 value = request.getParameter(prefix2 + "port"); 271 if (!isEmpty(value)) { 272 int portValue = Integer.parseInt(value); 273 port.setPort(portValue); 274 } 275 value = request.getParameter(prefix2 + "uri"); 276 if (!isEmpty(value)) { 277 port.setUri(value); 278 } 279 value = request.getParameter(prefix2 + "credentialsName"); 280 if (!isEmpty(value)) { 281 port.setCredentialsName(value); 282 } 283 } 284 } 285 } 286 287 public void readSecurityData(PortletRequest request) { 288 securityRealmName = request.getParameter("securityRealmName"); 289 readSecurityParameters(request); 290 } 291 292 private void readSecurityParameters(PortletRequest request) { 293 Map map = request.getParameterMap(); 294 boolean processAdvancedSettings = false; 295 if (map.containsKey("security.advancedSettings.isPresent") 296 && "true".equalsIgnoreCase(request.getParameter("security.advancedSettings.isPresent"))) { 297 processAdvancedSettings = true; 298 } 299 GerRoleType[] roles = security.getRoleMappings().getRoleArray(); 300 for (int index = 0; index < roles.length; index++) { 301 String prefix1 = "security.roleMappings" + "." + index + "."; 302 GerRoleType role = roles[index]; 303 304 for (int i = role.sizeOfPrincipalArray() - 1; i >= 0; i--) { 305 role.removePrincipal(i); 306 } 307 int lastIndex = Integer.parseInt(request.getParameter(prefix1 + "principal.lastIndex")); 308 for (int i = 0; i < lastIndex; i++) { 309 String prefix2 = prefix1 + "principal" + "." + i + "."; 310 if (!map.containsKey(prefix2 + "name")) { 311 continue; 312 } 313 GerPrincipalType principal = role.addNewPrincipal(); 314 principal.setName(request.getParameter(prefix2 + "name")); 315 principal.setClass1(request.getParameter(prefix2 + "class")); 316 } 317 318 for (int i = role.sizeOfLoginDomainPrincipalArray() - 1; i >= 0; i--) { 319 role.removeLoginDomainPrincipal(i); 320 } 321 lastIndex = Integer.parseInt(request.getParameter(prefix1 + "loginDomainPrincipal.lastIndex")); 322 for (int i = 0; i < lastIndex; i++) { 323 String prefix2 = prefix1 + "loginDomainPrincipal" + "." + i + "."; 324 if (!map.containsKey(prefix2 + "name")) { 325 continue; 326 } 327 GerLoginDomainPrincipalType loginDomainPrincipal = role.addNewLoginDomainPrincipal(); 328 loginDomainPrincipal.setName(request.getParameter(prefix2 + "name")); 329 loginDomainPrincipal.setClass1(request.getParameter(prefix2 + "class")); 330 loginDomainPrincipal.setDomainName(request.getParameter(prefix2 + "domainName")); 331 } 332 333 for (int i = role.sizeOfRealmPrincipalArray() - 1; i >= 0; i--) { 334 role.removeRealmPrincipal(i); 335 } 336 lastIndex = Integer.parseInt(request.getParameter(prefix1 + "realmPrincipal.lastIndex")); 337 for (int i = 0; i < lastIndex; i++) { 338 String prefix2 = prefix1 + "realmPrincipal" + "." + i + "."; 339 if (!map.containsKey(prefix2 + "name")) { 340 continue; 341 } 342 GerRealmPrincipalType realmPrincipal = role.addNewRealmPrincipal(); 343 realmPrincipal.setName(request.getParameter(prefix2 + "name")); 344 realmPrincipal.setClass1(request.getParameter(prefix2 + "class")); 345 realmPrincipal.setDomainName(request.getParameter(prefix2 + "domainName")); 346 realmPrincipal.setRealmName(request.getParameter(prefix2 + "realmName")); 347 } 348 349 for (int i = role.sizeOfDistinguishedNameArray() - 1; i >= 0; i--) { 350 role.removeDistinguishedName(i); 351 } 352 lastIndex = Integer.parseInt(request.getParameter(prefix1 + "distinguishedName.lastIndex")); 353 for (int i = 0; i < lastIndex; i++) { 354 String prefix2 = prefix1 + "distinguishedName" + "." + i + "."; 355 if (!map.containsKey(prefix2 + "name")) { 356 continue; 357 } 358 GerDistinguishedNameType distinguishedName = role.addNewDistinguishedName(); 359 distinguishedName.setName(request.getParameter(prefix2 + "name")); 360 } 361 362 if (processAdvancedSettings) { 363 String prefix2 = prefix1 + "runAsSubject" + "."; 364 if (map.containsKey(prefix2 + "realm")) { 365 if (role.isSetRunAsSubject()) { 366 role.unsetRunAsSubject(); 367 } 368 String realm = request.getParameter(prefix2 + "realm"); 369 String id = request.getParameter(prefix2 + "id"); 370 if (!isEmpty(realm) && !isEmpty(id)) { 371 GerSubjectInfoType runAsSubject = role.addNewRunAsSubject(); 372 runAsSubject.setRealm(realm); 373 runAsSubject.setId(id); 374 } 375 } 376 } 377 } 378 if(processAdvancedSettings) { 379 String parameterName = "security" + "." + "credentialStoreRef"; 380 if (map.containsKey(parameterName)) { 381 String patternString = request.getParameter(parameterName); 382 String[] elements = patternString.split("/", 6); 383 PatternType pattern = PatternType.Factory.newInstance(); 384 pattern.setGroupId(elements[0]); 385 pattern.setArtifactId(elements[1]); 386 //pattern.setVersion(elements[2]); 387 //pattern.setType(elements[3]); 388 //pattern.setModule(elements[4]); 389 pattern.setName(elements[5]); 390 security.setCredentialStoreRef(pattern); 391 dependencies.add(JSR88_Util.getDependencyString(patternString)); 392 } 393 String prefix = "security" + "." + "defaultSubject" + "."; 394 if (map.containsKey(prefix + "realm")) { 395 if(security.isSetDefaultSubject()) { 396 security.unsetDefaultSubject(); 397 } 398 String realm = request.getParameter(prefix + "realm"); 399 String id = request.getParameter(prefix + "id"); 400 if (!isEmpty(realm) && !isEmpty(id)) { 401 GerSubjectInfoType runAsSubject = security.addNewDefaultSubject(); 402 runAsSubject.setRealm(realm); 403 runAsSubject.setId(id); 404 } 405 } 406 parameterName = "security" + "." + "doasCurrentCaller"; 407 if ("true".equalsIgnoreCase(request.getParameter(parameterName))) { 408 security.setDoasCurrentCaller(true); 409 } 410 parameterName = "security" + "." + "useContextHandler"; 411 if ("true".equalsIgnoreCase(request.getParameter(parameterName))) { 412 security.setUseContextHandler(true); 413 } 414 String defaultRole = request.getParameter("security" + "." + "defaultRole"); 415 if (!isEmpty(defaultRole)) { 416 security.setDefaultRole(defaultRole); 417 } 418 } 419 } 420 421 public String getContextRoot() { 422 return contextRoot; 423 } 424 425 public void setContextRoot(String contextRoot) { 426 this.contextRoot = contextRoot; 427 } 428 429 public String getArtifactId() { 430 return artifactId; 431 } 432 433 public void setArtifactId(String artifactId) { 434 this.artifactId = artifactId; 435 } 436 437 public String getGroupId() { 438 return groupId; 439 } 440 441 public void setGroupId(String groupId) { 442 this.groupId = groupId; 443 } 444 445 public String getType() { 446 return type; 447 } 448 449 public void setType(String type) { 450 this.type = type; 451 } 452 453 public String getVersion() { 454 return version; 455 } 456 457 public void setVersion(String version) { 458 this.version = version; 459 } 460 461 public String getHiddenClasses() { 462 return hiddenClasses; 463 } 464 465 public void setHiddenClasses(String hiddenClasses) { 466 this.hiddenClasses = hiddenClasses; 467 } 468 469 public String getNonOverridableClasses() { 470 return nonOverridableClasses; 471 } 472 473 public void setNonOverridableClasses(String nonOverridableClasses) { 474 this.nonOverridableClasses = nonOverridableClasses; 475 } 476 477 public boolean isInverseClassLoading() { 478 return inverseClassLoading; 479 } 480 481 public void setInverseClassLoading(boolean inverseClassLoading) { 482 this.inverseClassLoading = inverseClassLoading; 483 } 484 485 public List getDependencies() { 486 return dependencies; 487 } 488 489 public List getEjbLocalRefs() { 490 return ejbLocalRefs; 491 } 492 493 public List getEjbRefs() { 494 return ejbRefs; 495 } 496 497 public List getJdbcPoolRefs() { 498 return jdbcPoolRefs; 499 } 500 501 public List getJmsConnectionFactoryRefs() { 502 return jmsConnectionFactoryRefs; 503 } 504 505 public List getJmsDestinationRefs() { 506 return jmsDestinationRefs; 507 } 508 509 public List getMessageDestinations() { 510 return messageDestinations; 511 } 512 513 public List getJavaMailSessionRefs() { 514 return javaMailSessionRefs; 515 } 516 517 public List<GerServiceRefType> getWebServiceRefs() { 518 return webServiceRefs; 519 } 520 521 public boolean isReferenceNotResolved() { 522 return referenceNotResolved; 523 } 524 525 public void setReferenceNotResolved(boolean referenceNotResolved) { 526 this.referenceNotResolved = referenceNotResolved; 527 } 528 529 public String getUploadedWarUri() { 530 return uploadedWarUri; 531 } 532 533 public void setUploadedWarUri(String uploadedWarUri) { 534 this.uploadedWarUri = uploadedWarUri; 535 } 536 537 public String getDeploymentPlan() { 538 return deploymentPlan; 539 } 540 541 public void setDeploymentPlan(String deploymentPlan) { 542 this.deploymentPlan = deploymentPlan; 543 } 544 545 public String getSecurityRealmName() { 546 return securityRealmName; 547 } 548 549 public void setSecurityRealmName(String securityRealmName) { 550 this.securityRealmName = securityRealmName; 551 } 552 553 public GerSecurityType getSecurity() { 554 return security; 555 } 556 557 public void setSecurity(GerSecurityType security) { 558 this.security = security; 559 } 560 } 561 562 public static class ReferenceData { 563 private String refName; 564 565 private String refLink; 566 567 public ReferenceData() { 568 } 569 570 public ReferenceData(String refName) { 571 this.refName = refName; 572 } 573 574 public void load(PortletRequest request, String prefix) { 575 refName = request.getParameter(prefix + REF_NAME); 576 refLink = request.getParameter(prefix + REF_LINK); 577 } 578 579 public void save(ActionResponse response, String prefix) { 580 if (!isEmpty(refName)) 581 response.setRenderParameter(prefix + REF_NAME, refName); 582 if (!isEmpty(refLink)) 583 response.setRenderParameter(prefix + REF_LINK, refLink); 584 } 585 586 public String getRefName() { 587 return refName; 588 } 589 590 public void setRefName(String refName) { 591 this.refName = refName; 592 } 593 594 public String getRefLink() { 595 return refLink; 596 } 597 598 public void setRefLink(String refLink) { 599 this.refLink = refLink; 600 } 601 } 602 }