+++ /dev/null
-package org.argeo.eclipse.ui.jcr.lists;
-
-import java.text.DateFormat;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
-
-import javax.jcr.Node;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import org.argeo.eclipse.ui.EclipseUiException;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-
-/** Base implementation of a label provider for controls that display JCR Nodes */
-public class SimpleJcrNodeLabelProvider extends ColumnLabelProvider {
- private static final long serialVersionUID = -5215787695436221993L;
-
- private final static String DEFAULT_DATE_FORMAT = "EEE, dd MMM yyyy";
- private final static String DEFAULT_NUMBER_FORMAT = "#,##0.0";
-
- private DateFormat dateFormat;
- private NumberFormat numberFormat;
-
- final private String propertyName;
-
- /**
- * Default Label provider for a given property of a node. Using default
- * pattern for date and number formating
- */
- public SimpleJcrNodeLabelProvider(String propertyName) {
- this.propertyName = propertyName;
- dateFormat = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
- numberFormat = DecimalFormat.getInstance();
- ((DecimalFormat) numberFormat).applyPattern(DEFAULT_NUMBER_FORMAT);
- }
-
- /**
- * Label provider for a given property of a node optionally precising date
- * and/or number format patterns
- */
- public SimpleJcrNodeLabelProvider(String propertyName,
- String dateFormatPattern, String numberFormatPattern) {
- this.propertyName = propertyName;
- dateFormat = new SimpleDateFormat(
- dateFormatPattern == null ? DEFAULT_DATE_FORMAT
- : dateFormatPattern);
- numberFormat = DecimalFormat.getInstance();
- ((DecimalFormat) numberFormat)
- .applyPattern(numberFormatPattern == null ? DEFAULT_NUMBER_FORMAT
- : numberFormatPattern);
- }
-
- @Override
- public String getText(Object element) {
- try {
- Node currNode = (Node) element;
-
- if (currNode.hasProperty(propertyName)) {
- if (currNode.getProperty(propertyName).isMultiple()) {
- StringBuilder builder = new StringBuilder();
- for (Value value : currNode.getProperty(propertyName)
- .getValues()) {
- String currStr = getSingleValueAsString(value);
- if (notEmptyString(currStr))
- builder.append(currStr).append("; ");
- }
- if (builder.length() > 0)
- builder.deleteCharAt(builder.length() - 2);
-
- return builder.toString();
- } else
- return getSingleValueAsString(currNode.getProperty(
- propertyName).getValue());
- } else
- return "";
- } catch (RepositoryException re) {
- throw new EclipseUiException("Unable to get text from row", re);
- }
- }
-
- private String getSingleValueAsString(Value value)
- throws RepositoryException {
- switch (value.getType()) {
- case PropertyType.STRING:
- return value.getString();
- case PropertyType.BOOLEAN:
- return "" + value.getBoolean();
- case PropertyType.DATE:
- return dateFormat.format(value.getDate().getTime());
- case PropertyType.LONG:
- return "" + value.getLong();
- case PropertyType.DECIMAL:
- return numberFormat.format(value.getDecimal());
- case PropertyType.DOUBLE:
- return numberFormat.format(value.getDouble());
- case PropertyType.NAME:
- return value.getString();
- default:
- throw new EclipseUiException("Unimplemented label provider "
- + "for property type " + value.getType()
- + " while getting property " + propertyName + " - value: "
- + value.getString());
-
- }
- }
-
- private boolean notEmptyString(String string) {
- return string != null && !"".equals(string.trim());
- }
-
- public void setDateFormat(String dateFormatPattern) {
- dateFormat = new SimpleDateFormat(dateFormatPattern);
- }
-
- public void setNumberFormat(String numberFormatPattern) {
- ((DecimalFormat) numberFormat).applyPattern(numberFormatPattern);
- }
-}