com.xpn.xwiki.objects.classes.DateClass.java Source code

Java tutorial

Introduction

Here is the source code for com.xpn.xwiki.objects.classes.DateClass.java

Source

/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package com.xpn.xwiki.objects.classes;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.ecs.xhtml.input;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.objects.BaseCollection;
import com.xpn.xwiki.objects.BaseProperty;
import com.xpn.xwiki.objects.DateProperty;
import com.xpn.xwiki.objects.meta.PropertyMetaClass;
import com.xpn.xwiki.plugin.query.XWikiCriteria;
import com.xpn.xwiki.plugin.query.XWikiQuery;
import com.xpn.xwiki.web.XWikiMessageTool;

public class DateClass extends PropertyClass {
    /** Logging helper object. */
    private static final Logger LOG = LoggerFactory.getLogger(DateClass.class);

    public DateClass(PropertyMetaClass wclass) {
        super("date", "Date", wclass);
        setSize(20);
        setDateFormat("dd/MM/yyyy HH:mm:ss");
        setEmptyIsToday(1);
        setPicker(1);
    }

    public DateClass() {
        this(null);
    }

    public int getPicker() {
        return getIntValue("picker");
    }

    public void setPicker(int picker) {
        setIntValue("picker", picker);
    }

    public int getSize() {
        return getIntValue("size");
    }

    public void setSize(int size) {
        setIntValue("size", size);
    }

    public int getEmptyIsToday() {
        return getIntValue("emptyIsToday");
    }

    public void setEmptyIsToday(int emptyIsToday) {
        setIntValue("emptyIsToday", emptyIsToday);
    }

    public String getDateFormat() {
        return getStringValue("dateFormat");
    }

    public void setDateFormat(String dformat) {
        setStringValue("dateFormat", dformat);
    }

    @Override
    public BaseProperty fromString(String value) {
        BaseProperty property = newProperty();

        if ((value == null) || (value.equals(""))) {
            if (getEmptyIsToday() == 1) {
                property.setValue(new Date());
            }
            return property;
        }

        try {
            SimpleDateFormat sdf = new SimpleDateFormat(getDateFormat());
            property.setValue(sdf.parse(value));
        } catch (ParseException e) {
            return null;
        }
        return property;
    }

    @Override
    public BaseProperty newProperty() {
        BaseProperty property = new DateProperty();
        property.setName(getName());
        return property;
    }

    public String toFormString(BaseProperty property) {
        if (property.getValue() == null) {
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(getDateFormat());
        return sdf.format(property.getValue());
    }

    @Override
    public BaseProperty newPropertyfromXML(Element ppcel) {
        String value = ppcel.getText();
        BaseProperty property = newProperty();

        if (StringUtils.isEmpty(value)) {
            return property;
        }

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        try {
            property.setValue(sdf.parse(value));
        } catch (ParseException e) {
            SimpleDateFormat sdf2 = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US);
            try {
                if (LOG.isWarnEnabled()) {
                    LOG.warn("Failed to parse date [" + value + "] using format [" + sdf.toString()
                            + "]. Trying again with format [" + sdf2.toString() + "]");
                }
                property.setValue(sdf2.parse(value));
            } catch (ParseException e2) {
                if (LOG.isWarnEnabled()) {
                    LOG.warn("Failed to parse date [" + value + "] using format [" + sdf2.toString()
                            + "]. Defaulting to the current date.");
                }
                property.setValue(new Date());
            }
        }
        return property;
    }

    @Override
    public void displayView(StringBuffer buffer, String name, String prefix, BaseCollection object,
            XWikiContext context) {
        BaseProperty prop = (BaseProperty) object.safeget(name);
        buffer.append(toFormString(prop));
    }

    @Override
    public void displayEdit(StringBuffer buffer, String name, String prefix, BaseCollection object,
            XWikiContext context) {
        input input = new input();

        BaseProperty prop = (BaseProperty) object.safeget(name);
        if (prop != null) {
            input.setValue(toFormString(prop));
        }

        input.setType("text");
        input.setName(prefix + name);
        input.setID(prefix + name);
        input.setSize(getSize());
        input.setDisabled(isDisabled());
        buffer.append(input.toString());
    }

    @Override
    public void displaySearch(StringBuffer buffer, String name, String prefix, XWikiCriteria criteria,
            XWikiContext context) {
        input input1 = new input();
        input1.setType("text");
        input1.setName(prefix + name + "_morethan");
        input1.setID(prefix + name);
        input1.setSize(getSize());
        String fieldFullName = getFieldFullName();

        Date value = (Date) criteria.getParameter(fieldFullName + "_morethan");
        if (value != null) {
            DateProperty dprop = new DateProperty();
            dprop.setValue(value);
            input1.setValue(toFormString(dprop));
        }

        input input2 = new input();

        input2.setType("text");
        input2.setName(prefix + name + "_lessthan");
        input2.setID(prefix + name);
        input2.setSize(getSize());
        value = (Date) criteria.getParameter(fieldFullName + "_lessthan");
        if (value != null) {
            DateProperty dprop = new DateProperty();
            dprop.setValue(value);
            input2.setValue(toFormString(dprop));
        }

        XWikiMessageTool msg = context.getMessageTool();
        buffer.append((msg == null) ? "from" : msg.get("from"));
        buffer.append(input1.toString());
        buffer.append((msg == null) ? "from" : msg.get("to"));
        buffer.append(input2.toString());
    }

    @Override
    public void fromSearchMap(XWikiQuery query, Map<String, String[]> map) {
        String[] data = map.get("");
        if ((data != null) && (data.length == 1)) {
            query.setParam(getObject().getName() + "_" + getName(), fromString(data[0]).getValue());
        } else {
            data = map.get("lessthan");
            if ((data != null) && (data.length == 1)) {
                query.setParam(getObject().getName() + "_" + getName() + "_lessthan",
                        fromString(data[0]).getValue());
            }
            data = map.get("morethan");
            if ((data != null) && (data.length == 1)) {
                query.setParam(getObject().getName() + "_" + getName() + "_morethan",
                        fromString(data[0]).getValue());
            }

        }
    }
}