/*
* 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.Option;
import com.mks.api.response.APIException;
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.GroupDefinition;
import com.ptc.tifworkbench.jaxbbinding.GroupsDefinition;
import com.ptc.tifworkbench.model.StandardGroups;
import com.ptc.tifworkbench.worker.StatusReporter;
import java.util.Arrays;
import java.util.List;
/**
*
* @author pbowden
*/
public class GroupReader extends AdminObjectReader
{
private GroupsDefinition groups;
public GroupReader(GroupsDefinition groups, StatusReporter reporter) throws IntegrityExceptionEx
{
super(reporter);
this.groups = groups;
}
@Override
void read() throws IntegrityException
{
log("Reading groups.");
List<String> ignore = StandardGroups.getStandardGroupList();
Command cmd = new Command(Command.IM, "groups");
Option fopt = new Option("fields");
fopt.add(Arrays.asList("name", "description", "email", "notificationRule"));
cmd.addOption(fopt);
try
{
Response resp = getApi().execute(cmd);
WorkItemIterator wkIt = resp.getWorkItems();
reportStatus(0, "Read groups");
int count=0;
while(wkIt.hasNext())
{
WorkItem wk = wkIt.next();
String groupName = wk.getId();
reportStatus(50, "Read group: " + groupName);
count++;
log(" Read group " + groupName);
if(ignore.contains(groupName)) continue;
GroupDefinition gdef = getFactory().createGroupDefinition();
gdef.setName(groupName);
String desc = wk.getField("description").getValueAsString();
gdef.setDescription(makeSafe(desc));
String rule = wk.getField("notificationRule").getValueAsString();
gdef.setNotificationRule(makeSafe(rule));
String email = wk.getField("email").getValueAsString();
gdef.setEmail(makeSafe(email));
// TODO - active. Decode binary.
groups.getGroup().add(gdef);
}
reportStatus(100, "Read " + count + " groups");
} catch (APIException ex)
{
throw IntegrityExceptionEx.create("Error reading list of users.", ex);
}
}
protected int countWorkItems(WorkItemIterator wkit)
{
int count=0;
while(wkit.hasNext()) count++;
return count;
}
}