package ecologylab.bigsemantics.metametadata.fieldops; import java.util.ArrayList; import java.util.HashMap; import ecologylab.generic.StringTools; import ecologylab.net.ParsedURL; import ecologylab.serialization.annotations.simpl_collection; /** * * @author quyin */ public class OverrideParams implements FieldOp { @simpl_collection("name") private ArrayList<String> names; public ArrayList<String> getNames() { return names; } public void setNames(ArrayList<String> names) { this.names = names; } public void addName(String name) { if (names == null) { names = new ArrayList<String>(); } names.add(name); } public void overrideParams(HashMap<String, String> params, String fragment) { if (fragment != null && fragment.length() > 0 && params != null) { HashMap<String, String> newParams = StringTools.doubleSplit(fragment); if (names != null && names.size() > 0) { for (String name : names) { params.put(name, newParams.get(name)); } } else { params.putAll(newParams); } } } @Override public Object operateOn(Object rawValue) { if (rawValue != null) { ParsedURL purl = (rawValue instanceof ParsedURL) ? ((ParsedURL) rawValue) : ParsedURL.getAbsolute(rawValue.toString()); HashMap<String, String> params = purl.extractParams(true); overrideParams(params, purl.fragment()); return purl.updateParams(params); } return rawValue; } }