Можно ли создать папку на сайте Alfresco с помощью OpenCMIS API?

У меня есть веб-сценарий презентации (script A) и веб-сценарий данных (script B).

В script A я создаю диалог, который взаимодействует с script B.

введите здесь описание изображения

Здесь я формирую некоторый путь, по которому будет загружен некоторый файл (параметры group, year и number определяют этот путь):

...
var submitHandler = function() {
    var dataWebScriptUrl = window.location.protocol + '//' + 
        window.location.host + "/alfresco/s/ms-ws/script-b?guest=true";

    var yearCombo = document.getElementById("year");
    var year = yearCombo.options[yearCombo.selectedIndex].value;

    var groupCombo = document.getElementById("group");
    var group = groupCombo.options[groupCombo.selectedIndex].value;

    var numberCombo = document.getElementById("number");
    var number = numberCombo.value;

    var uploadedFile = document.getElementById("uploadedFile");
    var file = uploadedFile.files[0];

    var formData = new FormData();
    formData.append("year", year);
    formData.append("group", group);
    formData.append("number", number);
    formData.append("uploadedFile", file);      

    var xhr = new XMLHttpRequest();
    xhr.open("POST", dataWebScriptUrl);
    xhr.send(formData);
};
...

В script B я использую API Apache Chemistry OpenCMIS для создания CMIS-совместимый репозиторий Alfresco:

public class CustomFileUploader extends DeclarativeWebScript implements OpenCmisConfig {
    ...
    private void retrievePostRequestParams(WebScriptRequest req) {
        String groupName = null, year = null, number = null;

        FormData formData = (FormData) req.parseContent();
        FormData.FormField[] fields = formData.getFields();
        for(FormData.FormField field : fields) {
            String fieldName = field.getName();
            String fieldValue = field.getValue();

            if(fieldName.equalsIgnoreCase("group")) {
                if(fieldValue.equalsIgnoreCase("services")) {
                    groupName = "Услуги";
                ...                         
        }

        firstLevelFolderName = "/" + groupName;
        secondLevelFolderName = groupName + " " + year; 
        thirdLevelFolderName = number;
    }

    ...

    Folder firstLevelFolder = 
                createFolderIfNotExists(cmisSession, docLibFolder, firstLevelFolderName);

    ...

    private Folder createFolderIfNotExists(Session cmisSession, 
            Folder parentFolder, String folderName) {
        Folder subFolder = null;
        for(CmisObject child : parentFolder.getChildren()) {
            if(folderName.equalsIgnoreCase(child.getName())) {
                subFolder = (Folder) child;
            }
        }

        if(subFolder == null) {
            Map<String, Object> props = new HashMap<>();
            props.put("cmis:objectTypeId", "cmis:folder");
            props.put("cmis:name", folderName);

            subFolder = parentFolder.createFolder(props);
        }
        return subFolder; 
    }

    private Folder getDocLibFolder(Session cmisSession, String siteName) {
        String path = "/Sites/" + siteName + "/documentLibrary";
        return (Folder) cmisSession.getObjectByPath(path);
    }

    private Session getCmisSession() {
        SessionFactory factory = SessionFactoryImpl.newInstance();
        Map<String, String> conf = new HashMap<>();

        // http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom
        conf.put(SessionParameter.ATOMPUB_URL, ATOMPUB_URL);
        conf.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
        conf.put(SessionParameter.USER, USER_NAME);
        conf.put(SessionParameter.PASSWORD, PASSWORD);

        // "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl"
        conf.put(SessionParameter.OBJECT_FACTORY_CLASS, OBJECT_FACTORY_CLASS);
        conf.put(SessionParameter.REPOSITORY_ID, "-default-");

        Session session = factory.createSession(conf);

        return session;
    }

    ...

Все работает хорошо... Но мне нужно создать структуру каталогов на определенном сайте, например. "сайт контрактов", здесь:

/site/contracts-site/documentlibrary

Когда я указываю следующее:

/Sites/contracts-site/documentLibrary/Услуги
/Sites/contracts-site/Услуги
/site/contracts-site/documentlibrary/Услуги

Я получаю следующее исключение (в зависимости от пути):

org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found: /Sites/contracts-site/Услуги

Когда я указываю следующее:

"/Услуги"

Все работает, но структура каталогов создается вне сайта...

Как создать папку на сайте Alfresco с помощью OpenCMIS API?


person Community    schedule 06.10.2017    source источник


Ответы (2)


Ты не скучаешь по /company_home/ ?

Это приведет к

/company_home/Sites/contracts-site/documentLibrary/Услуги
person Akah    schedule 06.10.2017
comment
Извините тогда за бесполезность. - person Akah; 06.10.2017

Просто случайно нашел решение. Работает отлично, если указать следующий путь:

// locate the document library
String path = "/Сайты/contracts-site/documentLibrary";

То есть "Сайты" вместо "Sites"... (кириллица)

Я использую локаль ru_RU и кодировку UTF-8. Затем этот пример также работает.

person Community    schedule 09.10.2017