/******************************************************************************* * 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 *******************************************************************************/ // BEGIN GENERATED CODE package gov.redhawk.model.sca.impl; import gov.redhawk.model.sca.DataProviderObject; import gov.redhawk.model.sca.IDisposable; import gov.redhawk.model.sca.IRefreshable; import gov.redhawk.model.sca.IScaDataProviderServiceDescriptor; import gov.redhawk.model.sca.RefreshDepth; import gov.redhawk.model.sca.ScaModelPlugin; import gov.redhawk.model.sca.ScaPackage; import gov.redhawk.model.sca.commands.ScaModelCommand; import gov.redhawk.model.sca.services.IScaDataProvider; import gov.redhawk.model.sca.services.IScaDataProviderService; import gov.redhawk.sca.model.internal.DataProviderServicesRegistry; import gov.redhawk.sca.util.PluginUtil; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.emf.transaction.RunnableWithResult; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Data Provider Object</b></em>'. * * @since 12.0 * <!-- end-user-doc --> * <p> * The following features are implemented: * </p> * <ul> * <li>{@link gov.redhawk.model.sca.impl.DataProviderObjectImpl#isDisposed <em>Disposed</em>}</li> * <li>{@link gov.redhawk.model.sca.impl.DataProviderObjectImpl#getDataProviders <em>Data Providers</em>}</li> * <li>{@link gov.redhawk.model.sca.impl.DataProviderObjectImpl#isDataProvidersEnabled * <em>Data Providers Enabled</em>}</li> * <li>{@link gov.redhawk.model.sca.impl.DataProviderObjectImpl#getEnabledDataProviders * <em>Enabled Data Providers</em>}</li> * </ul> * * @generated */ public abstract class DataProviderObjectImpl extends IStatusProviderImpl implements DataProviderObject { /** * The default value of the '{@link #isDisposed() <em>Disposed</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #isDisposed() * @generated * @ordered */ protected static final boolean DISPOSED_EDEFAULT = false; /** * The cached value of the '{@link #isDisposed() <em>Disposed</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #isDisposed() * @generated * @ordered */ protected boolean disposed = DISPOSED_EDEFAULT; /** * The cached value of the '{@link #getDataProviders() <em>Data Providers</em>}' attribute list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getDataProviders() * @generated * @ordered */ protected EList<IScaDataProvider> dataProviders; /** * The default value of the '{@link #isDataProvidersEnabled() <em>Data Providers Enabled</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #isDataProvidersEnabled() * @generated * @ordered */ protected static final boolean DATA_PROVIDERS_ENABLED_EDEFAULT = true; /** * The cached value of the '{@link #isDataProvidersEnabled() <em>Data Providers Enabled</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #isDataProvidersEnabled() * @generated * @ordered */ protected boolean dataProvidersEnabled = DATA_PROVIDERS_ENABLED_EDEFAULT; /** * The cached value of the '{@link #getEnabledDataProviders() <em>Enabled Data Providers</em>}' attribute list. * <!-- begin-user-doc --> * * @since 19.0 * <!-- end-user-doc --> * @see #getEnabledDataProviders() * @generated * @ordered */ protected EList<String> enabledDataProviders; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ protected DataProviderObjectImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override protected EClass eStaticClass() { return ScaPackage.Literals.DATA_PROVIDER_OBJECT; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public boolean isDisposed() { return disposed; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public EList<IScaDataProvider> getDataProviders() { if (dataProviders == null) { dataProviders = new EDataTypeUniqueEList.Unsettable<IScaDataProvider>(IScaDataProvider.class, this, ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS); } return dataProviders; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public void unsetDataProviders() { if (dataProviders != null) ((InternalEList.Unsettable< ? >) dataProviders).unset(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public boolean isSetDataProviders() { return dataProviders != null && ((InternalEList.Unsettable< ? >) dataProviders).isSet(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public boolean isDataProvidersEnabled() { return dataProvidersEnabled; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public void setDataProvidersEnabled(boolean newDataProvidersEnabled) { boolean oldDataProvidersEnabled = dataProvidersEnabled; dataProvidersEnabled = newDataProvidersEnabled; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED, oldDataProvidersEnabled, dataProvidersEnabled)); } private static void setEnabledDataProviderToDefault(List<String> list) { List<IScaDataProviderServiceDescriptor> descriptors = DataProviderServicesRegistry.INSTANCE.getDataProvidersDescriptors(); list.clear(); for (IScaDataProviderServiceDescriptor provider : descriptors) { list.add(provider.getId()); } } /** * <!-- begin-user-doc --> * * @since 19.0 * <!-- end-user-doc --> * @generated NOT */ public EList<String> getEnabledDataProviders() { if (enabledDataProviders == null) { enabledDataProviders = new EDataTypeUniqueEList<String>(String.class, this, ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS) { private boolean init; @Override protected boolean isNotificationRequired() { if (init) { return super.isNotificationRequired(); } else { return false; } } { setEnabledDataProviderToDefault(this); init = true; } @Override public void unset() { setEnabledDataProviderToDefault(this); } }; } return enabledDataProviders; } private PropertyChangeListener providerListener = new PropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent evt) { if (isDisposed()) { if (evt.getSource() instanceof IScaDataProvider) { ((IScaDataProvider) evt.getSource()).removePropertyChangeListener(this); } return; } if (IScaDataProvider.DISPOSED_PROPERTY.equals(evt.getPropertyName())) { ScaModelCommand.execute(DataProviderObjectImpl.this, new ScaModelCommand() { @Override public void execute() { dataProviderDisposed((IScaDataProvider) evt.getSource()); } }); } else if (IScaDataProvider.STATUS_PROPERTY.equals(evt.getPropertyName())) { ScaModelCommand.execute(DataProviderObjectImpl.this, new ScaModelCommand() { @Override public void execute() { updateDataProviderStatus(); } }); } } }; /** * The default value of the '{@link #getStatus() <em>Status</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @see #getStatus() * @generated NOT * @ordered */ protected static final IStatus STATUS_EDEFAULT = Status.OK_STATUS; private void updateDataProviderStatus() { final MultiStatus dataProviderStatus = new MultiStatus(ScaModelPlugin.ID, Status.OK, "Problems in data providers", null); for (final IScaDataProvider provider : getDataProviders()) { if (provider == null) { continue; } SafeRunner.run(new ISafeRunnable() { @Override public void run() throws Exception { IStatus status = provider.getStatus(); if (status != null && !status.isOK()) { dataProviderStatus.add(status); } } @Override public void handleException(Throwable exception) { } }); } if (dataProviderStatus.isOK()) { setStatus(ScaPackage.Literals.DATA_PROVIDER_OBJECT__DATA_PROVIDERS, null); } else { if (dataProviderStatus.getChildren().length == 1) { setStatus(ScaPackage.Literals.DATA_PROVIDER_OBJECT__DATA_PROVIDERS, dataProviderStatus.getChildren()[0]); } else { setStatus(ScaPackage.Literals.DATA_PROVIDER_OBJECT__DATA_PROVIDERS, dataProviderStatus); } } } private void dataProviderDisposed(final IScaDataProvider source) { getDataProviders().remove(source); } /** * TODO I'm still not convinced we should be doing this {@inheritDoc} */ @Override public void eNotify(Notification notification) { if (notification.getEventType() == Notification.SET && notification.isTouch()) { return; } else { super.eNotify(notification); } } /** * <!-- begin-user-doc --> * * @since 14.0 * <!-- end-user-doc --> * @generated NOT */ @Override public void attachDataProviders() { // END GENERATED CODE if (isSetDataProviders()) { return; } if (!isDataProvidersEnabled()) { // DO this to set the is set status getDataProviders().clear(); return; } for (String id : getEnabledDataProviders()) { attachDataProvider(id); } // BEGIN GENERATED CODE } private void attachDataProvider(String id) { for (IScaDataProvider provider : getDataProviders()) { if (provider.getID().equals(id)) { return; } } List<IScaDataProviderServiceDescriptor> descriptors = DataProviderServicesRegistry.INSTANCE.getDataProvidersDescriptors(); for (final IScaDataProviderServiceDescriptor desc : descriptors) { if (!desc.getId().equals(id)) { continue; } if (desc.getService() == null) { continue; } SafeRunner.run(new ISafeRunnable() { @Override public void run() throws Exception { IScaDataProviderService service = desc.getService(); IScaDataProvider provider = service.hookDataProvider(DataProviderObjectImpl.this); if (provider != null) { getDataProviders().add(provider); } } @Override public void handleException(Throwable exception) { } }); break; } } private void detachDataProvider(String id) { for (IScaDataProvider provider : getDataProviders()) { if (PluginUtil.equals(provider.getID(), id)) { getDataProviders().remove(provider); break; } } } /** * <!-- begin-user-doc --> * * @since 14.0 * <!-- end-user-doc --> * @generated NOT */ @Override public void detachDataProviders() { // END GENERATED CODE unsetDataProviders(); // BEGIN GENERATED CODE } /** * <!-- begin-user-doc --> * Ask all data providers connected to this object to do an immediate refresh. * <!-- end-user-doc --> * * @throws InterruptedException * @generated NOT */ @Override public void refresh(IProgressMonitor monitor, RefreshDepth depth) throws InterruptedException { // END GENERATED CODE SubMonitor progress = SubMonitor.convert(monitor); if (isDisposed() || depth == null || depth == RefreshDepth.NONE || depth == RefreshDepth.SELF) { progress.done(); return; } // Decrement depth level if (RefreshDepth.CHILDREN == depth) { depth = RefreshDepth.SELF; } final EObject[] contents = ScaModelCommand.runExclusive(this, new RunnableWithResult.Impl<EObject[]>() { @Override public void run() { setResult(eContents().toArray(new EObject[eContents().size()])); } }); if (contents != null) { progress.setWorkRemaining(contents.length); int index = contents.length; for (final EObject obj : contents) { if (obj instanceof DataProviderObject) { ((DataProviderObject) obj).refresh(progress.newChild(1), depth); } index--; progress.setWorkRemaining(index); } } progress.done(); // BEGIN GENERATED CODE } private void removeDataProvider(final IScaDataProvider dataProvider) { SafeRunner.run(new ISafeRunnable() { @Override public void run() throws Exception { dataProvider.removePropertyChangeListener(providerListener); dataProvider.dispose(); } @Override public void handleException(Throwable exception) { } }); } @Override protected void notifyChanged(Notification msg) { // END GENERATED CODE super.notifyChanged(msg); switch (msg.getFeatureID(DataProviderObject.class)) { case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED: if (!msg.isTouch()) { if (!msg.getNewBooleanValue()) { detachDataProviders(); getEnabledDataProviders().clear(); } else { setEnabledDataProviderToDefault(getEnabledDataProviders()); } } break; case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: switch (msg.getEventType()) { case Notification.REMOVE: detachDataProvider(msg.getOldStringValue()); break; case Notification.REMOVE_MANY: for (Object value : (Collection< ? >) msg.getOldValue()) { detachDataProvider((String) value); } break; case Notification.ADD: attachDataProvider(msg.getNewStringValue()); break; case Notification.ADD_MANY: for (Object value : (Collection< ? >) msg.getNewValue()) { attachDataProvider((String) value); } break; default: break; } break; case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS: switch (msg.getEventType()) { case Notification.REMOVE: if (msg.getOldValue() instanceof IScaDataProvider) { final IScaDataProvider dataProvider = (IScaDataProvider) msg.getOldValue(); removeDataProvider(dataProvider); } break; case Notification.REMOVE_MANY: if (msg.getOldValue() instanceof Collection< ? >) { for (Object obj : (Collection< ? >) msg.getOldValue()) { if (obj instanceof IScaDataProvider) { final IScaDataProvider dataProvider = (IScaDataProvider) obj; removeDataProvider(dataProvider); } } } break; case Notification.ADD: if (msg.getNewValue() instanceof IScaDataProvider) { IScaDataProvider dataProvider = (IScaDataProvider) msg.getNewValue(); addDataProvider(dataProvider); } break; case Notification.ADD_MANY: if (msg.getNewValue() instanceof Collection< ? >) { for (Object obj : (Collection< ? >) msg.getNewValue()) { if (obj instanceof IScaDataProvider) { IScaDataProvider dataProvider = (IScaDataProvider) obj; addDataProvider(dataProvider); } } } break; default: break; } if (!msg.isTouch()) { updateDataProviderStatus(); } break; default: break; } // BEGIN GENERATED CODE } private void addDataProvider(final IScaDataProvider dataProvider) { SafeRunner.run(new ISafeRunnable() { @Override public void run() throws Exception { dataProvider.addPropertyChangeListener(providerListener); } @Override public void handleException(Throwable exception) { } }); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated NOT */ @Override public void dispose() { // END GENERATED CODE this.disposed = true; detachDataProviders(); clearAllStatus(); if (eNotificationRequired()) { eNotify(new ENotificationImpl(this, Notification.SET, ScaPackage.DATA_PROVIDER_OBJECT__DISPOSED, false, this.disposed)); } // TODO Can we not clear adapters since this seems to cause problems // eAdapters().clear(); // BEGIN GENERATED CODE } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ScaPackage.DATA_PROVIDER_OBJECT__DISPOSED: return isDisposed(); case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS: return getDataProviders(); case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED: return isDataProvidersEnabled(); case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: return getEnabledDataProviders(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated NOT */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: ArrayList<String> remove = new ArrayList<String>(getEnabledDataProviders()); ArrayList<String> add = new ArrayList<String>((Collection< ? extends String>) newValue); remove.removeAll(add); add.removeAll(getEnabledDataProviders()); if (!remove.isEmpty()) { getEnabledDataProviders().removeAll(remove); } if (!add.isEmpty()) { getEnabledDataProviders().addAll(add); } return; } eSetGen(featureID, newValue); } /** * <!-- begin-user-doc --> * * @since 19.0 * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") public void eSetGen(int featureID, Object newValue) { switch (featureID) { case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS: getDataProviders().clear(); getDataProviders().addAll((Collection< ? extends IScaDataProvider>) newValue); return; case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED: setDataProvidersEnabled((Boolean) newValue); return; case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: getEnabledDataProviders().clear(); getEnabledDataProviders().addAll((Collection< ? extends String>) newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS: unsetDataProviders(); return; case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED: setDataProvidersEnabled(DATA_PROVIDERS_ENABLED_EDEFAULT); return; case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: getEnabledDataProviders().clear(); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ScaPackage.DATA_PROVIDER_OBJECT__DISPOSED: return disposed != DISPOSED_EDEFAULT; case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS: return isSetDataProviders(); case ScaPackage.DATA_PROVIDER_OBJECT__DATA_PROVIDERS_ENABLED: return dataProvidersEnabled != DATA_PROVIDERS_ENABLED_EDEFAULT; case ScaPackage.DATA_PROVIDER_OBJECT__ENABLED_DATA_PROVIDERS: return enabledDataProviders != null && !enabledDataProviders.isEmpty(); } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public int eBaseStructuralFeatureID(int derivedFeatureID, Class< ? > baseClass) { if (baseClass == IDisposable.class) { switch (derivedFeatureID) { case ScaPackage.DATA_PROVIDER_OBJECT__DISPOSED: return ScaPackage.IDISPOSABLE__DISPOSED; default: return -1; } } if (baseClass == IRefreshable.class) { switch (derivedFeatureID) { default: return -1; } } return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public int eDerivedStructuralFeatureID(int baseFeatureID, Class< ? > baseClass) { if (baseClass == IDisposable.class) { switch (baseFeatureID) { case ScaPackage.IDISPOSABLE__DISPOSED: return ScaPackage.DATA_PROVIDER_OBJECT__DISPOSED; default: return -1; } } if (baseClass == IRefreshable.class) { switch (baseFeatureID) { default: return -1; } } return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); result.append(" (disposed: "); result.append(disposed); result.append(", dataProviders: "); result.append(dataProviders); result.append(", dataProvidersEnabled: "); result.append(dataProvidersEnabled); result.append(", enabledDataProviders: "); result.append(enabledDataProviders); result.append(')'); return result.toString(); } } // DataProviderObjectImpl