--- branches/1.0-gt2-2.6/src/skrueger/AttributeMetadata.java 2009/11/13 18:16:38 518 +++ branches/2.0-RC2/src/skrueger/AttributeMetadata.java 2010/01/28 10:06:05 621 @@ -50,98 +50,67 @@ */ public class AttributeMetadata implements Copyable, Comparable { + static private final Logger LOGGER = Logger .getLogger(AttributeMetadata.class); - // public class WeightComparator implements Comparator - // { - // - // @Override - // public int compare(AttributeDescriptor o1, AttributeDescriptor o2) { - // // TODO Auto-generated method stub - // return 0; - // } - // - // }; - - /** Translation of the attribute's title **/ - protected Translation title = new Translation(); - /** Translation of the attribute's description **/ protected Translation desc = new Translation(); - /** Is the attribute visible to the user or ignored where possible **/ - protected boolean visible = true; + /** + * For numerical attributes the value can be transformed by VALUE*X+A when + * presented on screen. TODO not implemented yet + **/ + protected Double functionA = 0.; /** - * The unit append to all visualizations of values of this attribute (is not - * null) + * For numerical attributes the value can be transformed by VALUE*X+A when + * presented on screen. TODO not implemented yet **/ - protected String unit = ""; + protected Double functionX = 1.; /** The Name of the attribute **/ private Name name; - public int getWeight() { - return weight; - } - - public void setWeight(int weight) { - this.weight = weight; - } - - public List getNodataValues() { - return nodataValues; - } - - public void setNodataValues(List nodataValues) { - this.nodataValues = nodataValues; - } - - public Double getFunctionX() { - return functionX; - } - - public void setFunctionX(Double functionX) { - this.functionX = functionX; - } - - public Double getFunctionA() { - return functionA; - } - - public void setFunctionA(Double functionA) { - this.functionA = functionA; - } - - public void setVisible(boolean visible) { - this.visible = visible; - } - - /** - * When listed, the attributes are listed according to their weight (heavier - * => further down) - **/ - protected int weight = 0; - /** * Allows to define general NODATA values for an attribute. e.g. -9999 can * be set and will always be interpreted as NULL internally and will usually - * be ignored. + * be ignored. TODO not implemented yet **/ protected List nodataValues = new ArrayList(); + /** Translation of the attribute's title **/ + protected Translation title = new Translation(); + /** - * For numerical attributes the value can be transformed by VALUE*X+A when - * presented on screen + * The unit append to all visualizations of values of this attribute (is not + * null) **/ - protected Double functionX = 1.; + protected String unit = ""; + + /** Is the attribute visible to the user or ignored where possible **/ + protected boolean visible = true; /** - * For numerical attributes the value can be transformed by VALUE*X+A when - * presented on screen + * When listed, the attributes are listed according to their {@link #weight} (heavier + * => further down) + * @see #compareTo(AttributeMetadata) **/ - protected Double functionA = 0.; + protected int weight = 0; + + /** Only used for {@link Copyable#copy()} **/ + private AttributeMetadata() { + } + + public AttributeMetadata(final AttributeDescriptor attDesc, final int weight, + final List langs) { + this(attDesc.getName(), langs); + setWeight(weight); + } + + public AttributeMetadata(final AttributeDescriptor attDesc, final List langs) { + this(attDesc.getName(), langs); + } /** * Creates an {@link AttributeMetadata} object with the following @@ -165,14 +134,25 @@ this.setName(name); this.title = title; this.desc = desc; + this.visible = visible; + this.unit = unit; + } - // The THE_GEOM and shall never be visible! - if (name.getLocalPart().equalsIgnoreCase("the_geom")) - this.visible = false; - else - this.visible = visible; + /** + * Creates a new visible {@link AttributeMetadata} + */ + public AttributeMetadata(final Name name, final List langs) { + this(name, true, new Translation(langs, name.getLocalPart()), + new Translation(), ""); + } - this.unit = unit; + /** + * Creates a new visible {@link AttributeMetadata} + */ + public AttributeMetadata(final Name name, final String defaultTitle, + final List langs) { + this(name, true, new Translation(langs, defaultTitle), + new Translation(), ""); } /** @@ -196,82 +176,42 @@ /** * Creates a new visible {@link AttributeMetadata} with default (no) values. */ - public AttributeMetadata(final String localName, final String defaultTitle) { - this(localName, true, new Translation(defaultTitle), new Translation(), - ""); + public AttributeMetadata(final String localName, final List langs) { + this(localName, true, new Translation(langs, localName), + new Translation(), ""); } /** - * Creates a new visible {@link AttributeMetadata} with default (no) values. + * Creates a new visible {@link AttributeMetadata} */ - public AttributeMetadata(final Name name, final String defaultTitle) { - this(name, true, new Translation(defaultTitle), new Translation(), ""); + public AttributeMetadata(final String localName, final String defaultTitle, + final List langs) { + this(localName, true, new Translation(langs, defaultTitle), + new Translation(), ""); } /** - * Creates a new visible {@link AttributeMetadata} with default (no) values. + * Orders the attributes according to their {@link #weight}. Heavier => + * further down. */ - public AttributeMetadata(final Name name) { - this(name, true, new Translation(name.getLocalPart()), - new Translation(), ""); + @Override + public int compareTo(final AttributeMetadata atm2) { + return new Integer(weight).compareTo(atm2.getWeight()); } /** - * Creates a new visible {@link AttributeMetadata} with default (no) values. + * @see Copyable inferface */ - public AttributeMetadata(final String localName) { - this(localName, true, new Translation(localName), new Translation(), ""); - } - - /** Only used for {@link Copyable#copy()} **/ - private AttributeMetadata() { - } - - public AttributeMetadata(AttributeDescriptor attDesc) { - this(attDesc.getName()); - } - - public boolean isVisible() { - return visible; - } - - public void setVisible(final Boolean visible) { - - // The THE_GEOM and shall never be visible! // TODO MAKE BETTER - if (name.getLocalPart().equalsIgnoreCase("the_geom")) - this.visible = false; - else - this.visible = visible; - - this.visible = visible; - } - - public Translation getTitle() { - return title; - } - - public void setTitle(final Translation title) { - this.title = title; - } - - public Translation getDesc() { - return desc; - } - - public void setDesc(final Translation desc) { - this.desc = desc; - } - - public String getUnit() { - return unit; - } - - public void setUnit(final String unit) { - this.unit = unit; + @Override + public AttributeMetadata copy() { + return copyTo(new AttributeMetadata()); } + /** + * @see Copyable inferface + */ @Override - public AttributeMetadata copyTo(AttributeMetadata amd) { + public AttributeMetadata copyTo(final AttributeMetadata amd) { getTitle().copyTo(amd.getTitle()); getDesc().copyTo(amd.getDesc()); amd.setUnit(getUnit()); @@ -283,61 +223,145 @@ amd.setFunctionX(getFunctionX()); amd.setFunctionA(getFunctionA()); - for (Object nodataValue : getNodataValues()) { + for (final Object nodataValue : getNodataValues()) { amd.getNodataValues().add(nodataValue); } return amd; } - @Override - public AttributeMetadata copy() { - return copyTo(new AttributeMetadata()); + public Translation getDesc() { + return desc; + } + + public Double getFunctionA() { + return functionA; + } + + public Double getFunctionX() { + return functionX; } /** - * The local Name. E.g. the name of the DBF column as a String + * The local name. E.g. the name of the DBF column as a {@link String} */ public String getLocalName() { return getName().getLocalPart(); } /** - * The fully qualified Name of the attribute, e.g. org.bla.plo:blub + * The fully qualified {@link Name} of the attribute, e.g. org.bla.plo:blub */ public Name getName() { return name; } + public List getNodataValues() { + return nodataValues; + } + /** - * The fully qualified Name of the attribute, e.g. org.bla.plo:blub + * @return a number between 0 (bad) and 1 (good) that is calculated from the + * amount of translation available. If this attribute is not + * {@link #visible}, it will return 1. */ - public void setName(org.opengis.feature.type.Name name) { - this.name = name; + public double getQuality(final List languages) { + + if (!isVisible()) + return 1.; + + return (I8NUtil.qmTranslation(languages, getTitle()) * 2. + I8NUtil + .qmTranslation(languages, getDesc()) * 1.) / 3.; + } + + public Translation getTitle() { + return title; + } + + public String getUnit() { + return unit; + } + + public int getWeight() { + return weight; + } + + /** + * Will the end-user see this attribute? + */ + public boolean isVisible() { + return visible; + } + + public void setDesc(final Translation desc) { + this.desc = desc; + } + + public void setFunctionA(final Double functionA) { + this.functionA = functionA; + } + + public void setFunctionX(final Double functionX) { + this.functionX = functionX; } /** * The fully qualified Name of the attribute, e.g. org.bla.plo:blub */ - public void setLocalName(String localName) { + public void setLocalName(final String localName) { this.name = new NameImpl(localName); } /** - * Orders the Attributes according to their weight. Heavier => further down. + * The fully qualified {@link Name} of the attribute, e.g. org.bla.plo:blub */ - @Override - public int compareTo(AttributeMetadata atm2) { - // Double double1 = new Double(1./weight); - // double double2 = 1./atm2.getWeight(); - return new Integer(weight).compareTo(atm2.getWeight()); + public void setName(final Name name) { + this.name = name; + } + + public void setNodataValues(final List nodataValues) { + this.nodataValues = nodataValues; + } + + public void setTitle(final Translation title) { + this.title = title; + } + + public void setUnit(final String unit) { + this.unit = unit; + } + + public void setVisible(final boolean visible) { + this.visible = visible; } /** - * @return a number between 0 (bad) and 1 (good) that is calculated from the amount of translation available in the visible attributes + * Shall the end-user see this attribute? + * @param visible */ - public double getQuality(List languages) { - return (I8NUtil.qmTranslation(languages, getTitle()) * 2. + I8NUtil - .qmTranslation(languages, getDesc()) * 1.) / 3.; + public void setVisible(final Boolean visible) { +// // The THE_GEOM and shall never be visible! +// if (name.getLocalPart().equalsIgnoreCase("the_geom")) +// this.visible = false; +// else +// this.visible = visible; + + this.visible = visible; + } + + public void setWeight(final int weight) { + this.weight = weight; + } + + /** + * For nicer debugging + */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + if (name != null) sb.append(name.toString()+" "); + sb.append("weight="+weight+" "); + sb.append("title="+getTitle().toString()); + return sb.toString(); } }