OOQL language object

application contextual object instance


create - generate a new object instance ( with Class Name Revision )

  object create AdminName GenericValue GenericValue { Object_CreateOption } ;

autocreate - generate a new object instance through Autonumber settings (with a progressive Name )

  object
create autonumber  AdminName [ class AdminName ] { Object_CreateOption } ;

clone - clone a object and generate a new object instance of the same class ( different Name and Revision)

  object
clone ObjectIdName create GenericValue GenericValue { Object_CreateOption } [ [! / not] file ];

revise - generate a new object revision ( uses the Lifecycle-Revision rule if the Revision is not specified )

  object revise ObjectIdName [ revision GenericValue ] { Object_CreateOption } [ [! / not] file ];

edit - update the object properties

  object
edit ObjectIdName { Object_EditOption } ;

undo - undo the last changes on field values

  object
undo ObjectIdName [ iteration[ NUMBER ] ] ;

move - move the object from the current objectspace to another

  object
move ObjectIdName objectspace AdminName ;

show - print the properties for one or more objects

  object
show ObjectIdName { , ObjectIdName } [ Object_GetOption ] [ Token_Option ] [ ExportFile_Option ];

execute - run a method associated to the object Class

  object
execute ObjectIdName method  AdminName [ Program_ArgsOption ];

destroy - remove one or more objects from the database

  object destroy
ObjectIdName { , ObjectIdName } ;


Other commands:
- attached file management
- link management
- lifecycle management
- access management

ObjectIdName
AdminName GenericValue GenericValue [ in AdminName ] [ sync NUMBER ]
IDVAL [ sync NUMBER ]

Object_CreateOption
description GenericValue
image  FileName
imagedata GenericString
objectspace AdminName
holder AdminName
altholder AdminName { AdminName }
lifecycle AdminName
stage AdminName
field[ AdminName ]  GenericValue

Object_EditOption
class AdminName
name GenericValue
revision GenericValue
description GenericValue
image  FileName
imagedata GenericString
holder AdminName
altholder Edit_Operator AdminName { Edit_Operator AdminName }
lifecycle AdminName
stage AdminName
history add  Object_HistoryOption GenericValue [ note GenericValue ]
history remove Object_HistoryOption [ user AdminName ] [ date Date_Range ]
field[ AdminName ]  GenericValue
 
Object_HistoryOption
create
clone
changespace
changeclass
changename
changeholder
changelifecycle
edit
undo
fileput
fileget
filelock
fileunlock
filerename
filedelete
addlink
removelink
lock
unlock
progress
regress
setstage
validate
ignore
refuse
revise
delegate
revoke
custom


Object_GetOption
get [Object_GetBasicOption]
view AdminName
   
  Object_GetBasicOption
  { Object_GetBasicToken [ as IDENTIFIER ] { Object_GetBasicToken [ as IDENTIFIER ] } }
  Object_GetBasicToken [ as IDENTIFIER ]
     
    Object_GetBasicToken
    id  
    class [. Class_GetBasicOption]
    name  
    revision  
    description  
    origdate  
    moddate  
    counter  
    image  
    imagedata  
    locked  
    locker [. User_GetBasicOption]
    holder [. User_GetBasicOption]
    altholder [. User_GetBasicOption]
    altholder[] [. User_GetBasicOption]
    altholder[ AdminName ] [. User_GetBasicOption]
    objectspace [. ObjectSpace_GetBasicOption]
    lifecycle [. Lifecycle_GetBasicOption]
    field [. Field_GetBasicOption]
    field[] [. Field_GetBasicOption]
    field[ AdminName ] [. Field_GetBasicOption]
    fieldvalues  
    defaultfiletype [. ObjectFileType_GetFileOption]
    filetype [. ObjectFileType_GetFileOption]
    filetype[] [. ObjectFileType_GetFileOption]
    filetype[ AdminName ] [. ObjectFileType_GetFileOption]
    filelist  
    currentstage [. ObjectStage_GetOption]
    stage [. ObjectStage_GetOption]
    stage[] [. ObjectStage_GetOption]
    stage[ AdminName ] [. ObjectStage_GetOption]
    revisions [. Object_GetBasicOption]
    revisions.next [. Object_GetBasicOption]
    revisions.first [. Object_GetBasicOption]
    revisions.last [. Object_GetBasicOption]
    revisions.previous [. Object_GetBasicOption]
    link [. Link_GetBasicOption ]
    link[] [. Link_GetBasicOption ]
    link[ AdminName ] [. Link_GetBasicOption ]
    inlink [. Link_GetBasicOption ]
    inlink[] [. Link_GetBasicOption ]
    inlink[ AdminName ] [. Link_GetBasicOption ]
    outlink [. Link_GetBasicOption ]
    outlink[] [. Link_GetBasicOption ]
    outlink[ AdminName ] [. Link_GetBasicOption ]
    process [. Process_GetBasicOption ]
    process[] [. Process_GetBasicOption ]
    otherprocess [. Process_GetBasicOption ]
    otherprocess[] [. Process_GetBasicOption ]
    delegation [. ObjectDelegation_GetOption]
    actions [. MenuItem_GetBasicOption]
    iteration  
    iteration[ NUMBER ]  
    history [ Object_HistoryOption ] [ user AdminName ] [ date Date_Range ]
  (*) filecontent[]  
  (*) filecontent[ AdminName ]  
    null  
         
  (*) usable only for query expressions


