@ -2,87 +2,156 @@ package eu.eudat.models.data.components.commons.datafield;
import org.w3c.dom.Document ;
import org.w3c.dom.Element ;
import org.w3c.dom.NodeList ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
public class AutoCompleteData extends ComboBoxData < AutoCompleteData > {
private String url ;
private Option autoCompleteOptions ;
private String optionsRoot ;
private Boolean multiAutoComplete ;
public class AutoCompleteSingleData {
private int autocompleteType ;
private String url ;
private Option autoCompleteOptions ;
private String optionsRoot ;
public String getOptionsRoot ( ) {
return optionsRoot ;
}
public void setOptionsRoot ( String optionsRoot ) {
this . optionsRoot = optionsRoot ;
}
public int getAutocompleteType ( ) {
return autocompleteType ;
}
public String getUrl ( ) {
return url ;
}
public void setUrl ( String url ) {
this . url = url ;
}
public void setAutocompleteType ( int autocompleteType ) {
this . autocompleteType = autocompleteType ;
}
public Option getAutoCompleteOptions ( ) {
return autoCompleteOptions ;
}
public void setAutoCompleteOptions ( Option autoCompleteOptions ) {
this . autoCompleteOptions = autoCompleteOptions ;
public String getOptionsRoot ( ) {
return optionsRoot ;
}
public void setOptionsRoot ( String optionsRoot ) {
this . optionsRoot = optionsRoot ;
}
public String getUrl ( ) {
return url ;
}
public void setUrl ( String url ) {
this . url = url ;
}
public Option getAutoCompleteOptions ( ) {
return autoCompleteOptions ;
}
public void setAutoCompleteOptions ( Option autoCompleteOptions ) {
this . autoCompleteOptions = autoCompleteOptions ;
}
}
private Boolean multiAutoComplete ;
private List < AutoCompleteSingleData > autoCompleteSingleDataList ;
public Boolean getMultiAutoComplete ( ) { return multiAutoComplete ; }
public void setMultiAutoComplete ( Boolean multiAutoComplete ) { this . multiAutoComplete = multiAutoComplete ; }
public List < AutoCompleteSingleData > getAutoCompleteSingleDataList ( ) {
return autoCompleteSingleDataList ;
}
public void setAutoCompleteSingleDataList ( List < AutoCompleteSingleData > autoCompleteSingleDataList ) {
this . autoCompleteSingleDataList = autoCompleteSingleDataList ;
}
@Override
public Element toXml ( Document doc ) {
Element root = super . toXml ( doc ) ;
root . setAttribute ( "url" , this . url ) ;
root . setAttribute ( "optionsRoot" , this . optionsRoot ) ;
if ( this . multiAutoComplete ! = null )
root . setAttribute ( "multiAutoComplete" , this . multiAutoComplete . toString ( ) ) ;
Element element = doc . createElement ( "option" ) ;
element . setAttribute ( "label" , this . autoCompleteOptions . getLabel ( ) ) ;
element . setAttribute ( "value" , autoCompleteOptions . getValue ( ) ) ;
element . setAttribute ( "source" , autoCompleteOptions . getSource ( ) ) ;
root . appendChild ( element ) ;
for ( AutoCompleteSingleData singleData : this . autoCompleteSingleDataList ) {
Element parent = doc . createElement ( "autocompleteSingle" ) ;
parent . setAttribute ( "url" , singleData . url ) ;
parent . setAttribute ( "optionsRoot" , singleData . optionsRoot ) ;
parent . setAttribute ( "autoCompleteType" , Integer . toString ( singleData . autocompleteType ) ) ;
Element element = doc . createElement ( "option" ) ;
element . setAttribute ( "label" , singleData . autoCompleteOptions . getLabel ( ) ) ;
element . setAttribute ( "value" , singleData . autoCompleteOptions . getValue ( ) ) ;
element . setAttribute ( "source" , singleData . autoCompleteOptions . getSource ( ) ) ;
parent . appendChild ( element ) ;
root . appendChild ( parent ) ;
}
return root ;
}
@Override
public AutoCompleteData fromXml ( Element item ) {
super . fromXml ( item ) ;
this . url = item . getAttribute ( "url" ) ;
this . optionsRoot = item . getAttribute ( "optionsRoot" ) ;
this . autoCompleteSingleDataList = new ArrayList < > ( ) ;
NodeList items = item . getElementsByTagName ( "autocompleteSingle" ) ;
if ( items ! = null & & items . getLength ( ) > 0 ) {
for ( int i = 0 ; i < items . getLength ( ) ; i + + ) {
this . autoCompleteSingleDataList . add ( new AutoCompleteSingleData ( ) ) ;
Element single = ( Element ) items . item ( i ) ;
this . mapFromXml ( single , this . autoCompleteSingleDataList . get ( i ) ) ;
}
} else {
this . autoCompleteSingleDataList . add ( new AutoCompleteSingleData ( ) ) ;
this . mapFromXml ( item , this . autoCompleteSingleDataList . get ( 0 ) ) ;
}
this . multiAutoComplete = Boolean . parseBoolean ( item . getAttribute ( "multiAutoComplete" ) ) ;
return this ;
}
private void mapFromXml ( Element item , AutoCompleteSingleData singleData ) {
singleData . url = item . getAttribute ( "url" ) ;
singleData . optionsRoot = item . getAttribute ( "optionsRoot" ) ;
this . multiAutoComplete = Boolean . parseBoolean ( item . getAttribute ( "multiAutoComplete" ) ) ;
if ( item . getAttribute ( "autoCompleteType" ) = = null | | item . getAttribute ( "autoCompleteType" ) . equals ( "" ) ) {
singleData . autocompleteType = AutocompleteType . UNCACHED . getValue ( ) ;
} else {
singleData . autocompleteType = AutocompleteType . fromValue ( Integer . parseInt ( item . getAttribute ( "autoCompleteType" ) ) ) . getValue ( ) ;
}
Element optionElement = ( Element ) item . getElementsByTagName ( "option" ) . item ( 0 ) ;
if ( optionElement ! = null ) {
this . autoCompleteOptions = new Option ( ) ;
this . autoCompleteOptions . setLabel ( optionElement . getAttribute ( "label" ) ) ;
this . autoCompleteOptions . setValue ( optionElement . getAttribute ( "value" ) ) ;
this . autoCompleteOptions . setSource ( optionElement . getAttribute ( "source" ) ) ;
this . autoCompleteOptions . setUri ( optionElement . getAttribute ( "uri" ) ) ;
singleData . autoCompleteOptions = new Option ( ) ;
singleData . autoCompleteOptions . setLabel ( optionElement . getAttribute ( "label" ) ) ;
singleData . autoCompleteOptions . setValue ( optionElement . getAttribute ( "value" ) ) ;
singleData . autoCompleteOptions . setSource ( optionElement . getAttribute ( "source" ) ) ;
singleData . autoCompleteOptions . setUri ( optionElement . getAttribute ( "uri" ) ) ;
}
return this ;
}
@Override
public AutoCompleteData fromData ( Object data ) {
super . fromData ( data ) ;
this . autoCompleteOptions = new Option ( ) ;
this . autoCompleteSingleDataList = new ArrayList < > ( ) ;
if ( data ! = null ) {
this . url = ( String ) ( ( Map < String , Object > ) data ) . get ( "url" ) ;
this . optionsRoot = ( String ) ( ( Map < String , Object > ) data ) . get ( "optionsRoot" ) ;
this . multiAutoComplete = ( Boolean ) ( ( Map < Boolean , Object > ) data ) . get ( "multiAutoComplete" ) ;
Map < String , String > options = ( ( Map < String , Map < String , String > > ) data ) . get ( "autoCompleteOptions" ) ;
if ( options ! = null ) {
this . autoCompleteOptions . setLabel ( options . get ( "label" ) ) ;
this . autoCompleteOptions . setValue ( options . get ( "value" ) ) ;
this . autoCompleteOptions . setSource ( options . get ( "source" ) ) ;
this . autoCompleteOptions . setUri ( options . get ( "uri" ) ) ;
List < Map < String , Object > > dataList = ( List < Map < String , Object > > ) ( ( Map < String , Object > ) data ) . get ( "autoCompleteSingleDataList" ) ;
this . autoCompleteSingleDataList = new ArrayList < > ( ) ;
int i = 0 ;
for ( Map < String , Object > singleData : dataList ) {
this . autoCompleteSingleDataList . add ( new AutoCompleteSingleData ( ) ) ;
this . autoCompleteSingleDataList . get ( i ) . autoCompleteOptions = new Option ( ) ;
this . autoCompleteSingleDataList . get ( i ) . url = ( String ) singleData . get ( "url" ) ;
this . autoCompleteSingleDataList . get ( i ) . optionsRoot = ( String ) singleData . get ( "optionsRoot" ) ;
if ( singleData . get ( "autoCompleteType" ) = = null ) {
this . autoCompleteSingleDataList . get ( i ) . autocompleteType = AutocompleteType . UNCACHED . getValue ( ) ;
} else {
this . autoCompleteSingleDataList . get ( i ) . autocompleteType = AutocompleteType . fromValue ( ( Integer ) singleData . get ( "autoCompleteType" ) ) . getValue ( ) ;
}
Map < String , String > options = ( Map < String , String > ) singleData . get ( "autoCompleteOptions" ) ;
if ( options ! = null ) {
this . autoCompleteSingleDataList . get ( i ) . autoCompleteOptions . setLabel ( options . get ( "label" ) ) ;
this . autoCompleteSingleDataList . get ( i ) . autoCompleteOptions . setValue ( options . get ( "value" ) ) ;
this . autoCompleteSingleDataList . get ( i ) . autoCompleteOptions . setSource ( options . get ( "source" ) ) ;
this . autoCompleteSingleDataList . get ( i ) . autoCompleteOptions . setUri ( options . get ( "uri" ) ) ;
}
i + + ;
}
}
@ -119,4 +188,29 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
dataMap . put ( "source" , item ! = null ? item . getAttribute ( "source" ) : "" ) ;
return dataMap ;
}
public enum AutocompleteType {
UNCACHED ( 0 ) , CACHED ( 1 ) ;
int value ;
AutocompleteType ( int value ) {
this . value = value ;
}
public int getValue ( ) {
return this . value ;
}
public static AutocompleteType fromValue ( int value ) {
for ( AutocompleteType type : AutocompleteType . values ( ) ) {
if ( type . getValue ( ) = = value ) {
return type ;
}
}
return UNCACHED ;
}
}
}