<file_sep>
Prototype Format Registry

<NAME>
AIT Austrian Institute of Technology GmbH
03.01.2011


INSTALLATION

1. Requires Java 1.6 or higher

2. Requires Tomcat 6 or higher


3. Create a working directory for the application, for example

C:/registry

Then create two sub-directories under this directory

C:/registry/work
C:/registry/download


4. Populate the application directory with the source format XML files

4a. You can download these from

https://github.com/rcking/formatxmlrepository

Unpack the container to the application directory (e.g. "C:/registry") 

Rename the new subdirectory from (for example)

C:/registry/rcking-formatxmlrepository-0f9fc13

to

C:/registry/formatxmlrepository

4b. Alternatively, if you have GIT installed, go to the application directory (e.g. "/registry") and execute

git clone https://github.com/rcking/formatxmlrepository.git


5. Copy registry.war to the WEBAPPS directory of your Tomcat installation


6. Edit the WEB-INF/classes/registry.properties file in order to point to the application directories

You can either edit this directly in the war archive, or you can unpack the war archive into the Tomcat webapps directory and then edit the properties file.

formatxmlpath=C:/registry/formatxmlrepository
outputxmlpath=C:/registry/work
downloadpath=C:/registry/download

Note that it is important that these three directories be different!


7. Start Tomcat; the application should be available under

http://localhost:8080/registry/

<file_sep>package at.ac.ait.formatRegistry.gui.pages;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;

import uk.gov.nationalarchives.pronom.PRONOMReport.ReportFormatDetail.FileFormat;
import uk.gov.nationalarchives.pronom.PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature;
import uk.gov.nationalarchives.pronom.PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature.Pattern;
import at.ac.ait.formatRegistry.gui.services.FileFormatDAO;

public class EditFidoPattern {
    @Inject
    private FileFormatDAO formatDAO;
    
    @InjectPage
    private EditFormat editFormat;

    @Property
	@Persist
	private FileFormat _format;
	
	@Property
	@Persist
	private FidoSignature _signature;
	
	@Property
	@Persist
	private List<PatternHolder> _patternHolders;

	@Property
	private PatternHolder _patternHolder;
	
	Object initialize(FileFormat format, FidoSignature signature) {
		_patternHolders = new ArrayList<PatternHolder>();
		Iterator<Pattern> it1 = signature.getPattern().iterator();
		while (it1.hasNext()) {
			_patternHolders.add(new PatternHolder(it1.next(), false, 0 - System.nanoTime()));
		}
		this._format = format;
		this._signature = signature;
		return this;
	}


    public Object onSuccess() {
		for (PatternHolder ph : _patternHolders) {
			Pattern theSequence = ph.getPattern();
			if (ph.isNew()) {
				_signature.getPattern().add(theSequence);
			} else if (ph.isDeleted()) {
				_signature.getPattern().remove(theSequence);
			}
		}   	
    	formatDAO.save(_format);
    	return editFormat.initialize(_format.getFormatID());
    }
    
    PatternHolder onAddRowFromPatterns() {
		// Create a skeleton Person and add it to the displayed list with a unique key
    	Pattern newP = new Pattern();
    	PatternHolder newBsHolder = new PatternHolder(newP, true, 0 - System.nanoTime());
    	_patternHolders.add(newBsHolder);
		return newBsHolder;
	}

	void onRemoveRowFromPatterns(PatternHolder pattern) {
		if (pattern.isNew()) {
			_patternHolders.remove(pattern);;
		}
		else {
			pattern.setDeleted(true);
		}
	}
	
	public ValueEncoder<PatternHolder> getPatternEncoder() {
		return new ValueEncoder<PatternHolder>() {

			public String toClient(PatternHolder value) {
				Long key = value.getKey();
				return key.toString();
			}

			public PatternHolder toValue(String keyAsString) {
				Long key = new Long(keyAsString);
				for (PatternHolder holder : _patternHolders) {
					if (holder.getKey().equals(key)) {
						return holder;
					}
				}
				throw new IllegalArgumentException("Received key \"" + key
						+ "\" which has no counterpart in this collection: " + _patternHolders);
			}
		};
	}

	public class PatternHolder {
		private Pattern _p;
		private Long _key;
		private boolean _new;
		private boolean _deleted;
		PatternHolder(Pattern p, boolean isNew, Long key) {
			_p = p;
			_key = key;
			_new = isNew;
		}
		public Pattern getPattern() {
			return _p;
		}
		public Long getKey() {
			return _key;
		}
		public boolean isNew() {
			return _new;
		}

		public boolean setDeleted(boolean deleted) {
			return _deleted = deleted;
		}

		public boolean isDeleted() {
			return _deleted;
		}
	}

}
<file_sep>package at.ac.ait.formatRegistry.gui.components;

import org.apache.tapestry5.annotations.IncludeStylesheet;

@IncludeStylesheet("context:css/main.css")
public class Layout {

}
<file_sep>// Copyright 2007, 2008 The Apache Software Foundation
//
// 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.

package at.ac.ait.formatRegistry.gui.services;

import java.io.IOException;

import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.InjectService;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestFilter;
import org.apache.tapestry5.services.RequestHandler;
import org.apache.tapestry5.services.Response;
import org.apache.tapestry5.urlrewriter.RewriteRuleApplicability;
import org.apache.tapestry5.urlrewriter.SimpleRequestWrapper;
import org.apache.tapestry5.urlrewriter.URLRewriterRule;
import org.apache.tapestry5.urlrewriter.URLRewriteContext;
import org.slf4j.Logger;

/**
 * This module is automatically included as part of the Tapestry IoC Registry,
 * it's a good place to configure and extend Tapestry, or to place your own
 * service definitions.
 */
public class AppModule {
	public static void bind(ServiceBinder binder) {
		// binder.bind(MyServiceInterface.class, MyServiceImpl.class);
		binder.bind(FileFormatDAO.class, FileFormatDAOImpl.class);
		// Make bind() calls on the binder object to define most IoC services.
		// Use service builder methods (example below) when the implementation
		// is provided inline, or requires more initialization than simply
		// invoking the constructor.
	}

