annotate mayachemtool/mayachemtools/lib/ObjectProperty.pm @ 0:68300206e90d draft default tip

Uploaded
author deepakjadmin
date Thu, 05 Nov 2015 02:41:30 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
1 package ObjectProperty;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
2 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: ObjectProperty.pm,v $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:18 $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.25 $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
6 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
8 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
10 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
12 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
17 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
22 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
27 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
28
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
31
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
32 use vars qw($AUTOLOAD);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
33
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
34 # Set property for an object...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
35 sub SetProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
36 my($This, $Name, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
37
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
38 if (!(defined($Name) && defined($Value))) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
39 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
40 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
41 return $This->_SetProperty($Name, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
42 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
43
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
44 # Set properties for an object...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
45 sub SetProperties {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
46 my($This, %NamesAndValues) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
47 my($Name, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
48
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
49 while (($Name, $Value) = each %NamesAndValues) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
50 $This->_SetProperty($Name, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
51 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
52
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
53 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
54 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
55
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
56 # Set object property...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
57 sub _SetProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
58 my($This, $Name, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
59
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
60 $This->{$Name} = $Value;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
61 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
62
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
63 # Get property for an object...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
64 sub GetProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
65 my($This, $Name) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
66
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
67 if (!defined $Name) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
68 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
69 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
70 return $This->_GetProperty($Name);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
71 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
72
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
73 # Get object property...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
74 sub _GetProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
75 my($This, $Name) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
76
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
77 if (exists $This->{$Name}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
78 return $This->{$Name};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
79 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
80 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
81 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
82 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
83 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
84
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
85 # Does this property exist?
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
86 sub HasProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
87 my($This, $Name) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
88
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
89 if (!defined $Name) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
90 return 0;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
91 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
92 return (exists $This->{$Name}) ? 1 : 0;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
93 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
94
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
95 # Delete object property...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
96 sub DeleteProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
97 my($This, $Name) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
98
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
99 if (!defined $Name) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
100 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
101 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
102 return $This->_DeleteProperty($Name);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
103 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
104
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
105 # Delete object property...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
106 sub _DeleteProperty {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
107 my($This, $Name) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
108
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
109 if (exists $This->{$Name}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
110 delete $This->{$Name};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
111 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
112 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
113 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
114
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
115 # Implements Set<PropertyName> and Get<PropertyName> methods...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
116 sub AUTOLOAD {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
117 my($This, $PropertyValue) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
118 my($PackageName, $MethodName, $PropertyName, $ThisType);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
119
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
120 # Do a greedy match to make sure package name and method names are
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
121 # picked up correctly from invocation names containing multiple occurences
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
122 # of ::. For example: FileIO::SDFileIO::GetFileHandle and so on.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
123 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
124 ($PackageName, $MethodName) = $AUTOLOAD =~ /^(.*)::(.*)$/;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
125
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
126 if ($MethodName =~ /^(BEGIN|DESTROY)$/) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
127 return;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
128 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
129
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
130 $ThisType = ref($This) or croak "Error: Invocation of function ${PackageName}::${MethodName} invocation is not supported: It must be invoked using an object reference...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
131
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
132 if (!($MethodName =~ /^Get/ || $MethodName =~ /^Set/ || $MethodName =~ /^Delete/)) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
133 croak "Error: Can't locate object method \"$MethodName\" via package \"$ThisType\": This method is not automatically implemented by AUTOLOAD: Only Get<PropertyName>, Set<PropertyName> and Delete<PropertyName> functions are implemented via AUTOLOAD...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
134 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
135 if ($MethodName =~ /^Delete/) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
136 ($PropertyName) = $MethodName =~ /^Delete(.*?)$/;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
137 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
138 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
139 ($PropertyName) = $MethodName =~ /^[SG]et(.*?)$/;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
140 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
141 if ($MethodName =~ /^Set/ && !defined($PropertyValue)) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
142 carp "Warning: ${PackageName}::${MethodName}: Didn't set value for property $PropertyName: Property value for must be specified...\n";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
143 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
144 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
145
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
146 if ($MethodName =~ /^Get/) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
147 return $This->_GetProperty($PropertyName);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
148 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
149 elsif ($MethodName =~ /^Set/) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
150 return $This->_SetProperty($PropertyName, $PropertyValue);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
151 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
152 elsif ($MethodName =~ /^Delete/) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
153 return $This->_DeleteProperty($PropertyName);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
154 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
155
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
156 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
157
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
158 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
159
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
160 __END__
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
161
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
162 =head1 NAME
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
163
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
164 ObjectProperty
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
165
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
166 =head1 SYNOPSIS
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
167
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
168 use ObjectProperty;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
169
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
170 =head1 DESCRIPTION
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
171
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
172 B<ObjectProperty> is an abstract base class which implements methods not explicitly defined
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
173 in classed derived from this class using Perl's AUTOLOAD functionality. These methods are generated
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
174 on-the-fly for a specified object property:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
175
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
176 Set<PropertyName>(<PropertyValue>);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
177 $PropertyValue = Get<PropertyName>();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
178 Delete<PropertyName>();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
179
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
180 This class uses its parent class hash to set, get, and delete propery names and values.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
181
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
182 ObjectProperty module provides the following methods to be used in context of its parent class:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
183
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
184 DeleteProperty, GetProperty, HasProperty, SetProperties, SetProperty
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
185
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
186 =head2 METHODS
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
187
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
188 =over 4
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
189
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
190 =item B<DeleteProperty>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
191
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
192 DeleteProperty($Name);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
193
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
194 Deletes specified property I<Name>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
195
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
196 =item B<GetProperty>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
197
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
198 GetProperty($Name);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
199
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
200 Returns value associated with specified property I<Name>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
201
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
202 =item B<HasProperty>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
203
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
204 HasProperty($Name);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
205
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
206 Returns 1 or 0 based on whether specified property I<Name> associated with an object.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
207
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
208 =item B<SetProperties>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
209
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
210 SetProperties(%NamesAndValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
211
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
212 Using specified property name and value hash I<NamesAndValues>, associates each
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
213 property I<Name> and I<Values> to an object.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
214
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
215 =item B<SetProperty>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
216
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
217 SetProperty($Name, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
218
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
219 Associate property I<Name> and I<Value> to an object.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
220
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
221 =back
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
222
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
223 =head1 AUTHOR
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
224
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
225 Manish Sud <msud@san.rr.com>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
226
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
227 =head1 COPYRIGHT
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
228
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
229 Copyright (C) 2015 Manish Sud. All rights reserved.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
230
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
231 This file is part of MayaChemTools.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
232
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
233 MayaChemTools is free software; you can redistribute it and/or modify it under
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
234 the terms of the GNU Lesser General Public License as published by the Free
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
235 Software Foundation; either version 3 of the License, or (at your option)
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
236 any later version.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
237
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
238 =cut