Home | History | Annotate | Download | only in task
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 
     18 #ifndef CTSAUDIO_TASKGENERIC_H
     19 #define CTSAUDIO_TASKGENERIC_H
     20 #include <string.h>
     21 #include <stdio.h>
     22 #include <list>
     23 #include <map>
     24 #include <set>
     25 #include <utils/String8.h>
     26 
     27 
     28 class TaskCase;
     29 
     30 class TaskGeneric {
     31 public:
     32     // internal model for xml tags
     33     enum TaskType {
     34         ETaskInvalid        = 0,
     35         ETaskBatch          = 1,
     36         ETaskCase           = 2,
     37         ETaskSetup          = 3,
     38         ETaskAction         = 4,
     39         ETaskSequential     = 5,
     40         ETaskProcess        = 6,
     41         ETaskInput          = 7,
     42         ETaskOutput         = 8,
     43         ETaskSound          = 9,
     44         ETaskSave           = 10,
     45         ETaskMessage        = 11,
     46         ETaskDownload       = 12,
     47         ETaskInvalidLast    = 13,
     48         //no ETaskInclude include does not involve any action.
     49     };
     50 
     51     explicit TaskGeneric(TaskType type);
     52 
     53     virtual ~TaskGeneric();
     54 
     55     inline TaskType getType() {
     56         return mType;
     57     }
     58 
     59     enum ExecutionResult {
     60         EResultOK           = 0,
     61         // continue in the current loop. will result in skipping all subsequent steps
     62         EResultContinue     = 1,
     63         // get out of the current loop
     64         EResultBreakOneLoop = 2,
     65         // error which cannot be continued. effect is the same as fail. stops everything.
     66         EResultError        = 3,
     67         // test failed. stops everything.
     68         EResultFail         = 4,
     69         // test passed.
     70         EResultPass         = 5
     71     };
     72 
     73     /**
     74      * default implementation for adding child action
     75      * Ownership of the child is passed to this instance, and child will be destroyed in parent's
     76      * destructor.
     77      * @return false on error
     78      */
     79     virtual bool addChild(TaskGeneric* child);
     80 
     81     virtual ExecutionResult run();
     82 
     83     /// can be NULL if parent does not exist
     84     TaskGeneric* getParent();
     85     /// can be NULL if TestCase does not exist (unit testing?)
     86     TaskCase* getTestCase();
     87 
     88     void setParent(TaskGeneric* parent);
     89 
     90     /**
     91      * parse attribute from XML DOM. name/value pair will be passed for all attributes.
     92      */
     93     virtual bool parseAttribute(const android::String8& name, const android::String8& value);
     94 
     95     bool forEachChild(bool (*runForEachChild)(TaskGeneric* child, void* data), void* data);
     96 
     97 protected:
     98     /// used by child instance to register allowed attributes
     99     /// keys array should end with NULL
    100     void registerSupportedStringAttributes(const android::String8* keys[]);
    101     bool addStringAttribute(const android::String8& key, const android::String8& value);
    102     bool findStringAttribute(const android::String8& key, android::String8& value) const;
    103     inline std::list<TaskGeneric*>& getChildren() {
    104         return mChildren;
    105     };
    106 
    107 private:
    108     TaskType mType;
    109     TaskGeneric* mParent;
    110     std::list<TaskGeneric*> mChildren;
    111 
    112     std::set<android::String8> mAllowedStringAttributes;
    113     std::map<android::String8, android::String8> mStringAttributes;
    114 
    115 };
    116 
    117 
    118 #endif // CTSAUDIO_TASKGENERIC_H
    119