blob: c28ffe744691801107e5798e3b9585b50e7e9fe2 [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.sling.contentparser.api;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.osgi.annotation.versioning.ProviderType;
/**
* Generic options for content parsers. Parser implementations can extend this class to provide additional options, valid only in the
* context of those implementations.
*/
@ProviderType
public class ParserOptions {
/**
* Default primary type.
*/
public static final String DEFAULT_PRIMARY_TYPE = "nt:unstructured";
/**
* Default list of prefixes to remove from property names.
*/
public static final Set<String> DEFAULT_REMOVE_PROPERTY_NAME_PREFIXES
= Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
"jcr:reference:",
"jcr:path:",
"jcr:name:",
"jcr:uri:"
)));
/**
* Default list of resource names that should be ignored.
*/
public static final Set<String> DEFAULT_IGNORE_RESOURCE_NAMES
= Collections.unmodifiableSet(new HashSet<>(Arrays.asList(
"security:acl",
"security:principals"
)));
private String defaultPrimaryType = DEFAULT_PRIMARY_TYPE;
private boolean detectCalendarValues;
private Set<String> ignorePropertyNames = Collections.emptySet();
private Set<String> ignoreResourceNames = DEFAULT_IGNORE_RESOURCE_NAMES;
private Set<String> removePropertyNamePrefixes = DEFAULT_REMOVE_PROPERTY_NAME_PREFIXES;
/**
* Default "jcr:primaryType" property for resources that have no explicit value for this value.
* If set to null, not default type is applied.
*
* @param value Default primary type.
* @return this
*/
public ParserOptions defaultPrimaryType(String value) {
this.defaultPrimaryType = value;
return this;
}
public String getDefaultPrimaryType() {
return defaultPrimaryType;
}
/**
* Some content formats like JSON do not contain information to identify date/time values.
* Instead they have to be detected by heuristics by trying to parse every string value.
* This mode is disabled by default.
*
* @param value Activate calendar value detection
* @return this
*/
public ParserOptions detectCalendarValues(boolean value) {
this.detectCalendarValues = value;
return this;
}
public boolean isDetectCalendarValues() {
return detectCalendarValues;
}
/**
* Set a list of property names that should be ignored when parsing the content file.
*
* @param value List of property names
* @return this
*/
public ParserOptions ignorePropertyNames(Set<String> value) {
this.ignorePropertyNames = value;
return this;
}
public Set<String> getIgnorePropertyNames() {
return ignorePropertyNames;
}
/**
* Set a list of resource/node names that should be ignored when parsing the content file.
*
* @param value List of resource/node names
* @return this
*/
public ParserOptions ignoreResourceNames(Set<String> value) {
this.ignoreResourceNames = value;
return this;
}
public Set<String> getIgnoreResourceNames() {
return ignoreResourceNames;
}
/**
* Set a list of property name prefixes that should be removed automatically from the property name.
*
* @param value List of property name prefixes
* @return this
*/
public ParserOptions removePropertyNamePrefixes(Set<String> value) {
this.removePropertyNamePrefixes = value;
return this;
}
public Set<String> getRemovePropertyNamePrefixes() {
return removePropertyNamePrefixes;
}
}