Class PartName

java.lang.Object
org.docx4j.openpackaging.parts.PartName
All Implemented Interfaces:
Comparable<PartName>

public final class PartName extends Object implements Comparable<PartName>
An immutable Open Packaging Convention compliant part name. [Docx4J comment: Note that in docx4J, part names should be resolved, before being set, so that they are absolute (ie start with '/'). In contrast, this class enforces the OPC specification, which says that a part name can't be absolute. For this reason, you'll see the leading '/' being added and removed in various places :( ]
Version:
0.1
  • Field Details

    • log

      private static org.slf4j.Logger log
    • partNameURI

      private URI partNameURI
      Part name stored as an URI.
    • RFC3986_PCHAR_SUB_DELIMS

      private static String[] RFC3986_PCHAR_SUB_DELIMS
      Reserved characters for sub delimitations.
    • RFC3986_PCHAR_UNRESERVED_SUP

      private static String[] RFC3986_PCHAR_UNRESERVED_SUP
      Unreserved character (+ ALPHA & DIGIT).
    • RFC3986_PCHAR_AUTHORIZED_SUP

      private static String[] RFC3986_PCHAR_AUTHORIZED_SUP
      Authorized reserved characters for pChar.
    • isRelationship

      private boolean isRelationship
      Flag to know if this part name is from a relationship part name.
  • Constructor Details

    • PartName

      public PartName(URI uri, boolean checkConformance) throws InvalidFormatException
      Constructor. Makes a ValidPartName object from a java.net.URI
      Parameters:
      uri - The URI to validate and to transform into ValidPartName.
      checkConformance - Flag to specify if the contructor have to validate the OPC conformance. Must be always true except for special URI like '/' which is needed for internal use by OpenXML4J but is not valid.
      Throws:
      InvalidFormatException - Throw if the specified part name is not conform to Open Packaging Convention specifications.
      See Also:
    • PartName

      public PartName(String partName) throws InvalidFormatException
      Constructor. Makes a ValidPartName object from a String part name, provided it validates against OPC conformance.
      Parameters:
      partName - Part name to valid and to create.
      Throws:
      InvalidFormatException - Throw if the specified part name is not conform to Open Packaging Convention specifications.
    • PartName

      public PartName(String partName, boolean checkConformance) throws InvalidFormatException
      Constructor. Makes a ValidPartName object from a String part name.
      Parameters:
      partName - Part name to valid and to create.
      checkConformance - Flag to specify if the contructor have to validate the OPC conformance. Must be always true except for special URI like '/' which is needed for internal use by OpenXML4J but is not valid.
      Throws:
      InvalidFormatException - Throw if the specified part name is not conform to Open Packaging Convention specifications.
  • Method Details

    • isRelationshipPartURI

      private boolean isRelationshipPartURI(URI partUri)
      Check if the specified part name is a relationship part name.
      Parameters:
      partUri - The URI to check.
      Returns:
      true if this part name respect the relationship part naming convention else false.
    • isRelationshipPartURI

      public boolean isRelationshipPartURI()
      To know if this part name is a relationship part name.
      Returns:
      true if this part name respect the relationship part naming convention else false.
    • throwExceptionIfInvalidPartUri

      private static void throwExceptionIfInvalidPartUri(URI partUri) throws InvalidFormatException
      Throws an exception (of any kind) if the specified part name does not follow the Open Packaging Convention specifications naming rules.
      Parameters:
      partUri - The part name to check.
      Throws:
      Exception - Throws if the part name is invalid.
      InvalidFormatException
    • throwExceptionIfEmptyURI

      private static void throwExceptionIfEmptyURI(URI partURI) throws InvalidFormatException
      Throws an exception if the specified URI is empty. [M1.1]
      Parameters:
      partURI - Part URI to check.
      Throws:
      InvalidFormatException - If the specified URI is empty.
    • throwExceptionIfPartNameHaveInvalidSegments

      private static void throwExceptionIfPartNameHaveInvalidSegments(URI partUri) throws InvalidFormatException
      Throws an exception if the part name has empty segments. [M1.3] Throws an exception if a segment any characters other than pchar characters. [M1.6] Throws an exception if a segment contain percent-encoded forward slash ('/'), or backward slash ('\') characters. [M1.7] Throws an exception if a segment contain percent-encoded unreserved characters. [M1.8] Throws an exception if the specified part name's segments end with a dot ('.') character. [M1.9] Throws an exception if a segment doesn't include at least one non-dot character. [M1.10]
      Parameters:
      partUri - The part name to check.
      Throws:
      InvalidFormatException - if the specified URI contain an empty segments or if one the segments contained in the part name, ends with a dot ('.') character.
    • checkPCharCompliance

      private static void checkPCharCompliance(String segment) throws InvalidFormatException
      Throws an exception if a segment any characters other than pchar characters. [M1.6] Throws an exception if a segment contain percent-encoded forward slash ('/'), or backward slash ('\') characters. [M1.7] Throws an exception if a segment contain percent-encoded unreserved characters. [M1.8]
      Parameters:
      segment - The segment to check
      Throws:
      InvalidFormatException
    • throwExceptionIfPartNameNotStartsWithForwardSlashChar

      private static void throwExceptionIfPartNameNotStartsWithForwardSlashChar(URI partUri) throws InvalidFormatException
      Throws an exception if the specified part name doesn't start with a forward slash character '/'. [M1.4]
      Parameters:
      partUri - The part name to check.
      Throws:
      InvalidFormatException - If the specified part name doesn't start with a forward slash character '/'.
    • throwExceptionIfPartNameEndsWithForwardSlashChar

      private static void throwExceptionIfPartNameEndsWithForwardSlashChar(URI partUri) throws InvalidFormatException
      Throws an exception if the specified part name ends with a forward slash character '/'. [M1.5]
      Parameters:
      partUri - The part name to check.
      Throws:
      InvalidFormatException - If the specified part name ends with a forwar slash character '/'.
    • throwExceptionIfAbsoluteUri

      private static void throwExceptionIfAbsoluteUri(URI partUri) throws InvalidFormatException
      Throws an exception if the specified URI is absolute.
      Parameters:
      partUri - The URI to check.
      Throws:
      InvalidFormatException - Throws if the specified URI is absolute.
    • compareTo

      public int compareTo(PartName otherPartName)
      Compare two part name following the rule M1.12 : Part name equivalence is determined by comparing part names as case-insensitive ASCII strings. Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]
      Specified by:
      compareTo in interface Comparable<PartName>
    • getExtension

      public String getExtension()
      Retrieves the extension of the part name if any. If there is no extension returns an empty String. Example : '/document/content.xml' => 'xml'
      Returns:
      The extension of the part name.
    • getName

      public String getName()
      Get this part name.
      Returns:
      The name of this part name.
    • equals

      public boolean equals(Object otherPartName)
      Part name equivalence is determined by comparing part names as case-insensitive ASCII strings. Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getURI

      public URI getURI()
      Part name property getter.
      Returns:
      This part name URI.
    • generateUniqueName

      public static String generateUniqueName(Base sourcePart, String proposedRelId, String directoryPrefix, String after_, String ext)
    • getRelationshipsPartName

      public static String getRelationshipsPartName(String partName)
      See Also:
      • for Wygwam's implementation which I only found after writing this