KEYWORDs
action the commands enabled at current stage for the current user
altholder the object alternative holders/owners
class the object class
counter the synchronization counter
currentstage the current stage
date timestamp of a event inside the object history
defaultfiletype the default filetype for object attachments (defined in the current lifecycle)
delegation retrieves all delegations defined for the object
description the object description
field a object field or the list of field names
fieldvalues returns the list of object fields with their values
file performs file replication during the clone or revision process
filecontent used in query expressions to search text inside the file content
filelist returns a list of attached files
filetype retrieves available filetypes for object attachments (defined in the current lifecycle)
holder the object holder/owner
id the object ID
image local path for the object icon to upload
imagedata base64 code for the object icon
in restricts the search space to the specified objectspace
inlink retrieves the incoming links
iteration represents an internal revision number, increased after an edit command
lifecycle the current lifecycle
link retrieves all object links
locked checks if the object is locked
locker returns the user who locked the object (if locked)
method a method associated to the object Class
moddate the last modification date (timestamp)
name the object name
note a comment entered for a event inside the object history
null empty value
objectspace the objectspace where the object is stored
origdate the object creation date
otherprocess retrieves the running processes where this object is involved (not the primary)
oulink retrieves the outgoing links
process retrieves the running processes where this object is the primary
revision the object revision
revisions list of objects in the revision chain
revisions.first the first object in the revision chain
revisions.last the last object in the revision chain
revisions.next the next object in the revision chain
revisions.previuous the previous object in the revision chain
stage list of stages in the current lifecycle
sync the synchronization counter
user user actor associated to a event inside the object history

SAMPLES

object create CL04 'MyObject' 04 lifecycle LC01 image "c:\Images\44.gif" description "Object description" field[ATTR1] 2007-10-11 field[ATTR0] 'abcd' ;

object create CL04 'MyObject' 05 holder User2 lifecycle LC01 description "XXdescr" objectspace 'OS02';

object create CL07 123007893 0 description "Part Factory" image "C:/Images/SREn.gif" lifecycle LC02 objectspace OS01 field[ATTR2] "344" ;

object create autonumber AN03 description "Hello";

object clone CL04 'MyObject' 04 create 'MyObject' 5 holder User2 lifecycle LC02 stage InWork description "XXdescr" objectspace 'OS02';

object revise CL04 'MyObject' 04 description "New Revision" objectspace 'OS02';

object edit CL04 'MyObject' 04 field[ATTR0] '2001-10-23';

object edit CL04 'MyObject' 01 history remove progress;

object move DetailImage 12345 '00' objectspace IMAGES;

object show CL04 'MyObject' 01 get { history filetype[].file[].name } token xml;

object show CL04 'MyObject' 03 get { id name revisions.revision } token { "|" ";" "," "-" } ;

object show CL04 'MyObject' 04 get { name defaultfiletype.admin.{name description} } token { "|" ";" "," "-" } ;

object show #00001-00000011 get { fieldvalues } token xml;

object show CL04 'MyObject' 04 ;

object show #00001-00000004 get history date in [2008-05-26;2008-05-27];

object show #00001-00000004 get { filetype.file.{ filespace synchronized locker size putdate synclocalarea } } token xml;

object show #00001-00000011,#00003-00000001,#00001-00000012 get { null holder filetype.file.name null } token {'|' ';' ','};

object show #00002-80000026 get delegation.{ delegator user validate key } token | ;

object show #00003-00000001 get {description origdate moddate holder locker lifecycle currentstage objectspace defaultfiletype filetype} token xml;

object show #00003-00000004 get inlink.{ id from.name from.revision field[ATTR1] } token { "|" ";" };

object show CL04 'MyObject' 01 get { history ignore user "name.surname" date >2008-05-11 history refuse user "name.surname" date >2008-05-11 } token "|";

object show #00001-00000003 get outlink.{ to.name to.revision } token { "|" ";" };

object show #00001-00000003 get { inlink.{ linktype field[ATTR1] from.description } outlink[LINK01] } token { "|" ";" };

object execute #00001-00000003 method SHOWENV input 'A' '?bbbb' ;

attached file management

fileput
- add new attachments ( uses the Lifecycle-default filetype and filespace if they are not specified )

  object
fileput  ObjectIdName [ unlock ] [ server / client ] [ indexed ] [ overwrite ] [ filetype       AdminName ] name FileName { FileName } [ filespace AdminName ] [ Object_FilePutMoveOption ] ;

fileget - retrieve/download some object attached files (or all)

  object
fileget  ObjectIdName [ lock ] [ server / client ] [ force ] [ synchronize ] [ filetype AdminName ]
      ( name FileName { FileName } )/all  path FileName [ Object_FileGetMoveOption ] ;

filerename - change object attached file properties ( the filename, filetype and/or filespace )

  object
filerename ObjectIdName filetype AdminName name FileName { FileName } [ newtype       AdminName ] [ newname FileName { FileName } ] [ newfilespace AdminName ];

filelock - lock some object attached files (or all)

  object
filelock ObjectIdName filetype AdminName ( name FileName { FileName } )/all ;

fileunlock - unlock some object attached files (or all)

  object
fileunlock ObjectIdName filetype AdminName ( name FileName { FileName } )/all ;

filedelete - remove some object attached files (or all)

  object
filedelete ObjectIdName filetype AdminName ( name FileName { FileName } )/all ;

synchronize - synch the object attached files between the filespace and one or more localareas

  object
synchronize ObjectIdName { from/to localarea AdminName }  [ force ]  [ add ];



Object_FilePutMoveOption
movefrom ObjectIdName { filetype AdminName ( name FileName { FileName } )/all }
copyfrom ObjectIdName { filetype AdminName ( name FileName { FileName } )/all }

Object_FileGetMoveOption
moveto ObjectIdName { [overwrite] filetype AdminName name FileName { FileName }
      [ filespace AdminName ] }
copyto ObjectIdName { [overwrite] filetype AdminName name FileName { FileName }
      [ filespace AdminName ] }

ObjectFileType_GetFileOption
filepresent
admin . FileType_GetBasicOption
file . ObjectFile_GetFileOption
file[] . ObjectFile_GetFileOption
file[ FileName ]. ObjectFile_GetFileOption
   
  ObjectFile_GetFileOption
  { ObjectFile_GetFileToken [ as IDENTIFIER ] { ObjectFile_GetFileToken [ as IDENTIFIER ] } }
  ObjectFile_GetFileToken [ as IDENTIFIER ]
     
    ObjectFile_GetFileToken
    name  
    filetype  
    hashedname  
    size  
    locker  
    locked  
    host  
    putdate  
    filespace  
    indexed  
    localarea  
    synchronized  
    synclocalarea  
    synchronized[ AdminName ]  


