blob: eea14addd1387fd87d815324152d2766ba6122a3 [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.maven.jcrocm;
import org.apache.maven.plugin.logging.Log;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaMethod;
/**
* The <code>AbstractItemDescriptor</code> is the base class for the field,
* bean and collection descriptors providing support for the common
* configuration elements.
*/
abstract class AbstractItemDescriptor extends AbstractDescriptorElement {
/**
* The name of the Doclet Tag attribute naming the field to which the
* descriptor applies (value is "fieldName").
*/
public static final String FIELD_NAME = "fieldName";
/**
* The name of the Doclet Tag attribute naming the JCR item to which the
* descriptor applies (value is "jcrName").
*/
public static final String JCR_NAME = "jcrName";
/**
* The name of the Doclet Tag attribute naming the field to which the
* descriptor applies (value is "fieldName").
*/
public static final String JCR_AUTO_CREATED = "jcrAutoCreated";
public static final String JCR_MANDATORY = "jcrMandatory";
public static final String JCR_ON_PARENT_VERSION = "jcrOnParentVersion";
public static final String JCR_PROTECTED = "jcrProtected";
private String fieldName;
private String jcrName;
private boolean isJcrAutoCreated;
private boolean isJcrMandatory;
private String jcrOnParentVersion;
private boolean isJcrProtected;
/**
* @param log
* @param tag
*/
public AbstractItemDescriptor(Log log, DocletTag tag, String fieldName) {
super(log, tag);
this.fieldName = fieldName;
jcrName = tag.getNamedParameter(JCR_NAME);
isJcrAutoCreated = Boolean.valueOf(
tag.getNamedParameter(JCR_AUTO_CREATED)).booleanValue();
isJcrMandatory = Boolean.valueOf(tag.getNamedParameter(JCR_MANDATORY)).booleanValue();
jcrOnParentVersion = tag.getNamedParameter(JCR_ON_PARENT_VERSION);
isJcrProtected = Boolean.valueOf(tag.getNamedParameter(JCR_PROTECTED)).booleanValue();
}
void generate(XMLWriter xmlWriter) {
xmlWriter.printAttribute(FIELD_NAME, fieldName);
xmlWriter.printAttribute(JCR_NAME, jcrName);
xmlWriter.printAttribute(JCR_AUTO_CREATED, isJcrAutoCreated);
xmlWriter.printAttribute(JCR_MANDATORY, isJcrMandatory);
xmlWriter.printAttribute(JCR_ON_PARENT_VERSION, jcrOnParentVersion);
xmlWriter.printAttribute(JCR_PROTECTED, isJcrProtected);
}
/*
* (non-Javadoc)
*
* @see org.apache.sling.maven.jcrocm.AbstractDescriptorElement#validate()
*/
boolean validate() {
boolean valid = true;
if (jcrOnParentVersion != null) {
if (!jcrOnParentVersion.equals("COPY")
&& !jcrOnParentVersion.equals("VERSION")
&& !jcrOnParentVersion.equals("INITIALIZE")
&& !jcrOnParentVersion.equals("COMPUTE")
&& !jcrOnParentVersion.equals("IGNORE")
&& !jcrOnParentVersion.equals("ABORT")) {
log("Invalid JCR Field OnParentVersion: " + jcrOnParentVersion);
valid = false;
}
}
return valid;
}
static String getFieldFromMethod(JavaMethod method) {
String fieldName = method.getName();
if ((fieldName.startsWith("get") || fieldName.startsWith("set"))
&& fieldName.length() >= 4) {
fieldName = Character.toLowerCase(fieldName.charAt(3))
+ fieldName.substring(4);
}
return fieldName;
}
}