wizard.js

来自「Hippo CMS是一个以信息为中心的开源内容管理系统。Hippo CMS目标是」· JavaScript 代码 · 共 167 行

JS
167
字号
cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");
cocoon.load("site:/actions/flow/actions.js");
cocoon.load("site:/spring/spring.js");

importClass(Packages.nl.hippo.cms.contentmodel.WebdavRepository);
importClass(Packages.nl.hippo.cms.contentmodel.Document);
//importClass(Packages.nl.hippo.cms.wizard.i18n.I18NHelper);
importClass(Packages.nl.hippo.cocoon.repository.RepositoryManager);

importClass(Packages.java.util.HashMap);
importClass(Packages.java.io.ByteArrayOutputStream);
importClass(Packages.javax.xml.parsers.DocumentBuilder);
importClass(Packages.javax.xml.parsers.DocumentBuilderFactory);
importClass(Packages.org.springframework.web.context.WebApplicationContext);
importClass(Packages.nl.hippo.cms.wizard.NewDocumentWizard);
importClass(Packages.nl.hippo.cms.wizard.WizardConfigurationContentHandler);
importClass(Packages.nl.hippo.cms.wizard.WizardResult);
//importClass(Packages.nl.hippo.cms.wizard.Constants);

function do_wizardChooser() {
    var tpl = 'display-form/wizard/tpl.xml';
	var def = 'forms/wizard/def.xml';
	var bnd = 'forms/wizard/bnd.xml';
	var repo = cocoon.parameters["repository-prefix"];
	var config = "configuration";
		
	var pu = cocoon.createObject(Packages.org.apache.cocoon.components.flow.util.PipelineUtil);

    var wizard = null;
    var aspects = null;
    if(cocoon.session.getAttribute("cms-wizard") != null) {
        wizard  = cocoon.session.getAttribute("cms-wizard").wizard;
        aspects = cocoon.session.getAttribute("cms-wizard").aspects;
    } else {
        var contentHandler = new WizardConfigurationContentHandler();	
        pu.processToSAX(config,{}, contentHandler);
        wizard  = contentHandler.getWizard();
        aspects = contentHandler.getAspects();
    }

    //debug
    //cocoon.sendPage('forms/wizard/def.xml', {'wizard': wizard});
    //cocoon.sendPage('forms/wizard/bnd.xml', {'wizard': wizard});

    //Create the form
    var modelDOM = pu.processToDOM(def, {'wizard': wizard});
    var form = new Form(modelDOM.getDocumentElement());
    var bindingDOM = pu.processToDOM(bnd, {'wizard': wizard});
    form.createBinding(bindingDOM.getDocumentElement());

    form.load({'wizard':wizard});
    form.showForm(tpl, {'wizard': wizard});
    form.save({'wizard':wizard});

    //Wizard model is filled and valid, let's get the new document info  
    var result = new WizardResult()
    wizard.fillResult(result, spring.getWebApplicationContext());
    result.handleAspects(aspects);

    //result.debug();

    //Check if doc exists
    //the ugly way	
    var docExists = false;
    var cmresult = handleContentModelException(function() {
        usingRepositoryDo(function(repository) {
            try {
                var doc = repository.lookupDocument(repo + result.getDocumentURI());
                docExists = doc!=null;
            } catch(e) {
                //print("Document " + result.getDocumentURI() + " doesn't esxist: " + e);
            }
        });
    });
    
    if(docExists) {
        //return a document exists action
        result.setResultAction("exists");
    } else {
        //create params for newDocument() in actions.js
        var params = new HashMap;
        params.put("name",result.getName());
        params.put("type",result.getType());
        params.put("xml",result.getSourceURI());
        params.put("workflowName",result.getWorkflowName());

        //create document
        checkAncestorCollectionsExist(repo, result.getDocumentURI());
        
        if(newDocument(repo, result.getPath(), params)) {
            //TODO: implement result handling
            //patch document
            patchProperties(repo, result.getDocumentURI(), result.getProperties());
            
            //xpath document
            injectContent(repo, result.getDocumentURI(), result.getXpaths());

	        if (libio.checkExists("extensions://wizard/flow/customactions.js"))
	        {
	            cocoon.load("extensions://wizard/flow/customactions.js");
	            performCustomWizardActions(repo, result);          
	        }

            wizard.reset();
        } else {
            result.setResultAction("not-allowed");
        }
    }
	
    //user convenience
    cocoon.session.setAttribute("cms-wizard", {'wizard' : wizard, 'aspects': aspects});

    //store the result in the session for processing after the redirect.
    cocoon.session.setAttribute("result", result);
    cocoon.redirectTo("/wizard/wizard");
}

function patchProperties(repo, source, properties) {
    if(properties.size() > 0){
        var result = handleContentModelException(function(){
            usingRepositoryDo(function(repository){
                var doc = repository.lookupResource(repo + source);
                var it = properties.iterator();
                while(it.hasNext()) {
                    var prop = it.next();
                    doc.setProperty(prop.getNameSpace(), prop.getName(), prop.getValue());
                }
                doc.commitChanges();
            });
        });
    }
}

function injectContent(repo, source, xpaths) {
    if(xpaths.size() > 0) {
        //try-catch?	
        var pu = cocoon.createObject(Packages.org.apache.cocoon.components.flow.util.PipelineUtil);
        var enhancedDocument = pu.processToDOM('addContent' + source, {'xpaths': xpaths});
        var enhancementResult = handleContentModelException(function() {
            usingRepositoryDo(function(repository) {
                var doc = repository.lookupDocument(repo + source);
                doc.setContents(enhancedDocument);
                doc.commitChanges();
            });
        });
        //return enhancedDocument && enhancementResult;
    }
}

function checkAncestorCollectionsExist(m_baseUri,location) {
    var NOT_FOUND_INDEX = -1;
    var lastIndexOfSlash = location.lastIndexOf('/');
    
    if (lastIndexOfSlash != NOT_FOUND_INDEX) {
        var parentPath = "" + location.substring(0, lastIndexOfSlash);
        var pPlength = parentPath.length;

        if (pPlength > 0) {      
            checkAncestorCollectionsExist(m_baseUri,parentPath);
            var mkcolResult = WebDAVHelper.mkcol(m_baseUri + parentPath, cocoon.session.httpstate);
            if (mkcolResult != 201) {
                //print("failure making: " + m_baseUri + parentPath + ": " + mkcolResult);
                // TODO: handle result
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?