KEYWORDs
add adds files to the localarea if they don't exist
admin returns the filetype administrative definition
all performs the operations for all files
client the file path is referred to the client file system
copyfrom gets files from another object
copyto copyes files to another object
filepresent checks if the filetype has associated files
filespace the filespace where the file(s) is/are stored
filetype the filetype of object attachment(s)
force get: retrieve the file(s) from filespace or another localarea when the most updated version cannot be retrieved from the container localarea
sync: replace files in the filespace/localarea also if they are more recent
from files are trasferred from a localarea to the filespace
hashedname the file hashed name (when the hashnames flag is enabled for the filespace)
host the file original host path
indexed checks if the file content is indexed for searching
localarea list of localareas where the file is replicated
lock lock the file after the checkout
locked checks if the file is locked
locker returns the user who locked the file (if locked)
movefrom moves files from another object
moveto moves files to another object
name the file name
newfilespace moves the file to another filespace
newname changes the file name
newtype changes the related file type
overwrite all previous files associated to the the same filetype will be removed
path set the download path for the "get" operation
putdate the file checkin date
server the file path is referred to the server file system
size the file size (in bytes)
synchronize automatic file synchronization during the get operation
synchronized check if the filespace is synchronized (contains the most recent file version)
synclocalarea list of localareas where the file is replicated and synchronized
to files are trasferred from the filespace to a localarea
unlock unlock the file after the checkin

SAMPLES


object fileput CL04 'MyObject' 04 filetype FT01 name "c:\temp\file1.xml" "c:\temp\file2.html" ;

object fileput CL04 'MyObject' 04 filetype FT02 name "c:\temp\go.html" "c:\temp\file3.txt" ;

object fileget CL04 'MyObject' 04 filetype FT01 name "temp.xml" "blank.html" path "c:/download" moveto CL04 'MyObject' 02 {filetype FT03 name 'tempNEW.xml' 'blankNew.html'} ;

object filerename CL04 'MyObject' 04 filetype FT03 name 'xgo.txt' newtype FT02 newfilespace FS01;

object filerename CL04 'MyObject' 04 filetype FT03 name "go.html" newname "xgo.html" newtype FT02 ;

object filedelete CL04 'MyObject' 04 filetype FT03 all;


link management


addlink
- create a new link between the current object and another object instance

  object
addlink ObjectIdName (to/from/both)  ObjectIdName linktype AdminName { Link_CreateOption };

navigate - retrieve the connected objects (and their properties) on the base of some filters

  object
