Mithilfe der API können Sie einen angepassten Prüfprozess erstellen, der bestimmte Status definiert und Szenarios überprüft. Um sich mit der Verwendung der API vertraut zu machen, verwenden Sie das Beispiel für den Bugzilla-Client, das in der Datei BugzillReview.jar in dem folgenden Verzeichnis verfügbar ist: http://Host:Port/com.ibm.ram.repository.web/extensionExamples/customReviewProcess/BugzillaReview.jar; dabei sind Host und Port der Name und die Portnummer für Ihren Rational Asset Manager-Server.
Öffnen Sie die Java™-Archivdatei (JAR-Datei), die sich in dem folgenden Verzeichnis befindet: http://Host:Port/com.ibm.ram.repository.web/extensionExamples/customReviewProcess/CustomReviewAPI.jar,; dabei sind Host und Port der Name und die Portnummer für Ihren Rational Asset Manager-Server.
package com.ibm.ram.extension.demo.review; import java.io.InputStream; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import com.ibm.ram.extension.ConfigurationDetails; import com.ibm.ram.extension.CustomReviewProcess;
Wenn ein Prüfprozess in Rational Asset Manager startet, erstellt diese Erweiterung im Bugzilla-Client ein Problem für die Verfolgung des Prüfprozesses. Jedem Problem im Bugzilla-Client ist eine Problem-ID oder Fehler-ID zugeordnet. Diese ID wird von der Methode start(...) in dieser Erweiterung zurückgegeben und in Rational Asset Manager gespeichert. Nachfolgende Methodenaufrufe umfassen die Fehler-ID in den Instanzdaten, sodass die Erweiterung eine bestimmte Instanz des Prüfprozesses mit einer Bugzilla-Fehler-ID abgleichen kann. Die folgenden Beispiele beschreiben die Methodenaufrufe für Instanzen in dem Prüfprozess:
public class BugzillaReviewProcess extends CustomReviewProcess {
Der Bugzilla-Status 'VERIFIED' entspricht dem Status 'Freigegeben' in Rational Asset Manager. Freigegebene Assets können im Repository gefunden und wiederverwendet werden.
public static final String[] APPROVED_STATES = {BugzillaConstants.VERIFIED};
Der Bugzilla-Status 'CLOSED' entspricht dem Status 'Zurückgewiesen' in Rational Asset Manager. Zurückgewiesene Assets werden wieder in den bearbeitbaren Entwurfsstatus versetzt.
public static final String[] REJECTED_STATES = {BugzillaConstants.CLOSED};
Die Bugzilla-Status 'NEW', 'ASSIGNED' und 'RESOLVED' werden für den Prüfprozess in Rational Asset Manager verwendet.
public static final String[] NON_FINAL_STATES = {BugzillaConstants.NEW, BugzillaConstants.ASSIGNED,
BugzillaConstants.RESOLVED};
public static final String USER = "user";
public static final String PASSWORD = "password";
public static final String TITLE = "title"; public static
final String PRODUCT = "product";
public static final String COMPONENT = "component";
public static final String PLATFORM = "platform";
public static final String SEVERITY = "severity";
public static final String PRIORITY = "priority";
public static final String OPERATING_SYSTEM = "operatingSystem";
public static final String VERSION = "version";
public static final String URL = "url";
Wenn Sie die Verbindung zu einem Rational Asset Manager-Server herstellen, müssen Sie die folgenden Details für den Bugzilla-Client konfigurieren: Server-URL, Benutzername und Kennwort. Sie können optionale Details, wie z. B. den Namen des Prüfprozesses, konfigurieren, da sich die Details auf einen bestimmten Prüfprozess beziehen.
public static final ConfigurationDetails[] CONFIG_DETAILS = {
new ConfigurationDetails (URL, "URL", "The URL of the Bugzilla home page",false, true),
new ConfigurationDetails (USER,"User", "The user account that will be used to access bugzilla", false, true),
new ConfigurationDetails (PASSWORD, "Password","The password for the account that will be used to access bugzilla", true, true),
new ConfigurationDetails(TITLE, "Title", "The title for the submitted review", false, false),
new ConfigurationDetails(PRODUCT, "Product","Prodcut", "TestProduct", false, false),
new ConfigurationDetails(COMPONENT, "Component","Component", "TestComponent", false, false),
new ConfigurationDetails(PLATFORM, "Platform","Platform", "PC", false, false),
new ConfigurationDetails(SEVERITY, "Severity","Severity", "blocker", false, false),
new ConfigurationDetails(PRIORITY, "Priority","Priority", "P1", false, false),
new ConfigurationDetails(OPERATING_SYSTEM,"Operating system","Operating System", "Windows", false, fals),
new ConfigurationDetails(VERSION, "Version","Version", "other", false, false),
};
Mit dem folgenden Code wird eine ID für einen unbekannten Fehlereintrag des Bugzilla-Clients hinzugefügt.
public static final String UNKNOWN_CUSTOM_ID = "-1";
public void end(String ramAssetId, String assetVersion, String customAssetId,Map configurationValues, boolean aborted) {
Mit der folgenden Methode werden die von Ihnen definierten Konfigurationsdetails zurückgegeben.
public String getName() {
return "Bugzilla 2.22.2 review process"; }
Mit der folgenden Methode wird die Beschreibung des Bugzilla-Prozesses zurückgegeben.
public String getDescription() {
return "A custom review process that integrates with Bugzilla 2.22.2"; }
Mit der folgenden Methode werden die von Ihnen definierten Namen für den Status 'Freigegeben' zurückgegeben. Wenn das Asset diesen Status erreicht, wird es in Rational Asset Manager in den Status 'Freigegeben' versetzt.
public String[] getApprovedStateNames(String assetId, String assetVersion,
String instanceData, Map configurationValues) {
return APPROVED_STATES;
}
Mit der folgenden Methode werden die von Ihnen definierten Namen für den Nicht-Endstatus (non-final) zurückgegeben. Während sich das Asset in einem dieser Status befindet, ist der Prüfprozess aktiv und Prüfer haben Zugriff zum Überprüfen des Assets.
public String[] getNonFinalStateNames() {
return NON_FINAL_STATES;
}
Der folgende Code kommuniziert mit dem Bugzilla-Server, um den Status der Problem-ID zu bestimmen, die in den Instanzdaten angegeben ist.
public String getState(String assetId, String assetVersion, String instanceData,Map configurationValues)
{
return (String)getStatus(getBugId(instanceData),configurationValues).get(BugzillaXMLHandler.BUG_STATUS_NODE);
}
Mit dem folgenden Code wird die URL eines bestimmten Problems auf der Basis der Fehler-ID in den Instanzdaten zurückgegeben.
public String getURL(String assetId, String assetVersion, String instanceData,Map configurationValues)
{
int bugId = getBugId(instanceData);String url = BugzillaClient client = new BugzillaClient(new URL((String)configurationValues.get(URL)));
if(!String.valueOf(bugId).equals(UNKNOWN_CUSTOM_ID))
{
url = client.getURL(bugId).toString();
}
catch(Exception e) {e.printStackTrace();
}
return url;""; try
{
Der folgende Code wird jedes Mal aufgerufen, wenn Sie eine Überprüfung übergeben. An diesem Punkt müssen Sie mit dem Bugzilla-Client kommunizieren, um das Problem, das diesem Prüfprozess zugeordnet ist und durch die Instanzdaten angegeben wird, abzurufen. Sie müssen dann die Aktualisierung des Status des Problems fortsetzen, indem Sie den Prüfkommentar des Benutzers eingeben und angeben, ob der Benutzer die Überprüfung akzeptiert oder zurückgewiesen hat.
public String handleReviewSubmitted
(String assetId, String assetVersion, String instanceData, String username, bool accepted, String comment, InputStream uploadedContent, String fileName, Map configurationValues)
{
String acceptText = accepted ? "approved" : "rejected"; try
{
BugzillaClient client = new BugzillaClient(new URL((String)configurationValues.get(URL)));
Map bugStatus = getStatus(getBugId(instanceData),configurationValues);client.updateBug
(
(String)configurationValues.get(USER),
(String)configurationValues.get(PASSWORD),getBugId(instanceData),BugzillaConstants.KEEP_CURRENT_STATE,
(String)bugStatus.get(BugzillaXMLHandler.PRODUCT_NODE),
(String)bugStatus.get(BugzillaXMLHandler.COMPONENT_NODE),
(String)bugStatus.get(BugzillaXMLHandler.PLATORM_NODE),
(String)bugStatus.get(BugzillaXMLHandler.SEVERITY_NODE),
(String)bugStatus.get(BugzillaXMLHandler.PRIORITY_NODE),
(String)bugStatus.get(BugzillaXMLHandler.OP_SYS_NODE),
(String)bugStatus.get(BugzillaXMLHandler.VERSION_NODE),"http://",
(String)bugStatus.get(BugzillaXMLHandler.TITLE_NODE), username + " has " + acceptText + " with comment: " + comment);
}
catch(Exceptione)
{
e.printStackTrace();
}
return instanceData;
}
Der folgende Code kommuniziert mit dem Bugzilla-Client, um zu bestimmen, ob sich der angegebene Prüfprozess im Status 'Akzeptiert' befindet.
public boolean isApproved(String assetId, String assetVersion,String instanceData, Map configurationValues)
{
return BugzillaConstants.VERIFIED_XML.equals(getState(assetId,assetVersion, instanceData, configurationValues));
}
Der folgende Code kommuniziert mit dem Bugzilla-Client, um zu bestimmen, ob sich der angegebene Prüfprozess im Status 'Zurückgewiesen' befindet.
public boolean isRejected(String assetId, String assetVersion,
String instanceData,Map configurationValues)
{
return BugzillaConstants.CLOSED_XML.equals(getState(assetId,assetVersion, instanc Data, configurationValues));
}
Der folgende Code wird aufgerufen, wenn der Prüfprozess gestartet wird. Rational Asset Manager stellt die Asset-ID, die Assetversion und Konfigurationswerte für diesen Prüfprozess bereit. Sie müssen mit dem Bugzilla-Client kommunizieren, um ein Problem für diesen Prüfprozess zu erstellen. Nachdem Sie ein Problem für den Prüfprozess erstellt haben, wird die Fehler-ID, die dem Problem zugeordnet ist, an Rational Asset Manager zurückgegeben. In allen nachfolgenden Aufrufen für diesen Prüfprozess wird die Zeichenfolge, die von der Methode zurückgegeben wurde (die Fehler-ID), als der Instanzparameter übergeben.
public String start(String assetId, String assetVersion, Map configurationValues)
{
String customId; try
{
BugzillaClient client = new BugzillaClient
(newURL((String)configurationValues.get(URL))); customId = String.valueOf(client.enterBug((String)configurationValues.get(USER),
(String)configurationValues.get(PASSWORD),
(String)configurationValues.get(PRODUCT),
(String)configurationValues.get(COMPONENT),
(String)configurationValues.get(PLATFORM),
(String)configurationValues.get(SEVERITY),
(String)configurationValues.get(PRIORITY),
(String)configurationValues.get(OPERATING_SYSTEM),
(String)configurationValues.get(VERSION),"http://",
(String)configurationValues.get(TITLE), "Review started"));
}
catch(Exception e)
{
e.printStackTrace();customId = UNKNOWN_CUSTOM_ID;
}
return customId;
}
Der folgende Code
kommuniziert
mit dem Bugzilla-Client, um den Status einer bestimmten Problem-ID oder
Fehler-ID zu bestimmen.@param bugzillaAssetId
@param configurationValues
@return
private Map getStatus(int bugzillaAssetId, Map configurationValues)
{
BugzillaXMLHandler handler = new BugzillaXMLHandler();
try
{
BugzillaClient client = new BugzillaClient(new URL((String)configurationValues.get(URL))); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(false); SAXParser sp = factory.newSAXParser(); sp.parse(client.getBugStatus((String)configurationValues.get(USER),
(String)configurationValues.get(PASSWORD), bugzillaAssetId), handler);
}
catch(Exception e)
{
e.printStackTrace();
}
return handler.getResult();
}
Mit dem folgenden Code wird die Bugzilla-Fehler-ID aus den Instanzdaten bestimmt, die in Rational Asset Manager gespeichert sind.
public class BugzillaXMLHandler extends DefaultHandler {
public static final String BUG_ID_NODE = "bug_id";
public static final String PRODUCT_NODE = "product";
public static final String COMPONENT_NODE = "component";
public static final String VERSION_NODE = "version";
public static final String PLATORM_NODE = "rep_platform";
public static final String OP_SYS_NODE = "op_sys";
public static final String BUG_STATUS_NODE = "bug_status";
public static final String PRIORITY_NODE = "priority";
public static final String SEVERITY_NODE = "bug_severity";
public static final String TITLE_NODE = "short_desc";
private String node;
private Map valueMap = new HashMap();
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
node = qName;
}
public InputSource resolveEntity(String publicID, String systemID)
{
return new InputSource(BugzillaReviewProcess.class.getResourceAsStream("bugzilla.dtd"));
}
public void characters (char ch[], int start, int length)
{
if(node.equals(BUG_ID_NODE)
|| node.equals(PRODUCT_NODE)
|| node.equals(COMPONENT_NODE)
|| node.equals(VERSION_NODE)
|| node.equals(PLATORM_NODE)
|| node.equals(OP_SYS_NODE)
|| node.equals(BUG_STATUS_NODE)
|| node.equals(PRIORITY_NODE)
|| node.equals(BUG_ID_NODE)
|| node.equals(SEVERITY_NODE)
|| node.equals(TITLE_NODE)) {
valueMap.put(node,new String(ch, start, length));
}
}
public Map getResult()
{
return valueMap;
}
}
}