| /******************************************************************************* |
| * Copyright (c) 2010 BSI Business Systems Integration AG. |
| * 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: |
| * BSI Business Systems Integration AG - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.scout.sdk.ui.wizard.lookupcall; |
| |
| import java.beans.PropertyChangeEvent; |
| import java.beans.PropertyChangeListener; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.MultiStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.core.Signature; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.scout.commons.StringUtility; |
| import org.eclipse.scout.sdk.Texts; |
| import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses; |
| import org.eclipse.scout.sdk.extensions.runtime.classes.RuntimeClasses; |
| import org.eclipse.scout.sdk.operation.lookupcall.LookupCallNewOperation; |
| import org.eclipse.scout.sdk.operation.service.ServiceRegistrationDescription; |
| import org.eclipse.scout.sdk.ui.fields.bundletree.DndEvent; |
| import org.eclipse.scout.sdk.ui.fields.bundletree.ITreeDndListener; |
| import org.eclipse.scout.sdk.ui.fields.bundletree.ITreeNode; |
| import org.eclipse.scout.sdk.ui.fields.bundletree.NodeFilters; |
| import org.eclipse.scout.sdk.ui.fields.bundletree.TreeUtility; |
| import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi; |
| import org.eclipse.scout.sdk.ui.util.UiUtility; |
| import org.eclipse.scout.sdk.ui.wizard.AbstractServiceWizard; |
| import org.eclipse.scout.sdk.ui.wizard.BundleTreeWizardPage; |
| import org.eclipse.scout.sdk.ui.wizard.IStatusProvider; |
| import org.eclipse.scout.sdk.ui.wizard.lookupcall.LookupCallNewWizardPage.LOOKUP_SERVICE_STRATEGY; |
| import org.eclipse.scout.sdk.util.ScoutUtility; |
| import org.eclipse.scout.sdk.util.SdkProperties; |
| import org.eclipse.scout.sdk.util.signature.SignatureCache; |
| import org.eclipse.scout.sdk.util.typecache.IWorkingCopyManager; |
| import org.eclipse.scout.sdk.workspace.IScoutBundle; |
| import org.eclipse.scout.sdk.workspace.IScoutBundleFilter; |
| import org.eclipse.scout.sdk.workspace.ScoutBundleFilters; |
| import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility; |
| import org.eclipse.swt.dnd.DND; |
| import org.eclipse.ui.IWorkbench; |
| |
| /** |
| * <h3>LookupCallNewWizard</h3> |
| * |
| * @author Andreas Hoegger |
| * @since 1.0.8 25.08.2010 |
| */ |
| public class LookupCallNewWizard extends AbstractServiceWizard { |
| |
| public static final String TYPE_LOOKUPCALL = "lookupCall"; |
| public static final String TYPE_SERVICE_INTERFACE = "svcIfc"; |
| public static final String TYPE_SERVICE_IMPLEMENTATION = "svcImpl"; |
| public static final String TYPE_SERVICE_REG_CLIENT = "svcRegClient"; |
| public static final String TYPE_SERVICE_REG_SERVER = "svcRegServer"; |
| |
| private LookupCallNewWizardPage m_page1; |
| private BundleTreeWizardPage m_page2; |
| private ITreeNode m_locationPageRoot; |
| private LookupCallNewOperation m_operation; |
| |
| @Override |
| public void init(IWorkbench workbench, IStructuredSelection selection) { |
| setWindowTitle(Texts.get("NewLookupCall")); |
| |
| IScoutBundle sharedBundle = UiUtility.getScoutBundleFromSelection(selection, ScoutBundleFilters.getBundlesOfTypeFilter(IScoutBundle.TYPE_SHARED)); |
| |
| IScoutBundle clientBundle = null; |
| IScoutBundle serverBundle = null; |
| if (sharedBundle != null) { |
| clientBundle = sharedBundle.getChildBundle(ScoutBundleFilters.getMultiFilterAnd(ScoutBundleFilters.getWorkspaceBundlesFilter(), ScoutBundleFilters.getBundlesOfTypeFilter(IScoutBundle.TYPE_CLIENT)), false); |
| serverBundle = sharedBundle.getChildBundle(ScoutBundleFilters.getMultiFilterAnd(ScoutBundleFilters.getWorkspaceBundlesFilter(), ScoutBundleFilters.getBundlesOfTypeFilter(IScoutBundle.TYPE_SERVER)), false); |
| } |
| |
| m_page1 = new LookupCallNewWizardPage(sharedBundle, serverBundle); |
| addPage(m_page1); |
| |
| if (sharedBundle != null) { |
| m_locationPageRoot = createTree(clientBundle, sharedBundle, serverBundle); |
| |
| m_page2 = new BundleTreeWizardPage(Texts.get("LookupCallLocations"), Texts.get("OrganiseLocations"), m_locationPageRoot, new P_InitialCheckedFilter()); |
| m_page2.addStatusProvider(new P_StatusRevalidator()); |
| m_page2.addDndListener(new P_TreeDndListener()); |
| m_page2.addCheckSelectionListener(new P_SessionCheckListener()); |
| addPage(m_page2); |
| |
| // init |
| String pck = UiUtility.getPackageSuffix(selection); |
| m_page1.setTargetPackage(pck); |
| m_page1.addPropertyChangeListener(new P_LocationPropertyListener()); |
| } |
| } |
| |
| private ITreeNode createTree(IScoutBundle clientBundle, IScoutBundle sharedBundle, IScoutBundle serverBundle) { |
| IScoutBundleFilter bundleFilter = ScoutBundleFilters.getMultiFilterAnd(ScoutBundleFilters.getWorkspaceBundlesFilter(), ScoutBundleFilters.getBundlesOfTypeFilter(IScoutBundle.TYPE_CLIENT, IScoutBundle.TYPE_SERVER, IScoutBundle.TYPE_SHARED)); |
| ITreeNode rootNode = TreeUtility.createBundleTree(sharedBundle, bundleFilter); |
| |
| // client |
| if (clientBundle != null) { |
| ITreeNode clientNode = TreeUtility.findNode(rootNode, NodeFilters.getByData(clientBundle)); |
| if (serverBundle != null) { |
| // service client reg |
| ITreeNode clientRegNode = TreeUtility.createNode(clientNode, TYPE_SERVICE_REG_CLIENT, Texts.get("ServiceProxyRegistration"), ScoutSdkUi.getImageDescriptor(ScoutSdkUi.Public)); |
| clientRegNode.setEnabled(false); |
| } |
| } |
| |
| ITreeNode sharedNode = TreeUtility.findNode(rootNode, NodeFilters.getByData(sharedBundle)); |
| // formData |
| TreeUtility.createNode(sharedNode, TYPE_LOOKUPCALL, Texts.get("LookupCall"), ScoutSdkUi.getImageDescriptor(ScoutSdkUi.Class), 1).setEnabled(false); |
| if (serverBundle != null) { |
| // service interface |
| TreeUtility.createNode(sharedNode, TYPE_SERVICE_INTERFACE, Texts.get("IService"), ScoutSdkUi.getImageDescriptor(ScoutSdkUi.Interface), 2).setEnabled(false); |
| } |
| |
| if (serverBundle != null) { |
| ITreeNode serverNode = TreeUtility.findNode(rootNode, NodeFilters.getByData(serverBundle)); |
| // service implementation |
| TreeUtility.createNode(serverNode, TYPE_SERVICE_IMPLEMENTATION, Texts.get("Service"), ScoutSdkUi.getImageDescriptor(ScoutSdkUi.Class), 1).setEnabled(false); |
| ITreeNode svcRegNode = TreeUtility.createNode(serverNode, TYPE_SERVICE_REG_SERVER, Texts.get("ServiceRegistration"), ScoutSdkUi.getImageDescriptor(ScoutSdkUi.Public), 2); |
| refreshAvailableSessions(svcRegNode, svcRegNode); |
| } |
| |
| return rootNode; |
| } |
| |
| public LookupCallNewWizardPage getFormNewPage() { |
| return m_page1; |
| } |
| |
| @Override |
| protected boolean beforeFinish() throws CoreException { |
| // fill operation before gui is disposed |
| IScoutBundle lookupCallBundle = m_page2.getLocationBundle(TYPE_LOOKUPCALL, true, true); |
| m_operation = new LookupCallNewOperation(m_page1.getTypeName(), lookupCallBundle.getPackageName(m_page1.getTargetPackage()), ScoutUtility.getJavaProject(lookupCallBundle)); |
| m_operation.setFormatSource(true); |
| |
| StringBuilder superType = new StringBuilder(); |
| superType.append(RuntimeClasses.getSuperTypeName(IRuntimeClasses.ILookupCall, lookupCallBundle)); |
| superType.append(Signature.C_GENERIC_START); |
| superType.append(Signature.toString(m_page1.getGenericTypeSignature())); |
| superType.append(Signature.C_GENERIC_END); |
| |
| m_operation.setSuperTypeSignature(SignatureCache.createTypeSignature(superType.toString())); |
| |
| IScoutBundle serviceProxyRegBundle = m_page2.getLocationBundle(TYPE_SERVICE_REG_CLIENT, true, true); |
| if (serviceProxyRegBundle != null) { |
| m_operation.setServiceProxyRegistrationProject(serviceProxyRegBundle.getJavaProject()); |
| } |
| |
| IScoutBundle serviceBundle = m_page2.getLocationBundle(TYPE_SERVICE_IMPLEMENTATION, true, true); |
| if (serviceBundle != null) { |
| m_operation.setServiceImplementationProject(serviceBundle.getJavaProject()); |
| m_operation.setServiceImplementationPackage(serviceBundle.getPackageName(m_page1.getTargetPackage())); |
| } |
| |
| IScoutBundle interfaceBundle = m_page2.getLocationBundle(TYPE_SERVICE_INTERFACE, true, true); |
| if (interfaceBundle != null) { |
| m_operation.setServiceInterfaceProject(interfaceBundle.getJavaProject()); |
| m_operation.setServiceInterfacePackageName(interfaceBundle.getPackageName(m_page1.getTargetPackage())); |
| } |
| switch (m_page1.getLookupServiceStrategy()) { |
| case CREATE_NEW: |
| IType superTypeProp = m_page1.getServiceSuperType(); |
| if (superTypeProp != null) { |
| StringBuilder svcSuperTypeSig = new StringBuilder(superTypeProp.getFullyQualifiedName()); |
| svcSuperTypeSig.append(Signature.C_GENERIC_START); |
| svcSuperTypeSig.append(Signature.toString(m_page1.getGenericTypeSignature())); |
| svcSuperTypeSig.append(Signature.C_GENERIC_END); |
| m_operation.setServiceSuperTypeSignature(SignatureCache.createTypeSignature(svcSuperTypeSig.toString())); |
| for (ServiceRegistrationDescription desc : getCheckedServiceRegistrations(m_page2.getTreeNodes(TYPE_SERVICE_REG_SERVER, true, true))) { |
| m_operation.addServiceRegistration(desc); |
| storeUsedSession(desc); |
| } |
| } |
| break; |
| case USE_EXISTING: |
| m_operation.setLookupService(m_page1.getLookupServiceType()); |
| break; |
| } |
| return true; |
| } |
| |
| @Override |
| protected boolean performFinish(IProgressMonitor monitor, IWorkingCopyManager workingCopyManager) { |
| try { |
| m_operation.run(monitor, workingCopyManager); |
| return true; |
| } |
| catch (Exception e) { |
| ScoutSdkUi.logError("exception during perfoming finish of wizard.", e); |
| return false; |
| } |
| } |
| |
| @Override |
| public BundleTreeWizardPage getLocationsPage() { |
| return m_page2; |
| } |
| |
| public LookupCallNewWizardPage getPage1() { |
| return m_page1; |
| } |
| |
| private class P_LocationPropertyListener implements PropertyChangeListener { |
| @Override |
| public void propertyChange(PropertyChangeEvent evt) { |
| if (evt.getPropertyName().equals(LookupCallNewWizardPage.PROP_TYPE_NAME)) { |
| String typeName = m_page1.getTypeName(); |
| if (!StringUtility.isNullOrEmpty(typeName)) { |
| String prefix = typeName.replaceAll(SdkProperties.SUFFIX_LOOKUP_CALL + "$", ""); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_LOOKUPCALL)).setText(prefix + SdkProperties.SUFFIX_LOOKUP_CALL); |
| ITreeNode serviceImplNode = TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_IMPLEMENTATION)); |
| if (serviceImplNode != null) { |
| serviceImplNode.setText(prefix + SdkProperties.SUFFIX_LOOKUP_SERVICE); |
| } |
| ITreeNode serviceInterfaceNode = TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_INTERFACE)); |
| if (serviceInterfaceNode != null) { |
| serviceInterfaceNode.setText("I" + prefix + SdkProperties.SUFFIX_LOOKUP_SERVICE); |
| } |
| m_page2.refreshTree(); |
| } |
| } |
| else if (evt.getPropertyName().equals(LookupCallNewWizardPage.PROP_LOOKUP_SERVICE_STRATEGY)) { |
| LOOKUP_SERVICE_STRATEGY strategy = m_page1.getLookupServiceStrategy(); |
| switch (strategy) { |
| case CREATE_NEW: |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_IMPLEMENTATION)).setVisible(true); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_INTERFACE)).setVisible(true); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_REG_CLIENT)).setVisible(true); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_REG_SERVER)).setVisible(true); |
| break; |
| default: |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_IMPLEMENTATION)).setVisible(false); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_INTERFACE)).setVisible(false); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_REG_CLIENT)).setVisible(false); |
| TreeUtility.findNode(m_locationPageRoot, NodeFilters.getByType(TYPE_SERVICE_REG_SERVER)).setVisible(false); |
| break; |
| } |
| m_page2.refreshTree(); |
| } |
| m_page2.pingStateChanging(); |
| } |
| } // end class P_LocationPropertyListener |
| |
| private class P_TreeDndListener implements ITreeDndListener { |
| @Override |
| public boolean isDragableNode(ITreeNode node) { |
| return !TYPE_LOOKUPCALL.equals(node.getType()); |
| } |
| |
| @Override |
| public void validateTarget(DndEvent dndEvent) { |
| if (dndEvent.targetParent == null) { |
| dndEvent.doit = false; |
| return; |
| } |
| if (dndEvent.targetParent.getData() instanceof IScoutBundle && ((IScoutBundle) dndEvent.targetParent.getData()).isBinary()) { |
| dndEvent.doit = false; |
| return; |
| } |
| if (dndEvent.operation == DND.DROP_COPY) { |
| validateDropCopy(dndEvent); |
| } |
| else if (dndEvent.operation == DND.DROP_MOVE) { |
| validateDropMove(dndEvent); |
| } |
| } |
| |
| @Override |
| public void dndPerformed(DndEvent dndEvent) { |
| if (dndEvent.node.getType() == TYPE_SERVICE_REG_SERVER) { |
| refreshAvailableSessions(dndEvent.newNode, dndEvent.node); |
| } |
| m_page1.pingStateChanging(); |
| } |
| |
| private void validateDropCopy(DndEvent dndEvent) { |
| String t = dndEvent.node.getType(); |
| if (TYPE_SERVICE_REG_CLIENT.equals(t)) { |
| dndEvent.doit = IScoutBundle.TYPE_CLIENT.equals(dndEvent.targetParent.getType()); |
| } |
| else if (TYPE_SERVICE_REG_SERVER.equals(t)) { |
| dndEvent.doit = IScoutBundle.TYPE_SERVER.equals(dndEvent.targetParent.getType()); |
| } |
| else { |
| dndEvent.doit = false; |
| } |
| } |
| |
| private void validateDropMove(DndEvent dndEvent) { |
| String t = dndEvent.node.getType(); |
| if (TYPE_SERVICE_REG_CLIENT.equals(t)) { |
| dndEvent.doit = IScoutBundle.TYPE_CLIENT.equals(dndEvent.targetParent.getType()); |
| } |
| else if (TYPE_SERVICE_IMPLEMENTATION.equals(t) || TYPE_SERVICE_REG_SERVER.equals(t)) { |
| dndEvent.doit = IScoutBundle.TYPE_SERVER.equals(dndEvent.targetParent.getType()); |
| } |
| else { |
| dndEvent.doit = false; |
| } |
| } |
| } // end class P_TreeDndListener |
| |
| private class P_StatusRevalidator implements IStatusProvider { |
| |
| @Override |
| public void validate(Object source, MultiStatus multiStatus) { |
| multiStatus.add(getStatusLookupCall()); |
| multiStatus.add(getStatusService()); |
| multiStatus.add(getStatusServiceRegistrationClient()); |
| multiStatus.add(getStatusServiceRegistrationServer()); |
| multiStatus.add(getStatusTypeNames()); |
| } |
| |
| protected IStatus getStatusTypeNames() { |
| IScoutBundle serviceImplementationBundle = m_page2.getLocationBundle(TYPE_SERVICE_IMPLEMENTATION, true, true); |
| if (serviceImplementationBundle != null) { |
| ITreeNode serviceImplNode = m_page2.getTreeNode(TYPE_SERVICE_IMPLEMENTATION, true, true); |
| if (serviceImplNode != null) { |
| try { |
| String fqn = serviceImplementationBundle.getPackageName(m_page1.getTargetPackage()) + "." + serviceImplNode.getText(); |
| IType findType = serviceImplementationBundle.getJavaProject().findType(fqn); |
| if (findType != null && findType.exists()) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, "'" + serviceImplNode.getText() + "' " + Texts.get("AlreadyExists") + "."); |
| } |
| } |
| catch (JavaModelException e) { |
| ScoutSdkUi.logError(e); |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("AnErrorOccured")); |
| } |
| } |
| } |
| // shared bundles |
| IScoutBundle serviceInterfaceBundle = m_page2.getLocationBundle(TYPE_SERVICE_INTERFACE, true, true); |
| if (serviceInterfaceBundle != null) { |
| ITreeNode serviceInterfaceNode = m_page2.getTreeNode(TYPE_SERVICE_INTERFACE, true, true); |
| if (serviceInterfaceNode != null) { |
| try { |
| String fqn = serviceInterfaceBundle.getPackageName(m_page1.getTargetPackage()) + "." + serviceInterfaceNode.getText(); |
| IType interfaceType = serviceInterfaceBundle.getJavaProject().findType(fqn); |
| if (interfaceType != null && interfaceType.exists()) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, "'" + serviceInterfaceNode.getText() + "' " + Texts.get("AlreadyExists") + "."); |
| } |
| } |
| catch (JavaModelException e) { |
| ScoutSdkUi.logError(e); |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("AnErrorOccured")); |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| |
| protected IStatus getStatusLookupCall() { |
| IScoutBundle lookupCallBundle = m_page2.getLocationBundle(TYPE_LOOKUPCALL, true, true); |
| if (lookupCallBundle != null) { |
| IScoutBundle serviceInterfaceBundle = m_page2.getLocationBundle(TYPE_SERVICE_INTERFACE, true, true); |
| if (serviceInterfaceBundle != null) { |
| if (!ScoutTypeUtility.isOnClasspath(serviceInterfaceBundle, lookupCallBundle)) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("XIsNotAClasspathOfY", m_page2.getTextOfNode(TYPE_SERVICE_INTERFACE), m_page2.getTextOfNode(TYPE_LOOKUPCALL))); |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| |
| protected IStatus getStatusService() { |
| IScoutBundle serviceImplementationBundle = m_page2.getLocationBundle(TYPE_SERVICE_IMPLEMENTATION, true, true); |
| if (serviceImplementationBundle != null) { |
| IScoutBundle serviceInterfaceBundle = m_page2.getLocationBundle(TYPE_SERVICE_INTERFACE, true, true); |
| if (serviceInterfaceBundle != null) { |
| if (!ScoutTypeUtility.isOnClasspath(serviceInterfaceBundle, serviceImplementationBundle)) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("XIsNotAClasspathOfY", m_page2.getTextOfNode(TYPE_SERVICE_INTERFACE), m_page2.getTextOfNode(TYPE_SERVICE_IMPLEMENTATION))); |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| |
| protected IStatus getStatusServiceRegistrationClient() { |
| IScoutBundle serviceInterfaceBundle = m_page2.getLocationBundle(TYPE_SERVICE_INTERFACE, true, true); |
| ITreeNode[] serviceRegistrationClientNodes = m_page2.getTreeNodes(TYPE_SERVICE_REG_CLIENT, true, true); |
| for (ITreeNode serviceRegNode : serviceRegistrationClientNodes) { |
| Object data = serviceRegNode.getParent().getData(); |
| if (data instanceof IScoutBundle) { |
| IScoutBundle serviceRegistrationBundle = (IScoutBundle) data; |
| if (serviceInterfaceBundle != null) { |
| if (!ScoutTypeUtility.isOnClasspath(serviceInterfaceBundle, serviceRegistrationBundle)) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("XIsNotOnClasspathOfServiceY", m_page2.getTextOfNode(TYPE_SERVICE_INTERFACE), serviceRegistrationBundle.getSymbolicName())); |
| } |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| |
| protected IStatus getStatusServiceRegistrationServer() { |
| IScoutBundle serviceImplementationBundle = m_page2.getLocationBundle(TYPE_SERVICE_IMPLEMENTATION, true, true); |
| ITreeNode[] serviceRegistrationServerNodes = m_page2.getTreeNodes(TYPE_SERVICE_REG_SERVER, true, true); |
| for (ITreeNode serviceRegNode : serviceRegistrationServerNodes) { |
| Object data = serviceRegNode.getParent().getData(); |
| if (data instanceof IScoutBundle) { |
| IScoutBundle serviceRegistrationBundle = (IScoutBundle) data; |
| if (serviceImplementationBundle != null) { |
| if (!ScoutTypeUtility.isOnClasspath(serviceImplementationBundle, serviceRegistrationBundle)) { |
| return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("XIsNotOnClasspathOfServiceY", m_page2.getTextOfNode(TYPE_SERVICE_IMPLEMENTATION), serviceRegistrationBundle.getSymbolicName())); |
| } |
| } |
| } |
| } |
| return Status.OK_STATUS; |
| } |
| } // end class P_StatusRevalidator |
| } |