package com.atlassian.labs.speakeasy.external;
import com.atlassian.labs.speakeasy.manager.PluginOperationFailedException;
import com.atlassian.labs.speakeasy.model.Feedback;
import com.atlassian.labs.speakeasy.model.SearchResults;
import com.atlassian.labs.speakeasy.model.Settings;
import com.atlassian.labs.speakeasy.model.UserExtension;
import com.atlassian.labs.speakeasy.model.UserPlugins;
import java.io.File;
import java.util.List;
/**
*
*/
public interface SpeakeasyService
{
UserPlugins getRemotePluginList(String userName, String... modifiedKeys) throws UnauthorizedAccessException;
UserPlugins getRemotePluginList(String userName, List<String> modifiedKeys) throws UnauthorizedAccessException;
String getPluginFeed(String userName) throws UnauthorizedAccessException;
boolean doesPluginExist(String pluginKey);
UserExtension getRemotePlugin(String pluginKey, String userName) throws PluginOperationFailedException, UnauthorizedAccessException;
List<String> enableExtension(String pluginKey, String user) throws UnauthorizedAccessException;
String disableExtension(String pluginKey, String user) throws UnauthorizedAccessException;
void disableAllExtensions(String user) throws UnauthorizedAccessException;
void restoreAllExtensions(String user) throws UnauthorizedAccessException;
UserPlugins uninstallPlugin(String pluginKey, String user) throws PluginOperationFailedException, UnauthorizedAccessException;
UserPlugins fork(String pluginKey, String user, String description) throws PluginOperationFailedException, UnauthorizedAccessException;
File getPluginAsProject(String pluginKey, String user) throws UnauthorizedAccessException;
File getPluginArtifact(String pluginKey, String user) throws UnauthorizedAccessException;
List<String> getPluginFileNames(String pluginKey, String user) throws UnauthorizedAccessException;
Object getPluginFile(String pluginKey, String fileName, String user) throws UnauthorizedAccessException;
UserExtension saveAndRebuild(String pluginKey, String fileName, String contents, String user) throws UnauthorizedAccessException;
UserPlugins favorite(String pluginKey, String user) throws UnauthorizedAccessException;
UserPlugins unfavorite(String pluginKey, String user) throws UnauthorizedAccessException;
UserPlugins enableGlobally(String pluginKey, String user);
UserPlugins disableGlobally(String pluginKey, String user);
void sendFeedback(String pluginKey, Feedback feedback, String user) throws UnauthorizedAccessException;
void reportBroken(String pluginKey, Feedback feedback, String user) throws UnauthorizedAccessException;
UserPlugins installPlugin(File uploadedFile, String user) throws UnauthorizedAccessException;
UserPlugins installPlugin(File uploadedFile, String expectedPluginKey, String user) throws UnauthorizedAccessException;
UserPlugins createExtension(String pluginKey, PluginType pluginType, String remoteUser, String description, String name) throws UnauthorizedAccessException;
SearchResults search(String searchQuery, String remoteUsername);
Settings getSettings(String userName) throws UnauthorizedAccessException;
boolean doesAnyGroupHaveAccess();
Settings saveSettings(Settings settings, String userName) throws UnauthorizedAccessException;
boolean canAccessSpeakeasy(String username);
boolean canAuthorExtensions(String user);
String getScreenshotUrl(String pluginKey, String user) throws UnauthorizedAccessException;
void validatePluginExists(String pluginKey) throws PluginOperationFailedException;
void validatePluginDoesNotExist(String pluginKey) throws PluginOperationFailedException;
boolean canEditPlugin(String name, String remoteUsername);
}