blob: 6cc99dc636be37c34da546e87118b741154acae0 [file] [edit]
/*
* Copyright (c) 2014-2021 by Wen Yu
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License, v. 2.0 are satisfied: GNU General Public License, version 2
* or any later version.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
*/
package pixy.image.png;
import java.util.Calendar;
import pixy.util.Builder;
public class TIMEBuilder extends ChunkBuilder implements Builder<Chunk> {
//
private int year;
private int month;
private int day;
private int hour;
private int minute;
private int second;
public TIMEBuilder() {
super(ChunkType.TIME);
}
public TIMEBuilder calendar(Calendar calendar) {
this.year = calendar.get(Calendar.YEAR);
this.month = calendar.get(Calendar.MONTH) + 1;
this.day = calendar.get(Calendar.DAY_OF_MONTH);
this.hour = calendar.get(Calendar.HOUR_OF_DAY);
this.minute = calendar.get(Calendar.MINUTE);
this.second = calendar.get(Calendar.SECOND);
return this;
}
public TIMEBuilder year(int year) {
if(year > Short.MAX_VALUE || year < Short.MIN_VALUE)
throw new IllegalArgumentException("Year out of range: " + Short.MIN_VALUE + " - " + Short.MAX_VALUE);
this.year = year;
return this;
}
public TIMEBuilder month(int month) {
if(month > 12 || month < 1)
throw new IllegalArgumentException("Month out of range: " + 1 + "-" + 12);
this.month = month;
return this;
}
public TIMEBuilder day(int day) {
if(day > 31 || day < 1)
throw new IllegalArgumentException("Day out of range: " + 1 + "-" + 31);
this.day = day;
return this;
}
public TIMEBuilder hour(int hour) {
if(hour > 23 || hour < 0)
throw new IllegalArgumentException("Hour out of range: " + 0 + "-" + 23);
this.hour = hour;
return this;
}
public TIMEBuilder minute(int minute) {
if(minute > 59 || minute < 0)
throw new IllegalArgumentException("Minute out of range: " + 0 + "-" + 59);
this.minute = minute;
return this;
}
public TIMEBuilder second(int second) {
if(second > 60 || second < 0)
throw new IllegalArgumentException("Second out of range: " + 0 + "-" + 60);
this.second = second;
return this;
}
/**
* Build the byte array representation of tIME chunk.
* <p>
* The tIME chunk gives the time of the last image modification (not the time of initial image creation). It contains:
* <pre>
* Year: 2 bytes (complete; for example, 1995, not 95)
* Month: 1 byte (1-12)
* Day: 1 byte (1-31)
* Hour: 1 byte (0-23)
* Minute: 1 byte (0-59)
* Second: 1 byte (0-60) (yes, 60, for leap seconds; not 61, a common error)
* </pre>
*/
@Override
protected byte[] buildData() {
return new byte[] {(byte)(year >>> 8), (byte)year, (byte)month, (byte)day, (byte)hour, (byte)minute, (byte)second};
}
}