001 /*
002 * Apache License
003 * Version 2.0, January 2004
004 * http://www.apache.org/licenses/
005 *
006 * Copyright 1996-2008 by Sven Homburg
007 *
008 * Licensed under the Apache License, Version 2.0 (the "License");
009 * you may not use this file except in compliance with the License.
010 * You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 */
014
015 package org.chenillekit.tapestry.core.renderes;
016
017 import java.util.Map;
018
019 import org.apache.tapestry5.MarkupWriter;
020 import org.apache.tapestry5.OptionGroupModel;
021 import org.apache.tapestry5.OptionModel;
022 import org.apache.tapestry5.SelectModelVisitor;
023 import org.apache.tapestry5.ioc.internal.util.TapestryException;
024
025 import org.chenillekit.tapestry.core.encoders.MultipleValueEncoder;
026
027 /**
028 * @version $Id: MultipleSelectModelRenderer.java 594 2009-12-05 15:17:26Z mlusetti $
029 */
030 public class MultipleSelectModelRenderer implements SelectModelVisitor
031 {
032 private final MarkupWriter _writer;
033
034 private final MultipleValueEncoder _encoder;
035
036 public MultipleSelectModelRenderer(final MarkupWriter writer, MultipleValueEncoder encoder)
037 {
038 _writer = writer;
039 _encoder = encoder;
040 }
041
042 public void beginOptionGroup(OptionGroupModel groupModel)
043 {
044 _writer.element("optgroup", "label", groupModel.getLabel());
045
046 writeDisabled(groupModel.isDisabled());
047 writeAttributes(groupModel.getAttributes());
048 }
049
050 public void endOptionGroup(OptionGroupModel groupModel)
051 {
052 _writer.end(); // select
053 }
054
055 @SuppressWarnings("unchecked")
056 public void option(OptionModel optionModel)
057 {
058 Object optionValue = optionModel.getValue();
059
060 if (_encoder == null)
061 throw new TapestryException("value encoder cannot be null", this, null);
062
063 String clientValue = _encoder.toClient(optionValue);
064
065 _writer.element("option", "value", clientValue);
066
067 if (isOptionSelected(optionModel))
068 _writer.attributes("selected", "selected");
069
070 writeDisabled(optionModel.isDisabled());
071 writeAttributes(optionModel.getAttributes());
072
073 _writer.write(optionModel.getLabel());
074
075 _writer.end();
076 }
077
078 private void writeDisabled(boolean disabled)
079 {
080 if (disabled) _writer.attributes("disabled", "disabled");
081 }
082
083 private void writeAttributes(Map<String, String> attributes)
084 {
085 if (attributes == null) return;
086
087 for (Map.Entry<String, String> e : attributes.entrySet())
088 _writer.attributes(e.getKey(), e.getValue());
089 }
090
091 protected boolean isOptionSelected(OptionModel optionModel)
092 {
093 return false;
094 }
095 }