Author: nbelaevski
Date: 2008-08-10 09:01:09 -0400 (Sun, 10 Aug 2008)
New Revision: 10002
Added:
trunk/framework/api/src/main/java/org/richfaces/event/extdt/
trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java
trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java
trunk/framework/impl/src/main/resources/org/richfaces/component/
trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties
Log:
Extended data table moved to main build
Copied: trunk/framework/api/src/main/java/org/richfaces/event/extdt (from rev 10001,
trunk/sandbox/api/src/main/java/org/richfaces/event/extdt)
Copied: trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java (from rev
10001, trunk/sandbox/api/src/main/java/org/richfaces/model/DataProvider.java)
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java
(rev 0)
+++ trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,50 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * G3DataProvider is an interface that defines methods for manage loading
data.<br>
+ * Usage:
+ * <pre>
+ * G3DataProvider<SomeDataType> dataProvider = new
G3DataProvider<SomeDataType>();
+ * </pre>
+ * @author pawelgo
+ *
+ */
+public interface DataProvider<T> extends Serializable {
+
+ /**
+ * Get number of all rows.
+ * @return number of rows.
+ */
+ public int getRowCount();
+
+ /**
+ * Loads elements from given range.
+ * Starting from startRow, and up to but excluding endRow.
+ * @param firstRow first row to load
+ * @param endRow end row to load
+ * @return element list
+ */
+ public List<T> getItemsByRange(int firstRow, int endRow);
+
+ /**
+ * Load single element by given key.
+ * @param key element key to be loaded.
+ * @return element or null, if not found
+ */
+ public T getItemByKey(Object key);
+
+ /**
+ * Get element key.
+ * If key is not instance of Integer or
org.richfaces.model.ScrollableTableDataModel.SimpleRowKey,
+ * it is necessary to implement javax.faces.convert.Converter for key type.
+ * @param item element, which key to be get
+ * @return element key
+ */
+ public Object getKey(T item);
+}
Added:
trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,41 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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 library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.component.util;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author Nick Belaevski
+ * @since 3.2.2
+ */
+
+public class ComponentMessageUtil extends AbstractMessageUtil {
+
+ public static final String MESSAGE_BUNDLE_NAME =
"org.richfaces.component.messages";
+
+ public static final FacesMessage getMessage(FacesContext context, String messageId,
+ Object[] parameters) {
+
+ return AbstractMessageUtil.getMessage(context, messageId, parameters,
MESSAGE_BUNDLE_NAME);
+ }
+}
Added:
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,196 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.model.DataModelListener;
+
+import org.ajax4jsf.model.DataVisitor;
+import org.ajax4jsf.model.ExtendedDataModel;
+import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
+import org.ajax4jsf.model.SerializableDataModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.model.FilterField;
+import org.richfaces.model.SortField2;
+import org.richfaces.model.impl.expressive.JavaBeanWrapper;
+import org.richfaces.model.impl.expressive.ObjectWrapperFactory;
+import org.richfaces.model.impl.expressive.WrappedBeanComparator2;
+import org.richfaces.model.impl.expressive.WrappedBeanFilter;
+
+/**
+ * @author pawelgo
+ *
+ */
+public class ExtendedDataTableModifiableModel<T> extends ExtendedDataModel {
+
+ private static final Log log =
LogFactory.getLog(ExtendedDataTableModifiableModel.class);
+
+ private ExtendedDataModel delegate;
+
+ private ExtendedTableDataModel<T> originalModel;
+
+ private ExtendedDataModel modifiedModel;
+
+ private String var;
+
+ private List<FilterField> filterFields;
+ private List<SortField2> sortFields;
+
+ /**
+ * @param originalModel
+ * @param var
+ * @param filterFields
+ * @param sortFields
+ */
+ public ExtendedDataTableModifiableModel(ExtendedTableDataModel<T> originalModel,
+ String var, List<FilterField> filterFields,
+ List<SortField2> sortFields) {
+ this.originalModel = originalModel;
+ this.delegate = originalModel;
+ this.var = var;
+ this.filterFields = filterFields;
+ this.sortFields = sortFields;
+ }
+
+ public void addDataModelListener(DataModelListener listener) {
+ originalModel.addDataModelListener(listener);
+ }
+
+ public DataModelListener[] getDataModelListeners() {
+ return originalModel.getDataModelListeners();
+ }
+
+ public int getRowCount() {
+ return delegate.getRowCount();
+ }
+
+ public Object getRowData() {
+ return delegate.getRowData();
+ }
+
+ public int getRowIndex() {
+ return delegate.getRowIndex();
+ }
+
+ public Object getRowKey() {
+ return delegate.getRowKey();
+ }
+
+ public SerializableDataModel getSerializableModel(Range range) {
+ return delegate.getSerializableModel(range);
+ }
+
+ public Object getWrappedData() {
+ return delegate.getWrappedData();
+ }
+
+ public boolean isRowAvailable() {
+ return delegate.isRowAvailable();
+ }
+
+ public void removeDataModelListener(DataModelListener listener) {
+ delegate.removeDataModelListener(listener);
+ }
+
+ public void setRowIndex(int rowIndex) {
+ delegate.setRowIndex(rowIndex);
+ }
+
+ public void setRowKey(Object key) {
+ delegate.setRowKey(key);
+ }
+
+ public void setWrappedData(Object data) {
+ delegate.setWrappedData(data);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void walk(FacesContext context, DataVisitor visitor, Range range,
+ Object argument) throws IOException {
+
+ if (shouldSort() || shouldFilter()) {
+ if (modifiedModel == null) {
+ modifiedModel = new
ExtendedTableDataModelWrapper<T>(originalModel.getDataProvider(), (List<T>)
prepareCollection());
+ }
+ delegate = modifiedModel;
+ } else {
+ delegate = originalModel;
+ }
+
+ delegate.walk(context, visitor, range, argument);
+ }
+
+ private boolean shouldSort() {
+ return sortFields != null && !sortFields.isEmpty();
+ }
+
+ private boolean shouldFilter() {
+ return filterFields != null && !filterFields.isEmpty();
+ }
+
+ private List<?> prepareCollection() {
+ int rowCount = originalModel.getRowCount();
+ final List<Object> collection;
+
+ if (rowCount > 0) {
+ collection = new ArrayList<Object>(rowCount);
+ } else {
+ collection = new ArrayList<Object>();
+ }
+
+ FacesContext context = FacesContext.getCurrentInstance();
+ try {
+
+ originalModel.walk(context, new DataVisitor() {
+ public void process(FacesContext context, Object rowKey,
+ Object argument) throws IOException {
+ originalModel.setRowKey(rowKey);
+ if (originalModel.isRowAvailable()) {
+ collection.add(originalModel.getRowData());
+ }
+ }
+ }, new SequenceRange(0, -1),
+ null);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+
+ List<Object> modifedcollection = collection;
+
+ if (shouldFilter()) {
+ List <Object> filteredCollection = new ArrayList<Object>();
+ ObjectWrapperFactory wrapperFactory = new ObjectWrapperFactory(
+ context, var, filterFields);
+ WrappedBeanFilter wrappedBeanFilter = new WrappedBeanFilter(filterFields);
+ wrapperFactory.wrapList(modifedcollection);
+ for (Object object : modifedcollection) {
+ if(wrappedBeanFilter.accept((JavaBeanWrapper)object)) {
+ filteredCollection.add(object);
+ }
+ }
+ modifedcollection = filteredCollection;
+ wrapperFactory.unwrapList(modifedcollection);
+ }
+
+ if (shouldSort()) {
+ ObjectWrapperFactory wrapperFactory = new ObjectWrapperFactory(
+ context, var, sortFields);
+ WrappedBeanComparator2 wrappedBeanComparator = new WrappedBeanComparator2(
+ sortFields);
+ wrapperFactory.wrapList(modifedcollection);
+ Collections.sort(modifedcollection, wrappedBeanComparator);
+ wrapperFactory.unwrapList(modifedcollection);
+ }
+ return modifedcollection;
+
+ }
+
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,353 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.model.DataVisitor;
+import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
+import org.ajax4jsf.model.SerializableDataModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Data model class for table components.<br>
+ * Usage:
+ * <pre>
+ * G3TableDataModel<SomeDataType> dataModel = new
G3TableDataModel<SomeDataType>(new G3DataProvider
<SomeDataType>());
+ * </pre>
+ * @author pawelgo
+ *
+ */
+public class ExtendedTableDataModel<T> extends SerializableDataModel {
+
+// /**
+// * Cache container for data presented in data model.
+// * It prevents load the same data many times.
+// * @author pawelgo
+// *
+// * @param <T> data type
+// */
+// private static class DataCache<T> implements Serializable {
+// private static final long serialVersionUID = 8409239905346930920L;
+// private int startRow;
+// private int endRow;
+// //private SortOrder sortOrder;
+// private List<T> loadedData;
+//
+// public DataCache(int startRow, int endRow,
+// List<T> loadedData) {
+// super();
+// this.startRow = startRow;
+// this.endRow = endRow;
+// //this.sortOrder = deepCopy(sortOrder);
+// this.loadedData = loadedData;
+// }
+//
+// /**
+// * Returns a deep copy of an object
+// */
+// @SuppressWarnings("unused")
+// private SortOrder deepCopy(SortOrder sortOrder) {
+// if (sortOrder == null)
+// return null;
+// SortOrder order = new SortOrder();
+// if (sortOrder.getFields() != null) {
+// SortField[] fields = new SortField[sortOrder.getFields().length];
+// for (int i = 0; i < sortOrder.getFields().length; i++) {
+// SortField f = sortOrder.getFields()[i];
+// fields[i] = new SortField(f.getName(), f.getIndex(), f
+// .getAscending());
+// }//for
+// order.setFields(fields);
+// }//if
+// return order;
+// }//deepCopy
+//
+// /**
+// * Returns a deep copy of an object using serialization.
+// */
+// static public Object deepCopy(Object oldObj) throws Exception {
+// ObjectOutputStream oos = null;
+// ObjectInputStream ois = null;
+// try {
+// ByteArrayOutputStream bos = new ByteArrayOutputStream();
+// oos = new ObjectOutputStream(bos);
+// // serialize and pass the object
+// oos.writeObject(oldObj);
+// oos.flush();
+// ByteArrayInputStream bin = new ByteArrayInputStream(bos
+// .toByteArray());
+// ois = new ObjectInputStream(bin);
+// // return the new object
+// return ois.readObject();
+// } catch (Exception e) {
+// if (log.isErrorEnabled())
+// log.error("Exception in ObjectCloner = " + e);
+// throw (e);
+// } finally {
+// oos.close();
+// ois.close();
+// }
+// }//deepCopy
+//
+// public boolean match(int s, int e) {
+// return s == startRow && e == endRow;
+// //&& sortOrdersMatch(sortOrder, this.sortOrder);
+// }//match
+//
+// @SuppressWarnings("unused")
+// private boolean sortOrdersMatch(SortOrder sortOrder1,
+// SortOrder sortOrder2) {
+// boolean result = sortOrder1 == sortOrder2;
+//
+// if (sortOrder1 != null && sortOrder2 != null) {
+// result = sortOrder1.equals(sortOrder2);
+// }
+//
+// return result;
+// }//sortOrdersMatch
+//
+// }//DataCache
+
+ private static final long serialVersionUID = 7374505108088114161L;
+
+ private static final Log log = LogFactory.getLog(ExtendedTableDataModel.class);
+
+ private DataProvider<T> dataProvider;
+ private Object rowKey;
+ //private Map<Object,T> wrappedData = new HashMap<Object,T>();
+ private List<Object> wrappedKeys = null;
+ private boolean detached = false;
+ private Map<Object, T> wrappedData = new HashMap<Object, T>();
+
+ //private DataCache<T> dataCache;
+
+ public ExtendedTableDataModel(DataProvider<T> dataProvider) {
+ this.dataProvider = dataProvider;
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.model.SerializableDataModel#update()
+ */
+ public void update() {
+ ;
+ }
+
+ /**
+ * This method never called from framework.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#getRowKey()
+ */
+ public Object getRowKey() {
+ return rowKey;
+ }
+
+ /**
+ * This method normally called by Visitor before request Data Row.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#setRowKey(java.lang.Object)
+ */
+ public void setRowKey(Object key) {
+ rowKey = key;
+ }
+
+ /**
+ * This is main part of Visitor pattern. Method called by framework many times during
request processing.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#walk(javax.faces.context.FacesContext,
org.ajax4jsf.model.DataVisitor, org.ajax4jsf.model.Range, java.lang.Object)
+ */
+ public void walk(FacesContext context, DataVisitor visitor, Range range,
+ Object argument) throws IOException {
+ int rowC = getRowCount();
+ int firstRow = ((SequenceRange) range).getFirstRow();
+ int numberOfRows = ((SequenceRange) range).getRows();
+ if (numberOfRows <= 0) {
+ numberOfRows = rowC;
+ }
+ if (detached) { // Is this serialized model
+ // Here we just ignore current Rage and use whatever data was saved in serialized
model.
+ // Such approach uses much more getByPk() operations, instead of just one request by
range.
+ // Concrete case may be different from that, so you can just load data from data
provider by range.
+ // We are using wrappedKeys list only to preserve actual order of items.
+ for (Object key : wrappedKeys) {
+ setRowKey(key);
+ visitor.process(context, key, argument);
+ }
+ } else { // if not serialized, than we request data from data provider
+ wrappedKeys = new ArrayList<Object>();
+ int endRow = firstRow + numberOfRows;
+ if (endRow > rowC){
+ endRow = rowC;
+ }
+ for (T item : loadData(firstRow, endRow)) {
+ Object key = getKey(item);
+ wrappedKeys.add(key);
+ wrappedData.put(key, item);
+ visitor.process(context, key, argument);
+ }
+ }
+ }//walk
+
+ /**
+ * Load range of data items from the source.
+ * Starting from startRow, and up to but excluding endRow
+ * @param startRow
+ * @param endRow
+ * @return list of ordered data
+ */
+ protected List<T> loadData(int startRow, int endRow) {
+ if (log.isDebugEnabled())
+ log.debug("load data from range: " + startRow + " - " + endRow);
+ if (startRow < 0){
+ startRow = 0;
+ throw new IllegalArgumentException("Illegal start index value: " +
startRow);
+ }
+ int rowCount = getRowCount();
+ if (endRow > rowCount){
+ endRow = rowCount;
+ throw new IllegalArgumentException("Illegal end index value: " + endRow);
+ }
+ /*
+ if (dataCache == null || !dataCache.match(startRow, endRow)) {
+ if (log.isDebugEnabled())
+ log.debug("load and store in cache");
+ List<T> data = dataProvider.getItemsByRange(startRow, endRow);
+ dataCache = new DataCache<T>(startRow, endRow, data);
+ }
+ return dataCache.loadedData;
+ */
+ //load all from provider and get sublist
+ return dataProvider.getItemsByRange(0, rowCount).subList(startRow, endRow);
+ }//loadData
+
+ /**
+ * This method must return actual data rows count from the Data Provider. It is used by
pagination control
+ * to determine total number of data items.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getRowCount()
+ */
+ private Integer rowCount; // better to buffer row count locally
+
+ public int getRowCount() {
+ if (rowCount == null) {
+ rowCount = new Integer(dataProvider.getRowCount());
+ } else {
+ return rowCount.intValue();
+ }
+ return rowCount.intValue();
+ //return dataProvider.getRowCount();
+ }
+
+ /**
+ * This is main way to obtain data row. It is intensively used by framework.
+ * We strongly recommend use of local cache in that method.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getRowData()
+ */
+ public T getRowData() {
+ if (rowKey == null) {
+ return null;
+ } else {
+ return getObjectByKey(rowKey);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object getKey(T o) {
+ return dataProvider.getKey(o);
+ }
+
+ public T getObjectByKey(Object key) {
+ T t = wrappedData.get(key);
+ if (t == null){
+ t = dataProvider.getItemByKey(key);
+ wrappedData.put(key, t);
+ }
+ return t;
+ }
+
+ private Integer rowIndex;
+
+ /**
+ * Unused rudiment from old JSF staff. (non-Javadoc)
+ *
+ * @see javax.faces.model.DataModel#getRowIndex()
+ */
+ public int getRowIndex() {
+ //throw new UnsupportedOperationException();
+ return rowIndex.intValue();
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#setRowIndex(int)
+ */
+ public void setRowIndex(int rowIndex) {
+ //throw new UnsupportedOperationException();
+ this.rowIndex = rowIndex;
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getWrappedData()
+ */
+ public Object getWrappedData() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#setWrappedData(java.lang.Object)
+ */
+ public void setWrappedData(Object data) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Never called by framework.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#isRowAvailable()
+ */
+ public boolean isRowAvailable() {
+ return getRowData() != null;
+ }
+
+ /**
+ * This method suppose to produce SerializableDataModel that will be
+ * serialized into View State and used on a post-back. In current
+ * implementation we just mark current model as serialized. In more
+ * complicated cases we may need to transform data to actually serialized
+ * form.
+ */
+ public SerializableDataModel getSerializableModel(Range range) {
+ if (wrappedKeys != null) {
+ detached = true;
+ // Some activity to detach persistent data from wrappedData map may be taken here.
+ // In that specific case we are doing nothing.
+ return this;
+ } else {
+ return null;
+ }
+ }
+
+ public DataProvider<T> getDataProvider() {
+ return dataProvider;
+ }
+
+ public void setDataProvider(DataProvider<T> dataProvider) {
+ this.dataProvider = dataProvider;
+ }
+
+}
Added:
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,40 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.util.List;
+
+/**
+ * @author pawelgo
+ *
+ */
+public class ExtendedTableDataModelWrapper<T> extends
ExtendedTableDataModel<T> {
+
+ private static final long serialVersionUID = 6932958007982793632L;
+
+ protected List<T> wrappedList;
+
+ /**
+ *
+ * @param dataProvider
+ * @param wrappedList
+ */
+ public ExtendedTableDataModelWrapper(DataProvider<T> dataProvider, List<T>
wrappedList) {
+ super(dataProvider);
+ this.wrappedList = wrappedList;
+ }
+
+ protected List<T> loadData(int startRow, int endRow) {
+ //return super.loadData(startRow, endRow);
+ return wrappedList.subList(startRow, endRow);
+ }
+
+ public int getRowCount() {
+ return wrappedList.size();
+ }
+
+
+
+
+}
Added:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
(rev 0)
+++
trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+
+# converters
+
+# validators
Added:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
===================================================================
---
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
(rev 0)
+++
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+
+# converters
+
+# validators
Added:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties
===================================================================
---
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties
(rev 0)
+++
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping
+
+# converters
+
+# validators
Added:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties
===================================================================
---
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties
(rev 0)
+++
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties 2008-08-10
13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Kolumny
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sortuj Rosn\u0105co
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sortuj malej\u0105co
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Grupuj po kolumnie
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Wy\u0142\u0105cz
grupowanie
+
+# converters
+
+# validators