info.magnolia.cms.beans.runtime.FileProperties.java Source code

Java tutorial

Introduction

Here is the source code for info.magnolia.cms.beans.runtime.FileProperties.java

Source

/**
 * This file Copyright (c) 2003-2012 Magnolia International
 * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
 *
 *
 * This file is dual-licensed under both the Magnolia
 * Network Agreement and the GNU General Public License.
 * You may elect to use one or the other of these licenses.
 *
 * This file is distributed in the hope that it will be
 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
 * implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
 * Redistribution, except as permitted by whichever of the GPL
 * or MNA you select, is prohibited.
 *
 * 1. For the GPL license (GPL), you can redistribute and/or
 * modify this file under the terms of the GNU General
 * Public License, Version 3, as published by the Free Software
 * Foundation.  You should have received a copy of the GNU
 * General Public License, Version 3 along with this program;
 * if not, write to the Free Software Foundation, Inc., 51
 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * 2. For the Magnolia Network Agreement (MNA), this file
 * and the accompanying materials are made available under the
 * terms of the MNA which accompanies this distribution, and
 * is available at http://www.magnolia-cms.com/mna.html
 *
 * Any modifications to this file must keep this entire header
 * intact.
 *
 */
package info.magnolia.cms.beans.runtime;

import javax.jcr.PropertyType;

import info.magnolia.cms.beans.config.MIMEMapping;
import info.magnolia.cms.core.Content;
import info.magnolia.cms.core.NodeData;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;

/**
 * Similar to info.magnolia.cms.beans.runtime.File but exposes the binary's properties using constants.
 *
 * @author Vinzenz Wyser
 * @version 2.0
 */
public class FileProperties {

    public static final String PROPERTIES_CONTENTNODE = "properties"; //$NON-NLS-1$

    public static final String PROPERTY_CONTENTTYPE = "jcr:mimeType"; //$NON-NLS-1$

    public static final String PROPERTY_ENCODING = "jcr:encoding"; //$NON-NLS-1$

    public static final String PROPERTY_LASTMODIFIED = "jcr:lastModified"; //$NON-NLS-1$

    public static final String PROPERTY_SIZE = "size"; //$NON-NLS-1$

    public static final String PROPERTY_TEMPLATE = "nodeDataTemplate"; //$NON-NLS-1$

    public static final String PROPERTY_EXTENSION = "extension"; //$NON-NLS-1$

    public static final String PROPERTY_MIMETYPE = "mimeType";

    public static final String PROPERTY_FILENAME = "fileName"; //$NON-NLS-1$

    public static final String PROPERTY_ICON = "icon"; //$NON-NLS-1$

    public static final String PROPERTY_WIDTH = "width"; //$NON-NLS-1$

    public static final String PROPERTY_HEIGHT = "height"; //$NON-NLS-1$

    public static final String EXTENSION = "extension"; // Pdf //$NON-NLS-1$

    public static final String EXTENSION_LOWER_CASE = "extensionLowerCase"; // pdf //$NON-NLS-1$

    public static final String EXTENSION_UPPER_CASE = "extensionUpperCase"; // PDF //$NON-NLS-1$

    public static final String NAME = "name"; // report2004.Pdf //$NON-NLS-1$

    public static final String NAME_WITHOUT_EXTENSION = "nameWithoutExtension"; // report2004 //$NON-NLS-1$

    public static final String CONTENT_TYPE = "jcr:mimeType"; // application/pdf //$NON-NLS-1$

    public static final String ICON = "icon"; // the icon for this type

    public static final String TEMPLATE = "template"; // ((according to dialog)) //$NON-NLS-1$

    public static final String HANDLE = "handle"; // /en/mainColumnParagraph/04/file //$NON-NLS-1$

    /**
     * /en/mainColumnParagraph/04/file.Pdf.
     */
    public static final String PATH_WITHOUT_NAME = "pathWithoutName"; //$NON-NLS-1$

    /**
     * path including fileName: <code>/en/mainColumnParagraph/04/file/report2004.Pdf</code>.
     */
    public static final String PATH = "path"; //$NON-NLS-1$

    /**
     * size in bytes: <code>263492</code>.
     */
    public static final String SIZE_BYTES = "sizeBytes"; //$NON-NLS-1$

    /**
     * size in KB: <code>257.3</code>.
     */
    public static final String SIZE_KB = "sizeKB"; //$NON-NLS-1$

    /**
     * size in MB: <code>0.2</code>.
     */
    public static final String SIZE_MB = "sizeMB"; //$NON-NLS-1$

    /**
     * size and unit depending of size in bytes, KB, or MB: <code>257.3</code>.
     */
    public static final String SIZE = "size"; //$NON-NLS-1$

