/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.ptc.tifworkbench.reader; import com.mks.api.Command; import com.mks.api.response.APIException; import com.mks.api.response.Item; import com.mks.api.response.ItemList; import com.mks.api.response.Response; import com.mks.api.response.WorkItem; import com.mks.api.response.WorkItemIterator; import com.ptc.tifworkbench.integrity.IntegrityException; import com.ptc.tifworkbench.integrity.IntegrityExceptionEx; import com.ptc.tifworkbench.jaxbbinding.TriggerDefinition; import com.ptc.tifworkbench.jaxbbinding.TriggerType; import com.ptc.tifworkbench.jaxbbinding.TriggersDefinition; import com.ptc.tifworkbench.model.StandardTriggers; import com.ptc.tifworkbench.worker.StatusReporter; import java.util.ArrayList; import java.util.List; /** * * @author pbowden */ public class TriggerReader extends AdminObjectReader { private TriggersDefinition triggers; public TriggerReader(TriggersDefinition triggers, StatusReporter reporter) throws IntegrityExceptionEx { super(reporter); this.triggers=triggers; } @Override void read() throws IntegrityException { log("Reading triggers."); List<String> ignore = StandardTriggers.getStandardTriggerList(); Command cmd = new Command(Command.IM, "triggers"); List<String> names = new ArrayList<String>(); try { Response resp = getApi().execute(cmd); WorkItemIterator wkIt = resp.getWorkItems(); reportStatus(0, "Read number of triggers."); while(wkIt.hasNext()) { WorkItem wk = wkIt.next(); String triggerName = wk.getId(); log(" Read Trigger: " + triggerName + (ignore.contains(triggerName)?"IGNORE":"")); names.add(triggerName); } } catch (APIException ex) { throw IntegrityExceptionEx.create("Error reading list of fields", ex); } int numFields = names.size(); int count = 0; for(String triggerName : names) { int prog = (100 * count++)/numFields; reportStatus(prog, "Read trigger: " + triggerName); if(ignore.contains(triggerName)) continue; TriggerDefinition tdef = getFactory().createTriggerDefinition(); tdef.setName(triggerName); triggers.getTrigger().add(tdef); try { readTrigger(tdef); }catch(Exception ex) { log("Error reading trigger " + triggerName); log(ex.getMessage()); // TODO: surface the errors to the UI. } } } protected void readTrigger(TriggerDefinition tdef) throws Exception { log("Reading trigger " + tdef.getName()); Command cmd = new Command(Command.IM, "viewtrigger"); cmd.addSelection(tdef.getName()); Response resp = getApi().execute(cmd); WorkItem wk = resp.getWorkItem(tdef.getName()); TriggerType ttype = TriggerType.fromValue(getSafeField("type", wk)); log("Trigger type=" + ttype.value()); tdef.setType(ttype); tdef.setDescription(getSafeField("description", wk)); if(specified("runAs", wk)) tdef.setRunAs(getSafeField("runAs", wk)); if(specified("frequency", wk)) tdef.setFrequency(getSafeField("frequency", wk)); if(specified("query", wk)) tdef.setQuery(getSafeField("query", wk)); if(specified("script", wk)) tdef.setScript(getSafeField("script", wk)); if(specified("scriptTiming", wk)) tdef.setScriptTiming(getSafeField("scriptTiming", wk)); if(specified("rule", wk)) tdef.setRule(ReaderUtils.stripQuotes(getSafeField("rule", wk))); if(specified("scriptParams", wk)) tdef.setParams(getScriptParameters(wk)); //getAssignments(wk, fieldEl); } private String getScriptParameters(WorkItem wk) { StringBuilder buff = new StringBuilder(); ItemList wklist = (ItemList)wk.getField("scriptParams").getList(); for(Object o : wklist) { Item item = (Item)o; String name = item.getId(); String value = item.getField("value").getValueAsString(); buff.append(name).append("=").append(value).append(";"); } return buff.toString(); } }