1d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu/*
2d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Copyright (C) 2013 The Android Open Source Project
3d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu *
4d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License");
5d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * you may not use this file except in compliance with the License.
6d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * You may obtain a copy of the License at
7d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu *
8d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu *      http://www.apache.org/licenses/LICENSE-2.0
9d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu *
10d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Unless required by applicable law or agreed to in writing, software
11d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS,
12d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * See the License for the specific language governing permissions and
14d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * limitations under the License.
15d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu */
16d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
17d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescupackage com.android.gallery3d.ingest;
18d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
19d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport java.text.DateFormat;
20d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport java.util.Calendar;
21d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
22d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu/**
23d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Represents a date (year, month, day)
24d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu */
25d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescupublic class SimpleDate implements Comparable<SimpleDate> {
26d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int month; // MM
27d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int day; // DD
28d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int year; // YYYY
29d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    private long timestamp;
30d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    private String mCachedStringRepresentation;
31d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
32d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public SimpleDate() {
33d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
34d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
35d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public SimpleDate(long timestamp) {
36d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        setTimestamp(timestamp);
37d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
38d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
39d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    private static Calendar sCalendarInstance = Calendar.getInstance();
40d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
41d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public void setTimestamp(long timestamp) {
42d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        synchronized (sCalendarInstance) {
43d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            // TODO find a more efficient way to convert a timestamp to a date?
44d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            sCalendarInstance.setTimeInMillis(timestamp);
45d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            this.day = sCalendarInstance.get(Calendar.DATE);
46d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            this.month = sCalendarInstance.get(Calendar.MONTH);
47d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            this.year = sCalendarInstance.get(Calendar.YEAR);
48d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            this.timestamp = timestamp;
49d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            mCachedStringRepresentation = DateFormat.getDateInstance(DateFormat.SHORT).format(timestamp);
50d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        }
51d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
52d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
53d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    @Override
54d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int hashCode() {
55d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        final int prime = 31;
56d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        int result = 1;
57d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        result = prime * result + day;
58d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        result = prime * result + month;
59d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        result = prime * result + year;
60d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return result;
61d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
62d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
63d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    @Override
64d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public boolean equals(Object obj) {
65d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (this == obj)
66d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return true;
67d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (obj == null)
68d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return false;
69d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (!(obj instanceof SimpleDate))
70d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return false;
71d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        SimpleDate other = (SimpleDate) obj;
72d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (year != other.year)
73d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return false;
74d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (month != other.month)
75d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return false;
76d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (day != other.day)
77d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return false;
78d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return true;
79d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
80d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
81d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    @Override
82d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int compareTo(SimpleDate other) {
83d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        int yearDiff = this.year - other.getYear();
84d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (yearDiff != 0)
85d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            return yearDiff;
86d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        else {
87d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            int monthDiff = this.month - other.getMonth();
88d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            if (monthDiff != 0)
89d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu                return monthDiff;
90d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            else
91d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu                return this.day - other.getDay();
92d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        }
93d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
94d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
95d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int getDay() {
96d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return day;
97d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
98d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
99d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int getMonth() {
100d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return month;
101d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
102d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
103d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public int getYear() {
104d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return year;
105d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
106d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu
107d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    @Override
108d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    public String toString() {
109d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        if (mCachedStringRepresentation == null) {
110d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu            mCachedStringRepresentation = DateFormat.getDateInstance(DateFormat.SHORT).format(timestamp);
111d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        }
112d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu        return mCachedStringRepresentation;
113d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu    }
114d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu}
115