/* | |
* Copyright (C) 2012 The Android Open Source Project | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package com.motorolamobility.studio.android.certmanager.event; | |
import java.util.ArrayList; | |
import java.util.List; | |
import com.motorolamobility.studio.android.certmanager.ui.model.ITreeNode; | |
/** | |
* Manager which notifies {@link IKeyStoreModelListener} registered that a {@link KeyStoreModelEvent} occurred. | |
* It is a singleton that needs to be called by the hierarchy of {@link ITreeNode} items when they modify the {@link ITreeNode}. | |
*/ | |
public class KeyStoreModelEventManager | |
{ | |
private static KeyStoreModelEventManager _instance; | |
private final List<IKeyStoreModelListener> listeners = new ArrayList<IKeyStoreModelListener>(); | |
private KeyStoreModelEventManager() | |
{ | |
// Singleton - private default constructor prevents instantiations by other classes. | |
} | |
/** | |
* Return the singleton instance of KeyStoreModelEventManager. | |
* */ | |
public synchronized static KeyStoreModelEventManager getInstance() | |
{ | |
if (_instance == null) | |
{ | |
_instance = new KeyStoreModelEventManager(); | |
} | |
return _instance; | |
} | |
/** | |
* Add the parameter {@code listener} to the list of KeyStore event listeners. | |
* @param listener The listener to be added. | |
* */ | |
public void addListener(IKeyStoreModelListener listener) | |
{ | |
synchronized (listener) | |
{ | |
listeners.add(listener); | |
} | |
} | |
/** | |
* Remove the parameter {@code listener} to the list of KeyStore event listeners. | |
* @param listener The listener to be removed. | |
* */ | |
public void removeListener(IKeyStoreModelListener listener) | |
{ | |
synchronized (listener) | |
{ | |
listeners.remove(listener); | |
} | |
} | |
/** | |
* Fire/notify/deliver the event to registered listeners. | |
* @param node {@link ITreeNode} that needs to refresh the view based on the model | |
* @param eventType Event that occurred. | |
*/ | |
public void fireEvent(ITreeNode treeNodeItem, KeyStoreModelEvent.EventType eventType) | |
{ | |
KeyStoreModelEvent keyStoreModelEvent = new KeyStoreModelEvent(treeNodeItem, eventType); | |
synchronized (listeners) | |
{ | |
if (listeners != null) | |
{ | |
for (IKeyStoreModelListener listener : listeners) | |
{ | |
switch (eventType) | |
{ | |
case ADD: | |
listener.handleNodeAdditionEvent(keyStoreModelEvent); | |
break; | |
case REMOVE: | |
listener.handleNodeRemovalEvent(keyStoreModelEvent); | |
break; | |
case UPDATE: | |
listener.handleNodeUpdateEvent(keyStoreModelEvent); | |
break; | |
case COLLAPSE: | |
listener.handleNodeCollapseEvent(keyStoreModelEvent); | |
break; | |
case REFRESH: | |
listener.handleNodeRefreshEvent(keyStoreModelEvent); | |
break; | |
case CLEAR: | |
listener.handleNodeClearEvent(keyStoreModelEvent); | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
} | |
} | |
} |