info.magnolia.freemarker.models.BinaryNodeDataModel.java Source code

Java tutorial

Introduction

Here is the source code for info.magnolia.freemarker.models.BinaryNodeDataModel.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.freemarker.models;

import info.magnolia.cms.beans.runtime.FileProperties;
import info.magnolia.cms.core.NodeData;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;

import javax.jcr.RepositoryException;

import org.apache.commons.lang.StringUtils;

import freemarker.template.AdapterTemplateModel;
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateScalarModel;

/**
 * TODO : review this !
 *
 * @author Chris Miner
 * @version $Revision: $ ($Author: $)
 */
public class BinaryNodeDataModel implements TemplateHashModelEx, TemplateScalarModel, AdapterTemplateModel {
    private final NodeData binaryNodeData;
    private final MagnoliaObjectWrapper wrapper;

    BinaryNodeDataModel(NodeData binaryNodeData, MagnoliaObjectWrapper wrapper) {
        this.binaryNodeData = binaryNodeData;
        this.wrapper = wrapper;
    }

    @Override
    public int size() throws TemplateModelException {
        int result = 0;

        try {
            result = binaryNodeData.getAttributeNames().size();
        } catch (RepositoryException e) {
            // don't care
        }

        return result;
    }

    @Override
    public TemplateCollectionModel keys() throws TemplateModelException {
        Iterator<String> result = null;
        try {
            result = binaryNodeData.getAttributeNames().iterator();
        } catch (RepositoryException e) {
            // don't care
        }
        return (TemplateCollectionModel) wrapper.wrap(result);
    }

    @Override
    public TemplateCollectionModel values() throws TemplateModelException {
        ArrayList<String> result = new ArrayList<String>();
        try {
            Iterator<String> iter = binaryNodeData.getAttributeNames().iterator();
            while (iter.hasNext()) {
                result.add(iter.next());
            }
        } catch (RepositoryException e) {
            // don't care
        }
        return (TemplateCollectionModel) wrapper.wrap(result.iterator());
    }

    @Override
    public TemplateModel get(String key) throws TemplateModelException {
        Object result = null;

        if (key.startsWith("@")) {
            if (key.equals("@handle")) {
                result = binaryNodeData.getHandle();
            }
        } else if (key.equals(FileProperties.CONTENT_TYPE)) {
            result = binaryNodeData.getAttribute(FileProperties.PROPERTY_CONTENTTYPE);
        } else if (key.equals(FileProperties.NAME)) {
            String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
            String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
            result = filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
        } else if (key.equals(FileProperties.PROPERTY_FILENAME)) {
            result = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
        } else if (key.equals(FileProperties.PROPERTY_EXTENSION)) {
            result = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
        } else if (key.equals(FileProperties.PROPERTY_LASTMODIFIED)) {
            try {
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                result = format.parse(binaryNodeData.getAttribute(FileProperties.PROPERTY_LASTMODIFIED));
            } catch (ParseException e) {
                // do nothing.
            }
        } else {
            result = binaryNodeData.getAttribute(key);
        }
        return wrapper.wrap(result);
    }

    @Override
    public boolean isEmpty() throws TemplateModelException {
        return (size() == 0);
    }

    // this reproduces the logic found in the cms out tag.
    @Override
    public String getAsString() throws TemplateModelException {
        String handle = binaryNodeData.getHandle();
        String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
        String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
        return handle + "/" + filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
    }

    public NodeData asNodeData() {
        return this.binaryNodeData;
    }

    @Override
    public Object getAdaptedObject(Class hint) {
        return asNodeData();
    }
}