/*******************************************************************************
* Copyright (c) 2011 Gerd Wuetherich (gerd@gerd-wuetherich.de).
* 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:
* Gerd Wuetherich (gerd@gerd-wuetherich.de) - initial API and implementation
******************************************************************************/
package org.bundlemaker.core.internal.modules.event;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bundlemaker.core.internal.modules.ChangeAction;
import org.bundlemaker.core.internal.modules.Group;
import org.bundlemaker.core.resource.IModule;
import org.bundlemaker.core.resource.IModuleAwareMovableUnit;
import org.eclipse.core.runtime.Assert;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class ModularizedSystemChangedListenerList {
/** - */
private List<IModularizedSystemChangedListener> _changedListeners;
/** - */
private boolean _isModelModifiedNotificationDisabled = false;
/** - */
private boolean _handleModelModification = true;
/**
* <p>
* Creates a new instance of type {@link ModularizedSystemChangedListenerList}.
* </p>
*/
public ModularizedSystemChangedListenerList() {
//
_changedListeners = new CopyOnWriteArrayList<IModularizedSystemChangedListener>();
}
/**
* {@inheritDoc}
*/
public void addModularizedSystemChangedListener(IModularizedSystemChangedListener listener) {
//
if (listener != null && !_changedListeners.contains(listener)) {
_changedListeners.add(listener);
}
}
/**
* {@inheritDoc}
*/
public void removeModularizedSystemChangedListener(IModularizedSystemChangedListener listener) {
//
if (_changedListeners.contains(listener)) {
_changedListeners.remove(listener);
}
}
/**
* <p>
* </p>
*
* @param itemChanged
* @param module
* @param changeAction
*/
public void fireMovableUnitEvent(IModuleAwareMovableUnit movableUnit, IModule module, ChangeAction changeAction) {
MovableUnitMovedEvent event = new MovableUnitMovedEvent(movableUnit, module, changeAction);
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.movableUnitChanged(event, changeAction);
}
}
/**
* <p>
* </p>
*/
public void fireModuleChanged(IModule module, ChangeAction changeAction) {
//
ModuleMovedEvent event = new ModuleMovedEvent(module, changeAction);
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.moduleChanged(event, changeAction);
}
}
/**
* <p>
* </p>
*
* @param module
*/
public void fireModuleIdentifierChanged(IModule module) {
//
ModuleIdentifierChangedEvent event = new ModuleIdentifierChangedEvent(module);
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.moduleIdentifierChanged(event);
}
}
/**
* <p>
* </p>
*
* @param group
* @param changeAction
*/
public void fireGroupChanged(Group group, ChangeAction changeAction) {
Assert.isNotNull(group);
Assert.isNotNull(changeAction);
//
GroupChangedEvent event = new GroupChangedEvent(group, changeAction);
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.groupChanged(event, changeAction);
}
}
/**
* <p>
* </p>
*
*/
public void fireModuleClassificationChanged(ModuleClassificationChangedEvent event) {
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.moduleClassificationChanged(event);
}
}
/**
* <p>
* </p>
*
* @param event
*/
public void fireClassificationChanged(ClassificationChangedEvent event) {
//
for (IModularizedSystemChangedListener listener : _changedListeners) {
listener.classificationChanged(event);
}
}
/**
* {@inheritDoc}
*/
public void disableModelModifiedNotification(boolean isDisabled) {
//
boolean fireImmediately = !isDisabled && _isModelModifiedNotificationDisabled;
//
_isModelModifiedNotificationDisabled = isDisabled;
//
for (IModularizedSystemChangedListener modularizedSystemChangedListener : _changedListeners) {
modularizedSystemChangedListener.modelModifiedNotificationDisabled(isDisabled);
}
}
/**
* {@inheritDoc}
*/
public boolean isModelModifiedNotificationDisabled() {
return _isModelModifiedNotificationDisabled;
}
public boolean isHandleModelModification() {
return _handleModelModification;
}
/**
* <p>
* </p>
*
* @param handleModelModification
*/
public void setHandleModelModification(boolean handleModelModification) {
if (!_handleModelModification && handleModelModification) {
_handleModelModification = handleModelModification;
//
for (IModularizedSystemChangedListener modularizedSystemChangedListener : _changedListeners) {
modularizedSystemChangedListener.handleModelModification();
}
} else {
_handleModelModification = handleModelModification;
}
}
}