001/*
002Copyright (c) 2010 The Regents of the University of California.
003All rights reserved.
004Permission is hereby granted, without written agreement and without
005license or royalty fees, to use, copy, modify, and distribute this
006software and its documentation for any purpose, provided that the above
007copyright notice and the following two paragraphs appear in all copies
008of this software.
009
010IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
011FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
012ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
013THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
014SUCH DAMAGE.
015
016THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
017INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
018MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
019PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
020CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
021ENHANCEMENTS, OR MODIFICATIONS.
022
023*/
024
025package org.kepler.util;
026
027import java.lang.ref.WeakReference;
028import java.util.LinkedList;
029import java.util.List;
030
031import org.kepler.objectmanager.lsid.KeplerLSID;
032
033import ptolemy.kernel.util.NamedObj;
034
035
036public class WorkflowRenameManager {
037
038        static private WorkflowRenameManager _instance = null;
039
040        
041    /** The list of WorkflowRenameListener. */
042    private List<WeakReference<WorkflowRenameListener>> _renameListenerList =
043        new LinkedList<WeakReference<WorkflowRenameListener>>();
044    
045    
046        public synchronized static WorkflowRenameManager getInstance() {
047                if (_instance == null) {
048                        _instance = new WorkflowRenameManager();
049                }
050                return _instance;
051        }
052    
053        private WorkflowRenameManager() {
054        }
055
056        /**
057         * Notify all WorkflowRenameListeners that a workflow was renamed.
058         * @param namedObj the workflow
059         * @param oldLSID the previous LSID
060         * @param newLSID the new LSID
061         * @param oldName the previous name
062         * @param newName the new name
063         */
064    public void renamedWorkflow(NamedObj namedObj, KeplerLSID oldLSID,
065            KeplerLSID newLSID, String oldName, String newName){
066       
067        for(WeakReference<WorkflowRenameListener> listenerWf : _renameListenerList){
068                WorkflowRenameListener listener = listenerWf.get();
069                if (listener != null)
070                    listener.renamedWorkflow(namedObj, oldLSID, newLSID,
071                                oldName, newName);
072        }       
073    }
074    
075    /** Add a WorkflowRenameListener to the list of listeners. */
076    public void addRenameListener(WorkflowRenameListener listener) {
077        _renameListenerList.add(new WeakReference(listener));
078    }
079
080    /** Clear the list of WorkflowRenameListener. */
081    public void clearRenameListeners() {
082        _renameListenerList.clear();
083    }
084
085    /** Remove a WorkflowRenameListener from the list of listeners. */
086    public void removeRenameListener(WorkflowRenameListener listener) {
087        _renameListenerList.remove(listener);
088    }
089    
090    
091}