/* * Copyright 2009 Andrew Pietsch * * 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 com.dragome.forms.bindings.client.form.validation; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeMap; import com.dragome.model.interfaces.IndexedValidationResult; import com.dragome.model.interfaces.IndexedValidationResultCollector; import com.dragome.model.interfaces.Severity; import com.dragome.model.interfaces.ValidationMessage; import com.dragome.model.interfaces.ValidationResult; import com.dragome.model.pectin.ValidationResultCollector; /** * */ public class IndexedValidationResultImpl implements IndexedValidationResult, IndexedValidationResultCollector { private static final int UNINDEXED_MESSAGE_INDEX= -1; private ValidationResultImpl allMessages= new ValidationResultImpl(); private TreeMap<Integer, ValidationResult> results= new TreeMap<Integer, ValidationResult>(); public IndexedValidationResultImpl() { } public void add(ValidationMessage message) { allMessages.add(message); prepareIndexedResult(UNINDEXED_MESSAGE_INDEX).add(message); } public void add(int index, ValidationMessage message) { allMessages.add(message); prepareIndexedResult(index).add(message); } public ValidationResultCollector getIndexedCollector(final int index) { return new PreIndexedValidationResultCollector(index); } public boolean isEmpty() { return allMessages.isEmpty(); } public List<ValidationMessage> getMessages() { return allMessages.getMessages(); } public List<ValidationMessage> getMessages(Severity severity) { return allMessages.getMessages(severity); } public boolean contains(Severity severity) { return allMessages.contains(severity); } public SortedSet<Severity> getSeverities() { return allMessages.getSeverities(); } public Set<Integer> getResultIndicies() { Set<Integer> results= this.results.keySet(); results.remove(UNINDEXED_MESSAGE_INDEX); return results; } public ValidationResult getUnindexedResult() { return getIndexedResult(UNINDEXED_MESSAGE_INDEX); } public ValidationResult getIndexedResult(int index) { ValidationResultImpl result= (ValidationResultImpl) results.get(index); return result != null ? result : EmptyValidationResult.INSTANCE; } public int size() { return results.size(); } protected ValidationResultImpl prepareIndexedResult(int index) { ValidationResultImpl result= (ValidationResultImpl) results.get(index); if (result == null) { result= new ValidationResultImpl(); results.put(index, result); } return result; } private class PreIndexedValidationResultCollector implements ValidationResultCollector { private final int index; public PreIndexedValidationResultCollector(int index) { this.index= index; } public void add(ValidationMessage message) { IndexedValidationResultImpl.this.add(index, message); } public boolean contains(Severity severity) { return getIndexedResult(index).contains(severity); } } }