navigate ObjectIdName [ to/from/both ]
      [ linktype [ sequence ] AdminPatternList
      [ class AdminPatternList ]
      [ level (all/NUMBER) ] [ [! /not] skiphidden ]
      [ Object_GetOption  [ filter FilterExpression ] ]
      [ Link_GetNavOption [ filter FilterExpression ] ]
      [ Token_Option ] [ ExportFile_Option ];

removelink - remove a link between the current object and another object instance

  object
removelink ObjectIdName (to/from)  ObjectIdName linktype  AdminName ;


KEYWORDs
active a flag used at application level to mark enabled connections
class list of patterns used to filter connected objects by class
both create a couple of from/to links or navigate in both direction
field a link field
from identifies outgoing link(s)
filter where condition used to filter connected objects by some properties or link properties
hidden define a hidden link
inactive a flag used at application level to mark disabled connections
level the recursive navigation level (default=1)
linktype the link type (refers to the administration object);
list of patterns used to filter connected objects by linktype
sequence set the linktype patterns as a sequence instead of an OR-combination
skiphidden include/exclude hidden links during the object navigation
to identifies incoming link(s)

SAMPLES

object addlink #00001-00000003 to #00002-00000008 linktype LINK01;

object addlink CL04 'MyObject' 03 both CL04 'MyObject' 04 linktype LINK01 field[ATTR4] 0.400 field[ATTR1] 2005-01-01;

object addlink CL04 'MyObject' 03 to CL04 'MyObject' 02 linktype MYLINKT0 field[ATTR1] 2005-12-12 field[ATTR7] 5 ;

object navigate CL04 'MyObject' 03 from linktype LI* level 2 get {currentstage field[ATTR1] } getlink { linktype field[ATTR1] } token "|";

object removelink #00001-00000003 to #00003-00000004 linktype LINK01 ;

object removelink 'CL04' 'MyObject' '07' to 'CL04' 'NAME' '00' linktype LINK01 ;

lifecycle management


progress - promote one or more objects to the next stage

   object progress ObjectIdName { , ObjectIdName };

regress - demote one or more objects to the previous stage

   object
regress ObjectIdName { , ObjectIdName };

setstage - set a specific stage for the objects

   object
setstage ObjectIdName stage  AdminName ;

validate - validate a validation on a lifecycle branch (originated from current stage)

  object
validate ObjectIdName validation  AdminName [ note GenericValue ];

ignore - ignore a validation on a lifecycle branch (originated from current stage)

  object
ignore ObjectIdName validation  AdminName [ note GenericValue ];

refuse - refuse one or all validation(s) on a lifecycle branch (originated from current stage)

  object
refuse   ObjectIdName [ validation AdminName ] [ note GenericValue ];


ObjectStage_GetOption
{ ObjectStage_GetToken [ as IDENTIFIER ] { ObjectStage_GetToken [ as IDENTIFIER ] } }
ObjectStage_GetToken [ as IDENTIFIER ]
   
   

ObjectStage_GetToken

    admin . Lifecycle_GetStageBasicOption
    name
    useraccess
    useraccess[ AdminName ]
    iscurrent
    enterdate
    exitdate
    duration
    validation . ObjectStageValidation_GetOption
    validation[] . ObjectStageValidation_GetOption
    validation[ AdminName ] . ObjectStageValidation_GetOption
   
      ObjectStageValidation_GetOption
      { ObjectStageValidation_GetToken [ as IDENTIFIER ] { ObjectStageValidation_GetToken
      [ as IDENTIFIER ] } }
      ObjectStageValidation_GetToken [ as IDENTIFIER ]
         
        ObjectStageValidation_GetToken
        name  
        stage  
        stagefork  
        signed  
        signcomment  
        status  
        validated  
        refused  
        ignored  
        signer  
        signaccess  
        signaccess[ AdminName ]  


KEYWORDs
admin returns the lifecycle-stage administrative definition
duration total days the object remained in the stage
enterdate the date of last time the object reaches the stage
exitdate the date of last time the object leaves the stage
ignored checks if a validation is ignored
iscurrent checks id the stage is the current
name the validation name
note a comment added by the validation signer
refused checks if a validation is refused
signaccess list of validation accesses for the framework (or for a specific) user
signcomment a comment added by the validation signer
signed checks if a validation is signed (validated/refused/ignored)
signer the last signer user
stage the related stage for a validation
stagefork the target stage for the validation branch
status the validation status
useraccess list of accesses for the framework (or for a specific) user at the given or current stage
validated checks if a validation is validated
validation object stage validation

SAMPLES

object progress CL04 'MyObject' 01;

object regress CL04 'MyObject' 01 ;

object validate CL04 'MyObject' 01 validation "ToPrelim" note "All is OK" ;

access management

lock
-
lock the object(s) (nobody except the locker can update properties or attach files)

  object lock  
ObjectIdName { , ObjectIdName } ;

unlock
- unlock the object(s)

  object unlock
ObjectIdName { , ObjectIdName } [ [! / not] file ];

delegate
- enable another user to perform some operations for the current object

  object delegate
ObjectIdName  user AdminName { , AdminName } access Lifecycle_StageAccessOption
      { , Lifecycle_StageAccessOption } [ validate ] [ key GenericString ];

revoke
- withdraw some delegations for the current object

  object revoke
ObjectIdName [ delegator AdminName/all ] [ user AdminName/all ] [ key GenericString ] ;



ObjectDelegation_GetOption
{ ObjectDelegation_GetToken [ as IDENTIFIER ] { ObjectDelegation_GetToken [ as IDENTIFIER ] } }
ObjectDelegation_GetToken [ as IDENTIFIER ]
   
  ObjectDelegation_GetToken
  delegator  
  delegate  
  access  
  validate  
  key  


KEYWORDs
access list of object actions to delegate or delegated
delegate list of delegated user
delegator the name of user who grants the delegation
key a keyword associated to the delegation for fast retrieve and removal
user list of delegated user
validate enables the delegate users also for validation approval/reject

SAMPLES

object lock CL04 'MyObject' 04 ;

object unlock CL04 'MyObject' 01 ;

object delegate #00002-80000026 user User02,User12 access edit,unlock,filedelete validate key "bEDIT";

object revoke #00002-80000026 key "bEDIT" ;

object revoke #00002-80000026 user 'name.surname' delegator 'User02' ;

common syntax

Common_GetBasicOption
Common_GetBasicToken [ as IDENTIFIER ]

Common_GetBasicToken
id  
name  
origdate  
moddate  
moduser  
description  
svnrev  
hidden  
image  
imagedata  
feature[ AdminName ] [. Feature_GetBasicOption]
feature[] [. Feature_GetBasicOption]
feature [. Feature_GetBasicOption]
application [. Menu_GetBasicOption]
super  
admintype  

Edit_Operator
add
remove

Edit_RefOperator
addbefore AdminName set
addafter AdminName set
add
remove
movebefore
moveafter

Edit_AddOperator
addbefore AdminName define
addafter AdminName define
append

Edit_MoveOperator
movebefore
moveafter

Event_Type
action
check

AdminPatternList
AdminNamePattern {, AdminNamePattern}

AdminNamePattern
*
PATTERNIDENTIFIER
STRINGVAL
AdminName

GenericPatternList
GenericPattern {, GenericPattern}

GenericPattern
*
IDENTIFIER
PATTERNIDENTIFIER
GenericValue

AdminActor
user AdminName
team AdminName
assignment AdminName

AdminName
IDENTIFIER
QUOTED_STRING
SQUOTED_STRING

GenericValue
DATETIME
GenericNumber
GenericString
BOOLEANVAL

GenericString
STRINGVAL
QUOTED_STRING
SQUOTED_STRING

GenericNumber
NUMBER
REALNUMBER

Filter_Option
moddate Date_Range
application AdminNamePattern

Date_Range
=  DATETIME  
!= DATETIME
 
<  DATETIME
 
>  DATETIME
 
<= DATETIME
 
>= DATETIME
 
in [ DATETIME , DATETIME ]
 
in ( DATETIME , DATETIME ]
 
in [ DATETIME , DATETIME )
 
in ( DATETIME , DATETIME )  

Token_Option
token { Token_Separator { Token_Separator } }
token Token_Separator

Token_Separator
QUOTED_STRING
SQUOTED_STRING
IDENTIFIER
STRINGVAL
json
json-
json+
xml
xml-
xml+

ExportFile_Option
exportfile FileName [append] [xml | json ]

ImportFile_Option
importfile FileName [xml | json |emxxml]

LogFile_Option
logfile FileName [append]

FileName
QUOTED_STRING
SQUOTED_STRING

basic elements
grammar rules
[ ] = optional element - only one item is allowed : ( 0 or 1 )
{ } = optional element - more than one is allowed : ( 0 or N )
/ = alternative
= one of ...
   
  all bold texts represent keywords or command syntax

IDVAL
#<5 dec digits [ 0-9 ]>-<8 hex digits [ 0-9 A-F ]>
  example:
  #00020-34F2A80E

COMMENT
// <any character until the end of the line(\n \r)>
  example:
  // My single line comment

LONGCOMMENT
/* <any character> */
 

example:
  /* My multi line comment starts here
  continue here
  and finish here */


DATETIME
<year 4 digits>[ - /. ]<month 2 digits>[ - /. ]<day 2 digits>
  examples:
   2009-12-23    2009/03/19   2009.11.14
<year 4 digits>[ - /. ]<month 2 digits>[ - /. ]<day 2 digits> <hours>:<minutes>:[<seconds>]
  examples:
   2009-12-23 10:23   2009/03/19 16:03:34  2009.11.14 00:20:04

NUMBER
[+-]<decimal digits [ 0-9 ]>
  examples:
   -1203   +276   25

BOOLEANVAL
true / false

REALNUMBER
[+-]<decimal digits [ 0-9 ]>.<decimal digits [ 0-9 ]>[E(+-)<esponent [0-9]>]
  example:
   -37.837   +2.3874   13.887   1.4862E-04

QUOTED_STRING
"<any character>"
  example:
   "my quoted string"

SQUOTED_STRING
'<any character>'
  example:
   'my single quoted string'

IDENTIFIER
<one or more of [ a-z A-Z ]><zero or more of [ a-z A-Z 0-9 _ ]>
  example:
   Var1    object_Name_02

VARIABLE
$<one o more of [ a-z A-Z 0-9 ]><zero or more of [ a-z A-Z 0-9 _ ]>
 

example:
   $1   $var_02    $1b


STRINGVAL
<one or more of [ a-z A-Z 0-9 -_ $ ? @ | ~ % & / = : + \ # ' ]>
  a string not recognized as identifier

PATTERNIDENTIFIER
<a string with * (match 0 or more characters) and ? (match 1 character) wildcards>
  example:
   mypa*er?_ide?ti*

© 2008-2015 MS Enterprise Solutions | Website Templates by IceTemplates.com
Please Read: Privacy Policy and Terms of Use