001/**
002 *  '$Author: barseghian $'
003 *  '$Date: 2010-08-13 19:10:37 +0000 (Fri, 13 Aug 2010) $'
004 *  '$Revision: 25362 $'
005 *
006 *  For Details:
007 *  http://www.kepler-project.org
008 *
009 *  Copyright (c) 2009-2010 The Regents of the
010 *  University of California. All rights reserved. Permission is hereby granted,
011 *  without written agreement and without license or royalty fees, to use, copy,
012 *  modify, and distribute this software and its documentation for any purpose,
013 *  provided that the above copyright notice and the following two paragraphs
014 *  appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF
015 *  CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL,
016 *  OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
017 *  DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
018 *  POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY
019 *  DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
020 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
021 *  SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
022 *  CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
023 *  ENHANCEMENTS, OR MODIFICATIONS.
024 */
025
026package org.kepler.workflowrunmanager.gui.kar;
027
028import java.awt.event.ActionEvent;
029import java.util.List;
030
031import org.kepler.gui.kar.ExportArchiveAction;
032import org.kepler.objectmanager.lsid.KeplerLSID;
033import org.kepler.util.WorkflowRun;
034import org.kepler.workflowrunmanager.WorkflowRunManager;
035import org.kepler.workflowrunmanager.WorkflowRunManagerManager;
036
037import ptolemy.actor.gui.TableauFrame;
038import ptolemy.kernel.ComponentEntity;
039
040public class ExportRunsArchiveAction extends ExportArchiveAction {
041
042        private List<KeplerLSID> _runLSIDs = null;
043        private WorkflowRunManager workflowRunManager = null;
044
045        public ExportRunsArchiveAction(TableauFrame parent,
046                        List<KeplerLSID> execLSIDs, String overrideModuleDependencies) {
047                super(parent);
048                if (overrideModuleDependencies != null){
049                        super.overrideModuleDependencies(overrideModuleDependencies);
050                }
051                _runLSIDs = execLSIDs;
052                setRefreshFrameAfterSave(false);
053                setSingleItemKAR(false);
054                WorkflowRunManagerManager wrmm = WorkflowRunManagerManager.getInstance();
055                workflowRunManager = wrmm.getWRM(parent);
056        }
057
058        protected boolean handleAction(ActionEvent e) {
059                
060                // first clear any runs previously added to the "selected" list:
061                workflowRunManager.clearSelectedRuns();
062                
063                // if exporting just 1 run, give kar nice default name:
064                // workflowName-runExecId.kar
065                if (_runLSIDs.size() == 1){
066                        KeplerLSID runLSID = _runLSIDs.get(0);
067                        WorkflowRun run = workflowRunManager.getRun(runLSID.toStringWithoutRevision());
068                        ComponentEntity workflow = workflowRunManager.getAssociatedWorkflowForWorkflowRun(runLSID);
069                        if (run != null && workflow != null){
070                                String name = workflow.getName() + "-run" + run.getExecId() + ".kar";
071                                setDefaultFileName(name);
072                        }
073                }
074                else{
075                        setDefaultFileName("");
076                }
077                
078                for (KeplerLSID runLSID : _runLSIDs) {
079                        try {
080                                ComponentEntity workflow = workflowRunManager.getAssociatedWorkflowForWorkflowRun(runLSID);
081                                if (workflow != null) {
082                                        
083                                        // Here we store the Run LSID in the Workflow Run Manager Singleton
084                                        // so the WorkflowRunEntryHandler can figure out which runs for which
085                                        // workflows to save
086                                        workflowRunManager.addRunToSelectedRuns(runLSID);
087                                        
088                                        // Here we add the workflow the run is associated with as an initiator
089                                        // of the SaveKAR
090                                        _savekar.addSaveInitiator(workflow);
091                                        
092                                }
093                        } catch (Exception exc) {
094                                exc.printStackTrace();
095                        }
096                }
097
098                return true;
099        }
100        
101        
102        /**
103         * Invoked when an action occurs.
104         * 
105         *@param e
106         *            ActionEvent
107         */
108        public void actionPerformed(ActionEvent e) {
109                super.actionPerformed(e);
110                
111                // now clear any runs added to the "selected" list
112                // in prep for any subsequent saves
113                workflowRunManager.clearSelectedRuns();
114        }
115        
116}