@ -3,6 +3,7 @@ package de.srsoftware.web4rail.tiles;
import java.io.IOException ;
import java.io.IOException ;
import java.util.Collection ;
import java.util.Collection ;
import java.util.HashMap ;
import java.util.HashMap ;
import java.util.HashSet ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
import java.util.Map.Entry ;
import java.util.Map.Entry ;
@ -14,15 +15,26 @@ import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass ;
import de.srsoftware.web4rail.BaseClass ;
import de.srsoftware.web4rail.Params ;
import de.srsoftware.web4rail.Params ;
import de.srsoftware.web4rail.Store ;
import de.srsoftware.web4rail.Store ;
import de.srsoftware.web4rail.Store.Listener ;
import de.srsoftware.web4rail.tags.Fieldset ;
import de.srsoftware.web4rail.tags.Fieldset ;
import de.srsoftware.web4rail.tags.Input ;
import de.srsoftware.web4rail.tags.Input ;
import de.srsoftware.web4rail.tags.Select ;
import de.srsoftware.web4rail.tags.Select ;
import de.srsoftware.web4rail.tags.Window ;
import de.srsoftware.web4rail.tags.Window ;
public class TextDisplay extends StretchableTile implements Store . Listener {
public class TextDisplay extends StretchableTile implements Listener {
private static final String TEXT = "text" ;
private static final String TEXT = "text" ;
private String text = "Hello, world!" ;
private String text = "Hello, world!" ;
private String displayText = text ;
private HashSet < Store > stores = new HashSet < > ( ) ;
private String fillPlaceholders ( ) {
String result = text ;
for ( Store store : stores ) {
String val = store . value ( ) ;
if ( isNull ( val ) ) continue ;
result = result . replace ( "{" + store . name ( ) + "}" , val ) ;
}
return result ;
}
@Override
@Override
public JSONObject json ( ) {
public JSONObject json ( ) {
@ -54,11 +66,10 @@ public class TextDisplay extends StretchableTile implements Store.Listener {
}
}
@Override
@Override
public void storeUpdated ( Store store ) {
public void storeUpdated ( ) {
displayText = text . replace ( "{" + store . name ( ) + "}" , store . value ( ) ) ;
plan . place ( this ) ;
plan . place ( this ) ;
}
}
@Override
@Override
protected String stretchType ( ) {
protected String stretchType ( ) {
return t ( "Width" ) ;
return t ( "Width" ) ;
@ -68,26 +79,22 @@ public class TextDisplay extends StretchableTile implements Store.Listener {
@Override
@Override
public Tag tag ( Map < String , Object > replacements ) throws IOException {
public Tag tag ( Map < String , Object > replacements ) throws IOException {
if ( isNull ( replacements ) ) replacements = new HashMap < String , Object > ( ) ;
if ( isNull ( replacements ) ) replacements = new HashMap < String , Object > ( ) ;
replacements . put ( "%text%" , displayText ) ;
replacements . put ( "%text%" , fillPlaceholders ( ) ) ;
Tag tag = super . tag ( replacements ) ;
Tag tag = super . tag ( replacements ) ;
return tag . clazz ( tag . get ( "class" ) + " fill" ) ;
return tag . clazz ( tag . get ( "class" ) + " fill" ) ;
}
}
public TextDisplay text ( String tx ) {
public TextDisplay text ( String tx ) {
if ( isNull ( text ) | | ! text . equals ( tx ) ) {
displayText = tx ;
}
text = tx ;
text = tx ;
stores . clear ( ) ;
int pos = text . indexOf ( "{" ) ;
int pos = text . indexOf ( "{" ) ;
Store . removeListener ( this ) ;
while ( pos > - 1 ) {
while ( pos > - 1 ) {
int end = text . indexOf ( "}" , pos ) ;
int end = text . indexOf ( "}" , pos ) ;
if ( end < 0 ) break ;
if ( end < 0 ) break ;
String storeName = text . substring ( pos + 1 , end ) ;
stores . add ( Store . get ( text . substring ( pos + 1 , end ) ) . addListener ( this ) ) ;
Store . get ( storeName ) . addListener ( this ) ;
pos = text . indexOf ( "{" , end ) ;
pos = text . indexOf ( "{" , end ) ;
}
}
return this ;
return this ;
}
}