/*******************************************************************************
* Copyright (c) 2015 Composent, Inc. 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: Scott Lewis - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.remoteserviceadmin.ui.rsa;
import java.util.List;
import org.eclipse.ecf.internal.remoteservices.ui.DiscoveryComponent;
import org.eclipse.ecf.internal.remoteservices.ui.Messages;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescription;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.ExportReference;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.ExportRegistration;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.ImportReference;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.RemoteServiceAdmin.ImportRegistration;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.AbstractRSAContentProvider;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.AbstractRSANode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.AbstractRegistrationNode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.EndpointDescriptionRSANode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.ExportRegistrationNode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.ExportedServicesRootNode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.ImportRegistrationNode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.ImportedEndpointsRootNode;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.RSAContentProvider;
import org.eclipse.ecf.remoteserviceadmin.ui.rsa.model.ServiceIdNode;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.ui.IViewSite;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent;
/**
* @since 3.3
*/
public class RemoteServiceAdminView extends AbstractRemoteServiceAdminView {
public static final String ID_VIEW = "org.eclipse.ecf.remoteserviceadmin.ui.views.RSAView"; //$NON-NLS-1$
private Action closeExportAction;
private Action closeImportAction;
public RemoteServiceAdminView() {
}
@Override
public void dispose() {
super.dispose();
DiscoveryComponent discovery = DiscoveryComponent.getDefault();
if (discovery != null) {
discovery.setRSAView(null);
discovery = null;
}
}
@Override
protected void updateModel() {
updateModel(0);
}
@Override
protected AbstractRSAContentProvider createContentProvider(IViewSite viewSite) {
return new RSAContentProvider(viewSite);
}
@Override
protected void setupListeners() {
DiscoveryComponent.getDefault().setRSAView(this);
}
@Override
protected void fillContextMenu(IMenuManager manager) {
ITreeSelection selection = (ITreeSelection) viewer.getSelection();
if (selection != null) {
Object e = selection.getFirstElement();
if (e instanceof ImportRegistrationNode) {
manager.add(closeImportAction);
} else if (e instanceof ExportRegistrationNode) {
manager.add(closeExportAction);
}
}
}
@Override
protected void makeActions() {
RemoteServiceAdmin rsa = getLocalRSA();
closeExportAction = createCloseAction();
closeExportAction.setText(Messages.RemoteServiceAdminView_0);
closeExportAction.setEnabled(rsa != null);
closeImportAction = createCloseAction();
closeImportAction.setText(Messages.RemoteServiceAdminView_1);
closeImportAction.setEnabled(rsa != null);
}
private void updateExports(ExportedServicesRootNode exportedRoot) {
RemoteServiceAdmin rsa = getLocalRSA();
if (rsa != null && exportedRoot != null) {
exportedRoot.clearChildren();
List<ExportRegistration> exportRegistrations = rsa.getExportedRegistrations();
for (ExportRegistration er : exportRegistrations) {
ExportRegistrationNode exportRegistrationNode = new ExportRegistrationNode(er);
ExportReference eRef = (ExportReference) er.getExportReference();
if (eRef != null) {
exportRegistrationNode
.addChild(new ServiceIdNode(eRef.getExportedService(), Messages.RSAView_SERVICE_ID_LABEL));
EndpointDescription ed = (EndpointDescription) eRef.getExportedEndpoint();
if (ed != null)
exportRegistrationNode.addChild(new EndpointDescriptionRSANode(ed));
}
exportedRoot.addChild(exportRegistrationNode);
}
}
}
private void updateImports(ImportedEndpointsRootNode importedRoot) {
RemoteServiceAdmin rsa = getLocalRSA();
if (rsa != null && importedRoot != null) {
importedRoot.clearChildren();
List<ImportRegistration> importRegistrations = rsa.getImportedRegistrations();
for (ImportRegistration ir : importRegistrations) {
ImportRegistrationNode importRegistrationNode = new ImportRegistrationNode(ir);
ImportReference iRef = (ImportReference) ir.getImportReference();
if (iRef != null) {
importRegistrationNode.addChild(
new ServiceIdNode(iRef.getImportedService(), Messages.RSAView_PROXY_SERVICE_ID_LABEL));
EndpointDescription ed = (EndpointDescription) iRef.getImportedEndpoint();
if (ed != null)
importRegistrationNode.addChild(new EndpointDescriptionRSANode(ed, ir));
}
importedRoot.addChild(importRegistrationNode);
}
}
}
private ExportedServicesRootNode getExportedServicesRoot() {
return ((RSAContentProvider) contentProvider).getExportedServicesRoot();
}
private ImportedEndpointsRootNode getImportedServicesRoot() {
return ((RSAContentProvider) contentProvider).getImportedEndpointsRoot();
}
private void updateExports() {
updateExports(getExportedServicesRoot());
}
private void updateImports() {
updateImports(getImportedServicesRoot());
}
private void updateModel(final int type) {
if (viewer == null)
return;
viewer.getControl().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
switch (type) {
// both
case 0:
updateExports();
updateImports();
break;
// exports
case 1:
updateExports();
break;
// imports
case 2:
updateImports();
break;
}
viewer.setExpandedState(getExportedServicesRoot(), true);
viewer.setExpandedState(getImportedServicesRoot(), true);
viewer.refresh();
}
});
}
private Action createCloseAction() {
return new Action() {
public void run() {
AbstractRegistrationNode n = getSelectedRegistrationNode();
if (n != null)
n.close();
}
};
}
private AbstractRegistrationNode getSelectedRegistrationNode() {
AbstractRSANode aen = getSelectedNode();
return (aen instanceof AbstractRegistrationNode) ? (AbstractRegistrationNode) aen : null;
}
public void handleRSAEvent(final RemoteServiceAdminEvent event) {
if (viewer == null)
return;
viewer.getControl().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
RemoteServiceAdmin rsa = getLocalRSA();
if (rsa != null) {
switch (event.getType()) {
case RemoteServiceAdminEvent.EXPORT_REGISTRATION:
case RemoteServiceAdminEvent.EXPORT_UNREGISTRATION:
case RemoteServiceAdminEvent.EXPORT_ERROR:
case RemoteServiceAdminEvent.EXPORT_UPDATE:
case RemoteServiceAdminEvent.EXPORT_WARNING:
updateModel(1);
break;
case RemoteServiceAdminEvent.IMPORT_REGISTRATION:
case RemoteServiceAdminEvent.IMPORT_UNREGISTRATION:
case RemoteServiceAdminEvent.IMPORT_ERROR:
case RemoteServiceAdminEvent.IMPORT_UPDATE:
case RemoteServiceAdminEvent.IMPORT_WARNING:
updateModel(2);
break;
}
}
}
});
}
}