/******************************************************************************* * Copyright (c) 2014, 2015 IBH SYSTEMS GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBH SYSTEMS GmbH - initial API and implementation *******************************************************************************/ package org.eclipse.packagedrone.web.controller.binding; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.packagedrone.web.controller.binding.BindingManager.Result; public class SimpleBindingResult implements BindingResult { private final Map<String, BindingResult> children = new HashMap<> (); private final List<BindingError> errors = new LinkedList<> (); private final Set<String> markers = new HashSet<> (); public void addMarkers ( final Set<String> markers ) { this.markers.addAll ( markers ); } @Override public boolean hasErrors () { if ( !this.errors.isEmpty () ) { return true; } for ( final BindingResult br : this.children.values () ) { if ( br.hasErrors () ) { return true; } } return false; } @Override public boolean hasMarker ( final String marker ) { if ( this.markers.contains ( marker ) ) { return true; } for ( final BindingResult br : this.children.values () ) { if ( br.hasMarker ( marker ) ) { return true; } } return false; } @Override public void addChild ( final String name, final BindingResult bindingResult ) { this.children.put ( name, bindingResult ); } @Override public BindingResult getChild ( final String name ) { return this.children.get ( name ); } @Override public BindingResult getChildOrAdd ( final String name ) { BindingResult child = this.children.get ( name ); if ( child == null ) { child = new Result (); this.children.put ( name, child ); } return child; } @Override public Map<String, BindingResult> getChildren () { return Collections.unmodifiableMap ( this.children ); } public void addErrors ( final String name, final List<BindingError> errors ) { BindingResult br; if ( name == null || name.isEmpty () ) { br = this; } else { br = getChildOrAdd ( name ); } br.addErrors ( errors ); } @Override public void addError ( final BindingError error ) { this.errors.add ( error ); } @Override public void addErrors ( final Collection<BindingError> errors ) { this.errors.addAll ( errors ); } @Override public List<BindingError> getErrors () { final List<BindingError> result = new LinkedList<> ( this.errors ); for ( final BindingResult br : this.children.values () ) { result.addAll ( br.getErrors () ); } return result; } @Override public List<BindingError> getLocalErrors () { return Collections.unmodifiableList ( this.errors ); } }