/* LabelText.java - data structure consists of context labels and text (with these labels).
 * 
 * Copyright (c) 2013 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
 * Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
 */
package wikokit.base.wikt.util;

import java.util.List;
import wikokit.base.wikt.constant.Label;

/** Data structure consists of an array of context labels 
 * and the corresponding text (e.g. a definition).
 */
public class LabelsText {
    
    /** Array of context labels. */
    private Label[]  labels;
    
    /** to delete: New context labels from the template {{context|new label}} which are not listed in the LabelEn. */
    // private String[] new_labels; 
    
    /** Text */
    private String text;
    
    // public LabelText() {}
    
    public LabelsText(Label[] _labels, String _text) {
        labels = _labels;
        text = _text;       //text = new StringBuffer();
    }
    
    private final static Label[] NULL_LABEL_ARRAY = new Label[0];
    
    public LabelsText(List<Label> _labels, String _text) {
        labels = (Label[])_labels.toArray(NULL_LABEL_ARRAY);
        text = _text;
    }
    
    /** Gets context labels array. */
    public Label[] getLabels() {
        return labels;
    }
    
    /** to delete Gets array of new context labels which are not listed in the LabelEn. */
    /*public String[] getNewLabels() {
        return new_labels;
    }*/
    
    /** Gets text. */
    public String getText() {
        return text;
    }
    
    /** @return true if object are equals (the same labels and the same text). */
    static public boolean equals (LabelsText one, LabelsText two) {
    
        if (null == one && null == two)
            return true;
        if (null == one || null == two)
            return false;
        
        if(!one.text.equals(two.text))
            return false;
        
        // compare two arrays of labels
        if(one.labels.length != two.labels.length)
            return false;
        for(int i=0; i<one.labels.length; i++) {
            boolean b_identical = false;
            
            for(int j=0; j<two.labels.length; j++) {
                if(Label.equals( one.labels[i], two.labels[j] )) {
                    b_identical = true;
                    break;
                }
            }
            if(!b_identical)
                return false;
        }
        return true;
    }
}
