All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.faces.context.BaseContextMap Maven / Gradle / Ivy

Go to download

Jakarta Faces defines an MVC framework for building user interfaces for web applications, including UI components, state management, event handing, input validation, page navigation, and support for internationalization and accessibility.

There is a newer version: 4.1.0
Show newest version
/*
 * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package com.sun.faces.context;

import java.util.AbstractCollection;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * 

* This is the base Map for all Map instances required by @{link ExternalContext}. *

*/ abstract class BaseContextMap extends AbstractMap { private Set> entrySet; private Set keySet; private Collection values; // -------------------------------------------------------- Methods from Map // Supported by maps if overridden @Override public void clear() { throw new UnsupportedOperationException(); } // Supported by maps if overridden @Override public void putAll(Map t) { throw new UnsupportedOperationException(); } @Override public Set> entrySet() { if (entrySet == null) { entrySet = new EntrySet(); } return entrySet; } @Override public Set keySet() { if (keySet == null) { keySet = new KeySet(); } return keySet; } @Override public Collection values() { if (values == null) { values = new ValueCollection(); } return values; } // Supported by maps if overridden @Override public V remove(Object key) { throw new UnsupportedOperationException(); } // ------------------------------------------------------- Protected Methods protected boolean removeKey(Object key) { return this.remove(key) != null; } protected boolean removeValue(Object value) { boolean valueRemoved = false; if (value == null) { return false; } if (containsValue(value)) { for (Iterator i = entrySet().iterator(); i.hasNext();) { Map.Entry e = (Map.Entry) i.next(); if (value.equals(e.getValue())) { valueRemoved = remove(e.getKey()) != null; } } } return valueRemoved; } protected abstract Iterator> getEntryIterator(); protected abstract Iterator getKeyIterator(); protected abstract Iterator getValueIterator(); // ----------------------------------------------------------- Inner Classes abstract class BaseSet extends AbstractSet { @Override public int size() { int size = 0; for (Iterator i = iterator(); i.hasNext(); size++) { i.next(); } return size; } } class EntrySet extends BaseSet> { @Override public Iterator> iterator() { return getEntryIterator(); } @Override public boolean remove(Object o) { return o instanceof Map.Entry && removeKey(((Map.Entry) o).getKey()); } } class KeySet extends BaseSet { @Override public Iterator iterator() { return getKeyIterator(); } @Override public boolean contains(Object o) { return containsKey(o); } @Override public boolean remove(Object o) { return o instanceof String && removeKey(o); } } class ValueCollection extends AbstractCollection { @Override public int size() { int size = 0; for (Iterator i = iterator(); i.hasNext(); size++) { i.next(); } return size; } @Override public Iterator iterator() { return getValueIterator(); } @Override public boolean remove(Object o) { return removeValue(o); } } abstract class BaseIterator implements Iterator { protected Enumeration e; protected String currentKey; protected boolean removeCalled = false; BaseIterator(Enumeration e) { this.e = e; } @Override public boolean hasNext() { return e.hasMoreElements(); } public String nextKey() { removeCalled = false; currentKey = (String) e.nextElement(); return currentKey; } } class EntryIterator extends BaseIterator> { EntryIterator(Enumeration e) { super(e); } @Override public void remove() { if (currentKey != null && !removeCalled) { removeCalled = true; removeKey(currentKey); } else { throw new IllegalStateException(); } } @Override public Map.Entry next() { nextKey(); return new Entry<>(currentKey, get(currentKey)); } } class KeyIterator extends BaseIterator { KeyIterator(Enumeration e) { super(e); } @Override public void remove() { if (currentKey != null && !removeCalled) { removeCalled = true; removeKey(currentKey); } else { throw new IllegalStateException(); } } @Override public String next() { return nextKey(); } } class ValueIterator extends BaseIterator { ValueIterator(Enumeration e) { super(e); } @Override public void remove() { if (currentKey != null && !removeCalled) { removeCalled = true; removeValue(get(currentKey)); } else { throw new IllegalStateException(); } } @Override public V next() { nextKey(); return get(currentKey); } } static class Entry implements Map.Entry { // immutable Entry private final String key; private final V value; Entry(String key, V value) { this.key = key; this.value = value; } @Override public String getKey() { return key; } @Override public V getValue() { return value; } // No support of setting the value @Override public V setValue(V value) { throw new UnsupportedOperationException(); } @Override public int hashCode() { return (key == null ? 0 : key.hashCode()) ^ (value == null ? 0 : value.hashCode()); } @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof Map.Entry)) { return false; } Map.Entry input = (Map.Entry) obj; Object inputKey = input.getKey(); Object inputValue = input.getValue(); if (inputKey == key || inputKey != null && inputKey.equals(key)) { if (inputValue == value || inputValue != null && inputValue.equals(value)) { return true; } } return false; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy