Class ProjectFileUtil
- java.lang.Object
-
- java.nio.file.spi.FileTypeDetector
-
- com.inductiveautomation.ignition.common.project.ProjectFileUtil
-
public class ProjectFileUtil extends java.nio.file.spi.FileTypeDetector
A utility class for inspecting, identifying and loading Projects from Files or streams.Provides utilities for both legacy XML exported projects, as well as 8.0 disk-based project zip exports.
Also registers with the ServiceLoader to act as a FileTypeDetector. See the docs on
probeContentType(java.nio.file.Path)
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
XML_FILE_TYPE
static java.lang.String
ZIP_FILE_TYPE
-
Constructor Summary
Constructors Constructor Description ProjectFileUtil()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static void
exportToZip(ProjectManifest manifest, java.util.List<ProjectResource> resources, java.io.OutputStream destination)
static ProjectImport
fromInputStream(java.io.InputStream s, java.lang.String projectNameOverwrite)
static java.util.Optional<ProjectImport>
fromProjectFile(java.io.File projectFile)
static java.util.Optional<ProjectImport>
fromProjectFile(java.io.File projectFile, java.lang.String projectNameOverride)
static ProjectImport
importFromXml(java.io.File projectFile, java.lang.String newProjectName)
Creates a RuntimeProject from a legacy (Ignition 7.9 and older) xml-based project exportstatic ProjectImport
importFromXml(java.io.InputStream is, java.lang.String newProjectName)
static ProjectImport
importFromZip(java.io.File projectFile, java.lang.String projectNameOverwrite)
static ProjectImport
importFromZip(java.io.InputStream zipStream, java.lang.String projectName)
static boolean
isSingleton(ProjectResource r)
static boolean
isXmlProjectFile(java.io.File file)
Detect if a file appears to be an xml based project exportstatic boolean
isZipProjectFile(java.io.File file)
Detect if a file appears to be a zip based (8.0+) project export filejava.lang.String
probeContentType(java.nio.file.Path path)
This class is registered with the ServiceLoader to provide itself as a FileTypeDetector, which makes it possible to use Files.probeContentType(someFilePath) and then compare the result to see if it matches the staticXML_FILE_TYPE
orZIP_FILE_TYPE
, the latter being the format for project exports in 8.0 and higher.static ProjectResource
sanitizeSingletons(ProjectResource r)
-
-
-
Field Detail
-
XML_FILE_TYPE
public static final java.lang.String XML_FILE_TYPE
- See Also:
- Constant Field Values
-
ZIP_FILE_TYPE
public static final java.lang.String ZIP_FILE_TYPE
- See Also:
- Constant Field Values
-
-
Method Detail
-
exportToZip
public static void exportToZip(ProjectManifest manifest, java.util.List<ProjectResource> resources, java.io.OutputStream destination) throws java.io.IOException
- Throws:
java.io.IOException
-
probeContentType
@Nullable public java.lang.String probeContentType(@Nonnull java.nio.file.Path path) throws java.io.IOException
This class is registered with the ServiceLoader to provide itself as a FileTypeDetector, which makes it possible to use Files.probeContentType(someFilePath) and then compare the result to see if it matches the staticXML_FILE_TYPE
orZIP_FILE_TYPE
, the latter being the format for project exports in 8.0 and higher.- Specified by:
probeContentType
in classjava.nio.file.spi.FileTypeDetector
- Parameters:
path
- path to a file possibly being an Ignition project export in either zip or .proj xml format.- Returns:
- the discovered file type, or null if no match was found
- Throws:
java.io.IOException
- on failure to read the path as a buffered input stream
-
isXmlProjectFile
public static boolean isXmlProjectFile(java.io.File file) throws java.io.IOException
Detect if a file appears to be an xml based project export- Parameters:
file
- a file to detect- Returns:
- true if the file is an xml based project export
- Throws:
java.io.IOException
- on failure to read file
-
isZipProjectFile
public static boolean isZipProjectFile(java.io.File file) throws java.io.IOException
Detect if a file appears to be a zip based (8.0+) project export file- Parameters:
file
- to detect- Returns:
- true if the file is believed to be a zip based export
- Throws:
java.io.IOException
- on failure to read file
-
importFromXml
public static ProjectImport importFromXml(@Nonnull java.io.File projectFile, java.lang.String newProjectName) throws java.io.IOException, org.xml.sax.SAXException, ProjectInvalidException
Creates a RuntimeProject from a legacy (Ignition 7.9 and older) xml-based project export- Parameters:
projectFile
- file to import fromnewProjectName
- if non-null or empty string, will create the new project with the given name, building the resources with the appropriate project/resource paths.- Throws:
java.io.IOException
org.xml.sax.SAXException
ProjectInvalidException
-
importFromXml
public static ProjectImport importFromXml(@Nonnull java.io.InputStream is, java.lang.String newProjectName) throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOException
org.xml.sax.SAXException
-
isSingleton
public static boolean isSingleton(ProjectResource r)
-
sanitizeSingletons
public static ProjectResource sanitizeSingletons(ProjectResource r)
-
fromProjectFile
public static java.util.Optional<ProjectImport> fromProjectFile(java.io.File projectFile) throws java.io.IOException, org.xml.sax.SAXException, ProjectInvalidException
- Throws:
java.io.IOException
org.xml.sax.SAXException
ProjectInvalidException
-
fromProjectFile
public static java.util.Optional<ProjectImport> fromProjectFile(java.io.File projectFile, java.lang.String projectNameOverride) throws java.io.IOException, org.xml.sax.SAXException, ProjectInvalidException
- Parameters:
projectFile
- the exported project fileprojectNameOverride
- if the resources in the incoming project should be loaded with a different project name than exists in the file, pass the desired name in as this arg- Returns:
- optional containing a runtime project on success, or empty if parsing or creation of the project failed.
- Throws:
java.io.IOException
- on failure to read the fileorg.xml.sax.SAXException
- on failure to read/parse xmlProjectInvalidException
-
importFromZip
public static ProjectImport importFromZip(@Nonnull java.io.File projectFile, java.lang.String projectNameOverwrite) throws ProjectInvalidException, java.io.IOException
- Throws:
ProjectInvalidException
java.io.IOException
-
fromInputStream
public static ProjectImport fromInputStream(java.io.InputStream s, java.lang.String projectNameOverwrite) throws java.io.IOException, ProjectInvalidException, org.xml.sax.SAXException
- Throws:
java.io.IOException
ProjectInvalidException
org.xml.sax.SAXException
-
importFromZip
public static ProjectImport importFromZip(@Nonnull java.io.InputStream zipStream, java.lang.String projectName) throws ProjectInvalidException, java.io.IOException
- Throws:
ProjectInvalidException
java.io.IOException
-
-