blob: 9ea45621746da5d4065011a3aa090645fce51c15 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Steffen Pingel and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Steffen Pingel - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.trac.core.client;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylyn.internal.trac.core.model.TracComment;
import org.eclipse.mylyn.internal.trac.core.model.TracComponent;
import org.eclipse.mylyn.internal.trac.core.model.TracMilestone;
import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
import org.eclipse.mylyn.internal.trac.core.model.TracRepositoryInfo;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSeverity;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketField;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketResolution;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketStatus;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketType;
import org.eclipse.mylyn.internal.trac.core.model.TracVersion;
/**
* Defines the requirements for classes that provide remote access to Trac repositories.
*
* @author Steffen Pingel
*/
public interface ITracClient {
public enum Version {
XML_RPC, TRAC_0_9;
public static Version fromVersion(String version) {
try {
return Version.valueOf(version);
} catch (IllegalArgumentException e) {
return null;
}
}
@Override
public String toString() {
switch (this) {
case TRAC_0_9:
return "Web"; //$NON-NLS-1$
case XML_RPC:
return "XML-RPC"; //$NON-NLS-1$
default:
return null;
}
}
}
public static final String CHARSET = "UTF-8"; //$NON-NLS-1$
public static final String TIME_ZONE = "UTC"; //$NON-NLS-1$
public static final String LOGIN_URL = "/login"; //$NON-NLS-1$
public static final String QUERY_URL = "/query?format=tab"; //$NON-NLS-1$
public static final String TICKET_URL = "/ticket/"; //$NON-NLS-1$
public static final String NEW_TICKET_URL = "/newticket"; //$NON-NLS-1$
public static final String CUSTOM_QUERY_URL = "/query"; //$NON-NLS-1$
public static final String TICKET_ATTACHMENT_URL = "/attachment/ticket/"; //$NON-NLS-1$
public static final String DEFAULT_USERNAME = "anonymous"; //$NON-NLS-1$
public static final String WIKI_URL = "/wiki/"; //$NON-NLS-1$
public static final String REPORT_URL = "/report/"; //$NON-NLS-1$
public static final String CHANGESET_URL = "/changeset/"; //$NON-NLS-1$
public static final String REVISION_LOG_URL = "/log/"; //$NON-NLS-1$
public static final String MILESTONE_URL = "/milestone/"; //$NON-NLS-1$
public static final String BROWSER_URL = "/browser/"; //$NON-NLS-1$
public static final String ATTACHMENT_URL = "/attachment/ticket/"; //$NON-NLS-1$
/**
* Gets ticket with <code>id</code> from repository.
*
* @param id
* the id of the ticket to get
* @param monitor
* TODO
* @return the ticket
* @throws TracException
* thrown in case of a connection error
*/
TracTicket getTicket(int id, IProgressMonitor monitor) throws TracException;
/**
* Returns the access type.
*/
Version getAccessMode();
/**
* Returns the repository url.
*/
String getUrl();
/**
* Queries tickets from repository. All found tickets are added to <code>result</code>.
*
* @param query
* the search criteria
* @param result
* the list of found tickets
* @throws TracException
* thrown in case of a connection error
*/
void search(TracSearch query, List<TracTicket> result, IProgressMonitor monitor) throws TracException;
/**
* Queries ticket id from repository. All found tickets are added to <code>result</code>.
*
* @param query
* the search criteria
* @param result
* the list of found tickets
* @throws TracException
* thrown in case of a connection error
*/
void searchForTicketIds(TracSearch query, List<Integer> result, IProgressMonitor monitor) throws TracException;
/**
* Validates the repository connection.
*
* @return information about the repository
* @throws TracException
* thrown in case of a connection error
*/
TracRepositoryInfo validate(IProgressMonitor monitor) throws TracException;
/**
* Returns true, if the repository details are cached. If this method returns true, invoking
* <tt>updateAttributes(monitor, false)</tt> will return without opening a connection.
*
* @see #updateAttributes(IProgressMonitor, boolean)
*/
boolean hasAttributes();
/**
* Updates cached repository details: milestones, versions etc.
*
* @throws TracException
* thrown in case of a connection error
*/
void updateAttributes(IProgressMonitor monitor, boolean force) throws TracException;
TracComponent[] getComponents();
TracTicketField[] getTicketFields();
TracTicketField getTicketFieldByName(String tracKey);
TracMilestone[] getMilestones();
TracPriority[] getPriorities();
TracSeverity[] getSeverities();
TracTicketResolution[] getTicketResolutions();
TracTicketStatus[] getTicketStatus();
TracTicketType[] getTicketTypes();
TracVersion[] getVersions();
InputStream getAttachmentData(int ticketId, String filename, IProgressMonitor monitor) throws TracException;
void putAttachmentData(int ticketId, String name, String description, InputStream source, IProgressMonitor monitor,
boolean replace) throws TracException;
void deleteAttachment(int ticketId, String filename, IProgressMonitor monitor) throws TracException;
/**
* @return the id of the created ticket
*/
int createTicket(TracTicket ticket, IProgressMonitor monitor) throws TracException;
void updateTicket(TracTicket ticket, String comment, IProgressMonitor monitor) throws TracException;
/**
* Sets a reference to the cached repository attributes.
*
* @param data
* cached repository attributes
*/
void setData(TracClientData data);
Set<Integer> getChangedTickets(Date since, IProgressMonitor monitor) throws TracException;
Date getTicketLastChanged(Integer id, IProgressMonitor monitor) throws TracException;
void deleteTicket(int ticketId, IProgressMonitor monitor) throws TracException;
List<TracComment> getComments(int id, IProgressMonitor monitor) throws TracException;
}