001/*
002 * Copyright (c) 2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: barseghian $'
006 * '$Date: 2010-11-04 20:38:25 +0000 (Thu, 04 Nov 2010) $' 
007 * '$Revision: 26242 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.reporting.rio.util;
031
032import java.util.List;
033
034import org.apache.commons.logging.Log;
035import org.apache.commons.logging.LogFactory;
036import org.kepler.objectmanager.lsid.KeplerLSID;
037import org.kepler.provenance.ProvenanceRecorder;
038import org.kepler.provenance.Queryable;
039import org.kepler.workflow.Workflow;
040import org.kepler.workflow.WorkflowManager;
041import org.kepler.workflowrunmanager.WorkflowRunManager;
042import org.kepler.workflowrunmanager.WorkflowRunManagerManager;
043
044import ptolemy.actor.gui.TableauFrame;
045import ptolemy.kernel.util.NamedObj;
046
047public class ProvenanceUtil {
048
049        public static Log log = LogFactory.getLog(ProvenanceUtil.class);
050                
051        public static Queryable getQueryable(KeplerLSID lsid, TableauFrame tf) throws Exception {
052                WorkflowRunManagerManager wrmm = WorkflowRunManagerManager.getInstance();
053                WorkflowRunManager workflowRunManager = wrmm.getWRM(tf);
054                return workflowRunManager.getQueryable();
055        }
056        
057        public static ProvenanceRecorder getProvenanceRecorder(KeplerLSID lsid) throws Exception {
058                // can't currently use this, since OM doesn't necessarily have the object when 
059                // its lsid changes (e.g. when assigned a new lsid and old lsid goes into referral list)
060                //NamedObj reference = ObjectManager.getInstance().getHighestObjectRevision(lsid);
061                WorkflowManager wm = WorkflowManager.getInstance();
062                ///TODO, change to simply using a tf passed into getProvenanceRecorder, or a member var?
063                TableauFrame tf = WorkflowManager.getRankingTableauFrame();
064                Workflow workflow = wm.getWorkflow(tf, lsid);
065                NamedObj reference = workflow.getModel();
066                return ProvenanceRecorder.getDefaultProvenanceRecorder(reference);
067        }
068        
069        public static void returnQueryable(KeplerLSID lsid) {
070                //TODO: do anything?
071        }
072        
073        public static void main(String[] args) {
074                KeplerLSID lsid = null;
075                //WARNING - using null TableauFrame here
076                TableauFrame tableauFrame = null;
077                try {
078                        lsid = new KeplerLSID("lsid: urn:lsid:kepler-project.org:test:1:1");
079                } catch (Exception e1) {
080                        e1.printStackTrace();
081                }
082                // TODO: need a way to query provenance by lsid
083                String name = ".provenance.String Constant.output";
084                try {
085                        //String name = ".provenance.Display.input";
086                        int execId = getQueryable(lsid, tableauFrame).getLastExecutionForWorkflow(lsid);
087                        Integer entityId = getQueryable(lsid, tableauFrame).getEntityId(name, lsid);
088                        //entityId = null;
089                        List<Integer> tokenIds = getQueryable(lsid, tableauFrame).getTokensForExecution(execId, 
090                                        entityId, false);
091                        for (int i = 0; i < tokenIds.size(); i++) {
092                                Integer tokenId = tokenIds.get(i);
093                                //String tokenType = getQueryable(wfName).getTokenType(tokenId);
094                                String tokenValue = getQueryable(lsid, tableauFrame).getTokenValue(tokenId);
095                                log.debug(tokenValue);
096                        }
097                        
098                } catch (Exception e) {
099                        // TODO Auto-generated catch block
100                        e.printStackTrace();
101                }
102                finally {
103                        returnQueryable(lsid);
104                }
105        }
106}