Package com.extendedencryption.action.executer

Source Code of com.extendedencryption.action.executer.BaseExecuter

package com.extendedencryption.action.executer;

/*
* Project: Alfresco Encryption Extension Module , part of the Creative Summer
* This code was developped by a group of 3 students from UET-VNU .
* License   : GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
*/
import com.extendedencryption.model.Model;

import java.io.*;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;

/**
* encryption data in alfresco
*
* @since 4.0
*/
public class BaseExecuter extends ActionExecuterAbstractBase {

    public final static String NAME = "new-base-executer";
    public final static String PARAM_ACTIVE = "active";
    public static final String PARAM_PASS = "pass";
    /**
     * node service object
     */
    public NodeService nodeService;
    /**
     * content service object
     */
    public ContentService contentService;
    public ContentReader actionedUponContentReader;
    public static int bytesize = 16384;
    protected ServiceRegistry serviceRegistry;
    protected String newPassword;

    /**
     * set the node's service
     *
     * @param nodeService
     */
    public BaseExecuter() {
    }

    public void setServiceRegistry(ServiceRegistry serviceRegistry) {
        this.serviceRegistry = serviceRegistry;
    }

    public void setNodeService(NodeService nodeService) {
        this.nodeService = nodeService;
    }

    public NodeService getNodeService() {
        return this.nodeService;
    }

    /**
     * set the content's service
     *
     * @param nodeService
     */
    public void setContentService(ContentService contentService) {
        this.contentService = contentService;
    }

    public ContentService getContentService() {
        return this.getContentService();
    }

    /**
     * Convert a inputstram to byte array
     */
    public byte[] converToByteArray(InputStream is) throws IOException {

        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[bytesize];

        while ((nRead = is.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }

        buffer.flush();

        return buffer.toByteArray();
    }

    /**
     * Reading a note content and return byte array
     *
     * @param nodeRefer
     * @return byte array
     */
    public byte[] getNodeContent(NodeRef nodeRefer) {
        byte[] data = new byte[bytesize];

        // Reading the node content
        ContentReader contentReader = serviceRegistry.getContentService().getReader(
                nodeRefer, ContentModel.PROP_CONTENT);

        actionedUponContentReader = contentReader;
        InputStream is = contentReader.getContentInputStream();

        // Conver input stream to bytes
        try {
            data = this.converToByteArray(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return data;
    }

    public void write(NodeRef nodeRefer, byte[] data) {
        // Getting Mimetype of node       
        QName PROP_QNAME_CONTENT = QName.createQName(
                "http://www.alfresco.org/model/content/1.0", "content");
        ContentData contentData = (ContentData) serviceRegistry.getNodeService()
                .getProperty(nodeRefer, PROP_QNAME_CONTENT);
        String originalMimeType = contentData.getMimetype();

        ContentService contentService = serviceRegistry.getContentService();
        ContentWriter contentWriter = contentService.getWriter(nodeRefer,
                ContentModel.PROP_CONTENT, true);

        contentWriter.setMimetype(originalMimeType);
        contentWriter.setEncoding(actionedUponContentReader.getEncoding());

        contentWriter.putContent(new ByteArrayInputStream(data));

        /*    OutputStream outputStream = contentWriter.getContentOutputStream();
   
         // replate the whole file with content
   
         try {
         outputStream.write(data, (int) contentWriter.getSize(), data.length);
         } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         }
         */
    }

    public String getPassword(NodeRef nodeRef) {
        return (String) nodeService.getProperty(nodeRef, QName.createQName(Model.NAMESPACE_SOMECO_CONTENT_MODEL, Model.PROP_PASS));
    }

    @Override
    protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {

        // Set active encrypted flag
        Boolean activeFlag = (Boolean) action.getParameterValue(PARAM_ACTIVE);
        String MD5password = (String) action.getParameterValue(PARAM_PASS);

        if (activeFlag == null) {
            activeFlag = true;
        }

        // set the sc:isActive property to true
        Map<QName, Serializable> properties = nodeService.getProperties(actionedUponNodeRef);
        properties.put(QName.createQName(Model.NAMESPACE_SOMECO_CONTENT_MODEL, Model.PROP_IS_ACTIVE), activeFlag);
        properties.put(QName.createQName(Model.NAMESPACE_SOMECO_CONTENT_MODEL, Model.PROP_PASS), MD5password);

        // if the aspect has already been added, set the properties
        if (nodeService.hasAspect(actionedUponNodeRef, QName.createQName(Model.NAMESPACE_SOMECO_CONTENT_MODEL, Model.ASPECT_SC_ENCRYPT))) {
            nodeService.setProperties(actionedUponNodeRef, properties);
        } else {
            // otherwise, add the aspect and set the properties     
            nodeService.addAspect(actionedUponNodeRef, QName.createQName(Model.NAMESPACE_SOMECO_CONTENT_MODEL, Model.ASPECT_SC_ENCRYPT), properties);
        }
    }

    protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
        paramList.add(
                new ParameterDefinitionImpl( // Create a new parameter definition to add to the list
                PARAM_ACTIVE, // The name used to identify the parameter
                DataTypeDefinition.BOOLEAN, // The parameter value type
                false, // Indicates whether the parameter is mandatory
                getParamDisplayLabel(PARAM_ACTIVE)));   // The parameters display label

        paramList.add(
                new ParameterDefinitionImpl(
                PARAM_PASS,
                DataTypeDefinition.TEXT,
                true,
                getParamDisplayLabel(PARAM_PASS)));
    }
}
TOP

Related Classes of com.extendedencryption.action.executer.BaseExecuter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.