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}