/**
* $Id: ContentCategory.java,v 1.9 2008/04/24 21:41:50 laddi Exp $
* Created in 2007 by gediminas
*
* Copyright (C) 2000-2007 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.content.data;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.jdom.Attribute;
import org.jdom.Element;
import org.jdom.Namespace;
/**
* Describes a category
*
* @author <a href="mailto:gediminas@idega.com">Gediminas Paulauskas</a>
*/
public class ContentCategory {
private String id;
private boolean disabled = false;
private Map<String, String> names;
private ContentCategory() {
}
public ContentCategory(String id) {
this();
this.id = id;
this.names = new HashMap<String, String>();
}
/**
* @param cat
*/
public ContentCategory(Element cat) {
setFromXML(cat);
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public boolean isDisabled() {
return this.disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public Map<String, String> getNames() {
return this.names;
}
public void setNames(Map<String, String> names) {
this.names = names;
}
public String getName(String lang) {
String name = getNames().get(lang);
if (name == null) {
// try without locale variant is@Reykjavik => is
int i = lang.lastIndexOf("@");
if (i < 0) {
// try without country, e.g. is_IS => is
i = lang.lastIndexOf("_");
}
if (i > 1) {
name = getName(lang.substring(0, i - 1));
}
}
if (name == null) {
String key = null;
for (Iterator<String> it = getNames().keySet().iterator(); (name == null && it.hasNext());) {
key = it.next();
if (key.startsWith(lang)) {
name = getName(key);
}
}
}
if (name == null) {
// Didn't find name by locale, will try to get any localized name
Map<String, String> allNames = getNames();
if (allNames != null) {
Object[] namesKeys = allNames.keySet().toArray();
for (int i = 0; (i < namesKeys.length && name == null); i++) {
name = allNames.get(namesKeys[i]);
}
}
}
return name;
}
public void addName(String lang, String name) {
getNames().put(lang, name);
}
public void setFromXML(Element cat) {
this.id = cat.getAttributeValue("id");
Attribute disabledAttr = cat.getAttribute("disabled");
if (disabledAttr != null) {
this.disabled = Boolean.valueOf(disabledAttr.getValue());
}
else {
this.disabled = false;
}
this.names = new HashMap<String, String>();
@SuppressWarnings("unchecked")
List<Element> namesEl = cat.getChildren("name");
for (Iterator<Element> iter = namesEl.iterator(); iter.hasNext(); ) {
Element name = iter.next();
String lang = name.getAttributeValue("lang", Namespace.XML_NAMESPACE);
String localizedName = name.getText();
names.put(lang, localizedName);
}
}
public Element getAsXML() {
Element cat = new Element("category");
cat.setAttribute("id", getId());
if (isDisabled()) {
cat.setAttribute("disabled", String.valueOf(isDisabled()));
}
for (Iterator<String> iter = getNames().keySet().iterator(); iter.hasNext(); ) {
String lang = iter.next();
String name = getNames().get(lang);
Element locName = new Element("name");
locName.setAttribute("lang", lang, Namespace.XML_NAMESPACE);
locName.setText(name);
cat.addContent(locName);
}
return cat;
}
@Override
public String toString() {
return "Category with ID " + getId() + ", names: " + getNames() + ", disabled: " + isDisabled();
}
}