/*
* Copyright 2004, 2005, 2006 Odysseus Software GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.odysseus.calyxo.forms.impl;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import de.odysseus.calyxo.base.Message;
import de.odysseus.calyxo.base.Messages;
import de.odysseus.calyxo.forms.FormInput;
import de.odysseus.calyxo.forms.FormInputResult;
import de.odysseus.calyxo.forms.FormResult;
import de.odysseus.calyxo.forms.conf.FormConfig;
/**
* Form result implementation.
*
* @author Christoph Beck
*/
public class FormResultImpl implements FormResult {
private FormImpl form;
private Messages messages = new Messages();
private HashMap values = new HashMap();
private HashSet assertFailedNames;
private boolean invalid = false;
/**
* Constructor
*/
public FormResultImpl(FormImpl form) {
super();
this.form = form;
}
/**
* Add input result
*/
void add(FormInputResult value) {
FormInput input = value.getFormInput();
values.put(input.getName(), value);
if (!value.isValid() && !value.isIgnored()) {
invalid = true;
if (!value.isRelaxed()) {
messages.addMessage(input.getName(), value.getFirstMessage());
if (input.isArray()) {
Iterator iter = value.getLastMessages();
while (iter.hasNext()) {
messages.addMessage(input.getName(), (Message)iter.next());
}
}
}
}
}
/**
* Add failed assertion.
* This method adds the specified message as global message to error
* messages and flags the inputs referenced during expression
* evaluation.
* @see #isAssertionFailed(String)
*/
void assertionFailed(AssertVariableResolver resolver, Message message) {
invalid = true;
if (assertFailedNames == null) {
assertFailedNames = new HashSet();
}
Iterator involved = resolver.getInvolvedFormInputs();
while (involved.hasNext()) {
FormInput input = (FormInput)involved.next();
assertFailedNames.add(input.getName());
}
messages.addGlobalMessage(message);
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#isAssertionFailed(java.lang.String)
*/
public boolean isAssertionFailed(String name) {
return assertFailedNames != null && assertFailedNames.contains(name);
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#isValid()
*/
public boolean isValid() {
return !invalid;
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#getFormInputResults()
*/
public Iterator getFormInputResults() {
return values.values().iterator();
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#getFormInputResult(java.lang.String)
*/
public FormInputResult getFormInputResult(String name) {
return (FormInputResult)values.get(name);
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#getMessages()
*/
public Messages getMessages() {
return messages;
}
/*
* (non-Javadoc)
* @see de.odysseus.calyxo.forms.FormResult#getFormConfig()
*/
public FormConfig getFormConfig() {
return form.getFormConfig();
}
}