	public static void contributeApplicationDefaults(
			MappedConfiguration<String, String> configuration) {
		// Contributions to ApplicationDefaults will override any contributions
		// to
		// FactoryDefaults (with the same key). Here we're restricting the
		// supported
		// locales to just "en" (English). As you add localised message catalogs
		// and other assets,
		// you can extend this list of locales (it's a comma seperated series of
		// locale names;
		// the first locale name is the default when there's no reasonable
		// match).

		configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");

		// The factory default is true but during the early stages of an
		// application
		// overriding to false is a good idea. In addition, this is often
		// overridden
		// on the command line as -Dtapestry.production-mode=false
		configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
	}

	/**
	 * This is a service definition, the service will be named "TimingFilter".
	 * The interface, RequestFilter, is used within the RequestHandler service
	 * pipeline, which is built from the RequestHandler service configuration.
	 * Tapestry IoC is responsible for passing in an appropriate Log instance.
	 * Requests for static resources are handled at a higher level, so this
	 * filter will only be invoked for Tapestry related requests.
	 * 
	 * <p>
	 * Service builder methods are useful when the implementation is inline as
	 * an inner class (as here) or require some other kind of special
	 * initialization. In most cases, use the static bind() method instead.
	 * 
	 * <p>
	 * If this method was named "build", then the service id would be taken from
	 * the service interface and would be "RequestFilter". Since Tapestry
	 * already defines a service named "RequestFilter" we use an explicit
	 * service id that we can reference inside the contribution method.
	 */
	public RequestFilter buildTimingFilter(final Logger log) {
		return new RequestFilter() {
			public boolean service(Request request, Response response,
					RequestHandler handler) throws IOException {
				long startTime = System.currentTimeMillis();

				try {
					// The reponsibility of a filter is to invoke the
					// corresponding method
					// in the handler. When you chain multiple filters together,
					// each filter
					// received a handler that is a bridge to the next filter.

					return handler.service(request, response);
				} finally {
					long elapsed = System.currentTimeMillis() - startTime;

					log.info(String.format("Request time: %d ms", elapsed));
				}
			}
		};
	}

	/**
	 * This is a contribution to the RequestHandler service configuration. This
	 * is how we extend Tapestry using the timing filter. A common use for this
	 * kind of filter is transaction management or security.
	 */
	public void contributeRequestHandler(
			OrderedConfiguration<RequestFilter> configuration,
			@InjectService("TimingFilter") RequestFilter filter) {
		// Each contribution to an ordered configuration has a name, When
		// necessary, you may
		// set constraints to precisely control the invocation order of the
		// contributed filter
		// within the pipeline.

		configuration.add("Timing", filter);
	}

	public static void contributeURLRewriter(
			OrderedConfiguration<URLRewriterRule> configuration) {

		URLRewriterRule rule1 = new URLRewriterRule() {

			public Request process(Request request, URLRewriteContext context) {
				final String path = request.getPath();
				if (path.startsWith("/fmt/")) {
					String newPath = path.replaceFirst("fmt", "viewpronom");
					request = new SimpleRequestWrapper(request, newPath);
				}

				return request;

			}

			public RewriteRuleApplicability applicability() {
				return RewriteRuleApplicability.INBOUND;
			}

		};
		
		URLRewriterRule rule2 = new URLRewriterRule() {

			public Request process(Request request, URLRewriteContext context) {
				final String path = request.getPath();
				if (path.startsWith("/x-fmt/")) {
					String newPath = path.replaceFirst("x-fmt", "viewpronomx");
					request = new SimpleRequestWrapper(request, newPath);
				}

				return request;

			}

			public RewriteRuleApplicability applicability() {
				return RewriteRuleApplicability.INBOUND;
			}

		};
		
		URLRewriterRule rule3 = new URLRewriterRule() {

			public Request process(Request request, URLRewriteContext context) {
				final String path = request.getPath();
				if (path.startsWith("/o-fmt/")) {
					String newPath = path.replaceFirst("o-fmt", "viewpronomo");
					request = new SimpleRequestWrapper(request, newPath);
				}

				return request;

			}

			public RewriteRuleApplicability applicability() {
				return RewriteRuleApplicability.INBOUND;
			}

		};
		
		configuration.add("fmt-rule", rule1);
		configuration.add("x-fmt-rule", rule2);
		configuration.add("o-fmt-rule", rule3);

	}

}
<file_sep>//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.3 in JDK 1.6 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2010.11.18 at 11:42:33 AM MEZ 
//

package uk.gov.nationalarchives.pronom;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.apache.tapestry5.beaneditor.NonVisual;

import uk.bl.dpt.fido.ContainerType;
import uk.bl.dpt.fido.PositionType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "reportFormatDetail"
})
@XmlRootElement(name = "PRONOM-Report")
public class PRONOMReport {

    @XmlElement(name = "report_format_detail")
    protected List<PRONOMReport.ReportFormatDetail> reportFormatDetail;

