/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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 org.apache.camel.maven.connector.model; import com.google.common.base.CaseFormat; public class EndpointOptionModel extends OptionModel { private String prefix; private String multiValue; private String enumValues; // special for documentation rendering private boolean newGroup; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getMultiValue() { return multiValue; } public void setMultiValue(String multiValue) { this.multiValue = multiValue; } public String getEnumValues() { return enumValues; } public void setEnumValues(String enumValues) { this.enumValues = enumValues; } public boolean isNewGroup() { return newGroup; } public void setNewGroup(boolean newGroup) { this.newGroup = newGroup; } @Override public String getShortJavaType() { // TODO: use watermark in the others return getShortJavaType(40); } public String getShortJavaType(int watermark) { String group = getGroup(); String type = getType(); String javaType = getJavaType(); if (javaType.startsWith("java.util.Map")) { return "Map"; } else if (javaType.startsWith("java.util.Set")) { return "Set"; } else if (javaType.startsWith("java.util.List")) { return "List"; } String text = javaType; int pos = text.lastIndexOf("."); if (pos != -1) { text = text.substring(pos + 1); } // if its some kind of java object then lets wrap it as its long if ("object".equals(type)) { text = wrapCamelCaseWords(text, watermark, " "); } return text; } public String getShortGroup() { String group = getGroup(); if (group.endsWith(" (advanced)")) { return group.substring(0, group.length() - 11); } return group; } public String getShortDefaultValue(int watermark) { String defaultValue = getDefaultValue(); if (defaultValue.isEmpty()) { return ""; } String text = defaultValue; if (text.endsWith("<T>")) { text = text.substring(0, text.length() - 3); } else if (text.endsWith("<T>>")) { text = text.substring(0, text.length() - 4); } // TODO: dirty hack for AUTO_ACKNOWLEDGE which we should wrap if ("AUTO_ACKNOWLEDGE".equals(text)) { return "AUTO_ ACKNOWLEDGE"; } return text; } public String getShortName(int watermark) { String text = wrapCamelCaseWords(getName(), watermark, " "); // ensure the option name starts with lower-case return Character.toLowerCase(text.charAt(0)) + text.substring(1); } /** * To wrap long camel cased texts by words. * * @param option the option which is camel cased. * @param watermark a watermark to denote the size to cut after * @param newLine the new line to use when breaking into a new line */ private String wrapCamelCaseWords(String option, int watermark, String newLine) { String text = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, option); text = text.replace('-', ' '); text = wrapWords(text, "\n", watermark, false); text = text.replace(' ', '-'); text = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, text); // upper case first char on each line String[] lines = text.split("\n"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < lines.length; i++) { String line = lines[i]; line = Character.toUpperCase(line.charAt(0)) + line.substring(1); sb.append(line); if (i < lines.length - 1) { sb.append(newLine); } } return sb.toString(); } /** * To wrap a big line by words. * * @param line the big line * @param newLine the new line to use when breaking into a new line * @param watermark a watermark to denote the size to cut after * @param wrapLongWords whether to wrap long words */ private String wrapWords(String line, String newLine, int watermark, boolean wrapLongWords) { if (line == null) { return null; } else { if (newLine == null) { newLine = System.lineSeparator(); } if (watermark < 1) { watermark = 1; } int inputLineLength = line.length(); int offset = 0; StringBuilder sb = new StringBuilder(inputLineLength + 32); while (inputLineLength - offset > watermark) { if (line.charAt(offset) == 32) { ++offset; } else { int spaceToWrapAt = line.lastIndexOf(32, watermark + offset); if (spaceToWrapAt >= offset) { sb.append(line.substring(offset, spaceToWrapAt)); sb.append(newLine); offset = spaceToWrapAt + 1; } else if (wrapLongWords) { sb.append(line.substring(offset, watermark + offset)); sb.append(newLine); offset += watermark; } else { spaceToWrapAt = line.indexOf(32, watermark + offset); if (spaceToWrapAt >= 0) { sb.append(line.substring(offset, spaceToWrapAt)); sb.append(newLine); offset = spaceToWrapAt + 1; } else { sb.append(line.substring(offset)); offset = inputLineLength; } } } } sb.append(line.substring(offset)); return sb.toString(); } } }