/**
* Copyright 2010 Sven Diedrichsen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package de.jollyday;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import de.jollyday.util.ResourceUtil;
/**
* Bean class for describing the configuration hierarchy.
*
* @author Sven Diedrichsen
* @version $Id: $
*/
public class CalendarHierarchy {
private final String id;
private Map<String, CalendarHierarchy> children = new HashMap<>();
private final CalendarHierarchy parent;
private final ResourceUtil resourceUtil = new ResourceUtil();
private String fallbackDescription;
/**
* Constructor which takes a eventually existing parent hierarchy node and
* the ID of this hierarchy.
*
* @param parent
* a {@link de.jollyday.CalendarHierarchy} object.
* @param id
* a {@link java.lang.String} object.
*/
public CalendarHierarchy(CalendarHierarchy parent, String id) {
this.parent = parent;
this.id = id;
}
/**
* <p>
* Getter for the field <code>id</code>.
* </p>
*
* @return the id
*/
public String getId() {
return id;
}
/**
* Returns the country description for the default locale.
*
* @return the description
*/
public String getDescription() {
return getDescription(Locale.getDefault());
}
/**
* Returns the hierarchies description text from the resource bundle.
*
* @param l
* Locale to return the description text for.
* @return Description text
*/
public String getDescription(Locale l) {
String descr = resourceUtil.getCountryDescription(l, getPropertiesKey());
if (ResourceUtil.UNDEFINED.equals(descr) && fallbackDescription != null) {
descr = fallbackDescription;
}
return descr;
}
/**
* Recursively returns the properties key to retrieve the description from
* the localized resource bundle.
*
* @return
*/
private String getPropertiesKey() {
if (parent != null) {
return parent.getPropertiesKey() + "." + getId();
}
return getId();
}
/**
* {@inheritDoc}
*
* Compares Hierarchies by id.
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof CalendarHierarchy) {
return ((CalendarHierarchy) obj).getId().equals(this.getId());
}
return super.equals(obj);
}
@Override
public int hashCode() {
return getId().hashCode();
}
/**
* <p>
* Setter for the field <code>children</code>.
* </p>
*
* @param children
* the children to set
*/
public void setChildren(final Map<String, CalendarHierarchy> children) {
this.children = children;
}
/**
* <p>
* Getter for the field <code>children</code>.
* </p>
*
* @return the children
*/
public Map<String, CalendarHierarchy> getChildren() {
return children;
}
/**
* @param description the fallback description
*/
public void setFallbackDescription(String description) {
this.fallbackDescription = description;
}
}