    private Content content;

    private String nodeDataName;

    public FileProperties(Content content, String nodeDataName) {
        this.setContent(content);
        this.setNodeDataName(nodeDataName);
    }

    public void setContent(Content c) {
        this.content = c;
    }

    public Content getContent() {
        return this.content;
    }

    public void setNodeDataName(String s) {
        this.nodeDataName = s;
    }

    public String getNodeDataName() {
        return this.nodeDataName;
    }

    public String getProperty(String property) {
        String value = StringUtils.EMPTY;

        if (this.getContent() == null) {
            return null;
        }

        NodeData props = this.getContent().getNodeData(this.nodeDataName);
        if (props.getType() != PropertyType.BINARY) {
            return null;
        }

        String filename = props.getAttribute(PROPERTY_FILENAME);
        String ext = props.getAttribute(PROPERTY_EXTENSION);
        String fullName = filename;
        String fullExt = StringUtils.EMPTY;
        if (StringUtils.isNotEmpty(ext)) {
            fullExt = "." + ext; //$NON-NLS-1$
            fullName += fullExt;
        }
        if (property.equals(EXTENSION)) {
            value = ext;
        } else if (property.equals(EXTENSION_LOWER_CASE)) {
            value = StringUtils.lowerCase(ext);
        } else if (property.equals(EXTENSION_UPPER_CASE)) {
            value = StringUtils.upperCase(ext);
        } else if (property.equals(NAME_WITHOUT_EXTENSION)) {
            value = filename;
        } else if (property.equals(CONTENT_TYPE)) {
            value = props.getAttribute(PROPERTY_CONTENTTYPE);
        } else if (property.equals(TEMPLATE)) {
            value = props.getAttribute(PROPERTY_TEMPLATE);
        } else if (property.equals(HANDLE)) {
            value = this.getContent().getHandle() + "/" + this.getNodeDataName(); //$NON-NLS-1$
        } else if (property.equals(NAME)) {
            value = fullName;
        } else if (property.equals(PATH_WITHOUT_NAME)) {
            value = this.getContent().getHandle() + "/" + this.getNodeDataName() + fullExt; //$NON-NLS-1$
        } else if (property.equals(ICON) && ext != null) {
            value = MIMEMapping.getMIMETypeIcon(ext);
        } else if (property.equals(SIZE_BYTES)) {
            value = props.getAttribute(PROPERTY_SIZE);
        } else if (property.equals(SIZE_KB)) {
            String sizestring = props.getAttribute(PROPERTY_SIZE);
            if (!NumberUtils.isNumber(sizestring)) {
                return null;
            }
            double size = Long.parseLong(sizestring);
            String sizeStr;
            size = size / 1024;
            sizeStr = Double.toString(size);
            sizeStr = sizeStr.substring(0, sizeStr.indexOf(".") + 2); //$NON-NLS-1$
            value = sizeStr;
        } else if (property.equals(SIZE_MB)) {
            String sizestring = props.getAttribute(PROPERTY_SIZE);
            if (!NumberUtils.isNumber(sizestring)) {
                return null;
            }
            double size = Long.parseLong(sizestring);
            String sizeStr;
            size = size / (1024 * 1024);
            sizeStr = Double.toString(size);
            sizeStr = sizeStr.substring(0, sizeStr.indexOf(".") + 2); //$NON-NLS-1$
            value = sizeStr;
        } else if (property.equals(SIZE)) {
            String sizestring = props.getAttribute(PROPERTY_SIZE);
            if (!NumberUtils.isNumber(sizestring)) {
                return null;
            }
            double size = Long.parseLong(sizestring);
            String unit = "bytes";
            String sizeStr;
            if (size >= 1000) {
                size = size / 1024;
                unit = "KB";
                if (size >= 1000) {
                    size = size / 1024;
                    unit = "MB";
                }
                sizeStr = Double.toString(size);
                sizeStr = sizeStr.substring(0, sizeStr.indexOf(".") + 2); //$NON-NLS-1$
            } else {
                sizeStr = Double.toString(size);
                sizeStr = sizeStr.substring(0, sizeStr.indexOf(".")); //$NON-NLS-1$
            }
            value = sizeStr + " " + unit; //$NON-NLS-1$
        } else if (property.equals(PROPERTY_WIDTH)) {
            value = props.getAttribute(PROPERTY_WIDTH);
        } else if (property.equals(PROPERTY_HEIGHT)) {
            value = props.getAttribute(PROPERTY_HEIGHT);
        } else { // property.equals(PATH|null|""|any other value)
            value = this.getContent().getHandle() + "/" + this.getNodeDataName() + "/" + fullName; //$NON-NLS-1$ //$NON-NLS-2$
        }
        return value;
    }
}