Шурним-сторэйдж
Рисунок: Шурним (мышь) — так звали одну из наших с женой когда-то живших у нас мышей.
Шурним-сторэйдж (shurnim-storage) — это плагин для облачного хранилища и синхронизации данных. Он был разработан в рамках участия в конкурсе по разработке «Ещё один снимок».
Цель проекта — предоставить пользователям удобный инструмент для расширения облачных хранилищ и синхронизации данных между ними. Проект состоит из двух частей:
В настоящее время бэкенд-часть проекта в основном разработана, осталось только дополнить её определением интерфейсов для бэкенда и плагинов. Фронтенд не разработан, но может быть интересен для реализации заинтересованными разработчиками.
Использование:
Получение кода. Код можно получить на главной странице проекта на Gitcafe или OSChina. Также можно использовать Maven-библиотеку OSChina для получения зависимостей или самостоятельно скомпилировать jar-пакет.
Разработка плагинов. Плагины в проекте похожи на блоки конструктора, они не только поддерживают функциональность фреймворка, но и являются основой его расширяемости. Для разработки плагина нужно выполнить два шага:
Интерфейс PluginAPI определяет общие методы для различных облачных сервисов. В настоящее время он поддерживает только синхронизацию ресурсов, но его можно расширить для поддержки других операций, таких как удаление, поиск и т. д.
Плагин можно реализовать в виде отдельного проекта и собрать в jar-файл, который затем разместить в том же classpath, что и проект. Представитель параметра, должен строго соответствовать имени параметра в классе реализации интерфейса и иметь соответствующий метод set с именем параметра, начинающимся с заглавной буквы.
Например: setAccess_key(String arg); В настоящее время поддерживается только тип параметра String.
При использовании исходного кода проекта файл конфигурации плагина размещается единообразно в каталоге plugins проекта. Вы также можете разместить его в любом другом месте. В этом случае при создании экземпляра интерфейса бэкенда необходимо указать местоположение.
Использование интерфейса ShurnimStorage
Интерфейс ShurnimStorage — это глобальный и единственный интерфейс фреймворка shurinm-storage, который в настоящее время определяется следующим образом:
package com.coderli.shurnim.storage;
import java.util.List;
import java.util.Map;
import com.coderli.shurnim.storage.plugin.model.Plugin;
import com.coderli.shurnim.storage.plugin.model.Resource;
/**
* Интерфейс бэкенда для модулей.
* Через этот интерфейс можно использовать все функции бэкенда.
* Использование:
* <li>
* 1. Сначала получите список всех поддерживаемых платформ/плагинов через {@link #getSupportedPlugins()} метод. <li>
* 2. Передайте ID из списка в соответствующий параметр интерфейса для выполнения соответствующих операций платформы.
* Следует отметить, что для разных платформ плагинов требуются разные параметры, которые можно настроить напрямую в файле конфигурации.
* Также можно присвоить значения во время выполнения (перезапишет значения в файле конфигурации).
*
* Список параметров разработан таким образом, чтобы разработчикам пользовательских интерфейсов было удобно динамически создавать редактируемые элементы управления на основе списка параметров и присваивать им значения. Это повышает расширяемость.
*
* @author OneCoder
* @date 2014年4月22日 下午9:21:58
* @website http://www.coderli.com
*/
public interface ShurnimStorage {
/**
* Получить текущий список поддерживаемых плагинов<br>
* Если плагин не поддерживается, возможно, будет возвращено null
*
* @return
* @author OneCoder
* @date 2014年5月7日 下午8:53:25
*/
List<Plugin> getSupportedPlugins();
/**
* Присвоить значение указанному параметру плагина<br>
* Здесь присвоенное значение перезапишет значение по умолчанию в файле конфигурации
*
* @param pluginId
* Идентификатор плагина
* @param paramsKV
* Пара ключ-значение параметра
* @author OneCoder
* @date 2014年5月9日 上午12:41:53
*/
void setParamValues(String pluginId, Map<String, String> paramsKV);
/**
* Получить список ресурсов в указанном каталоге плагина
*
* @param pluginId
* Идентификатор плагина
* @param path
* Указанный путь
* @return
* @author OneCoder
* @date 2014年5月11日 上午8:52:00
*/
List<Resource> getResources(String pluginId, String path);
/**
* Синхронизировать ресурсы
*
* @param fromPluginId
* Плагин, с которого нужно синхронизировать
* @param toPluginIds
* Целевой идентификатор плагина
* @param resource
* Синхронизируемый ресурс
* @return Результат синхронизации
* @author OneCoder
* @date 2014年5月11日 上午11:41:24
*/
boolean sycnResource(String fromPluginId, String toPluginId,
Resource resource) throws Exception;
}
На данный момент интерфейс фактически содержит только функции getResources и sycnResource для получения списка ресурсов и синхронизации ресурсов соответственно. getSupportedPlugins и setParamValues фактически являются вспомогательными интерфейсами, которые полезны при разработке пользовательского интерфейса.
Точно так же вы можете расширить разработку этого интерфейса, добавив больше функций, которые вам нравятся. Например, одновременно удалять файлы на указанном хранилище. Конечно, для этого требуется поддержка интерфейса плагина.
Здесь sycnResource разработан как однонаправленная связь между плагинами, учитывая потребность в получении результата синхронизации. Если вы хотите разработать функцию синхронизации с несколькими хранилищами, рекомендуется переписать собственный класс реализации интерфейса, потому что реализация по умолчанию будет многократно удалять ресурсы после каждой синхронизации, что приводит к ненужному использованию сетевых ресурсов.
По умолчанию класс реализации интерфейса — DefaultShurnimStorageImpl.
Пример использования
package com.coderli.shurnim.test.shurnimstorage;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.coderli.shurnim.storage.DefaultShurnimStorageImpl;
import com.coderli.shurnim.storage.ShurnimStorage;
import com.coderli.shurnim.storage.plugin.model.Resource;
import com.coderli.shurnim.storage.plugin.model.Resource.Type;
/**
* Тестовый класс глобального интерфейса<br>
* На данный момент проводится только общий тест интерфейса. Детальное модульное тестирование будет добавлено позже.
*
* @author OneCoder
* @date 2014年5月19日 下午10:50:27
* @website http://www.coderli.com
*/
public class ShurnimStorageTest {
private static ShurnimStorage shurnim;
@BeforeClass
public static void init() {
shurnim = new DefaultShurnimStorageImpl(
"/Users/apple/git/shurnim-storage-for-UPYUN/plugins");
}
@Test
public void testSycnResource() {
Resource syncResource = new Resource();
syncResource.setPath("/api");
syncResource.setName("api.html");
syncResource.setType(Type.FILE);
try {
Assert.assertTrue(shurnim.sycnResource("upyun", "qiniu",
syncResource));
} catch (Exception e) {
e.printStackTrace();
}
}
}
``` Блог: [OneCoder](http://www.coderli.com)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )