/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.ptc.tifworkbench.reader; import com.mks.api.response.Field; import com.mks.api.response.Item; import com.mks.api.response.ItemList; import com.mks.api.response.WorkItem; import com.ptc.tifworkbench.integrity.IntegrityApi; import com.ptc.tifworkbench.integrity.IntegrityException; import com.ptc.tifworkbench.integrity.IntegrityExceptionEx; import com.ptc.tifworkbench.jaxbbinding.LoggingType; import com.ptc.tifworkbench.jaxbbinding.ObjectFactory; import com.ptc.tifworkbench.worker.StatusReporter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * @author pbowden */ public abstract class AdminObjectReader { private StatusReporter reporter; private ObjectFactory factory = new ObjectFactory(); private IntegrityApi api; public AdminObjectReader(StatusReporter reporter) throws IntegrityExceptionEx { this.reporter = reporter; api = IntegrityApi.getInstance(); } abstract void read() throws IntegrityException; public StatusReporter getReporter() { return reporter; } public IntegrityApi getApi() { return api; } public ObjectFactory getFactory() { return factory; } public void reportStatus(int prog, String mess) { reporter.reportStatus(prog, mess); } protected String getSafeField(String fld, WorkItem wk) { if (!wk.contains(fld)) { return ""; } Field field = wk.getField(fld); if ((field != null) && (field.getValueAsString() != null) && (field.getValueAsString().length() > 0)) { return field.getValueAsString(); } return ""; } protected Boolean getBooleanField(String fld, WorkItem wk) { Field field = wk.getField(fld); if ((field != null) && (field.getValueAsString() != null) && (field.getValueAsString().length() > 0)) { return field.getValueAsString().equalsIgnoreCase("true"); } return false; } protected int getIntegerField(String fld, WorkItem wk) { Field field = wk.getField(fld); if ((field != null) && (field.getValueAsString() != null) && (field.getValueAsString().length() > 0)) { return Integer.parseInt(field.getValueAsString()); } return 0; } protected int getIntegerField(String fld, Item item) { Field field = item.getField(fld); if ((field != null) && (field.getValueAsString() != null) && (field.getValueAsString().length() > 0)) { return Integer.parseInt(field.getValueAsString()); } return 0; } protected String getSafeField(String fld, Item item) { String value = item.getField(fld).getValueAsString(); return value == null ? "" : value; } protected LoggingType getLoggingField(String fld, Item item) { Field field = item.getField(fld); if (field == null) { return LoggingType.NONE; } String value = field.getValueAsString(); if (value == null) { return LoggingType.NONE; } if (LoggingType.MOST_RECENT_FIRST.value().equals(value)) { return LoggingType.MOST_RECENT_FIRST; } if (LoggingType.MOST_RECENT_LAST.value().equals(value)) { return LoggingType.MOST_RECENT_LAST; } return LoggingType.NONE; } /** * Lists separated by ; items in list separated by , * * @param fld * @param wk * @return */ protected String getListOfListAsString(String fld, WorkItem wk) { StringBuilder buff = new StringBuilder(); if (!wk.contains(fld)) { return ""; } List<Item> startRels = wk.getField(fld).getList(); if (startRels == null) { return ""; } // Loop over the start relationships. for (Item item : startRels) { buff.append(item.getId()).append(":"); List<Item> endRels = item.getField("to").getList(); for (Item endItem : endRels) { buff.append(endItem.getId()).append(","); } buff.setCharAt(buff.length() - 1, ';'); } buff.deleteCharAt(buff.length() - 1); return buff.toString(); } protected List<String> getStringList(String fld, WorkItem wk) { List<String> ret = new ArrayList<String>(); if (!wk.contains(fld)) { return ret; } List<String> list = wk.getField(fld).getList(); return list; } protected String getShareGroups(WorkItem wk) { ItemList shares = (ItemList) wk.getField("sharedGroups").getList(); if (shares != null) { Iterator shareIterator = shares.getItems(); StringBuilder buff = new StringBuilder(); while (shareIterator.hasNext()) { Item item = (Item) shareIterator.next(); String groupName = item.getId(); buff.append(groupName); if (shareIterator.hasNext()) { buff.append(","); } log(" Read share group: " + groupName); } return buff.toString(); } return ""; } protected boolean specified(String fld, WorkItem wk) { if (!wk.contains(fld)) { return false; } else { if (wk.getField(fld) != null && wk.getField(fld).getValueAsString() != null) { return (wk.getField(fld).getValueAsString().length() > 0); } return false; } } // since it's not trivial to escape characters with built-in java functions, here's one that'll do it. --al 20100124 protected String escapeChar(String source, String search) { StringBuilder sb = null; String[] toks = null; if (source == null || source.trim().length() == 0 || search == null) { return source; } toks = source.split(search); if (toks.length > 1) { sb = new StringBuilder(); for (int x = 0; x < toks.length; x++) { sb.append(toks[x]); if (x < toks.length - 1) { // make sure we don't append the escaped char to the end... sb.append("\\"); sb.append(search); } } return sb.toString(); } // if there was only one token, then there's nothing to replace. return source; } public String makeSafe(String str) { if (str == null) { return ""; } else { return str; } } public void log(String mess) { api.log(mess); } }