package org.nightlabs.jfire.reporting.admin.parameter.ui.command; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.gef.commands.Command; import org.nightlabs.jfire.reporting.admin.parameter.ui.notification.ModelNotificationManager; import org.nightlabs.jfire.reporting.admin.parameter.ui.resource.Messages; import org.nightlabs.jfire.reporting.admin.parameter.ui.util.ObjectIDProvider; import org.nightlabs.jfire.reporting.parameter.config.ValueAcquisitionSetup; import org.nightlabs.jfire.reporting.parameter.config.ValueConsumerBinding; import org.nightlabs.jfire.reporting.parameter.config.ValueProviderConfig; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class DeleteValueProviderCommand extends Command { private ValueProviderConfig valueProviderConfig; private ValueAcquisitionSetup setup; public DeleteValueProviderCommand(ValueProviderConfig valueProviderConfig, ValueAcquisitionSetup setup) { super(); setLabel(Messages.getString("org.nightlabs.jfire.reporting.admin.parameter.ui.command.DeleteValueProviderCommand.label")); //$NON-NLS-1$ this.valueProviderConfig = valueProviderConfig; this.setup = setup; } @Override public void execute() { setup.getValueProviderConfigs().remove(valueProviderConfig); deleteConnections(); notifyEditParts(); } @Override public void redo() { execute(); } @Override public void undo() { setup.getValueProviderConfigs().add(valueProviderConfig); restoreConnections(); notifyEditParts(); } protected void notifyEditParts() { ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(valueProviderConfig), ModelNotificationManager.PROP_DELETE, null, valueProviderConfig); ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(setup), ModelNotificationManager.PROP_DELETE, null, valueProviderConfig); for (ValueConsumerBinding binding : deletedConnections) { ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(binding), ModelNotificationManager.PROP_DELETE, null, valueProviderConfig); if (binding != null && binding.getConsumer() != null) { ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(binding.getConsumer()), ModelNotificationManager.PROP_DELETE, null, valueProviderConfig); } if (binding != null && binding.getProvider() != null) { ModelNotificationManager.sharedInstance().notify( ObjectIDProvider.getObjectID(binding.getProvider()), ModelNotificationManager.PROP_DELETE, null, valueProviderConfig); } } } private List<ValueConsumerBinding> deletedConnections = new ArrayList<ValueConsumerBinding>(); protected void deleteConnections() { ValueConsumerBinding providerBinding = setup.getValueProviderBinding(valueProviderConfig); setup.getValueConsumerBindings().remove(providerBinding); deletedConnections.add(providerBinding); Map<String, ValueConsumerBinding> consumerBindings = setup.getValueConsumerBindings(valueProviderConfig); if (consumerBindings != null) { for (Map.Entry<String, ValueConsumerBinding> entry : consumerBindings.entrySet()) { setup.getValueConsumerBindings().remove(entry.getValue()); deletedConnections.add(entry.getValue()); } } setup.clearBindingIndexes(); } protected void restoreConnections() { for (ValueConsumerBinding binding : deletedConnections) { setup.getValueConsumerBindings().add(binding); } setup.clearBindingIndexes(); } }