/*
 * XmlHelper.java
 *
 * Created on February 27, 2006, 12:49 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package usda.weru.wmrm;
import org.jdom2.*;
import java.awt.Color;
import java.util.*;
import com.klg.jclass.table.JCTableEnum;
/**
 *
 * @author joelevin
 */
public class XmlHelper {

	/**
	 *
	 * @param node
	 * @return
	 */
	public static Color parseColor(Element node){        
        try {                        
            return Color.decode(node.getTextTrim());
        }
        catch (NumberFormatException nfe){
            return Color.getColor(node.getTextTrim(), Color.WHITE);
        }        
    }

	/**
	 *
	 * @param list
	 * @return
	 */
	public static Color[] parseColorList(List<Element> list){
        Color[] colors = new Color[list.size()];        
        for (int i = 0; i < list.size(); i++){
            colors[i] = parseColor(list.get(i));
        }
        return colors;        
    }

	/**
	 *
	 * @param string
	 * @return
	 */
	public static String prepareStringForEnum(String string){        
        return string.toLowerCase().trim();
    }

	/**
	 *
	 * @param node
	 * @return
	 */
	public static boolean isValid(Object node){
        if (node == null) return false;        
        return true;
    }

	/**
	 *
	 * @param node
	 * @return
	 */
	public static boolean hasContent(Object node){
        if (!isValid(node)) return false;
        if (node instanceof Element){
            if (((Element)node).getText().length() == 0) return false;
        }
        if (node instanceof Attribute){
            if (((Attribute)node).getValue().length() == 0) return false;
        }
        return true;
    }

	/**
	 *
	 * @param node
	 * @param defaultText
	 * @return
	 */
	public static String getText(Element node, String defaultText){
        try{
            String text =  node.getText();
            if (text == null || text.length() == 0){
                return defaultText;                
            }
            else{
                return text;
            }            
        }
        catch (NullPointerException npe){
            return defaultText;
        }
    }

	/**
	 *
	 * @param root
	 * @param filters
	 * @return
	 */
	public static Vector <Element> getChildren(Element root, String... filters){
        Vector <Element> matchedChildren = new Vector <Element> ();
        List <Element> children = root.getChildren();
        
        for (Element element : children){
            for (String filter : filters){
                if (element.getName().equals(filter)){
                    matchedChildren.add(element);
                }
            }
        }
        
        return matchedChildren;
    }

	/**
	 *
	 * @param constant
	 * @return
	 */
	public static int getJCTableEnum(String constant){
        return getJCTableEnum(constant, 0);            
    }

	/**
	 *
	 * @param constant
	 * @param defaultValue
	 * @return
	 */
	public static int getJCTableEnum(String constant, int defaultValue){
        if (constant == null) return defaultValue;
        constant = constant.toLowerCase().trim();
        if (constant.equals("all")) return JCTableEnum.ALL;
        else if (constant.equals("allcells")) return JCTableEnum.ALLCELLS;
        
        else if (constant.equals("border_etched_in")) return JCTableEnum.BORDER_ETCHED_IN;
        else if (constant.equals("border_etched_out")) return JCTableEnum.BORDER_ETCHED_OUT;
        else if (constant.equals("border_frame_in")) return JCTableEnum.BORDER_FRAME_IN;
        else if (constant.equals("border_frame_out")) return JCTableEnum.BORDER_FRAME_OUT;
        else if (constant.equals("border_in")) return JCTableEnum.BORDER_IN;
        else if (constant.equals("border_none")) return JCTableEnum.BORDER_NONE;
        else if (constant.equals("border_out")) return JCTableEnum.BORDER_OUT;
        else if (constant.equals("border_plain")) return JCTableEnum.BORDER_PLAIN;
        else if (constant.equals("border_thin")) return JCTableEnum.BORDER_THIN;               
        else if (constant.equals("bottom")) return JCTableEnum.BOTTOM;
        
        else if (constant.equals("center")) return JCTableEnum.CENTER;
        
        else if (constant.equals("left")) return JCTableEnum.LEFT;
                                        
        else if (constant.equals("repeat_column")) return JCTableEnum.REPEAT_COLUMN;
        else if (constant.equals("repeat_none")) return JCTableEnum.REPEAT_NONE;
        else if (constant.equals("repeat_row")) return JCTableEnum.REPEAT_ROW;        
        else if (constant.equals("right")) return JCTableEnum.RIGHT;
        
        else if (constant.equals("top")) return JCTableEnum.TOP;
        
        else return 0;
    }
    
}
