/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.internal.model.web; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.http.NameValuePair; import com.db4o.activation.ActivationPurpose; import com.db4o.activation.Activator; import com.db4o.collections.ActivatableHashSet; import com.db4o.ta.Activatable; import com.subgraph.vega.api.model.web.IWebPathParameters; public class WebPathParameters implements IWebPathParameters, Activatable { private transient Activator activator; private final Set<List<NameValuePair>> parameterLists; WebPathParameters() { this.parameterLists = new ActivatableHashSet<List<NameValuePair>>(); } void addParameterList(List<NameValuePair> params) { if(params.isEmpty()) return; activate(ActivationPurpose.READ); synchronized(parameterLists) { if(parameterLists.contains(params)) return; parameterLists.add(params); } } public Collection<String> getValuesForParameter(String name) { final Set<String> valueSet = new HashSet<String>(); for(List<NameValuePair> params: getParameterLists()) { for(NameValuePair pair: params) { if(pair.getName().equals(name)) { valueSet.add(pair.getValue()); } } } return valueSet; } @Override public boolean hasParameters() { activate(ActivationPurpose.READ); synchronized(parameterLists) { return !parameterLists.isEmpty(); } } @Override public Collection<List<NameValuePair>> getParameterLists() { activate(ActivationPurpose.READ); synchronized(parameterLists) { return new HashSet<List<NameValuePair>>(parameterLists); } } @Override public Collection<String> getParameterNames() { final Set<String> nameSet = new HashSet<String>(); for(List<NameValuePair> params: getParameterLists()) { for(NameValuePair pair: params) { nameSet.add(pair.getName()); } } return nameSet; } @Override public Collection<List<String>> getParameterNameLists() { final Set< List<String> > nameLists = new HashSet<List<String>>(); for(List<NameValuePair> params: getParameterLists()) { List<String> nl = new ArrayList<String>(); for(NameValuePair pair: params) { nl.add(pair.getName()); } nameLists.add(nl); } return nameLists; } @Override public void activate(ActivationPurpose activationPurpose) { if(activator != null) { activator.activate(activationPurpose); } } @Override public void bind(Activator activator) { if(this.activator == activator) { return; } if(activator != null && this.activator != null) { throw new IllegalStateException("Object can only be bound to one activator"); } this.activator = activator; } }