📄 properties.pm
字号:
# vim:ts=4 sw=4# ----------------------------------------------------------------------------------------------------# Name : ETL::Pequel3::Type::Properties.pm# Created : 5 May 2006# Author : Mario Gaffiero (gaffie)## Copyright 1999-2007 Mario Gaffiero.# # This file is part of Pequel(TM).# # Pequel is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; version 2 of the License.# # Pequel is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.# # You should have received a copy of the GNU General Public License# along with Pequel; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA# ----------------------------------------------------------------------------------------------------# Modification History# When Version Who What# ----------------------------------------------------------------------------------------------------package ETL::Pequel3::Type::Properties;require 5.005_62;use strict;use warnings;use stl;# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Abstract; use base qw(Class::STL::Element); use Class::STL::ClassMembers qw( name default value validate validate_catalogue description ), # validate: use xml-schema types (xs:token, xs:string, etc) or include pattern for xs:pattern Class::STL::ClassMembers::DataMember->new(name => 'global', default => 1), # -> configuration Class::STL::ClassMembers::DataMember->new(name => 'cmd_line', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'required', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'token'), Class::STL::ClassMembers::DataMember->new(name => 'CDATA', default => 0); use Class::STL::ClassMembers::Constructor; sub new_extra { my $self = shift; $self->value($self->default()) if (defined($self->default()) && !defined($self->value())); } sub xml_schema { my $self = shift; my $xsd = shift; my $xml_node = shift || $xsd->schema_root(); return if ($xsd->exists('element', $self->name(), $xml_node)); $xsd->comment($xml_node, "Property Type: @{[ $self->name() ]} [@{[ ref($self) ]}]"); my $element = $xsd->xs_element($xml_node, 'name' => $self->name()); if ($xsd->configuration()->xmlschema_annotation() && defined($self->description()) && $self->description() ne '') { my $doc = $xsd->xs_documentation($xsd->xs_annotation($element), 'xml:lang' => 'en'); $xsd->text($doc, $self->description()); } my $restriction = $xsd->xs_restriction($xsd->xs_simpleType($element), 'base' => ($xsd->namespace_prefix() . ':' . (defined($self->validate_catalogue()) ? ($xsd->POM()->catalogue->exists($self->validate_catalogue())->to_array())[0]->xs_type() : $self->xs_type())) ); if (defined($self->validate_catalogue())) { my $n = $xsd->POM()->catalogue->exists($self->validate_catalogue())->target_mem_name(); foreach ($xsd->POM()->catalogue->exists($self->validate_catalogue())->to_array()) { my $enum = $xsd->xs_enumeration($restriction, 'value' => $_->$n()); if ($xsd->configuration()->xmlschema_annotation() && $_->can('description') && defined($_->description())) { my $doc = $xsd->xs_documentation($xsd->xs_annotation($enum), 'xml:lang' => 'en'); $xsd->text($doc, $_->description()); } } } elsif (defined($self->validate()) && $self->validate() =~ /^\^\(.+\|.+\)\$/) { my @enum = split(/[\(\)\|]/, $self->validate()); shift(@enum); pop(@enum); foreach (@enum) { $xsd->xs_enumeration($restriction, 'value' => $_); } } elsif (defined($self->validate())) { $xsd->xs_pattern($restriction, 'value' => $self->validate()); } }}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Configuration::Abstract; use base qw(ETL::Pequel3::Type::Properties::Abstract); use Class::STL::ClassMembers; use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::PequelHomePage; use base qw(ETL::Pequel3::Type::Properties::Abstract); use ETL::Pequel3; use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'pequel_home_page'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 'http://sourceforge.net/projects/pequel'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Pequel Home Page'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Version; use base qw(ETL::Pequel3::Type::Properties::Abstract); use ETL::Pequel3; use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'version'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => $ETL::Pequel3::VERSION), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'decimal'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Display Pequel Version information'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Prefix; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'prefix'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'default', default => ''), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Directory pathname prefix'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::XmlParser; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'xml_parser'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 'default'), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), #maybe not?? Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'NMTOKEN'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Default XML parser type name'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::XmlSchema; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'xml_schema'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 'default'), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'NMTOKEN'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Default XML schema generator type name'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::XmlSchemaAnnotation; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'xmlschema_annotation'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'validate', default => '^(0|1)$'), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'byte'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Print annotations in pequel.xsd xml-schema'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::XmlSchemaNSPrefix; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'xmlschema_ns_prefix'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 'xs'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'validate', default => '\w+'), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'NMTOKEN'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Namespace prefix for token names in pequel.xsd xml-schema'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::ExecDir; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'exec_dir'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => './_Pequel'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Temporary directory for generated programs'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::TraceDir; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'trace_dir'), Class::STL::ClassMembers::DataMember->new(name => 'default', default => './_Pequel'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Temporary directory for trace files and generated programs'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Transfer; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'transfer'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'value', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'validate', default => '^(0|first|last)$'), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'NMTOKEN'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Copy input fields (including derived fields) to output'); use Class::STL::ClassMembers::Constructor;}# ----------------------------------------------------------------------------------------------------{ package ETL::Pequel3::Type::Properties::Hash; use base qw(ETL::Pequel3::Type::Properties::Configuration::Abstract); use Class::STL::ClassMembers Class::STL::ClassMembers::DataMember->new(name => 'name', default => 'hash'), Class::STL::ClassMembers::DataMember->new(name => 'user_program_info', default => 1), Class::STL::ClassMembers::DataMember->new(name => 'default', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'global', default => 0), Class::STL::ClassMembers::DataMember->new(name => 'validate', default => '^(0|1)$'), Class::STL::ClassMembers::DataMember->new(name => 'xs_type', default => 'byte'), Class::STL::ClassMembers::DataMember->new(name => 'description', default => 'Generate in memory -- input data can be unsorted'); use Class::STL::ClassMembers::Constructor;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -