| /******************************************************************************* |
| * Copyright (c) 2001, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.wst.ws.internal.explorer.platform.uddi.actions; |
| |
| import java.net.MalformedURLException; |
| import java.util.Vector; |
| import org.eclipse.wst.ws.internal.explorer.platform.datamodel.ListElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.datamodel.ListManager; |
| import org.eclipse.wst.ws.internal.explorer.platform.datamodel.TreeElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.FormTool; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.FormToolPropertiesInterface; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.MessageQueue; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.Node; |
| import org.eclipse.wst.ws.internal.explorer.platform.perspective.NodeManager; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.constants.UDDIActionInputs; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.BusinessElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.PublisherAssertionElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.datamodel.RegistryElement; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.MultipleFormToolPropertiesInterface; |
| import org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.UDDIPerspective; |
| import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataException; |
| import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser; |
| import org.eclipse.wst.ws.internal.explorer.platform.util.Validator; |
| import org.uddi4j.UDDIException; |
| import org.uddi4j.client.UDDIProxy; |
| import org.uddi4j.datatype.business.BusinessEntity; |
| import org.uddi4j.response.AssertionStatusItem; |
| import org.uddi4j.response.AssertionStatusReport; |
| import org.uddi4j.response.CompletionStatus; |
| import org.uddi4j.response.DispositionReport; |
| import org.uddi4j.response.RelatedBusinessInfo; |
| import org.uddi4j.response.RelatedBusinessesList; |
| import org.uddi4j.response.Result; |
| import org.uddi4j.response.SharedRelationships; |
| import org.uddi4j.transport.TransportException; |
| import org.uddi4j.util.FindQualifiers; |
| import org.uddi4j.util.KeyedReference; |
| |
| public class ShowPublisherAssertionsAction extends CommonPublisherAssertionsAction |
| { |
| |
| protected String subQueryKey_; |
| protected boolean isSubQueryGet_; |
| protected boolean subQueryInitiated_; |
| protected String newSubQuery_; |
| protected String newSubQueryItem_; |
| |
| public ShowPublisherAssertionsAction(Controller controller) |
| { |
| super(controller); |
| |
| subQueryKey_ = null; |
| isSubQueryGet_ = false; |
| subQueryInitiated_ = false; |
| } |
| |
| protected final boolean processParsedResults(MultipartFormDataParser parser) throws MultipartFormDataException |
| { |
| if (registryNode_ == null) |
| return false; |
| |
| // ids from uddiObjects_table |
| String[] selectedBusIds = parser.getParameterValues(UDDIActionInputs.PUBLISHER_ASSERTIONS_SELECTED_BUS_ID); |
| if (selectedBusIds != null && selectedBusIds.length > 0) |
| propertyTable_.put(UDDIActionInputs.PUBLISHER_ASSERTIONS_SELECTED_BUS_ID, selectedBusIds); |
| |
| newSubQuery_ = parser.getParameter(UDDIActionInputs.NEW_SUBQUERY_INITIATED); |
| String isSubQueryGetString = parser.getParameter(UDDIActionInputs.SUBQUERY_GET); |
| newSubQueryItem_ = parser.getParameter(UDDIActionInputs.NEW_SUBQUERY_QUERY_ITEM); |
| subQueryKey_ = parser.getParameter(UDDIActionInputs.SUBQUERY_KEY); |
| |
| // Validate the data. |
| controller_.getUDDIPerspective(); |
| FormTool formTool = getSelectedFormTool(); |
| FormToolPropertiesInterface formToolPI = ((MultipleFormToolPropertiesInterface)formTool).getFormToolProperties(subQueryKey_); |
| formToolPI.clearErrors(); |
| |
| if (newSubQuery_ != null && newSubQuery_.length() > 0) |
| subQueryInitiated_ = true; |
| else |
| subQueryInitiated_ = false; |
| |
| if (isSubQueryGetString != null) |
| isSubQueryGet_ = Boolean.valueOf(isSubQueryGetString).booleanValue(); |
| |
| // if not yet logged in, validate the parameters needed to log in |
| // NOTE: This action does NOT require the user to be logged in. |
| if (!isLoggedIn_) { |
| String publishURL = parser.getParameter(UDDIActionInputs.QUERY_INPUT_ADVANCED_PUBLISH_URL); |
| String userID = parser.getParameter(UDDIActionInputs.QUERY_INPUT_ADVANCED_USERID); |
| String password = parser.getParameter(UDDIActionInputs.QUERY_INPUT_ADVANCED_PASSWORD); |
| |
| if (publishURL != null) |
| { |
| propertyTable_.put(UDDIActionInputs.QUERY_INPUT_ADVANCED_PUBLISH_URL,publishURL); |
| formTool.setProperty(UDDIActionInputs.QUERY_INPUT_ADVANCED_PUBLISH_URL,publishURL); |
| } |
| |
| if (userID != null) |
| { |
| propertyTable_.put(UDDIActionInputs.QUERY_INPUT_ADVANCED_USERID,userID); |
| formTool.setProperty(UDDIActionInputs.QUERY_INPUT_ADVANCED_USERID,userID); |
| } |
| |
| if (password != null) |
| { |
| propertyTable_.put(UDDIActionInputs.QUERY_INPUT_ADVANCED_PASSWORD,password); |
| formTool.setProperty(UDDIActionInputs.QUERY_INPUT_ADVANCED_PASSWORD,password); |
| } |
| } |
| |
| return true; |
| } |
| |
| public final boolean isSubQueryInitiated() |
| { |
| return subQueryInitiated_; |
| } |
| |
| public final boolean isSubQueryGet() |
| { |
| return isSubQueryGet_; |
| } |
| |
| public final String getSubQueryKey() |
| { |
| return subQueryKey_; |
| } |
| |
| public final String getNewSubQuery() |
| { |
| return newSubQuery_; |
| } |
| |
| public final String getNewSubQueryItem() |
| { |
| return newSubQueryItem_; |
| } |
| |
| public boolean run() |
| { |
| // Synchronize client view and server model (uddiObject_table.jsp) |
| synchronizeUDDIObjectTable(); |
| |
| if (registryNode_ == null) |
| return false; |
| |
| RegistryElement registryElement = (RegistryElement)registryNode_.getTreeElement(); |
| UDDIPerspective uddiPerspective = controller_.getUDDIPerspective(); |
| MessageQueue messageQueue = uddiPerspective.getMessageQueue(); |
| NodeManager navigatorManager = uddiPerspective.getNavigatorManager(); |
| Node selectedNode = navigatorManager.getSelectedNode(); |
| TreeElement selectedElement = selectedNode.getTreeElement(); |
| |
| if (!(selectedElement instanceof BusinessElement)) |
| return false; |
| |
| // if not yet logged in, log in first |
| if (!isLoggedIn_) { |
| String publishURL = (String)propertyTable_.get(UDDIActionInputs.QUERY_INPUT_ADVANCED_PUBLISH_URL); |
| String userID = (String)propertyTable_.get(UDDIActionInputs.QUERY_INPUT_ADVANCED_USERID); |
| String password = (String)propertyTable_.get(UDDIActionInputs.QUERY_INPUT_ADVANCED_PASSWORD); |
| |
| try { |
| if (Validator.validateURL(publishURL) && |
| Validator.validateString(userID) && |
| password != null) { |
| registryElement.performLogin(publishURL, userID, password); |
| isLoggedIn_ = registryElement.isLoggedIn(); |
| } |
| } |
| catch (TransportException te) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("TransportException"); |
| messageQueue.addMessage(te.getMessage()); |
| return false; |
| } |
| catch (UDDIException uddie) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("UDDIException"); |
| messageQueue.addMessage(uddie.toString()); |
| return false; |
| } |
| catch (MalformedURLException me) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("MalformedURLException"); |
| messageQueue.addMessage(me.getMessage()); |
| return false; |
| } |
| } |
| |
| // show all assertion iff is logged in and business is owned |
| // else show only completed ones |
| BusinessElement busElement = (BusinessElement)selectedElement; |
| if (isLoggedIn_ && isBusinessOwned(busElement)) |
| return showPublisherAssertionsForOwnedBus(busElement); |
| else |
| return showPublisherAssertionsForNonOwnedBus(busElement); |
| } |
| |
| private boolean showPublisherAssertionsForOwnedBus(BusinessElement busElement) { |
| UDDIPerspective uddiPerspective = controller_.getUDDIPerspective(); |
| MessageQueue messageQueue = uddiPerspective.getMessageQueue(); |
| |
| // try to get a list of all publisher assertion based on the current registry's authToken |
| ListManager listManager = new ListManager(); |
| FormTool formTool = getSelectedFormTool(); |
| FormToolPropertiesInterface formToolPI = ((MultipleFormToolPropertiesInterface)formTool).getFormToolProperties(subQueryKey_); |
| formToolPI.removeProperty(UDDIActionInputs.QUERY_INPUT_EXISTING_PUBLISHER_ASSERTIONS); |
| Vector queryInputVector = new Vector(); |
| RegistryElement registryElement = (RegistryElement)registryNode_.getTreeElement(); |
| registryElement.getUserId(); |
| registryElement.getCred(); |
| |
| // show all publisher assertions |
| UDDIProxy proxy = ((RegistryElement)registryNode_.getTreeElement()).getProxy(); |
| AssertionStatusReport assertionReport; |
| try { |
| assertionReport = proxy.get_assertionStatusReport(registryElement.getAuthInfoString(), (CompletionStatus)null); |
| } |
| catch (UDDIException uddie) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("UDDIException"); |
| DispositionReport report = uddie.getDispositionReport(); |
| Vector reportErrInfo = report.getResultVector(); |
| for (int i = 0; i < reportErrInfo.size(); i++) { |
| messageQueue.addMessage(((Result) reportErrInfo.get(i)).getErrInfo().getText()); |
| } |
| return false; |
| } |
| catch (Exception e) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("Exception"); |
| messageQueue.addMessage(e.getMessage()); |
| return false; |
| } |
| Vector assertionVector = assertionReport.getAssertionStatusItemVector(); |
| Vector otherBusinessKeys = new Vector(); |
| Vector pubAssertionElements = new Vector(); |
| |
| for (int i = 0; i < assertionVector.size(); i++) { |
| AssertionStatusItem assertionItem = (AssertionStatusItem)assertionVector.elementAt(i); |
| // determine the from/to business keys |
| String fromKey = assertionItem.getFromKey().getText(); |
| String toKey = assertionItem.getToKey().getText(); |
| String owningBusinessKey = busElement.getBusinessEntity().getBusinessKey(); |
| // ignore this assertion if neither the from key nor the to key equals to this business's key |
| if (!owningBusinessKey.equals(fromKey) && !owningBusinessKey.equals(toKey)) |
| continue; |
| String otherBusinessKey = ((owningBusinessKey.equals(fromKey)) ? toKey : fromKey); |
| // retrieve the information of the "other business" |
| otherBusinessKeys.add(otherBusinessKey); |
| |
| // retrieve the status of the publisher assertion |
| String status = assertionItem.getCompletionStatus().getText(); |
| KeyedReference keyedRef = assertionItem.getKeyedReference(); |
| PublisherAssertionElement pubAssertionElement = new PublisherAssertionElement( |
| fromKey, |
| toKey, |
| owningBusinessKey, |
| null, |
| -1, |
| status, |
| keyedRef); |
| pubAssertionElements.add(pubAssertionElement); |
| } |
| if (otherBusinessKeys.size() > 0) { |
| Vector busEntities; |
| try { |
| busEntities = proxy.get_businessDetail(otherBusinessKeys).getBusinessEntityVector(); |
| } |
| catch (Exception ex) { |
| busEntities = new Vector(); |
| if (otherBusinessKeys.size() > 1) { |
| for (int j = 0; j < otherBusinessKeys.size(); j++) { |
| try { |
| busEntities.add(proxy.get_businessDetail((String)otherBusinessKeys.get(j)).getBusinessEntityVector().get(0)); |
| } |
| catch (Exception exception) { |
| pubAssertionElements.remove(j); |
| } |
| } |
| } |
| else |
| pubAssertionElements.remove(0); |
| } |
| for (int j = 0; j < busEntities.size(); j++) { |
| BusinessEntity be = (BusinessEntity)busEntities.get(j); |
| PublisherAssertionElement pubAssertionElement = (PublisherAssertionElement)pubAssertionElements.get(j); |
| ListElement le = new ListElement(be); |
| queryInputVector.add(le); |
| int subQueryItemId = queryInputVector.indexOf(le); |
| pubAssertionElement.setServiceProvider(le); |
| pubAssertionElement.setSubQueryItemId(subQueryItemId); |
| listManager.add(new ListElement(pubAssertionElement)); |
| } |
| } |
| busElement.setPublisherAssertions(listManager); |
| formToolPI.setProperty(UDDIActionInputs.QUERY_INPUT_EXISTING_PUBLISHER_ASSERTIONS, queryInputVector); |
| messageQueue.addMessage(uddiPerspective.getMessage("MSG_INFO_PUBLISHER_ASSERTIONS_REFRESHED")); |
| return true; |
| } |
| |
| private boolean showPublisherAssertionsForNonOwnedBus(BusinessElement busElement) { |
| UDDIPerspective uddiPerspective = controller_.getUDDIPerspective(); |
| MessageQueue messageQueue = uddiPerspective.getMessageQueue(); |
| |
| // try to get a list of publisher assertions based on the business key |
| ListManager listManager = new ListManager(); |
| FormTool formTool = getSelectedFormTool(); |
| FormToolPropertiesInterface formToolPI = ((MultipleFormToolPropertiesInterface)formTool).getFormToolProperties(subQueryKey_); |
| formToolPI.removeProperty(UDDIActionInputs.QUERY_INPUT_EXISTING_PUBLISHER_ASSERTIONS); |
| Vector queryInputVector = new Vector(); |
| UDDIProxy proxy = ((RegistryElement)registryNode_.getTreeElement()).getProxy(); |
| RelatedBusinessesList relatedBusList; |
| try { |
| relatedBusList = proxy.find_relatedBusinesses(busElement.getBusinessEntity().getBusinessKey(), |
| (KeyedReference)null, |
| (FindQualifiers)null); |
| } |
| catch (UDDIException uddie) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("UDDIException"); |
| DispositionReport report = uddie.getDispositionReport(); |
| Vector reportErrInfo = report.getResultVector(); |
| for (int i = 0; i < reportErrInfo.size(); i++) { |
| messageQueue.addMessage(((Result) reportErrInfo.get(i)).getErrInfo().getText()); |
| } |
| return false; |
| } |
| catch (Exception e) { |
| messageQueue.addMessage(controller_.getMessage("MSG_ERROR_UNEXPECTED")); |
| messageQueue.addMessage("Exception"); |
| messageQueue.addMessage(e.getMessage()); |
| return false; |
| } |
| Vector relatedBusVector = relatedBusList.getRelatedBusinessInfos().getRelatedBusinessInfoVector(); |
| Vector otherBusinessKeys = new Vector(); |
| Vector pubAssertionElements = new Vector(); |
| for (int i = 0; i < relatedBusVector.size(); i++) { |
| RelatedBusinessInfo relatedBusInfo = (RelatedBusinessInfo)relatedBusVector.elementAt(i); |
| // determine the from/to business keys |
| String fromKey; |
| String toKey; |
| String owningBusinessKey; |
| if (relatedBusInfo.getDefaultSharedRelationships().getDirection().equals(SharedRelationships.DIRECTION_FROMKEY)) { |
| fromKey = busElement.getBusinessEntity().getBusinessKey(); |
| toKey = relatedBusInfo.getBusinessKey(); |
| owningBusinessKey = fromKey; |
| otherBusinessKeys.add(toKey); |
| } |
| else { |
| fromKey = relatedBusInfo.getBusinessKey(); |
| toKey = busElement.getBusinessEntity().getBusinessKey(); |
| owningBusinessKey = toKey; |
| otherBusinessKeys.add(fromKey); |
| } |
| |
| Vector keyedRefVector = relatedBusInfo.getDefaultSharedRelationships().getKeyedReferenceVector(); |
| PublisherAssertionElement[] pubAssertionElementArray = new PublisherAssertionElement[keyedRefVector.size()]; |
| for (int k = 0; k < keyedRefVector.size(); k++) { |
| // retrieve the status of the publisher assertion |
| String status = CompletionStatus.COMPLETE; |
| KeyedReference keyedRef = (KeyedReference)keyedRefVector.elementAt(k); |
| PublisherAssertionElement pubAssertionElement = new PublisherAssertionElement( |
| fromKey, |
| toKey, |
| owningBusinessKey, |
| null, |
| -1, |
| status, |
| keyedRef); |
| pubAssertionElementArray[k] = pubAssertionElement; |
| } |
| pubAssertionElements.add(pubAssertionElementArray); |
| } |
| if (otherBusinessKeys.size() > 0) { |
| Vector busEntities; |
| try { |
| busEntities = proxy.get_businessDetail(otherBusinessKeys).getBusinessEntityVector(); |
| } |
| catch (Exception ex) { |
| busEntities = new Vector(); |
| if (otherBusinessKeys.size() > 1) { |
| for (int j = 0; j < otherBusinessKeys.size(); j++) { |
| try { |
| busEntities.add(proxy.get_businessDetail((String)otherBusinessKeys.get(j)).getBusinessEntityVector().get(0)); |
| } |
| catch (Exception exception) { |
| pubAssertionElements.remove(j); |
| } |
| } |
| } |
| else |
| pubAssertionElements.remove(0); |
| } |
| for (int j = 0; j < busEntities.size(); j++) { |
| BusinessEntity be = (BusinessEntity)busEntities.get(j); |
| ListElement le = new ListElement(be); |
| queryInputVector.add(le); |
| int subQueryItemId = queryInputVector.indexOf(le); |
| PublisherAssertionElement[] pubAssertionElementArray = (PublisherAssertionElement[])pubAssertionElements.get(j); |
| for (int k = 0; k < pubAssertionElementArray.length; k++) { |
| pubAssertionElementArray[k].setServiceProvider(le); |
| pubAssertionElementArray[k].setSubQueryItemId(subQueryItemId); |
| listManager.add(new ListElement(pubAssertionElementArray[k])); |
| } |
| } |
| } |
| busElement.setPublisherAssertions(listManager); |
| formToolPI.setProperty(UDDIActionInputs.QUERY_INPUT_EXISTING_PUBLISHER_ASSERTIONS, queryInputVector); |
| messageQueue.addMessage(uddiPerspective.getMessage("MSG_INFO_PUBLISHER_ASSERTIONS_REFRESHED")); |
| return true; |
| } |
| } |