/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You 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.esri.gpt.framework.search;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import com.esri.gpt.server.csw.client.Utils;
/**
* The Class DcList. List that has key value pairs. The keys
* can be duplicate and will produce a list on get(key)
*/
public class DcList extends LinkedList<DcList.Value> {
// class variables =============================================================
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The Constant DELIMETER_LIST. */
public final static String DELIMETER_LIST = "\u2715";
/** The Constant DELIMETER_VALUES. */
public final static String DELIMETER_VALUES = "\u2714";
/** The Constant EMPTY_SCHEME. */
public final static String EMPTY_SCHEME = "************";
// constructors ================================================================
/**
* Instantiates a new dc list.
*/
public DcList(){};
/**
* Instantiates a new dc list.
*
* @param dcList the dc list
*/
public DcList(String dcList) {
this.add(dcList);
}
// methods =====================================================================
/**
* Adds the.
*
* @param dcString the dc string
*/
public void add(String dcString) {
dcString = Utils.chkStr(dcString);
if("".equals(dcString)) {
return;
}
String schemeValues[] = dcString.split(DELIMETER_LIST);
String arrKeyValue[];
for(String schemeValue : schemeValues) {
schemeValue = Utils.chkStr(schemeValue);
if("".equals(schemeValue)) {
continue;
}
arrKeyValue = schemeValue.split(DELIMETER_VALUES);
if(arrKeyValue.length == 1) {
this.add(this.new Value(arrKeyValue[0], EMPTY_SCHEME));
continue;
}
this.add(this.new Value(arrKeyValue[0], arrKeyValue[1]));
}
}
/**
* Gets the.
*
* @param scheme the scheme (if null or empty, EMPTY_SCHEME will be used)
*
* @return the list< string>
*/
public List<String> get(String scheme) {
scheme = Utils.chkStr(scheme);
if("".equals(scheme)) {
scheme = EMPTY_SCHEME;
}
List<String> valueList = new LinkedList<String>();
Iterator<DcList.Value> iter = this.iterator();
while(iter.hasNext()) {
Value value = iter.next();
if(value == null) {
continue;
}
if(value.getScheme().equalsIgnoreCase(scheme)) {
valueList.add(value.getValue());
}
}
return valueList;
}
/**
* Removes the scheme.
*
* @param urn the urn
*/
public void removeScheme(String urn) {
Iterator<DcList.Value> iter = this.iterator();
Value value = null;
boolean found = false;
while(iter.hasNext()) {
value = iter.next();
if(value == null) {
continue;
}
if(value.getScheme().equalsIgnoreCase(urn)) {
found = true;
break;
}
}
if(found) {
super.remove(value);
}
}
/**
* Removes the value.
*
* @param val the val
*/
public void removeValue(String val) {
Iterator<DcList.Value> iter = this.iterator();
Value value = null;
boolean found = false;
while(iter.hasNext()) {
value = iter.next();
if(value == null) {
continue;
}
if(value.getValue().equalsIgnoreCase(val)) {
found = true;
break;
}
}
if(found) {
super.remove(value);
}
}
/**
* Removes the value.
* @see #removeValue(String)
*
* @param val the val
*/
public void remove(String val) {
removeValue(val);
}
// inner class =================================================================
/**
* The Class Value.
*/
public class Value {
// instance variables ==========================================================
/** The scheme. */
String scheme;
/** The value. */
String value;
// constructor =================================================================
/**
* Instantiates a new value.
*
* @param scheme the scheme
* @param value the value
*/
public Value(String value, String scheme) {
this.setScheme(scheme);
this.setValue(value);
}
// properties ==================================================================
/**
* Gets the scheme.
*
* @return the scheme (trimmed, never null)
*/
public String getScheme() {
return Utils.chkStr(scheme);
}
/**
* Sets the scheme.
*
* @param scheme the new scheme
*/
public void setScheme(String scheme) {
this.scheme = scheme;
}
/**
* Gets the value.
*
* @return the value (trimmed, never null)
*/
public String getValue() {
return Utils.chkStr(value);
}
/**
* Sets the value.
*
* @param value the new value
*/
public void setValue(String value) {
this.value = value;
}
}
}