Files
o3de/Code/Framework/AzFramework/AzFramework/Asset/XmlSchemaAsset.h
T
Artur K f44169f7fa Cleanup SerializeContext.h pt.1 (#4264)
* Remove AssetSerializer inclusion from SerializeContext header

Moved a few Reflect methods to new cpp files.

In addition, some preparations for further header dependency reductions.

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Fix smoke test lua failures.

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Windows build fixes.

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Missing license headers

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Fix white-space issues.

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Code review fix for AzToolsFramework/AssetEditor/AssetEditorBus.h

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Fix inheritance list wrapping broken by older clang-format

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
2021-09-29 11:31:01 -05:00

170 lines
5.2 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/std/containers/vector.h>
#include <AzCore/Asset/AssetCommon.h>
#include <AzCore/RTTI/BehaviorContext.h>
#include <AzCore/RTTI/ReflectContext.h>
#include <AzCore/Serialization/EditContext.h>
namespace AzFramework
{
class VersionSearchRule
{
public:
AZ_TYPE_INFO(VersionSearchRule, "{0AC0D453-7F3E-4BA2-9D28-B39052361B0F}");
static void Reflect(AZ::ReflectContext* context);
AZStd::string GetRootNodeAttributeName() const;
private:
AZStd::string m_rootNodeAttributeName;
};
class MatchingRule
{
public:
AZ_TYPE_INFO(MatchingRule, "{0052598D-594B-44C7-8B0F-F268FBBA6E4F}");
static void Reflect(AZ::ReflectContext* context);
AZStd::string GetFilePathPattern() const;
AZStd::string GetExcludedFilePathPattern() const;
AZStd::vector<AZStd::string> GetVersionConstraints() const;
bool Valid() const;
private:
AZStd::string m_filePathPattern;
AZStd::string m_excludedFilePathPattern;
AZStd::vector<AZStd::string> m_versionConstraints;
};
class XmlSchemaAttribute
{
public:
AZ_TYPE_INFO(XmlSchemaAttribute, "{EE322552-0565-4D54-B022-9A9F134BF447}");
enum class AttributeType : AZ::u32
{
RelativePath,
Asset
};
enum class AttributePathDependencyType : AZ::u32
{
SourceFile,
ProductFile
};
static void Reflect(AZ::ReflectContext* context);
AZStd::string GetName() const;
AZStd::string GetExpectedExtension() const;
AZStd::string GetMatchPattern() const;
AZStd::string GetFindPattern() const;
AZStd::string GetReplacePattern() const;
AttributeType GetType() const;
AttributePathDependencyType GetPathDependencyType() const;
bool IsRelativeToSourceAssetFolder() const;
bool IsOptional() const;
bool CacheRelativePath() const;
private:
AZ::Crc32 GetVisibilityProperty() const;
AZStd::string m_name;
AZStd::string m_expectedExtension;
AZStd::string m_matchPattern;
AZStd::string m_findPattern;
AZStd::string m_replacePattern;
AttributeType m_type;
AttributePathDependencyType m_pathDependencyType;
bool m_relativeToSourceAssetFolder;
bool m_optional;
bool m_cacheRelativePath;
};
class XmlSchemaElement
{
public:
AZ_TYPE_INFO(XmlSchemaElement, "{DB03558D-9533-4426-B50F-3DB16F7AA686}");
static void Reflect(AZ::ReflectContext* context);
AZStd::string GetName() const;
AZStd::vector<XmlSchemaElement> GetChildElements() const;
AZStd::vector<XmlSchemaAttribute> GetAttributes() const;
bool IsOptional() const;
bool Valid() const;
private:
AZStd::vector<XmlSchemaElement> m_childElements;
AZStd::vector<XmlSchemaAttribute> m_attributes;
AZStd::string m_name;
bool m_optional;
};
class SearchRuleDefinition
{
public:
AZ_TYPE_INFO(SearchRuleDefinition, "{DA29525E-3032-4919-97B2-3FECCDFF06A6}");
static void Reflect(AZ::ReflectContext* context);
XmlSchemaElement GetSearchRuleStructure() const;
bool IsRelativeToXmlRoot() const;
private:
XmlSchemaElement m_searchRuleStructure;
bool m_relativeToXmlRoot;
};
class DependencySearchRule
{
public:
AZ_TYPE_INFO(DependencySearchRule, "{5A6EB7DE-A2EC-47F3-A2AB-91F0560C2E66}");
static void Reflect(AZ::ReflectContext* context);
AZStd::vector<SearchRuleDefinition> GetSearchRules() const;
AZStd::vector<AZStd::string> GetVersionConstraints() const;
bool Valid() const;
private:
AZStd::vector<SearchRuleDefinition> m_searchRuleDefinitions;
AZStd::vector<AZStd::string> m_versionConstraints;
};
class XmlSchemaAsset
: public AZ::Data::AssetData
{
public:
AZ_RTTI(XmlSchemaAsset, "{2DF35909-AF12-40A8-BED2-A033478D864D}", AZ::Data::AssetData);
AZ_CLASS_ALLOCATOR(XmlSchemaAsset, AZ::SystemAllocator, 0);
static const char* GetDisplayName() { return "XML Schema"; }
static const char* GetGroup() { return "XmlSchema"; }
static const char* GetFileFilter() { return "xmlschema"; }
static void Reflect(AZ::ReflectContext* context);
VersionSearchRule GetVersionSearchRule() const;
AZStd::vector<MatchingRule> GetMatchingRules() const;
AZStd::vector<DependencySearchRule> GetDependencySearchRules() const;
bool UseAZSerialization() const { return m_useAZSerialization; }
private:
VersionSearchRule m_versionSearchRule;
AZStd::vector<MatchingRule> m_matchingRules;
AZStd::vector<DependencySearchRule> m_dependencySearchRules;
bool m_useAZSerialization = false; // The XML file is in AZ serialization format, dependencies can be extracted with that.
};
}