if(componentProperty.getDataProvider() != null && !componentProperty.getDataProvider().equals(""))
{
try
{
PropertyOptionsDataProvider provider = (PropertyOptionsDataProvider)Class.forName(componentProperty.getDataProvider()).newInstance();
logger.info("componentProperty.getDataProviderParameters():" + componentProperty.getDataProviderParameters());
Map parameters = httpHelper.toMap(componentProperty.getDataProviderParameters(), "UTF-8", ";");
options = provider.getOptions(parameters, locale.getLanguage(), principal, templateController.getDatabase());
optionsIterator = options.iterator();
}
catch (Exception e)
{
logger.warn("A problem loading the data provider for property " + componentProperty.getName() + ":" + e.getMessage(), e);
List<ComponentPropertyOption> errorOptions = new ArrayList<ComponentPropertyOption>();
ComponentPropertyOption componentPropertyOption = new ComponentPropertyOption();
componentPropertyOption.setName("Error:" + e.getMessage());
componentPropertyOption.setValue("");
errorOptions.add(componentPropertyOption);
optionsIterator = errorOptions.iterator();
}
}
String exactMatchOptionName = getExactMatch(componentProperty, options);
//Now let's check for smaller matches
while(optionsIterator.hasNext())
{
ComponentPropertyOption option = (ComponentPropertyOption)optionsIterator.next();
boolean debug = false;
if(componentProperty.getName().equalsIgnoreCase("SelectTest"))
debug = true;
try
{
boolean isSame = false;
if(componentProperty != null && componentProperty.getValue() != null && option != null && option.getValue() != null)
{
if(exactMatchOptionName != null && option.getName().equals(exactMatchOptionName))
{
isSame = true;
}
else if(exactMatchOptionName == null)
{
//The option values
String optionValue = option.getValue();
//The saved values
String[] values = componentProperty.getValue().split(",");
logger.debug("optionValue:" + optionValue);
logger.debug("savedValue:" + componentProperty.getValue());
int matches = 0;
for(int i=0; i<values.length; i++)
{
String savedValue = values[i];
logger.debug("savedValue part:" + savedValue);
logger.debug("optionValue:" + optionValue);
boolean matchesValue = savedValue.equals(optionValue);
if(matchesValue)
{
isSame = true;
logger.debug("Match on individual saved value:" + optionValue);
break;
}
}
}
}
logger.debug("isSame: " + isSame + " : " + option.getValue());
sb.append("<option value=\"" + option.getValue() + "\"" + (isSame ? " selected=\"1\"" : "") + ">" + option.getName() + "</option>");
}
catch (Exception e)
{
logger.error("Error setting picked value:" + e.getMessage(), e);
}
}
sb.append("</select></td>");
}
else
sb.append(" <td class=\"igpropertyvalue igpropertyDivider\" align=\"left\">" + componentProperty.getDisplayName() + "</td>");
if(hasAccessToProperty)
sb.append(" <td class=\"igtd igpropertyDivider\" width=\"16\"><a class=\"componentEditorLink\" href=\"" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponentPropertyValue.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img src=\"" + componentEditorUrl + "/css/images/delete.gif\" border=\"0\" style='padding-top: 2px;' alt=\"delete\"/></a></td>");
else
sb.append(" <td class=\"igtd igpropertyDivider\" width=\"16\"></td>");
sb.append(" <td class=\"igtd igpropertyDivider\" width=\"16\"><img class=\"questionMark\" src=\"" + componentEditorUrl + "/css/images/questionMarkGrad.gif\" onmouseover=\"showDiv('helpLayer" + componentProperty.getComponentId() + "_" + formatter.replaceNonAscii(componentProperty.getName(), "_") + "');\" onmouseout=\"javascript:hideDiv('helpLayer" + componentProperty.getComponentId() + "_" + formatter.replaceNonAscii(componentProperty.getName(), "_") + "');\" alt=\"question\"/>" + helpSB + "</td>");
sb.append(" </tr>");
if(hasAccessToProperty)
{
propertyIndex++;
accessablePropertyIndex++;
}
}
else if(componentProperty.getType().equalsIgnoreCase(ComponentProperty.CHECKBOXFIELD))
{
if(isAdvancedProperties)
sb.append(" <tr class=\"igtr advancedProperty" + componentId + "\" style='display:none;'>");
else
sb.append(" <tr class=\"igtr\">");
sb.append(" <td class=\"igpropertylabel igpropertyDivider\" valign=\"top\" align=\"left\">" + componentProperty.getDisplayName() + "</td>");
if(hasAccessToProperty)
{
sb.append(" <td class=\"igpropertyvalue igpropertyDivider\" align=\"left\"><input type=\"hidden\" name=\"" + propertyIndex + "_propertyName\" value=\"" + componentProperty.getName() + "\"/>");
Iterator optionsIterator = componentProperty.getOptions().iterator();
if(componentProperty.getDataProvider() != null && !componentProperty.getDataProvider().equals(""))
{
try
{
PropertyOptionsDataProvider provider = (PropertyOptionsDataProvider)Class.forName(componentProperty.getDataProvider()).newInstance();
logger.info("componentProperty.getDataProviderParameters():" + componentProperty.getDataProviderParameters());
Map parameters = httpHelper.toMap(componentProperty.getDataProviderParameters(), "UTF-8", ";");
optionsIterator = provider.getOptions(parameters, locale.getLanguage(), principal, templateController.getDatabase()).iterator();
}
catch (Exception e)
{
logger.warn("A problem loading the data provider for property " + componentProperty.getName() + ":" + e.getMessage(), e);
List<ComponentPropertyOption> errorOptions = new ArrayList<ComponentPropertyOption>();