blob: e17533c293c34a34c489be010d1cd7ea0a6df86f [file] [log] [blame]
/*
* 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.felix.scrplugin.tags.annotation.sling;
import java.util.*;
import org.apache.felix.scrplugin.Constants;
import org.apache.felix.scrplugin.helper.StringUtils;
import org.apache.felix.scrplugin.tags.JavaClassDescription;
import org.apache.felix.scrplugin.tags.annotation.AbstractTag;
import com.thoughtworks.qdox.model.Annotation;
/**
* A property tag.
*/
public class SlingServletPropertyTag extends AbstractTag {
protected final String name;
protected final String[] values;
protected final String type;
protected final Boolean isPrivate;
/**
* @param name Property name
* @param values Property values
* @param desc Description
*/
public SlingServletPropertyTag(Annotation annotation, String name, String[] values, JavaClassDescription desc) {
super(annotation, desc, null);
this.name = name;
this.values = values;
this.type = null;
this.isPrivate = null;
}
/**
* @param name Property name
* @param value Property value
* @param desc Description
*/
public SlingServletPropertyTag(final Annotation annotation,
final String name,
final String value,
final JavaClassDescription desc,
final String type,
final boolean isPrivate) {
super(annotation, desc, null);
this.name = name;
this.values = new String[] {value};
this.type = type;
this.isPrivate = isPrivate;
}
@Override
public String getName() {
return Constants.PROPERTY;
}
@Override
public String getSourceName() {
return "SlingServlet";
}
@Override
public Map<String, String> createNamedParameterMap() {
final SortedMap<String, String> map = new TreeMap<String, String>();
map.put(Constants.PROPERTY_NAME, this.name);
if (this.values == null || this.values.length == 0) {
map.put(Constants.PROPERTY_VALUE, "");
} else if (this.values.length == 1) {
map.put(Constants.PROPERTY_VALUE, this.values[0]);
} else {
for (int i = 0; i < this.values.length; i++) {
// generate index number with trailing zeros to ensure correct sort order in map
String index = StringUtils.leftPad(Integer.toString(i), 10, "0");
map.put(Constants.PROPERTY_MULTIVALUE_PREFIX + '.' + index, this.values[i]);
}
}
if ( this.type != null ) {
map.put(Constants.PROPERTY_TYPE, type);
}
if ( this.isPrivate != null ) {
map.put(Constants.PROPERTY_PRIVATE, String.valueOf(this.isPrivate));
}
return map;
}
}