/*
* #%L
* Native ARchive plugin for Maven
* %%
* Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
* %%
* 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.
* #L%
*/
package com.github.maven_nar.cpptasks;
import java.util.Vector;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.types.Reference;
/**
* Version Information.
*
* This information is applied in a platform specific manner
* to embed version information into executable images. This
* behavior is new and subject to change.
*
* On the Microsoft Windows platform, a resource is generated and added
* to the set of files to be compiled. A resource compiler must
* be specified to compile the generated file.
*
* On Unix platforms, versioninfo is currently not used.
* Future versions may append fileversion to the output file name,
* use compatibility version for -soname and possibly create
* symbolic links.
*/
public final class VersionInfo extends DataType {
/**
* if property.
*/
private String ifCond;
/**
* unless property.
*/
private String unlessCond;
/**
* extends property.
*/
private Reference extendsRef;
/**
* file version.
*
*/
private String fileVersion;
/**
* Product version.
*
*/
private String productVersion;
/**
* file language.
*
*/
private String language;
/**
* comments.
*
*/
private String fileComments;
/**
* Company name.
*
*/
private String companyName;
/**
* Description.
*
*/
private String fileDescription;
/**
* internal name.
*/
private String internalName;
/**
* legal copyright.
*
*/
private String legalCopyright;
/**
* legal trademark.
*
*/
private String legalTrademarks;
/**
* original filename.
*
*/
private String originalFilename;
/**
* private build.
*
*/
private String privateBuild;
/**
* product name.
*
*/
private String productName;
/**
* Special build
*/
private String specialBuild;
/**
* compatibility version
*
*/
private String compatibilityVersion;
/**
* prerease build.
*
*/
private Boolean prerelease;
/**
* prerease build.
*
*/
private Boolean patched;
/**
* Constructor.
*
*/
public VersionInfo() {
}
/**
* Private constructor for merge.
*
* @param stack
* list of version infos with most significant first.
*/
private VersionInfo(final Vector<VersionInfo> stack) {
VersionInfo source = null;
for (int i = stack.size() - 1; i >= 0; i--) {
source = stack.elementAt(i);
if (source.getIf() != null) {
this.ifCond = source.getIf();
}
if (source.getUnless() != null) {
this.unlessCond = source.getUnless();
}
if (source.getFileversion() != null) {
this.fileVersion = source.getFileversion();
}
if (source.getProductversion() != null) {
this.productVersion = source.getProductversion();
}
if (source.getLanguage() != null) {
this.language = source.getLanguage();
}
if (source.getFilecomments() != null) {
this.fileComments = source.getFilecomments();
}
if (source.getCompanyname() != null) {
this.companyName = source.getCompanyname();
}
if (source.getFiledescription() != null) {
this.fileDescription = source.getFiledescription();
}
if (source.getInternalname() != null) {
this.internalName = source.getInternalname();
}
if (source.getLegalcopyright() != null) {
this.legalCopyright = source.getLegalcopyright();
}
if (source.getLegaltrademarks() != null) {
this.legalTrademarks = source.getLegaltrademarks();
}
if (source.getOriginalfilename() != null) {
this.originalFilename = source.getOriginalfilename();
}
if (source.getPrivatebuild() != null) {
this.privateBuild = source.getPrivatebuild();
}
if (source.getProductname() != null) {
this.productName = source.getProductname();
}
if (source.getSpecialbuild() != null) {
this.specialBuild = source.getSpecialbuild();
}
if (source.getCompatibilityversion() != null) {
this.compatibilityVersion = source.getCompatibilityversion();
}
if (source.getPrerelease() != null) {
this.prerelease = source.getPrerelease();
}
if (source.getPatched() != null) {
this.patched = source.getPatched();
}
}
setProject(source.getProject());
}
/**
* Methods is required for documentation generation, throws
* exception if called.
*
* @throws org.apache.tools.ant.BuildException
* if called
*/
public void execute() throws org.apache.tools.ant.BuildException {
throw new org.apache.tools.ant.BuildException("Not an actual task, but looks like one for documentation purposes");
}
/**
* Gets Company name.
*
* @return company name, may be null.
*/
public String getCompanyname() {
return this.companyName;
}
/**
* Gets compatibility version.
*
* @return compatibility version, may be null
*/
public String getCompatibilityversion() {
return this.compatibilityVersion;
}
public Reference getExtends() {
return this.extendsRef;
}
/**
* Gets comments.
*
* @return comments, may be null.
*/
public String getFilecomments() {
return this.fileComments;
}
/**
* Gets Description.
*
* @return description, may be null.
*/
public String getFiledescription() {
return this.fileDescription;
}
/**
* Gets file version.
*
* @return file version, may be null.
*
*/
public String getFileversion() {
return this.fileVersion;
}
/**
* Gets if property name.
*
* @return property name, may be null.
*/
public final String getIf() {
return this.ifCond;
}
/**
* Gets internal name.
*
* @return internal name, may be null.
*/
public String getInternalname() {
return this.internalName;
}
/**
* Gets file language, should be an IETF RFC 3066 identifier, for example,
* en-US.
*
* @return language, may be null.
*/
public String getLanguage() {
return this.language;
}
/**
* Gets legal copyright.
*
* @return legal copyright, may be null.
*/
public String getLegalcopyright() {
return this.legalCopyright;
}
/**
* Gets legal trademark.
*
* @return legal trademark, may be null;
*/
public String getLegaltrademarks() {
return this.legalTrademarks;
}
/**
* Gets original filename.
*
* @return original filename, may be null.
*/
public String getOriginalfilename() {
return this.originalFilename;
}
/**
* Gets patched.
*
* @return patched, may be null.
*/
public Boolean getPatched() {
return this.patched;
}
/**
* Gets prerelease.
*
* @return prerelease, may be null.
*/
public Boolean getPrerelease() {
return this.prerelease;
}
/**
* Gets private build.
*
* @return private build, may be null.
*/
public String getPrivatebuild() {
return this.privateBuild;
}
/**
* Gets product name.
*
* @return product name, may be null.
*/
public String getProductname() {
return this.productName;
}
/**
* Gets Product version.
*
* @return product version, may be null
*/
public String getProductversion() {
return this.productVersion;
}
/**
* Special build
*
* @return special build, may be null.
*/
public String getSpecialbuild() {
return this.specialBuild;
}
/**
* Gets if property name.
*
* @return property name, may be null.
*/
public final String getUnless() {
return this.unlessCond;
}
/**
* Returns true if the define's if and unless conditions (if any) are
* satisfied.
*
* @exception BuildException
* throws build exception if name is not set
*/
public final boolean isActive() throws BuildException {
return CUtil.isActive(getProject(), this.ifCond, this.unlessCond);
}
/**
* Returns a VersionInfo that reflects any inherited version information.
*
* @return merged version information.
* \
*/
public VersionInfo merge() {
if (isReference()) {
final VersionInfo refVersion = (VersionInfo) getCheckedRef(VersionInfo.class, "VersionInfo");
return refVersion.merge();
}
Reference currentRef = this.getExtends();
if (currentRef == null) {
return this;
}
final Vector<VersionInfo> stack = new Vector<>(5);
stack.addElement(this);
while (currentRef != null) {
final Object obj = currentRef.getReferencedObject(getProject());
if (obj instanceof VersionInfo) {
VersionInfo current = (VersionInfo) obj;
if (current.isReference()) {
current = (VersionInfo) current.getCheckedRef(VersionInfo.class, "VersionInfo");
}
if (stack.contains(current)) {
throw this.circularReference();
}
stack.addElement(current);
currentRef = current.getExtends();
} else {
throw new BuildException("Referenced element " + currentRef.getRefId() + " is not a versioninfo.");
}
}
return new VersionInfo(stack);
}
/**
* Sets company name.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setCompanyname(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.companyName = value;
}
/**
* Sets compatibility version.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setCompatibilityversion(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.compatibilityVersion = value;
}
/**
* Specifies that this element extends the element with id attribute with a
* matching value. The configuration will be constructed from the settings
* of this element, element referenced by extends, and the containing cc
* element.
*
* @param extendsRef
* Reference to the extended processor definition.
* @throws BuildException
* if this processor definition is a reference
*/
public void setExtends(final Reference extendsRef) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.extendsRef = extendsRef;
}
/**
* Sets comments.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setFilecomments(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.fileComments = value;
}
/**
* Sets file description.
*
* @param value
* new value
*/
public void setFiledescription(final String value) {
if (isReference()) {
throw tooManyAttributes();
}
this.fileDescription = value;
}
/**
* Sets file version.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setFileversion(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.fileVersion = value;
}
/**
* Sets an id that can be used to reference this element.
*
* @param id
* id
*/
public void setId(final String id) {
//
// this is actually accomplished by a different
// mechanism, but we can document it
//
}
/**
* Sets the property name for the 'if' condition.
*
* The define will be ignored unless the property is defined.
*
* The value of the property is insignificant, but values that would imply
* misinterpretation ("false", "no") will throw an exception when
* evaluated.
*
* @param propName
* property name
*/
public final void setIf(final String propName) {
if (isReference()) {
throw tooManyAttributes();
}
this.ifCond = propName;
}
/**
* Sets internal name. Internal name will automatically be
* specified from build step, only set this value if
* intentionally overriding that value.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setInternalname(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.internalName = value;
}
/**
* Sets language.
*
* @param value
* new value, should be an IETF RFC 3066 language identifier.
* @throws BuildException
* if specified with refid
*/
public void setLanguage(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.language = value;
}
/**
* Sets legal copyright.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setLegalcopyright(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.legalCopyright = value;
}
/**
* Sets legal trademark.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setLegaltrademarks(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.legalTrademarks = value;
}
/**
* Sets original name. Only set this value if
* intentionally overriding the value from the build set.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setOriginalfilename(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.originalFilename = value;
}
/**
* Sets prerelease.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setPatched(final boolean value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
if (value) {
this.patched = Boolean.TRUE;
} else {
this.patched = Boolean.FALSE;
}
}
/**
* Sets prerelease.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setPrerelease(final boolean value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
if (value) {
this.prerelease = Boolean.TRUE;
} else {
this.prerelease = Boolean.FALSE;
}
}
/**
* Sets private build.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setPrivatebuild(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.privateBuild = value;
}
/**
* Sets product name.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setProductname(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.productName = value;
}
/**
* Sets product version.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setProductversion(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.productVersion = value;
}
/**
* Specifies that this element should behave as if the content of the
* element with the matching id attribute was inserted at this location. If
* specified, no other attributes should be specified.
*
*/
@Override
public void setRefid(final Reference r) throws BuildException {
super.setRefid(r);
}
/**
* Sets private build.
*
* @param value
* new value
* @throws BuildException
* if specified with refid
*/
public void setSpecialbuild(final String value) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.specialBuild = value;
}
/**
* Set the property name for the 'unless' condition.
*
* If named property is set, the define will be ignored.
*
* The value of the property is insignificant, but values that would imply
* misinterpretation ("false", "no") of the behavior will throw an
* exception when evaluated.
*
* @param propName
* name of property
*/
public final void setUnless(final String propName) {
if (isReference()) {
throw tooManyAttributes();
}
this.unlessCond = propName;
}
}