    /**
     * Gets the value of the reportFormatDetail property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the reportFormatDetail property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getReportFormatDetail().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link PRONOMReport.ReportFormatDetail }
     * 
     * 
     */
    public List<PRONOMReport.ReportFormatDetail> getReportFormatDetail() {
        if (reportFormatDetail == null) {
            reportFormatDetail = new ArrayList<PRONOMReport.ReportFormatDetail>();
        }
        return this.reportFormatDetail;
    }


    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "searchCriteria",
        "fileFormat"
    })
    public static class ReportFormatDetail {

        @XmlElement(name = "SearchCriteria")
        protected String searchCriteria;
        @XmlElement(name = "FileFormat")
        protected List<PRONOMReport.ReportFormatDetail.FileFormat> fileFormat;

        /**
         * Gets the value of the searchCriteria property.
         * 
         * @return
         *     possible object is
         *     {@link String }
         *     
         */
        public String getSearchCriteria() {
            return searchCriteria;
        }

        /**
         * Sets the value of the searchCriteria property.
         * 
         * @param value
         *     allowed object is
         *     {@link String }
         *     
         */
        public void setSearchCriteria(String value) {
            this.searchCriteria = value;
        }

        /**
         * Gets the value of the fileFormat property.
         * 
         * <p>
         * This accessor method returns a reference to the live list,
         * not a snapshot. Therefore any modification you make to the
         * returned list will be present inside the JAXB object.
         * This is why there is not a <CODE>set</CODE> method for the fileFormat property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getFileFormat().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link PRONOMReport.ReportFormatDetail.FileFormat }
         * 
         * 
         */
        public List<PRONOMReport.ReportFormatDetail.FileFormat> getFileFormat() {
            if (fileFormat == null) {
                fileFormat = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat>();
            }
            return this.fileFormat;
        }

        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "", propOrder = {
            "formatID",
            "formatName",
            "formatVersion",
            "formatAliases",
            "formatFamilies",
            "formatTypes",
            "formatDisclosure",
            "formatDescription",
            "binaryFileFormat",
            "byteOrders",
            "releaseDate",
            "withdrawnDate",
            "provenanceSourceID",
            "provenanceName",
            "provenanceSourceDate",
            "provenanceDescription",
            "lastUpdatedDate",
            "formatNote",
            "formatRisk",
            "container",
            "technicalEnvironment",
            "fileFormatIdentifier",
            "document",
            "externalSignature",
            "internalSignature",
            "fidoSignature",
            "relatedFormat",
            "compressionType"
        })
        public static class FileFormat {

            @XmlElement(name = "FormatID")
            protected String formatID;
            @XmlElement(name = "FormatName")
            protected String formatName;
            @XmlElement(name = "FormatVersion")
            protected String formatVersion;
            @XmlElement(name = "FormatAliases")
            protected String formatAliases;
            @XmlElement(name = "FormatFamilies")
            protected String formatFamilies;
            @XmlElement(name = "FormatTypes")
            protected String formatTypes;
            @XmlElement(name = "FormatDisclosure")
            protected String formatDisclosure;
            @XmlElement(name = "FormatDescription")
            protected String formatDescription;
            @XmlElement(name = "BinaryFileFormat")
            protected String binaryFileFormat;
            @XmlElement(name = "ByteOrders")
            protected String byteOrders;
            @XmlElement(name = "ReleaseDate")
            protected String releaseDate;
            @XmlElement(name = "WithdrawnDate")
            protected String withdrawnDate;
            @XmlElement(name = "ProvenanceSourceID")
            protected String provenanceSourceID;
            @XmlElement(name = "ProvenanceName")
            protected String provenanceName;
            @XmlElement(name = "ProvenanceSourceDate")
            protected String provenanceSourceDate;
            @XmlElement(name = "ProvenanceDescription")
            protected String provenanceDescription;
            @XmlElement(name = "LastUpdatedDate")
            protected String lastUpdatedDate;
            @XmlElement(name = "FormatNote")
            protected String formatNote;
            @XmlElement(name = "FormatRisk")
            protected String formatRisk;
            @XmlElement(name = "Container")
            protected ContainerType container;
            @XmlElement(name = "TechnicalEnvironment")
            protected String technicalEnvironment;
            @XmlElement(name = "FileFormatIdentifier")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.FileFormatIdentifier> fileFormatIdentifier;
            @XmlElement(name = "Document")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.Document> document;
            @XmlElement(name = "ExternalSignature")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.ExternalSignature> externalSignature;
            @XmlElement(name = "InternalSignature")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature> internalSignature;
            @XmlElement(name = "FidoSignature")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature> fidoSignature;
            @XmlElement(name = "RelatedFormat")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.RelatedFormat> relatedFormat;
            @XmlElement(name = "CompressionType")
            protected List<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType> compressionType;

            /**
             * Gets the value of the formatID property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            @NonVisual
            public String getFormatID() {
                return formatID;
            }

            /**
             * Sets the value of the formatID property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatID(String value) {
                this.formatID = value;
            }

            public String getPronomID() {
            	Iterator<FileFormatIdentifier> it = this.getFileFormatIdentifier().iterator();
            	while (it.hasNext()) {
            		FileFormatIdentifier ffi = it.next();
            		IdentifierTypes type = ffi.getIdentifierType();
            		if (type==IdentifierTypes.PUID) return ffi.getIdentifier();
            	}
                return "";
            }
            
            public String getExtensionList() {
            	String retString ="";
            	Iterator<ExternalSignature> it = this.getExternalSignature().iterator();
            	while (it.hasNext()) {
            		ExternalSignature es = it.next();
            		SignatureTypes type = es.getSignatureType();
            		if (type==SignatureTypes.File_extension) {
            			if (retString.equals("")) {
            				retString = es.getSignature();
            			} else {
                			retString = retString + ", " + es.getSignature();            				
            			}
            		}
            	}
            	return retString;
            }

            /**
             * Gets the value of the formatName property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatName() {
                return formatName;
            }

            /**
             * Sets the value of the formatName property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatName(String value) {
                this.formatName = value;
            }

            /**
             * Gets the value of the formatVersion property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatVersion() {
                return formatVersion;
            }

            /**
             * Sets the value of the formatVersion property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatVersion(String value) {
                this.formatVersion = value;
            }

            /**
             * Gets the value of the formatAliases property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatAliases() {
                return formatAliases;
            }

            /**
             * Sets the value of the formatAliases property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatAliases(String value) {
                this.formatAliases = value;
            }

            /**
             * Gets the value of the formatFamilies property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatFamilies() {
                return formatFamilies;
            }

            /**
             * Sets the value of the formatFamilies property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatFamilies(String value) {
                this.formatFamilies = value;
            }

            /**
             * Gets the value of the formatTypes property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatTypes() {
                return formatTypes;
            }

            /**
             * Sets the value of the formatTypes property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatTypes(String value) {
                this.formatTypes = value;
            }

            /**
             * Gets the value of the formatDisclosure property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatDisclosure() {
                return formatDisclosure;
            }

            /**
             * Sets the value of the formatDisclosure property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatDisclosure(String value) {
                this.formatDisclosure = value;
            }

            /**
             * Gets the value of the formatDescription property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatDescription() {
                return formatDescription;
            }

            /**
             * Sets the value of the formatDescription property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatDescription(String value) {
                this.formatDescription = value;
            }

            /**
             * Gets the value of the binaryFileFormat property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getBinaryFileFormat() {
                return binaryFileFormat;
            }

            /**
             * Sets the value of the binaryFileFormat property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setBinaryFileFormat(String value) {
                this.binaryFileFormat = value;
            }

            /**
             * Gets the value of the byteOrders property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getByteOrders() {
                return byteOrders;
            }

            /**
             * Sets the value of the byteOrders property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setByteOrders(String value) {
                this.byteOrders = value;
            }

            /**
             * Gets the value of the releaseDate property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getReleaseDate() {
                return releaseDate;
            }

            /**
             * Sets the value of the releaseDate property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setReleaseDate(String value) {
                this.releaseDate = value;
            }

            /**
             * Gets the value of the withdrawnDate property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getWithdrawnDate() {
                return withdrawnDate;
            }

            /**
             * Sets the value of the withdrawnDate property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setWithdrawnDate(String value) {
                this.withdrawnDate = value;
            }

            /**
             * Gets the value of the provenanceSourceID property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            @NonVisual
            public String getProvenanceSourceID() {
                return provenanceSourceID;
            }

            /**
             * Sets the value of the provenanceSourceID property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setProvenanceSourceID(String value) {
                this.provenanceSourceID = value;
            }

            /**
             * Gets the value of the provenanceName property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getProvenanceName() {
                return provenanceName;
            }

            /**
             * Sets the value of the provenanceName property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setProvenanceName(String value) {
                this.provenanceName = value;
            }

            /**
             * Gets the value of the provenanceSourceDate property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getProvenanceSourceDate() {
                return provenanceSourceDate;
            }

            /**
             * Sets the value of the provenanceSourceDate property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setProvenanceSourceDate(String value) {
                this.provenanceSourceDate = value;
            }

            /**
             * Gets the value of the provenanceDescription property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getProvenanceDescription() {
                return provenanceDescription;
            }

            /**
             * Sets the value of the provenanceDescription property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setProvenanceDescription(String value) {
                this.provenanceDescription = value;
            }

            /**
             * Gets the value of the lastUpdatedDate property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getLastUpdatedDate() {
                return lastUpdatedDate;
            }

            /**
             * Sets the value of the lastUpdatedDate property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setLastUpdatedDate(String value) {
                this.lastUpdatedDate = value;
            }

            /**
             * Gets the value of the formatNote property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatNote() {
                return formatNote;
            }

            /**
             * Sets the value of the formatNote property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatNote(String value) {
                this.formatNote = value;
            }

            /**
             * Gets the value of the formatRisk property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getFormatRisk() {
                return formatRisk;
            }

            /**
             * Sets the value of the container property.
             * 
             * @param value
             *     allowed object is
             *     {@link ContainerType }
             *     
             */
            public void setContainer(ContainerType value) {
                this.container = value;
            }

            /**
             * Gets the value of the container property.
             * 
             * @return
             *     possible object is
             *     {@link ContainerType }
             *     
             */
            public ContainerType getContainer() {
                return container;
            }

            /**
             * Sets the value of the formatRisk property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setFormatRisk(String value) {
                this.formatRisk = value;
            }

            /**
             * Gets the value of the technicalEnvironment property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getTechnicalEnvironment() {
                return technicalEnvironment;
            }

            /**
             * Sets the value of the technicalEnvironment property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setTechnicalEnvironment(String value) {
                this.technicalEnvironment = value;
            }

            /**
             * Gets the value of the fileFormatIdentifier property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the fileFormatIdentifier property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getFileFormatIdentifier().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.FileFormatIdentifier }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.FileFormatIdentifier> getFileFormatIdentifier() {
                if (fileFormatIdentifier == null) {
                    fileFormatIdentifier = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.FileFormatIdentifier>();
                }
                return this.fileFormatIdentifier;
            }

            /**
             * Gets the value of the document property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the document property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getDocument().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.Document }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.Document> getDocument() {
                if (document == null) {
                    document = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.Document>();
                }
                return this.document;
            }

            /**
             * Gets the value of the externalSignature property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the externalSignature property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getExternalSignature().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.ExternalSignature }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.ExternalSignature> getExternalSignature() {
                if (externalSignature == null) {
                    externalSignature = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.ExternalSignature>();
                }
                return this.externalSignature;
            }

            /**
             * Gets the value of the internalSignature property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the internalSignature property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getInternalSignature().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature> getInternalSignature() {
                if (internalSignature == null) {
                    internalSignature = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature>();
                }
                return this.internalSignature;
            }

            /**
             * Gets the value of the fidoSignature property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the internalSignature property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getFidoSignature().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature> getFidoSignature() {
                if (fidoSignature == null) {
                	fidoSignature = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature>();
                }
                return this.fidoSignature;
            }

            /**
             * Gets the value of the relatedFormat property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the relatedFormat property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getRelatedFormat().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.RelatedFormat }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.RelatedFormat> getRelatedFormat() {
                if (relatedFormat == null) {
                    relatedFormat = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.RelatedFormat>();
                }
                return this.relatedFormat;
            }

            /**
             * Gets the value of the compressionType property.
             * 
             * <p>
             * This accessor method returns a reference to the live list,
             * not a snapshot. Therefore any modification you make to the
             * returned list will be present inside the JAXB object.
             * This is why there is not a <CODE>set</CODE> method for the compressionType property.
             * 
             * <p>
             * For example, to add a new item, do as follows:
             * <pre>
             *    getCompressionType().add(newItem);
             * </pre>
             * 
             * 
             * <p>
             * Objects of the following type(s) are allowed in the list
             * {@link PRONOMReport.ReportFormatDetail.FileFormat.CompressionType }
             * 
             * 
             */
            public List<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType> getCompressionType() {
                if (compressionType == null) {
                    compressionType = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType>();
                }
                return this.compressionType;
            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "compressionID",
                "compressionName",
                "compressionVersion",
                "compressionAliases",
                "compressionFamilies",
                "description",
                "lossiness",
                "releaseDate",
                "withdrawnDate",
                "compressionDocumentation",
                "compressionIPR",
                "compressionNote",
                "compressionIdentifier"
            })
            public static class CompressionType {

                @XmlElement(name = "CompressionID")
                protected String compressionID;
                @XmlElement(name = "CompressionName")
                protected String compressionName;
                @XmlElement(name = "CompressionVersion")
                protected String compressionVersion;
                @XmlElement(name = "CompressionAliases")
                protected String compressionAliases;
                @XmlElement(name = "CompressionFamilies")
                protected String compressionFamilies;
                @XmlElement(name = "Description")
                protected String description;
                @XmlElement(name = "Lossiness")
                protected String lossiness;
                @XmlElement(name = "ReleaseDate")
                protected String releaseDate;
                @XmlElement(name = "WithdrawnDate")
                protected String withdrawnDate;
                @XmlElement(name = "CompressionDocumentation")
                protected String compressionDocumentation;
                @XmlElement(name = "CompressionIPR")
                protected String compressionIPR;
                @XmlElement(name = "CompressionNote")
                protected String compressionNote;
                @XmlElement(name = "CompressionIdentifier")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType.CompressionIdentifier> compressionIdentifier;

                /**
                 * Gets the value of the compressionID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getCompressionID() {
                    return compressionID;
                }

                /**
                 * Sets the value of the compressionID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionID(String value) {
                    this.compressionID = value;
                }

                /**
                 * Gets the value of the compressionName property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionName() {
                    return compressionName;
                }

                /**
                 * Sets the value of the compressionName property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionName(String value) {
                    this.compressionName = value;
                }

                /**
                 * Gets the value of the compressionVersion property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionVersion() {
                    return compressionVersion;
                }

                /**
                 * Sets the value of the compressionVersion property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionVersion(String value) {
                    this.compressionVersion = value;
                }

                /**
                 * Gets the value of the compressionAliases property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionAliases() {
                    return compressionAliases;
                }

                /**
                 * Sets the value of the compressionAliases property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionAliases(String value) {
                    this.compressionAliases = value;
                }

                /**
                 * Gets the value of the compressionFamilies property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionFamilies() {
                    return compressionFamilies;
                }

                /**
                 * Sets the value of the compressionFamilies property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionFamilies(String value) {
                    this.compressionFamilies = value;
                }

                /**
                 * Gets the value of the description property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getDescription() {
                    return description;
                }

                /**
                 * Sets the value of the description property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDescription(String value) {
                    this.description = value;
                }

                /**
                 * Gets the value of the lossiness property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getLossiness() {
                    return lossiness;
                }

                /**
                 * Sets the value of the lossiness property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setLossiness(String value) {
                    this.lossiness = value;
                }

                /**
                 * Gets the value of the releaseDate property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getReleaseDate() {
                    return releaseDate;
                }

                /**
                 * Sets the value of the releaseDate property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setReleaseDate(String value) {
                    this.releaseDate = value;
                }

                /**
                 * Gets the value of the withdrawnDate property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getWithdrawnDate() {
                    return withdrawnDate;
                }

                /**
                 * Sets the value of the withdrawnDate property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setWithdrawnDate(String value) {
                    this.withdrawnDate = value;
                }

                /**
                 * Gets the value of the compressionDocumentation property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionDocumentation() {
                    return compressionDocumentation;
                }

                /**
                 * Sets the value of the compressionDocumentation property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionDocumentation(String value) {
                    this.compressionDocumentation = value;
                }

                /**
                 * Gets the value of the compressionIPR property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionIPR() {
                    return compressionIPR;
                }

                /**
                 * Sets the value of the compressionIPR property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionIPR(String value) {
                    this.compressionIPR = value;
                }

                /**
                 * Gets the value of the compressionNote property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getCompressionNote() {
                    return compressionNote;
                }

                /**
                 * Sets the value of the compressionNote property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setCompressionNote(String value) {
                    this.compressionNote = value;
                }

                /**
                 * Gets the value of the compressionIdentifier property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the compressionIdentifier property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getCompressionIdentifier().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.CompressionType.CompressionIdentifier }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType.CompressionIdentifier> getCompressionIdentifier() {
                    if (compressionIdentifier == null) {
                        compressionIdentifier = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.CompressionType.CompressionIdentifier>();
                    }
                    return this.compressionIdentifier;
                }


                /**
                 * <p>Java class for anonymous complex type.
                 * 
                 * <p>The following schema fragment specifies the expected content contained within this class.
                 * 
                 * <pre>
                 * &lt;complexType>
                 *   &lt;complexContent>
                 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
                 *       &lt;sequence>
                 *         &lt;element name="Identifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
                 *         &lt;element name="IdentifierType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
                 *       &lt;/sequence>
                 *     &lt;/restriction>
                 *   &lt;/complexContent>
                 * &lt;/complexType>
                 * </pre>
                 * 
                 * 
                 */
                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "identifier",
                    "identifierType"
                })
                public static class CompressionIdentifier {

                    @XmlElement(name = "Identifier")
                    protected String identifier;
                    @XmlElement(name = "IdentifierType")
                    protected String identifierType;

                    /**
                     * Gets the value of the identifier property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIdentifier() {
                        return identifier;
                    }

                    /**
                     * Sets the value of the identifier property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIdentifier(String value) {
                        this.identifier = value;
                    }

                    /**
                     * Gets the value of the identifierType property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIdentifierType() {
                        return identifierType;
                    }

                    /**
                     * Sets the value of the identifierType property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIdentifierType(String value) {
                        this.identifierType = value;
                    }

                }

            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "documentID",
                "displayText",
                "documentType",
                "availabilityDescription",
                "availabilityNote",
                "publicationDate",
                "titleText",
                "documentIPR",
                "documentNote",
                "documentIdentifier",
                "author",
                "publisher"
            })
            public static class Document {

                @XmlElement(name = "DocumentID")
                protected String documentID;
                @XmlElement(name = "DisplayText")
                protected String displayText;
                @XmlElement(name = "DocumentType")
                protected String documentType;
                @XmlElement(name = "AvailabilityDescription")
                protected String availabilityDescription;
                @XmlElement(name = "AvailabilityNote")
                protected String availabilityNote;
                @XmlElement(name = "PublicationDate")
                protected String publicationDate;
                @XmlElement(name = "TitleText")
                protected String titleText;
                @XmlElement(name = "DocumentIPR")
                protected String documentIPR;
                @XmlElement(name = "DocumentNote")
                protected String documentNote;
                @XmlElement(name = "DocumentIdentifier")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.Document.DocumentIdentifier> documentIdentifier;
                @XmlElement(name = "Author")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.Document.Author> author;
                @XmlElement(name = "Publisher")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.Document.Publisher> publisher;

                /**
                 * Gets the value of the documentID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getDocumentID() {
                    return documentID;
                }

                /**
                 * Sets the value of the documentID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDocumentID(String value) {
                    this.documentID = value;
                }

                /**
                 * Gets the value of the displayText property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getDisplayText() {
                    return displayText;
                }

                /**
                 * Sets the value of the displayText property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDisplayText(String value) {
                    this.displayText = value;
                }

                /**
                 * Gets the value of the documentType property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getDocumentType() {
                    return documentType;
                }

                /**
                 * Sets the value of the documentType property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDocumentType(String value) {
                    this.documentType = value;
                }

                /**
                 * Gets the value of the availabilityDescription property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getAvailabilityDescription() {
                    return availabilityDescription;
                }

                /**
                 * Sets the value of the availabilityDescription property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setAvailabilityDescription(String value) {
                    this.availabilityDescription = value;
                }

                /**
                 * Gets the value of the availabilityNote property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getAvailabilityNote() {
                    return availabilityNote;
                }

                /**
                 * Sets the value of the availabilityNote property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setAvailabilityNote(String value) {
                    this.availabilityNote = value;
                }

                /**
                 * Gets the value of the publicationDate property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getPublicationDate() {
                    return publicationDate;
                }

                /**
                 * Sets the value of the publicationDate property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setPublicationDate(String value) {
                    this.publicationDate = value;
                }

                /**
                 * Gets the value of the titleText property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getTitleText() {
                    return titleText;
                }

                /**
                 * Sets the value of the titleText property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setTitleText(String value) {
                    this.titleText = value;
                }

                /**
                 * Gets the value of the documentIPR property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getDocumentIPR() {
                    return documentIPR;
                }

                /**
                 * Sets the value of the documentIPR property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDocumentIPR(String value) {
                    this.documentIPR = value;
                }

                /**
                 * Gets the value of the documentNote property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getDocumentNote() {
                    return documentNote;
                }

                /**
                 * Sets the value of the documentNote property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setDocumentNote(String value) {
                    this.documentNote = value;
                }

                /**
                 * Gets the value of the documentIdentifier property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the documentIdentifier property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getDocumentIdentifier().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.Document.DocumentIdentifier }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.Document.DocumentIdentifier> getDocumentIdentifier() {
                    if (documentIdentifier == null) {
                        documentIdentifier = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.Document.DocumentIdentifier>();
                    }
                    return this.documentIdentifier;
                }

                /**
                 * Gets the value of the author property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the author property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getAuthor().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.Document.Author }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.Document.Author> getAuthor() {
                    if (author == null) {
                        author = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.Document.Author>();
                    }
                    return this.author;
                }

                /**
                 * Gets the value of the publisher property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the publisher property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getPublisher().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.Document.Publisher }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.Document.Publisher> getPublisher() {
                    if (publisher == null) {
                        publisher = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.Document.Publisher>();
                    }
                    return this.publisher;
                }


                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "authorID",
                    "authorName",
                    "organisationName",
                    "authorCompoundName"
                })
                public static class Author {

                    @XmlElement(name = "AuthorID")
                    protected String authorID;
                    @XmlElement(name = "AuthorName")
                    protected String authorName;
                    @XmlElement(name = "OrganisationName")
                    protected String organisationName;
                    @XmlElement(name = "AuthorCompoundName")
                    protected String authorCompoundName;

                    /**
                     * Gets the value of the authorID property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    @NonVisual
                    public String getAuthorID() {
                        return authorID;
                    }

                    /**
                     * Sets the value of the authorID property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setAuthorID(String value) {
                        this.authorID = value;
                    }

                    /**
                     * Gets the value of the authorName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getAuthorName() {
                        return authorName;
                    }

                    /**
                     * Sets the value of the authorName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setAuthorName(String value) {
                        this.authorName = value;
                    }

                    /**
                     * Gets the value of the organisationName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getOrganisationName() {
                        return organisationName;
                    }

                    /**
                     * Sets the value of the organisationName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setOrganisationName(String value) {
                        this.organisationName = value;
                    }

                    /**
                     * Gets the value of the authorCompoundName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getAuthorCompoundName() {
                        return authorCompoundName;
                    }

                    /**
                     * Sets the value of the authorCompoundName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setAuthorCompoundName(String value) {
                        this.authorCompoundName = value;
                    }

                }

                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "identifier",
                    "identifierType"
                })
                public static class DocumentIdentifier {

                    @XmlElement(name = "Identifier")
                    protected String identifier;
                    @XmlElement(name = "IdentifierType")
                    protected String identifierType;

                    /**
                     * Gets the value of the identifier property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIdentifier() {
                        return identifier;
                    }

                    /**
                     * Sets the value of the identifier property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIdentifier(String value) {
                        this.identifier = value;
                    }

                    /**
                     * Gets the value of the identifierType property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIdentifierType() {
                        return identifierType;
                    }

                    /**
                     * Sets the value of the identifierType property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIdentifierType(String value) {
                        this.identifierType = value;
                    }

                }

                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "publisherID",
                    "publisherName",
                    "organisationName",
                    "publisherCompoundName"
                })
                public static class Publisher {

                    @XmlElement(name = "PublisherID")
                    protected String publisherID;
                    @XmlElement(name = "PublisherName")
                    protected String publisherName;
                    @XmlElement(name = "OrganisationName")
                    protected String organisationName;
                    @XmlElement(name = "PublisherCompoundName")
                    protected String publisherCompoundName;

                    /**
                     * Gets the value of the publisherID property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    @NonVisual
                    public String getPublisherID() {
                        return publisherID;
                    }

                    /**
                     * Sets the value of the publisherID property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setPublisherID(String value) {
                        this.publisherID = value;
                    }

                    /**
                     * Gets the value of the publisherName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getPublisherName() {
                        return publisherName;
                    }

                    /**
                     * Sets the value of the publisherName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setPublisherName(String value) {
                        this.publisherName = value;
                    }

                    /**
                     * Gets the value of the organisationName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getOrganisationName() {
                        return organisationName;
                    }

                    /**
                     * Sets the value of the organisationName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setOrganisationName(String value) {
                        this.organisationName = value;
                    }

                    /**
                     * Gets the value of the publisherCompoundName property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getPublisherCompoundName() {
                        return publisherCompoundName;
                    }

                    /**
                     * Sets the value of the publisherCompoundName property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setPublisherCompoundName(String value) {
                        this.publisherCompoundName = value;
                    }

                }

            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "externalSignatureID",
                "signature",
                "signatureType"
            })
            public static class ExternalSignature {

                @XmlElement(name = "ExternalSignatureID")
                protected String externalSignatureID;
                @XmlElement(name = "Signature")
                protected String signature;
                @XmlElement(name = "SignatureType")
                protected SignatureTypes signatureType;

                /**
                 * Gets the value of the externalSignatureID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getExternalSignatureID() {
                    return externalSignatureID;
                }

                /**
                 * Sets the value of the externalSignatureID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setExternalSignatureID(String value) {
                    this.externalSignatureID = value;
                }

                /**
                 * Gets the value of the signature property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getSignature() {
                    return signature;
                }

                /**
                 * Sets the value of the signature property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setSignature(String value) {
                    this.signature = value;
                }

                /**
                 * Gets the value of the signatureType property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public SignatureTypes getSignatureType() {
                    return signatureType;
                }

                /**
                 * Sets the value of the signatureType property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setSignatureType(SignatureTypes value) {
                    this.signatureType = value;
                }

            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "identifier",
                "identifierType"
            })
            public static class FileFormatIdentifier {

                @XmlElement(name = "Identifier")
                protected String identifier;
                @XmlElement(name = "IdentifierType")
                protected IdentifierTypes identifierType;

                /**
                 * Gets the value of the identifier property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getIdentifier() {
                    return identifier;
                }

                /**
                 * Sets the value of the identifier property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setIdentifier(String value) {
                    this.identifier = value;
                }

                /**
                 * Gets the value of the identifierType property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public IdentifierTypes getIdentifierType() {
                    return identifierType;
                }

                /**
                 * Sets the value of the identifierType property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setIdentifierType(IdentifierTypes value) {
                    this.identifierType = value;
                }

            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "signatureID",
                "signatureName",
                "signatureNote",
                "byteSequence"
            })
            public static class InternalSignature {

                @XmlElement(name = "SignatureID")
                protected String signatureID;
                @XmlElement(name = "SignatureName")
                protected String signatureName;
                @XmlElement(name = "SignatureNote")
                protected String signatureNote;
                @XmlElement(name = "ByteSequence")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature.ByteSequence> byteSequence;

                /**
                 * Gets the value of the signatureID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getSignatureID() {
                    return signatureID;
                }

                /**
                 * Sets the value of the signatureID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setSignatureID(String value) {
                    this.signatureID = value;
                }

                /**
                 * Gets the value of the signatureName property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getSignatureName() {
                    return signatureName;
                }

                /**
                 * Sets the value of the signatureName property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setSignatureName(String value) {
                    this.signatureName = value;
                }

                /**
                 * Gets the value of the signatureNote property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getSignatureNote() {
                    return signatureNote;
                }

                /**
                 * Sets the value of the signatureNote property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setSignatureNote(String value) {
                    this.signatureNote = value;
                }

                /**
                 * Gets the value of the byteSequence property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the byteSequence property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getByteSequence().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature.ByteSequence }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature.ByteSequence> getByteSequence() {
                    if (byteSequence == null) {
                        byteSequence = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature.ByteSequence>();
                    }
                    return this.byteSequence;
                }

                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "byteSequenceID",
                    "positionType",
                    "offset",
                    "maxOffset",
                    "indirectOffsetLocation",
                    "indirectOffsetLength",
                    "endianness",
                    "byteSequenceValue"
                })
                public static class ByteSequence {

                    @XmlElement(name = "ByteSequenceID")
                    protected String byteSequenceID;
                    @XmlElement(name = "PositionType")
                    protected String positionType;
                    @XmlElement(name = "Offset")
                    protected String offset;
                    @XmlElement(name = "MaxOffset")
                    protected String maxOffset;
                    @XmlElement(name = "IndirectOffsetLocation")
                    protected String indirectOffsetLocation;
                    @XmlElement(name = "IndirectOffsetLength")
                    protected String indirectOffsetLength;
                    @XmlElement(name = "Endianness")
                    protected String endianness;
                    @XmlElement(name = "ByteSequenceValue")
                    protected String byteSequenceValue;

                    /**
                     * Gets the value of the byteSequenceID property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    @NonVisual
                    public String getByteSequenceID() {
                        return byteSequenceID;
                    }

                    /**
                     * Sets the value of the byteSequenceID property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setByteSequenceID(String value) {
                        this.byteSequenceID = value;
                    }

                    /**
                     * Gets the value of the positionType property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getPositionType() {
                        return positionType;
                    }

                    /**
                     * Sets the value of the positionType property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setPositionType(String value) {
                        this.positionType = value;
                    }

                    /**
                     * Gets the value of the offset property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getOffset() {
                        return offset;
                    }

                    /**
                     * Sets the value of the offset property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setOffset(String value) {
                        this.offset = value;
                    }

                    /**
                     * Gets the value of the maxOffset property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getMaxOffset() {
                        return maxOffset;
                    }

                    /**
                     * Sets the value of the maxOffset property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setMaxOffset(String value) {
                        this.maxOffset = value;
                    }

                    /**
                     * Gets the value of the indirectOffsetLocation property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIndirectOffsetLocation() {
                        return indirectOffsetLocation;
                    }

                    /**
                     * Sets the value of the indirectOffsetLocation property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIndirectOffsetLocation(String value) {
                        this.indirectOffsetLocation = value;
                    }

                    /**
                     * Gets the value of the indirectOffsetLength property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getIndirectOffsetLength() {
                        return indirectOffsetLength;
                    }

                    /**
                     * Sets the value of the indirectOffsetLength property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setIndirectOffsetLength(String value) {
                        this.indirectOffsetLength = value;
                    }

                    /**
                     * Gets the value of the endianness property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getEndianness() {
                        return endianness;
                    }

                    /**
                     * Sets the value of the endianness property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setEndianness(String value) {
                        this.endianness = value;
                    }

                    /**
                     * Gets the value of the byteSequenceValue property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getByteSequenceValue() {
                        return byteSequenceValue;
                    }

                    /**
                     * Sets the value of the byteSequenceValue property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setByteSequenceValue(String value) {
                        this.byteSequenceValue = value;
                    }

                }

            }

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "fidoSignatureID",
                "fidoSignatureName",
                "fidoSignatureNote",
                "fidoPrioritize",
                "pattern"
            })
            public static class FidoSignature {

                @XmlElement(name = "FidoSignatureID")
                protected String fidoSignatureID;
                @XmlElement(name = "FidoSignatureName")
                protected String fidoSignatureName;
                @XmlElement(name = "FidoSignatureNote")
                protected String fidoSignatureNote;
                @XmlElement(name = "FidoPrioritize")
                protected boolean fidoPrioritize;
                @XmlElement(name = "Pattern")
                protected List<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature.Pattern> pattern;

                /**
                 * Gets the value of the fidoSignatureID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getFidoSignatureID() {
                    return fidoSignatureID;
                }

                /**
                 * Sets the value of the fidoSignatureID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setFidoSignatureID(String value) {
                    this.fidoSignatureID = value;
                }

                /**
                 * Gets the value of the fidoSignatureName property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getFidoSignatureName() {
                    return fidoSignatureName;
                }

                /**
                 * Sets the value of the fidoSignatureName property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setFidoSignatureName(String value) {
                    this.fidoSignatureName = value;
                }

                /**
                 * Gets the value of the fidoSignatureNote property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getFidoSignatureNote() {
                    return fidoSignatureNote;
                }

                /**
                 * Sets the value of the fidoPrioritize property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link boolean }
                 *     
                 */
                
                public void setFidoPrioritize(boolean value) {
                    this.fidoPrioritize = value;
                }
                /**
                 * Gets the value of the fidoPrioritize property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link boolean }
                 *     
                 */
                public boolean getFidoPrioritize() {
                    return fidoPrioritize;
                }

                /**
                 * Sets the value of the fidoSignatureNote property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setFidoSignatureNote(String value) {
                    this.fidoSignatureNote = value;
                }

                /**
                 * Gets the value of the pattern property.
                 * 
                 * <p>
                 * This accessor method returns a reference to the live list,
                 * not a snapshot. Therefore any modification you make to the
                 * returned list will be present inside the JAXB object.
                 * This is why there is not a <CODE>set</CODE> method for the byteSequence property.
                 * 
                 * <p>
                 * For example, to add a new item, do as follows:
                 * <pre>
                 *    getPattern().add(newItem);
                 * </pre>
                 * 
                 * 
                 * <p>
                 * Objects of the following type(s) are allowed in the list
                 * {@link PRONOMReport.ReportFormatDetail.FileFormat.InternalSignature.Pattern }
                 * 
                 * 
                 */
                public List<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature.Pattern> getPattern() {
                    if (pattern == null) {
                    	pattern = new ArrayList<PRONOMReport.ReportFormatDetail.FileFormat.FidoSignature.Pattern>();
                    }
                    return this.pattern;
                }
            
                @XmlAccessorType(XmlAccessType.FIELD)
                @XmlType(name = "", propOrder = {
                    "patternID",
                    "position",
                    "regex"
                })
                public static class Pattern {

                    @XmlElement(name = "PatternID")
                    protected String patternID;
                    @XmlElement(name = "Position")
                    protected PositionType position;
                    @XmlElement(name = "Regex")
                    protected String regex;
                    
                    /**
                     * Gets the value of the patternID property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    @NonVisual
                    public String getPatternID() {
                        return patternID;
                    }

                    /**
                     * Sets the value of the patternID property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setPatternID(String value) {
                        this.patternID = value;
                    }

                    /**
                     * Gets the value of the position property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link PositionType }
                     *     
                     */
                    public PositionType getPosition() {
                        return position;
                    }

                    /**
                     * Sets the value of the position property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link PositionType }
                     *     
                     */
                    public void setPosition(PositionType value) {
                        this.position = value;
                    }

                    /**
                     * Gets the value of the regex property.
                     * 
                     * @return
                     *     possible object is
                     *     {@link String }
                     *     
                     */
                    public String getRegex() {
                        return regex;
                    }

                    /**
                     * Sets the value of the regex property.
                     * 
                     * @param value
                     *     allowed object is
                     *     {@link String }
                     *     
                     */
                    public void setRegex(String value) {
                        this.regex = value;
                    }

                }

            }
            
            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlType(name = "", propOrder = {
                "relationshipType",
                "relatedFormatID",
                "relatedFormatName",
                "relatedFormatVersion"
            })
            public static class RelatedFormat {

                @XmlElement(name = "RelationshipType")
                protected RelationshipTypes relationshipType;
                @XmlElement(name = "RelatedFormatID")
                protected String relatedFormatID;
                @XmlElement(name = "RelatedFormatName")
                protected String relatedFormatName;
                @XmlElement(name = "RelatedFormatVersion")
                protected String relatedFormatVersion;

                /**
                 * Gets the value of the relationshipType property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public RelationshipTypes getRelationshipType() {
                    return relationshipType;
                }

                /**
                 * Sets the value of the relationshipType property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setRelationshipType(RelationshipTypes value) {
                    this.relationshipType = value;
                }

                /**
                 * Gets the value of the relatedFormatID property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                @NonVisual
                public String getRelatedFormatID() {
                    return relatedFormatID;
                }

                /**
                 * Sets the value of the relatedFormatID property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setRelatedFormatID(String value) {
                    this.relatedFormatID = value;
                }

                /**
                 * Gets the value of the relatedFormatName property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getRelatedFormatName() {
                    return relatedFormatName;
                }

                /**
                 * Sets the value of the relatedFormatName property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setRelatedFormatName(String value) {
                    this.relatedFormatName = value;
                }

                /**
                 * Gets the value of the relatedFormatVersion property.
                 * 
                 * @return
                 *     possible object is
                 *     {@link String }
                 *     
                 */
                public String getRelatedFormatVersion() {
                    return relatedFormatVersion;
                }

                /**
                 * Sets the value of the relatedFormatVersion property.
                 * 
                 * @param value
                 *     allowed object is
                 *     {@link String }
                 *     
                 */
                public void setRelatedFormatVersion(String value) {
                    this.relatedFormatVersion = value;
                }

            }

        }

    }
    
    public enum RelationshipTypes {
    	Has_priority_over, Has_lower_priority_than, Is_previous_version_of, Is_subsequent_version_of, Is_supertype_of, Is_subtype_of, Equivalent_to;
    }
    
    public enum IdentifierTypes {
    	MIME, PUID, Apple_Uniform_Type_Identifier, Other;
    }
    
    public enum SignatureTypes {
    	File_extension, Other;
    }

}
<file_sep>package at.ac.ait.formatRegistry.gui.pages;

import java.util.List;
import org.apache.tapestry5.annotations.Persist;
import uk.gov.nationalarchives.pronom.PRONOMReport.ReportFormatDetail.FileFormat;

public class ListFormats {
	private FileFormat format;
	
	@Persist
	private List<FileFormat> resultsList;

	Object initialize(List<FileFormat> results) {
		this.resultsList = results;
		return this;
	}

	public List<FileFormat> getFormats() {
		return resultsList;
	}

	public FileFormat getFormat() {
		return format;
	}

	public void setFormat(FileFormat format) {
		this.format = format;
	}

}
<file_sep>formatxmlpath=C:/registry/formatxmlrepository
outputxmlpath=C:/registry/work
downloadpath=C:/registry/download