1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/onecoder-shurnim-storage

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Шурним-сторэйдж

Рисунок: Шурним (мышь) — так звали одну из наших с женой когда-то живших у нас мышей.

Шурним-сторэйдж (shurnim-storage) — это плагин для облачного хранилища и синхронизации данных. Он был разработан в рамках участия в конкурсе по разработке «Ещё один снимок».

Цель проекта — предоставить пользователям удобный инструмент для расширения облачных хранилищ и синхронизации данных между ними. Проект состоит из двух частей:

  1. Бэкенд-интерфейс.
  2. Фронтенд-пользовательский интерфейс.

В настоящее время бэкенд-часть проекта в основном разработана, осталось только дополнить её определением интерфейсов для бэкенда и плагинов. Фронтенд не разработан, но может быть интересен для реализации заинтересованными разработчиками.

Использование:

  • Получение кода. Код можно получить на главной странице проекта на Gitcafe или OSChina. Также можно использовать Maven-библиотеку OSChina для получения зависимостей или самостоятельно скомпилировать jar-пакет.

  • Разработка плагинов. Плагины в проекте похожи на блоки конструктора, они не только поддерживают функциональность фреймворка, но и являются основой его расширяемости. Для разработки плагина нужно выполнить два шага:

    • Реализовать интерфейс PluginAPI.
    • Плагин должен быть доступен в одном classpath с проектом. Его можно разработать непосредственно в исходном коде проекта или как отдельный проект и собрать в jar-файл.

Интерфейс PluginAPI определяет общие методы для различных облачных сервисов. В настоящее время он поддерживает только синхронизацию ресурсов, но его можно расширить для поддержки других операций, таких как удаление, поиск и т. д.

Плагин можно реализовать в виде отдельного проекта и собрать в jar-файл, который затем разместить в том же classpath, что и проект. Представитель параметра, должен строго соответствовать имени параметра в классе реализации интерфейса и иметь соответствующий метод set с именем параметра, начинающимся с заглавной буквы.

Например: setAccess_key(String arg); В настоящее время поддерживается только тип параметра String.

  • displayName — это имя параметра, которое также учитывает соображения разработки пользовательского интерфейса, чтобы облегчить разработку пользователем динамического отображения пользовательского интерфейса на основе списка параметров.
  • Значение параметра можно настроить непосредственно в файле конфигурации или присвоить значение во время выполнения. Непосредственная настройка значения более удобна для прямого использования интерфейса бэкэнда. С точки зрения разработки пользовательского интерфейса динамическое присвоение значений во время выполнения является более разумным.

При использовании исходного кода проекта файл конфигурации плагина размещается единообразно в каталоге 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Плагин в виде инструмента для синхронизации облачного хранилища. Можно самостоятельно разработать плагин для поддержки нужного облачного хранилища в соответствии со спецификацией. Интерфейс серверной части можно использовать отдельно. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/onecoder-shurnim-storage.git
git@api.gitlife.ru:oschina-mirror/onecoder-shurnim-storage.git
oschina-mirror
onecoder-shurnim-storage
onecoder-shurnim-storage
master