SimpleActionsTaskSpecificationImpl.java :  » Content-Management-System » daisy » org » outerj » daisy » doctaskrunner » commonimpl » Java Open Source

Java Open Source » Content Management System » daisy 
daisy » org » outerj » daisy » doctaskrunner » commonimpl » SimpleActionsTaskSpecificationImpl.java
/*
 * Copyright 2004 Outerthought bvba and Schaubroeck nv
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.outerj.daisy.doctaskrunner.commonimpl;

import org.outerj.daisy.doctaskrunner.SimpleActionsTaskSpecification;
import org.outerj.daisy.doctaskrunner.TaskException;
import org.outerj.daisy.repository.Repository;
import org.outerj.daisy.repository.RepositoryException;
import org.outerj.daisy.repository.variant.VariantManager;
import org.outerx.daisy.x10Doctaskrunner.TaskDescriptionDocument;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.QNameSet;

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class SimpleActionsTaskSpecificationImpl implements SimpleActionsTaskSpecification {
    private String description;
    private boolean stopOnFirstError;
    private Repository repository;
    private boolean validateOnSave;
    private List actions = new ArrayList();

    public SimpleActionsTaskSpecificationImpl(String description, boolean stopOnFirstError, Repository repository) {
        if (description == null)
            throw new IllegalArgumentException("description parameter is null");

        this.description = description;
        this.stopOnFirstError = stopOnFirstError;
        this.repository = repository;
    }
    public void setValidateOnSave(boolean validateOnSave) {
        this.validateOnSave = validateOnSave;
    }

    public void addCreateVariant(String startVersion, String newBranch, String newLanguage) {
        actions.add(new CreateVariantAction(startVersion, newBranch, newLanguage));
    }

    public void addDeleteVariant() {
        actions.add(new DeleteVariantAction());
    }

    public void addAddToCollection(String collection) {
        actions.add(new AddToCollectionAction(collection));
    }

    public void addRemoveFromCollection(String collection) {
        actions.add(new RemoveFromCollectionAction(collection));
    }

    public String getDescription() {
        return description;
    }

    public String getScript() throws RepositoryException {
        StringBuilder buffer = new StringBuilder();
        buffer.append("var document = null;\n");
        Iterator actionsIt = actions.iterator();
        while (actionsIt.hasNext()) {
            SimpleAction action = (SimpleAction)actionsIt.next();
            action.addScriptCode(buffer);
        }
        buffer.append("\n\nif (document != null)\n    document.save(").append(validateOnSave).append(");");
        return buffer.toString();
    }

    public String getScriptLanguage() {
        return "javascript";
    }

    public boolean stopOnFirstError() {
        return stopOnFirstError;
    }

    public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
        simpleActionsXml.setValidateOnSave(validateOnSave);
        Iterator actionsIt = actions.iterator();
        while (actionsIt.hasNext()) {
            SimpleAction action = (SimpleAction)actionsIt.next();
            action.addXml(simpleActionsXml);
        }
    }

    public void fromXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
        this.validateOnSave = simpleActionsXml.getValidateOnSave();
        XmlObject[] actionsXml = simpleActionsXml.selectChildren(QNameSet.ALL);
        for (int i = 0; i < actionsXml.length; i++) {
            XmlObject actionXml = actionsXml[i];
            if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant) {
                TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant createVariantXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant)actionXml;
                addCreateVariant(createVariantXml.getStartVersion(), createVariantXml.getNewBranch(), createVariantXml.getNewLanguage());
            } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.DeleteVariant) {
                addDeleteVariant();
            } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection) {
                TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection addToCollectionXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection)actionXml;
                addAddToCollection(addToCollectionXml.getCollection());
            } else if (actionXml instanceof TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection) {
                TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection removeFromCollectionXml = (TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection)actionXml;
                addRemoveFromCollection(removeFromCollectionXml.getCollection());
            } else {
                throw new RuntimeException("Unrecognized simple action: " + actionXml);
            }
        }
    }

    interface SimpleAction {
        void addScriptCode(StringBuilder buffer) throws RepositoryException ;
        void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml);
    }

    class CreateVariantAction implements SimpleAction {
        private String startVersion;
        private String newBranch;
        private String newLanguage;

        public CreateVariantAction(String startVersion, String newBranch, String newLanguage) {
            this.startVersion = startVersion;
            this.newBranch = newBranch;
            this.newLanguage = newLanguage;
        }

        public void addScriptCode(StringBuilder buffer) throws RepositoryException {
            VariantManager variantManager = repository.getVariantManager();
            long branchId = variantManager.getBranch(newBranch, false).getId();
            long languageId = variantManager.getLanguage(newLanguage, false).getId();
            long startVersionId;
            if (startVersion.equalsIgnoreCase("live")) {
                startVersionId = -2;
            } else if (startVersion.equalsIgnoreCase("last")) {
                startVersionId = -1;
            } else {
                try {
                    startVersionId = Long.parseLong(startVersion);
                } catch (NumberFormatException e) {
                    throw new TaskException("Invalid version: " + startVersion);
                }
            }

            buffer.append("\n");
            buffer.append("repository.createVariant(variantKey.getDocumentId(), variantKey.getBranchId(), variantKey.getLanguageId(), ");
            buffer.append(startVersionId);
            buffer.append(", ");
            buffer.append(branchId);
            buffer.append(", ");
            buffer.append(languageId);
            buffer.append(", true);\n");
        }

        public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
            TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.CreateVariant createVariant = simpleActionsXml.addNewCreateVariant();
            createVariant.setStartVersion(startVersion);
            createVariant.setNewBranch(newBranch);
            createVariant.setNewLanguage(newLanguage);
        }
    }

    class DeleteVariantAction implements SimpleAction {
        public void addScriptCode(StringBuilder buffer) throws RepositoryException {
            buffer.append("\nrepository.deleteVariant(variantKey);\n");
        }

        public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
            simpleActionsXml.addNewDeleteVariant();
        }
    }

    class AddToCollectionAction implements SimpleAction {
        private final String collection;

        public AddToCollectionAction(String collection) {
            this.collection = collection;
        }

        public void addScriptCode(StringBuilder buffer) throws RepositoryException {
            long collectionId = repository.getCollectionManager().getCollection(collection, false).getId();
            buffer.append("\n");
            buffer.append(LAZY_LOAD_DOCUMENT);
            buffer.append("\nvar collection = repository.getCollectionManager().getCollection(").append(collectionId).append(", false);");
            buffer.append("\ndocument.addToCollection(collection);");
            buffer.append("\n");
        }

        public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
            TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.AddToCollection addToCollectionXml = simpleActionsXml.addNewAddToCollection();
            addToCollectionXml.setCollection(collection);
        }
    }

    class RemoveFromCollectionAction implements SimpleAction {
        private final String collection;

        public RemoveFromCollectionAction(String collection) {
            this.collection = collection;
        }

        public void addScriptCode(StringBuilder buffer) throws RepositoryException {
            long collectionId = repository.getCollectionManager().getCollection(collection, false).getId();
            buffer.append("\n");
            buffer.append(LAZY_LOAD_DOCUMENT);
            buffer.append("\nvar collection = repository.getCollectionManager().getCollection(").append(collectionId).append(", false);\n");
            buffer.append("\ndocument.removeFromCollection(collection);\n");
            buffer.append("\n");
        }

        public void addXml(TaskDescriptionDocument.TaskDescription.Specification.SimpleActions simpleActionsXml) {
            TaskDescriptionDocument.TaskDescription.Specification.SimpleActions.RemoveFromCollection removeFromCollectionXml = simpleActionsXml.addNewRemoveFromCollection();
            removeFromCollectionXml.setCollection(collection);
        }
    }

    private static final String LAZY_LOAD_DOCUMENT = "if (document == null)\n    document = repository.getDocument(variantKey, true);\n";
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.