1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of 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,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <rights/Constraint.h>
18
19/** see Constraint.h */
20Constraint::Constraint()
21{
22    mCount = INIT_VALUE;
23    mTimedCount = INIT_VALUE;
24    mTimer = INIT_VALUE;
25    mStart = INIT_VALUE;
26    mEnd = INIT_VALUE;
27    mInterval = INIT_VALUE;
28    mAccumulated = INIT_VALUE;
29    mExport = NONE;
30}
31
32/** see Constraint.h */
33Constraint::~Constraint()
34{}
35
36/** see Constraint.h */
37bool Constraint::isUnConstraint() const
38{
39    return (mCount == INIT_VALUE && mTimedCount == INIT_VALUE &&
40            mTimer == INIT_VALUE && mStart == INIT_VALUE &&
41            mEnd == INIT_VALUE && mInterval == INIT_VALUE &&
42            mAccumulated == INIT_VALUE && mExport == NONE &&
43            mSystemList.empty());
44}
45
46/** see Constraint.h */
47bool Constraint::isDateTimeConstraint() const
48{
49    return !(mStart == INIT_VALUE && mEnd == INIT_VALUE);
50}
51
52/** see Constraint.h */
53bool Constraint::isIntervalConstraint() const
54{
55    return !(mInterval == INIT_VALUE);
56}
57
58/** see Constraint.h */
59bool Constraint::isTimedCountConstraint() const
60{
61    return !(mTimedCount == INIT_VALUE);
62}
63
64/** see Constraint.h */
65bool Constraint::isValid(long time) const
66{
67    if (isUnConstraint())
68    {
69        return true;
70    }
71
72    if (isDateTimeConstraint())
73    {
74        if (time < mStart || time > mEnd)
75        {
76            return false;
77        }
78    }
79
80    if (mInterval == 0 || mCount == 0 ||
81        mTimedCount == 0 || mAccumulated == 0)
82    {
83        return false;
84    }
85
86    return true;
87}
88
89/** see Constraint.h */
90void Constraint::setStartTime(long time)
91{
92    mStart = time;
93}
94
95/** see Constraint.h */
96long Constraint::getStartTime() const
97{
98    return mStart;
99}
100
101/** see Constraint.h */
102void Constraint::setEndTime(long time)
103{
104    mEnd = time;
105}
106
107/** see Constraint.h */
108long Constraint::getEndTime() const
109{
110    return mEnd;
111}
112
113/** see Constraint.h */
114void Constraint::setAccumulated(long time)
115{
116    mAccumulated = time;
117}
118
119/** see Constraint.h */
120long Constraint::getAccumulated() const
121{
122    return mAccumulated;
123}
124
125/** see Constraint.h */
126void Constraint::setCount(int count)
127{
128    mCount = count;
129}
130
131/** see Constraint.h */
132int Constraint::getCount() const
133{
134    return mCount;
135}
136
137/** see Constraint.h */
138void Constraint::setTimer(int timer)
139{
140    mTimer = timer;
141}
142
143/** see Constraint.h */
144int Constraint::getTimer() const
145{
146    return mTimer;
147}
148
149/** see Constraint.h */
150void Constraint::setTimedCount(int timedCount)
151{
152    mTimedCount = timedCount;
153}
154
155/** see Constraint.h */
156int Constraint::getTimedCount() const
157{
158    return mTimedCount;
159}
160
161/** see Constraint.h */
162void Constraint::setInterval(int interval)
163{
164    mInterval = interval;
165}
166
167/** see Constraint.h */
168int Constraint::getInterval() const
169{
170    return mInterval;
171}
172
173/** see Constraint.h */
174void Constraint::setExportMode(MODE mode)
175{
176    mExport = mode;
177}
178
179/** see Constraint.h */
180Constraint::MODE Constraint::getExportMode() const
181{
182    return mExport;
183}
184
185/** see Constraint.h */
186bool Constraint::consume()
187{
188    if (isUnConstraint())
189    {
190        return true;
191    }
192
193    if (mCount > 0)
194    {
195        mCount--;
196        return true;
197    }
198
199    if (mAccumulated > 0)
200    {
201        mAccumulated--;
202        return true;
203    }
204
205    if (mTimedCount > 0)
206    {
207
208    }
209    return false;
210}
211