/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * 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 org.uberfire.annotations.processors; import java.util.LinkedHashMap; import java.util.Map; public class PartInformation { private final String partName; private final Map<String, String> parameters; public PartInformation(CharSequence partNameAndParams) { parameters = new LinkedHashMap<String, String>(); StringBuilder nextToken = new StringBuilder(50); String foundPartName = null; String key = null; for (int i = 0; i < partNameAndParams.length(); i++) { char ch = partNameAndParams.charAt(i); switch (ch) { case '%': StringBuilder hexVal = new StringBuilder(2); hexVal.append(partNameAndParams.charAt(i + 1)); hexVal.append(partNameAndParams.charAt(i + 2)); nextToken.append((char) Integer.parseInt(hexVal.toString(), 16)); i += 2; break; case '?': if (foundPartName == null) { foundPartName = nextToken.toString(); nextToken = new StringBuilder(50); } else { nextToken.append('?'); } break; case '=': if (foundPartName == null) { nextToken.append('='); } else { key = nextToken.toString(); nextToken = new StringBuilder(50); } break; case '&': parameters.put(key, nextToken.toString()); nextToken = new StringBuilder(50); key = null; break; default: nextToken.append(ch); } } if (foundPartName == null) { foundPartName = nextToken.toString(); } else if (key != null) { parameters.put(key, nextToken.toString()); } else if (nextToken.length() > 0) { parameters.put(nextToken.toString(), ""); } this.partName = foundPartName; } public String getPartName() { return partName; } public Map<String, String> getParameters() { return parameters; } }