@@ -378,6 +378,28 @@ public List<String> getList(final Class<?> prefClass) {
378378 return getList (preferences );
379379 }
380380
381+ @ Override
382+ public Iterable <String > getIterable (final String key ) {
383+ return getIterable ((Class <?>) null , key );
384+ }
385+
386+ @ Override
387+ public Iterable <String > getIterable (final Class <?> prefClass , final String key ) {
388+ final Preferences preferences = prefs (prefClass );
389+ return getIterable (preferences .node (key ));
390+ }
391+
392+ @ Override
393+ public void putIterable (final Iterable <String > iterable , final String key ) {
394+ putIterable ((Class <?>) null , iterable , key );
395+ }
396+
397+ @ Override
398+ public void putIterable (final Class <?> prefClass , final Iterable <String > iterable , final String key ) {
399+ final Preferences preferences = prefs (prefClass );
400+ putIterable (preferences .node (key ), iterable );
401+ }
402+
381403 // -- Helper methods --
382404
383405 private void clear (final Preferences preferences , final String key ) {
@@ -460,6 +482,60 @@ private List<String> getList(final Preferences preferences) {
460482 return list ;
461483 }
462484
485+ private void putIterable (final Preferences preferences ,
486+ final Iterable <String > iterable )
487+ {
488+ if (preferences == null ) {
489+ throw new IllegalArgumentException ("Preferences not set." );
490+ }
491+ int index = 0 ;
492+ for (final String value : iterable ) {
493+ preferences .put ("" + index ++, value == null ? null : value .toString ());
494+ }
495+ }
496+
497+ private Iterable <String > getIterable (final Preferences preferences )
498+ {
499+ if (preferences == null ) {
500+ throw new IllegalArgumentException ("Preferences not set." );
501+ }
502+ return new Iterable <String >() {
503+ @ Override
504+ public Iterator <String > iterator () {
505+ return new Iterator <String >() {
506+ private String value ;
507+ private int index ;
508+ {
509+ findNext ();
510+ }
511+
512+ @ Override
513+ public String next () {
514+ final String result = value ;
515+ findNext ();
516+ return result ;
517+ }
518+
519+ @ Override
520+ public boolean hasNext () {
521+ return value != null ;
522+ }
523+
524+ @ Override
525+ public void remove () {
526+ throw new UnsupportedOperationException ();
527+ }
528+
529+ private void findNext () {
530+ if (index < 0 ) return ;
531+ value = preferences .get ("" + index , null );
532+ index = value == null ? -1 : index + 1 ;
533+ }
534+ };
535+ }
536+ };
537+ }
538+
463539 private Preferences prefs (final Class <?> c ) {
464540 return Preferences .userNodeForPackage (c == null ? PrefService .class : c );
465541 }
0 commit comments