/* LabelsWikiText - data structure consists of context labels and wikified 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 synonym, i.e. semantic relation). */ public class LabelsWikiText { /** Array of context labels. */ private Label[] labels; /** WikiText */ private WikiText text; public LabelsWikiText(Label[] _labels, WikiText _text) { labels = _labels; text = _text; } private final static Label[] NULL_LABEL_ARRAY = new Label[0]; public LabelsWikiText(List<Label> _labels, WikiText _text) { if(null == _labels) { labels = null; } else { labels = (Label[])_labels.toArray(NULL_LABEL_ARRAY); } text = _text; } /** Gets context labels array. */ public Label[] getLabels() { return labels; } /** Gets WikiText. */ public WikiText getWikiText() { return text; } /** Frees memory recursively. */ public void free () { text.free(); } /** @return true if object are equals (the same labels and the WikiText). */ static public boolean equals (LabelsWikiText one, LabelsWikiText two) { if (null == one && null == two) return true; if (null == one || null == two) return false; if(!WikiText.equals(one.text, 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; }; }