/** * Copyright (c) 2007 Borland Software Corporation * * 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: * bblajer - initial API and implementation */ package org.eclipse.gmf.runtime.lite.validation; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.common.util.URI; /** * Manages the state of the validation and reports changes to registered {@link IValidationStateListener listeners}. */ public class ValidationStateManager { // private static ValidationStateManager INSTANCE; private ArrayList<IValidationStateListener> myListeners = new ArrayList<IValidationStateListener>(); private HashMap<URI, WeakReference<ValidationState>> myValidationStates = new HashMap<URI, WeakReference<ValidationState>>(); // public static ValidationStateManager getInstance() { // if (INSTANCE == null) { // INSTANCE = new ValidationStateManager(); // } // return INSTANCE; // } public ValidationStateManager() { } public void addValidationStateListener(IValidationStateListener listener) { if (listener != null && !myListeners.contains(listener)) { myListeners.add(listener); } } public void removeValidationStateListener(IValidationStateListener listener) { myListeners.remove(listener); } public ValidationState getValidationState(URI diagramUri) { WeakReference<ValidationState> ref = myValidationStates.get(diagramUri); ValidationState result = null; if (ref != null) { result = ref.get(); } if (result == null) { result = new ValidationState(this, diagramUri); myValidationStates.put(diagramUri, new WeakReference<ValidationState>(result)); } return result; } void fireValidationStateChanged(ValidationState source, Map<URI, Collection<ViolationDescriptor>> oldViolations, Map<URI, Collection<ViolationDescriptor>> newViolations) { if (myListeners.isEmpty()) { return; } ValidationStateEvent evt = new ValidationStateEvent(source, oldViolations, newViolations); for (IValidationStateListener next : new ArrayList<IValidationStateListener>(myListeners)) { next.validationStateChanged(evt); } } }