/* WCMeaning.java - A part of word card corresponds to a Definition (meaning) part * of a page (entry) in Wiktionary. * * Copyright (c) 2009-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under EPL/LGPL/GPL/AL/BSD multi-license. */ package wiwordik.word_card; import wikokit.base.wikt.sql.TWikiText; import wikokit.base.wikt.sql.TMeaning; import wikokit.base.wikt.sql.TLang; import wikokit.base.wikt.sql.TTranslation; import wikokit.base.wikipedia.sql.Connect; import wikokit.base.wikt.constant.Relation; import wiwordik.WConstants; import javafx.scene.text.Text; import javafx.scene.text.Font; import javafx.scene.layout.VBox; import java.lang.*; import java.util.ArrayList; import java.util.List; import javafx.scene.text.FontWeight; /** Meaning consists of word's definitions, semantic relations and translations. * * @see wikt.api.WTMeaning and */ public class WCMeaning { String definition_value; Text text_definition; WCQuote[] quote; VBox quote_group = new VBox(); /** (2) Semantic relations: synonymy, antonymy, etc. * The map from semantic relation (e.g. synonymy) to array of WRelation * (one WRelation contains a list of synonyms for one meaning). */ WCRelation[] relation; //private Map<Relation, WRelation[]> relation; VBox relation_group = new VBox(); private final static WCRelation[] NULL_WCRELATION_ARRAY = new WCRelation[0]; // (3) Translation WCTranslation translation; VBox translation_group = new VBox(); /** Meanings, Relations, Translations group */ public VBox group_mrt = new VBox(); /* todo public var group_mrt: VBox = VBox { spacing: 8 content: [ Text { content: bind definition_value wrappingWidth: WConstants.wrapping_width - 35 //wrappingWidth: bind group_mrt.parent.boundsInLocal.width - 30 //wrappingWidth: bind group_mrt.parent.boundsInParent.width - 30 //wrappingWidth: 380` font: Font { size: 14 } //fill: Color.PLUM } quote_group, relation_group, translation_group] }; */ /** Creates text field with a definition, meaning, sense description. * * @param _max_meaning_number total number of different meanings for the current * POS-language sub-entry */ public void createDefinitionText(TMeaning _tmeaning, Integer _max_meaning_number) { String s_debug = ""; if(WConstants.DEBUGUI) s_debug = "; meaning.id={_tmeaning.getID()}; meaning _n/max={meaning_n+1}/{_max_meaning_number}"; // Meaning (sense) number. Integer meaning_n = _tmeaning.getMeaningNumber(); // 1.a Definition // numbering logic: if only one definition then without number 1. String s_number = ""; if(_max_meaning_number > 1) s_number = String.format("%d. ", meaning_n + 1); TWikiText twiki_text = _tmeaning.getWikiText(); if(null != twiki_text) definition_value = s_number + twiki_text.getText() + s_debug; text_definition = new Text(definition_value); text_definition.setFont(Font.font("Times New Roman", FontWeight.NORMAL, 14)); text_definition.setWrappingWidth(WConstants.wordcard_width - 35); } /** (1) Fills VBox relation_group and (2) gets array WCRelation[] relation. */ public WCRelation[] getRelationsfillsVBox ( Connect conn, TMeaning _tmeaning) { List<WCRelation> list_rel = new ArrayList(); Relation[] relation_types = Relation.getAllRelationsOrderedArray(); for(Relation r_type : relation_types) { WCRelation _relation = new WCRelation(); if(_relation.create(conn, r_type, _tmeaning)) { list_rel.add(_relation); // logic relation_group.getChildren().addAll(_relation.group); // visual } } return ((WCRelation[])list_rel.toArray(NULL_WCRELATION_ARRAY)); // logic } /** Creates a Meaning part of card (parts of wiki pages), * builds visual block with this language. * * @param _max_meaning_number total number of different meanings for the current * POS-language sub-entry **/ public void create( Connect conn, TMeaning _tmeaning, Integer _max_meaning_number, TLang _lang, TTranslation[] _ttranslations ) { createDefinitionText(_tmeaning, _max_meaning_number); // 1.b Quote WCQuote _quote = new WCQuote(); boolean bquote = _quote.create(conn, _tmeaning); if(bquote) { // logic: insert _quote into quote quote = new WCQuote[1]; quote [0] = _quote; // visual quote_group.getChildren().addAll(_quote.group); } // 2. Semantic relations. relation = getRelationsfillsVBox (conn, _tmeaning); // Meaning (sense) number. Integer meaning_n = _tmeaning.getMeaningNumber(); // 3. Translations. translation = null; if(_ttranslations.length > meaning_n) { TTranslation tt = _ttranslations[meaning_n];// only one translation block, for the current meaning WCTranslation _translation = new WCTranslation(); if(_translation.create(conn, tt, _lang)) { // if there are any translation entries in the block translation = _translation; // logic translation_group.getChildren().addAll(_translation.group); // visual } } // Visualize results quote_group.setSpacing(10); relation_group.setSpacing(2); translation_group.setSpacing(1); group_mrt.getChildren().addAll(text_definition); if(bquote) group_mrt.getChildren().addAll(quote_group); if(relation.length > 0) // if there are any synonyms, antonyms, etc. group_mrt.getChildren().addAll(relation_group); if(null != translation) group_mrt.getChildren().addAll(translation_group); group_mrt.setSpacing(8); } }