001 /*
002 // $Id: //open/mondrian-release/3.0/src/main/mondrian/rolap/RolapProperty.java#2 $
003 // This software is subject to the terms of the Common Public License
004 // Agreement, available at the following URL:
005 // http://www.opensource.org/licenses/cpl.html.
006 // Copyright (C) 2001-2002 Kana Software, Inc.
007 // Copyright (C) 2001-2007 Julian Hyde and others
008 // All Rights Reserved.
009 // You must accept the terms of that agreement to use this software.
010 */
011 package mondrian.rolap;
012
013 import java.lang.reflect.Constructor;
014
015 import mondrian.olap.MondrianDef;
016 import mondrian.olap.Property;
017 import mondrian.olap.PropertyFormatter;
018 import mondrian.olap.Util;
019
020 import org.apache.log4j.Logger;
021
022 /**
023 * <code>RolapProperty</code> is the definition of a member property.
024 *
025 * @version $Id: //open/mondrian-release/3.0/src/main/mondrian/rolap/RolapProperty.java#2 $
026 * @author jhyde
027 */
028 class RolapProperty extends Property {
029
030 private static final Logger LOGGER = Logger.getLogger(RolapProperty.class);
031
032 /** Array of RolapProperty of length 0. */
033 static final RolapProperty[] emptyArray = new RolapProperty[0];
034
035 private final PropertyFormatter formatter;
036 private final String caption;
037
038 /** The column or expression which yields the property's value. */
039 private final MondrianDef.Expression exp;
040
041
042 /**
043 * Creates a RolapProperty.
044 *
045 * @param name Name of property
046 * @param type Datatype
047 * @param exp Expression for property's value; often a literal
048 * @param formatterDef Name of formatter class (must implement
049 * {@link PropertyFormatter}), or null
050 * @param caption Caption
051 * @param internal Whether property is internal
052 */
053 RolapProperty(
054 String name,
055 Datatype type,
056 MondrianDef.Expression exp,
057 String formatterDef,
058 String caption,
059 boolean internal)
060 {
061 super(name, type, -1, internal, false, false, null);
062 this.exp = exp;
063 this.caption = caption;
064 this.formatter = makePropertyFormatter(formatterDef);
065 }
066
067 private PropertyFormatter makePropertyFormatter(String formatterDef) {
068 if (!Util.isEmpty(formatterDef)) {
069 // there is a special property formatter class
070 try {
071 Class<PropertyFormatter> clazz =
072 (Class<PropertyFormatter>) Class.forName(formatterDef);
073 Constructor<PropertyFormatter> ctor = clazz.getConstructor();
074 return ctor.newInstance();
075 } catch (Exception e) {
076 StringBuilder buf = new StringBuilder(64);
077 buf.append("RolapProperty.makePropertyFormatter: ");
078 buf.append("Could not create PropertyFormatter from");
079 buf.append("formatterDef \"");
080 buf.append(formatterDef);
081 buf.append("\"");
082 LOGGER.error(buf.toString(), e);
083 }
084 }
085 return null;
086 }
087
088 MondrianDef.Expression getExp() {
089 return exp;
090 }
091
092 public PropertyFormatter getFormatter() {
093 return formatter;
094 }
095
096 /**
097 * @return Returns the caption.
098 */
099 public String getCaption() {
100 if (caption == null) {
101 return getName();
102 }
103 return caption;
104 }
105 }
106
107 // End RolapProperty.java