Java tutorial
/* * Copyright 2016 Esri, Inc. * * Licensed 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.geoportal.commons.csw.client.impl; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang3.StringUtils; /** * 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 dc string * * @param dcString the dc string */ public void add(String dcString) { dcString = StringUtils.trimToEmpty(dcString); if ("".equals(dcString)) { return; } String schemeValues[] = dcString.split(DELIMETER_LIST); String arrKeyValue[]; for (String schemeValue : schemeValues) { schemeValue = StringUtils.trimToEmpty(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 dc string * * @param scheme the scheme (if null or empty, EMPTY_SCHEME will be used) * @return list dc strings */ public List<String> get(String scheme) { scheme = StringUtils.trimToEmpty(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 StringUtils.trimToEmpty(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 StringUtils.trimToEmpty(value); } /** * Sets the value. * * @param value the new value */ public void setValue(String value) { this.value = value; } } }