/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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.
*
*/
package gov.redhawk.sca.internal.ui;
import gov.redhawk.model.sca.IRefreshable;
import gov.redhawk.model.sca.RefreshDepth;
import gov.redhawk.model.sca.ScaComponent;
import gov.redhawk.model.sca.ScaDevice;
import gov.redhawk.model.sca.ScaDeviceManager;
import gov.redhawk.model.sca.ScaDomainManager;
import gov.redhawk.model.sca.ScaEventChannel;
import gov.redhawk.model.sca.ScaFileStore;
import gov.redhawk.model.sca.ScaService;
import gov.redhawk.model.sca.ScaUsesPort;
import gov.redhawk.model.sca.ScaWaveform;
import gov.redhawk.model.sca.provider.ScaDeviceManagersContainerItemProvider;
import gov.redhawk.model.sca.provider.ScaEventChannelsContainerItemProvider;
import gov.redhawk.model.sca.provider.ScaWaveformFactoriesContainerItemProvider;
import gov.redhawk.model.sca.provider.ScaWaveformsContainerItemProvider;
import gov.redhawk.model.sca.util.ScaSwitch;
import gov.redhawk.sca.internal.ui.DeferredAdapterSwitch.IDeferredAdapter;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import CF.Device;
import ExtendedCF.QueryablePortHelper;
/**
*
*/
public class DeferredAdapterSwitch extends ScaSwitch<IDeferredAdapter> {
public static final DeferredAdapterSwitch INSTANCE = new DeferredAdapterSwitch();
private DeferredAdapterSwitch() {
}
public static interface IDeferredAdapter {
public boolean isContainer();
public boolean isSet();
public void fetchDeferredChildren(IProgressMonitor monitor);
}
private static class DeferredAdapter implements IDeferredAdapter {
private final IRefreshable refreshable;
DeferredAdapter(IRefreshable refreshable) {
this.refreshable = refreshable;
}
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
return false;
}
@Override
public void fetchDeferredChildren(IProgressMonitor monitor) {
try {
refreshable.refresh(monitor, RefreshDepth.CHILDREN);
} catch (InterruptedException e) {
// PASS
}
}
}
@Override
public IDeferredAdapter caseScaService(final ScaService object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
return object.isSetPorts();
}
};
}
@Override
public < D extends Device > IDeferredAdapter caseScaDevice(final ScaDevice<D> object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
return object.isSetChildDevices() && object.isSetPorts();
}
};
}
@Override
public IDeferredAdapter caseScaUsesPort(final ScaUsesPort object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
if (isContainer()) {
return object.isSetConnections();
} else {
return false;
}
}
@Override
public boolean isContainer() {
return object._is_a(QueryablePortHelper.id());
}
};
}
@Override
public IDeferredAdapter caseScaFileStore(final ScaFileStore object) {
return new IDeferredAdapter() {
@Override
public boolean isSet() {
return object.isSetChildren();
}
@Override
public boolean isContainer() {
return object.isDirectory();
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
object.fetchChildren(monitor);
}
};
}
@Override
public IDeferredAdapter caseScaWaveform(final ScaWaveform object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
boolean ports = object.isSetPorts();
boolean components = object.isSetComponents();
return ports && components;
}
};
}
@Override
public IDeferredAdapter caseScaComponent(final ScaComponent object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
return object.isSetPorts();
}
};
}
@Override
public IDeferredAdapter caseScaDeviceManager(final ScaDeviceManager object) {
return new DeferredAdapter(object) {
@Override
public boolean isSet() {
return object.isSetDevices() && object.isSetPorts();
}
};
}
public IDeferredAdapter caseScaDeviceManagersContainerItemProvider(final ScaDeviceManagersContainerItemProvider object) {
return new IDeferredAdapter() {
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
return domMgr.isSetDeviceManagers();
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
domMgr.fetchDeviceManagers(monitor, RefreshDepth.SELF);
}
};
}
@Override
public IDeferredAdapter caseScaDomainManager(ScaDomainManager object) {
return new IDeferredAdapter() {
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
return true;
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
// PASS
}
};
}
public IDeferredAdapter caseScaWaveformFactoriesContainerItemProvider(final ScaWaveformFactoriesContainerItemProvider object) {
return new IDeferredAdapter() {
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
return domMgr.isSetWaveformFactories();
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
domMgr.fetchWaveformFactories(monitor, RefreshDepth.SELF);
}
};
}
public IDeferredAdapter caseScaWaveformsContainerItemProvider(final ScaWaveformsContainerItemProvider object) {
return new IDeferredAdapter() {
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
return domMgr.isSetWaveforms();
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
domMgr.fetchWaveforms(monitor, RefreshDepth.SELF);
}
};
}
public IDeferredAdapter caseScaEventChannelsContainerItemProvider(final ScaEventChannelsContainerItemProvider object) {
return new IDeferredAdapter() {
@Override
public boolean isContainer() {
return true;
}
@Override
public boolean isSet() {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
return domMgr.isSetEventChannels();
}
@Override
public void fetchDeferredChildren(final IProgressMonitor monitor) {
final ScaDomainManager domMgr = (ScaDomainManager) object.getParent(null);
domMgr.fetchEventChannels(monitor, RefreshDepth.SELF);
}
};
}
@Override
public IDeferredAdapter caseScaEventChannel(ScaEventChannel object) {
return null;
}
public static IDeferredAdapter doSwitch(final Object obj) {
if (obj instanceof ScaDeviceManagersContainerItemProvider) {
return DeferredAdapterSwitch.INSTANCE.caseScaDeviceManagersContainerItemProvider((ScaDeviceManagersContainerItemProvider) obj);
} else if (obj instanceof ScaWaveformFactoriesContainerItemProvider) {
return DeferredAdapterSwitch.INSTANCE.caseScaWaveformFactoriesContainerItemProvider((ScaWaveformFactoriesContainerItemProvider) obj);
} else if (obj instanceof ScaWaveformsContainerItemProvider) {
return DeferredAdapterSwitch.INSTANCE.caseScaWaveformsContainerItemProvider((ScaWaveformsContainerItemProvider) obj);
} else if (obj instanceof ScaEventChannelsContainerItemProvider) {
return DeferredAdapterSwitch.INSTANCE.caseScaEventChannelsContainerItemProvider((ScaEventChannelsContainerItemProvider) obj);
} else if (obj instanceof ScaWaveform) {
return DeferredAdapterSwitch.INSTANCE.caseScaWaveform((ScaWaveform) obj);
} else if (obj instanceof ScaDevice< ? >) {
return DeferredAdapterSwitch.INSTANCE.caseScaDevice((ScaDevice< ? >) obj);
} else if (obj instanceof ScaComponent) {
return DeferredAdapterSwitch.INSTANCE.caseScaComponent((ScaComponent) obj);
} else if (obj instanceof ScaDomainManager) {
return DeferredAdapterSwitch.INSTANCE.caseScaDomainManager((ScaDomainManager) obj);
} else if (obj instanceof ScaDeviceManager) {
return DeferredAdapterSwitch.INSTANCE.caseScaDeviceManager((ScaDeviceManager) obj);
} else if (obj instanceof EObject) {
return DeferredAdapterSwitch.INSTANCE.doSwitch((EObject) obj);
} else {
return null;
}
}
}