Hello All,
Usecase: If Tracklinks is not present then do not allow the save operation.
i have followed the below article for creation of Advisor,
https://jazz.net/library/article/495
usecase works fine. But when i try to remove the tracks link manually and save , Advisor is not called at all.
If i change any field and remove the track links and save then Advisor is called.
Could you please help on this?
below is my code :
package operationadvisor;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import com.ibm.team.links.common.IReference;
import com.ibm.team.links.common.registry.IEndPointDescriptor;
import com.ibm.team.process.common.IProcessConfigurationElement;
import com.ibm.team.process.common.advice.AdvisableOperation;
import com.ibm.team.process.common.advice.IAdvisorInfo;
import com.ibm.team.process.common.advice.IAdvisorInfoCollector;
import com.ibm.team.process.common.advice.IReportInfo;
import com.ibm.team.process.common.advice.runtime.IOperationAdvisor;
import com.ibm.team.repository.common.IAuditable;
import com.ibm.team.repository.common.TeamRepositoryException;
import com.ibm.team.repository.service.AbstractService;
import com.ibm.team.workitem.common.IAuditableCommon;
import com.ibm.team.workitem.common.ISaveParameter;
import com.ibm.team.workitem.common.model.IWorkItem;
import com.ibm.team.workitem.common.model.IWorkItemHandle;
import com.ibm.team.workitem.common.model.IWorkItemReferences;
import com.ibm.team.workitem.common.model.Identifier;
import com.ibm.team.workitem.common.model.WorkItemEndPoints;
import com.ibm.team.workitem.service.IWorkItemServer;
public class Checktracklinksadvisor extends AbstractService implements IOperationAdvisor {
@Override
public void run(AdvisableOperation operation,
IProcessConfigurationElement advisorConfiguration,
IAdvisorInfoCollector collector, IProgressMonitor monitor)
throws TeamRepositoryException {
Object data = operation.getOperationData();
if (!(data instanceof ISaveParameter)){
return;
}
ISaveParameter saveParameter = (ISaveParameter) data;
IAuditable auditable = saveParameter.getNewState();
if(!(auditable instanceof IWorkItem)) {
System.out.println("auditable is not instance of workitem ....returning ...............");
return;
}
IWorkItem workItem = (IWorkItem) auditable;
System.out.println("testing.........link");
IWorkItem newState = (IWorkItem)saveParameter.getNewState();
Identifier newStateId = newState.getState2();
if (newStateId != null ) {
String newType = newState.getWorkItemType();
//System.out.println("current WI" +newType);
String state = newState.getState2().getStringIdentifier();
System.out.println("state of the WI"+state);
//if the WI type is story and the state is "Done"
if (newType.equals("com.ibm.team.apt.workItemType.story")&&state.equals("com.ibm.team.apt.story.verified"))
{
IEndPointDescriptor linkDescriptor = WorkItemEndPoints.TRACKS_BY_ITEMS;
IAuditableCommon iac = saveParameter.getSaveOperationParameter().getAuditableCommon();
IWorkItemReferences ref = saveParameter.getNewReferences();
// Get all workitem children or parent references.
List<IReference> listReferences = ref.getReferences(linkDescriptor);
int count=0;
for (IReference reference : listReferences) {
System.out.println("Refe"+reference.toString());
count++;
}
if(count<=0)
{
IReportInfo createProblemInfo = collector.createProblemInfo("New Method Please link the proper \"Defect\" workitem to the Problem.", "In order to ensure the work process, Do not add any other workitem to the problem using \"tracks\" link","error" );
System.out
.println("createProblemInfo.setSeverity(IProcessReport.ERROR);" + createProblemInfo.getSummary() + " ... " + createProblemInfo.getSeverity());
collector.addInfo(createProblemInfo);
return;
}
else
{
System.out.println("New Method:Done");
}
}
}
else
{
System.out.println("some state should be defined");
}
}
}